From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D0BFEC3ABC0 for ; Wed, 7 May 2025 16:56:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D80B66B00A1; Wed, 7 May 2025 12:56:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D08CE6B00A2; Wed, 7 May 2025 12:56:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B82B76B00A3; Wed, 7 May 2025 12:56:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 969716B00A1 for ; Wed, 7 May 2025 12:56:36 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id C244D140A0D for ; Wed, 7 May 2025 16:56:37 +0000 (UTC) X-FDA: 83416715634.11.A67C612 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by imf23.hostedemail.com (Postfix) with ESMTP id D4CE5140002 for ; Wed, 7 May 2025 16:56:35 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="kOqKgM/Y"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf23.hostedemail.com: domain of mjguzik@gmail.com designates 209.85.128.43 as permitted sender) smtp.mailfrom=mjguzik@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1746636995; a=rsa-sha256; cv=none; b=1+lulObvM2XC8YvCt0xzsx9pH29QAecGS9AAjzXx1iCtXv+XorfOnXyI6VRid2nrjX+nZk m8kbYKlkEab8FoWVADmTxVpwfXnVsglQ2ObN23155dtQwQ2gmWUR2scsWHtaHo6eCmwHmh rzt1Ef90hih/ECkJcBjkuR/IochQwjY= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="kOqKgM/Y"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf23.hostedemail.com: domain of mjguzik@gmail.com designates 209.85.128.43 as permitted sender) smtp.mailfrom=mjguzik@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1746636995; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=insK8p0xo9/FqsgG+MJOzg4NV2rHtpUelCHo9fZ/00E=; b=dQ4Xzj+QdY3tOV+ttVGvuodflpXfewuwoSZ2HgcommQs/YZgOCt1caYAlk8C/JG31gP12h vB2PALWHt2PfK72Zrngz4PYZGrPa1KhFMhQQQnRIx2Kdv+ISnPQDh5Zv5SEHX+n6q2W9j7 mQSK/CCgE92oSn27OB12tAC2gqucH0M= Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-43cfba466b2so854095e9.3 for ; Wed, 07 May 2025 09:56:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746636994; x=1747241794; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=insK8p0xo9/FqsgG+MJOzg4NV2rHtpUelCHo9fZ/00E=; b=kOqKgM/Y6zFferxqkRT84YozevdnaCHprnH13Q6U2iZYkrlBdWKB5/sYb0ANfVUuUL pPOVEC9yaQtRhblQxHKN26Cxd+lPvH6F5AlEcslX6eB3gX9Q1bxLmlan7enz7DdxVU6I vmM0UnAj263A2sRBMPYh3rY2gwf6zrna8xen313CA3O8LMvAHTYkwtj0m9mx4Km470Xb kmkoLhQq4+9tYFfiJpstPH/i+Ma/oTGY7sFGDka5gIngjqEeKawW3lMHG3EteiYB3DIC EcComfLGntbH+jbE/1ZX10qumgs30cpjNcBetwFJrH8iMm4ZvIA0v42jEoJ4UmD4AStS KwfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746636994; x=1747241794; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=insK8p0xo9/FqsgG+MJOzg4NV2rHtpUelCHo9fZ/00E=; b=JPXiW04dheJ5fDRCi6iaYeLiZpDWF62Q7YAXLb969qVdItOhCtBQO9QqNohMjeJU+u Gn0dAykQNZIddHctoC6IlXSX/dejyqtsacKnZ0xwf6rX8mLNq8nsGeNKTrm9W4DQd3t/ eneGFK/xZ4JxEkIGlxOGfRP8QZMH4tPD4Z4N41nMhCz4xgaQYlxH+nduXRKx+H7pCmXy uE/pdvq6tN9mfEgwiXYE5/6TMcl68loIyWe33pm1uXydA25mia1BYWrKBzjHXBLRe+3+ i9EWVvvS2YWTXvoitD6sn1zaABpvtheiNR+mRlzcMCoky+1QAVwHjLYOmPu3wXZE3MC2 0B1A== X-Forwarded-Encrypted: i=1; AJvYcCUGCi4jo2DaxKgnE//bQEAqk5PN886hE3doUt6Pa3HzRUN4H9uMElxiQaE2m1lVm9v2eSwSsVYZjQ==@kvack.org X-Gm-Message-State: AOJu0Yz0GJ+C+iSdw49EIEkEIpz8OkLHdBY50WsZRpQzaaJj0mXfqHtA 5kavR1R0icu9sGBEfR6v1sEUtoAz5dvHmX7W7WJL1RfGT9vNbWOU X-Gm-Gg: ASbGncsFKh+AqGYcQyfaMEpUssmDoJa8buKIA5P1JlYtWuQne25v2umDjj7bZTCzVbW MflnXK2mxCeTzXXhEvsLZMSemuXA3Bh+3agBIhcNXQbnKdCvRdQoldds+vWKBfxL88Ge7ukEAcQ b8w9OZQ2WHAzkVtW2YiN61bECk9XaYuGWTn9eBQn7AuAd4Sbac7WGD564JgwVBhEFPHW1UXoSLY 5/Zm0tMApoK6PQpP4B2/RHTZBhvGoj1CYe/TubCOpzpzGx6m8TLPMSjQOBpdBaDbdgb11wiDN9H qQtAT9oQPtJgzyYb3PdNZ0orap6mSy7FcO9jg7R6ovjuWCkQbD8= X-Google-Smtp-Source: AGHT+IHfNFTThRIu4o0dCDHJIZhLEjEziBkI66MB1sjfbqN+Y99DJJgY8gBuLkclaELQ31jAjC1acw== X-Received: by 2002:a5d:5f95:0:b0:39c:dfa:d347 with SMTP id ffacd0b85a97d-3a0b4a05f30mr3385680f8f.2.1746636994211; Wed, 07 May 2025 09:56:34 -0700 (PDT) Received: from f (cst-prg-3-11.cust.vodafone.cz. [46.135.3.11]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a0b6d0e1ebsm1758621f8f.80.2025.05.07.09.56.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 09:56:33 -0700 (PDT) Date: Wed, 7 May 2025 18:56:27 +0200 From: Mateusz Guzik To: Linus Walleij Cc: Andrew Morton , linux-mm@kvack.org, Pasha Tatashin Subject: Re: [PATCH v2 3/5] fork: Remove assumption that vm_area->nr_pages equals to THREAD_SIZE Message-ID: References: <20250507-fork-fixes-v2-0-82ab1e42cde3@linaro.org> <20250507-fork-fixes-v2-3-82ab1e42cde3@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20250507-fork-fixes-v2-3-82ab1e42cde3@linaro.org> X-Rspamd-Queue-Id: D4CE5140002 X-Rspam-User: X-Rspamd-Server: rspam07 X-Stat-Signature: brpf4j1b6yag1otjije6qzqztn7e7gsk X-HE-Tag: 1746636995-948838 X-HE-Meta: U2FsdGVkX19UDAs4ZASb8dRMH18RAm0Lh/3rr3ZGK1EuJsa3gr3LOAQOeJZ9ZOwDY/piS2DdapX/a++uYrhzePN/qpwFrqhIFGCCJAcYvsINjkXVbaMwbsrgd1J2Irm4PTsIxjxvND0IRKqJNEzKOfIM8k2buKxaJ2rDrprsnIGyEefUG31mmRDoD6uHaQAq+tkHlQhV+dz10/LNJBG8lms1ieJQe02V8Hqh5yfLX0eU3SMhqC+WtyFcq2BgU5OiE6MWco08HJtWao+Rr9Vz1CfApWhCCnN9YLSnv+f04VX81yPWb64REqV9ga/j+NaUP+Ht25+M0KChj06B29CG7scfx/XNd16bVxzpclEyn0OPkxJn5gEc7s6/PNZMbTQrPPpvczuKK6iACiTgd9PKVhQkLtHY7Y6CHU7QCp1lLDwxIHTpXlVUuwLEdHrAtRbnoIOzYABYFkSpkmVA4dYVKLBazE7QsZDusiG3Bxwr3gtfY5kF97nJ/q9dVsCaJxiCZUcrX0H17/RiCcwejyPf3cqq50/vONZu1fWmwfjxBaERHGJ5r/ZUIiOoC/TCgPBhai6fNRVwbkLDjW26rwQDzJfxn0dnk+TBhNzJXx+3G8aRs6uLVfD2sbOm7hnKawB8SSOLfBAPTNVWPrH20uiD33qL6NWsK/nZhAAdRu7+w590BbvCCSWewjWtQEyVfns04KGGYrDaL3xPKraukRAvPMMWyPGXXkYADadsaxmVPOTDMstWaebkHMr4gTJHiiJ+7wghE9e1JRGK4pQgXNsco4fegfqZzlzNcRs7pxznuA40MLMP6AU7ul76xHkBu2DVWCePc4Sr0hDwt8MBcU3R98fRizWofH2/ORGZ3KvRrV1HAcIHZC+obWnca0Gn6T0VCuV6YrepSoeZO/GIl0OGhvByFJNUfQfVjY4cElxUo8rcXUfKL3CHfZGjy61fzpLoHd3GVL1vVwmbV5NI5Vz AgA0ZrAh QkYDVyfppEnCV4b5fKNlFA3oYrJMGNlipB8czbJMLv0k+CRkBQy7j/5K8PIwjjzUWc/cUJUiZQ6YUM67LexmQi6ZW7CeFJ1bZOL+RRZm6rFb9Tis2uxdwtz2F+5eCe54prouC0671PbcV7Luw7qxRmDCiiNquZ2jEpw/ynF3O6xZY1OXwXFvDe9S68Z6gb3fu2Rgh7+7Ea5Acgc9UvzsRFASxCQNBVvzk+VAoNpB/SoMzCeWo7w+i32AC8Qi9xag84gp/a87wEczDtSkzodisxj/+FH6dJSk/1KFucyejTYsytXqSQpNi3Y8xc4vo8UsFK5+zbzbIT9/jQT7fMwcqtIcTMEJSbTJjNG3JQloH7a3AkKeizeBI9odukGsqteJ9DU2tImyOPDfJkwAhaXcxidxlu/5r9c3Xg3XIIMKhva3uGcaL6bOk3kwVsjA0Xhm+Dzjtya/DNtswAlJc1iAOzVM7e/rOFybfo/Lm9ocmgkvhp41hpIL8LtfykX5QbdZWaFrT9KsvSMdtoiRRJa2rela8YgSocgdqGAC18kIOrF8QaTq4Aoyn96U6wRJBsiv+hkUSxprmtcEHlWE= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Wed, May 07, 2025 at 02:46:29PM +0200, Linus Walleij wrote: > From: Pasha Tatashin > > In many places number of pages in the stack is detremined via > (THREAD_SIZE / PAGE_SIZE). There is also a BUG_ON() that ensures that > (THREAD_SIZE / PAGE_SIZE) is indeed equal to vm_area->nr_pages. > > Consistently use vm_area->nr_pages to determine the actual number > of pages allocated in the stack instead, so it is clear what is > going on here. > > The assignment of a local variable nr_pages in > memcg_charge_kernel_stack() takes roughly the same amount of time > as the BUG() assertion, and the two other sites arguably should > have had a BUG() assertion as well. > > Signed-off-by: Pasha Tatashin > Link: https://lore.kernel.org/20240311164638.2015063-5-pasha.tatashin@soleen.com > [linus.walleij@linaro.orh: Rebased, initialized helpers variables in declaration] > Signed-off-by: Linus Walleij > --- > kernel/fork.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/kernel/fork.c b/kernel/fork.c > index 8b8457562740c114c640a8cc230876f6a286b246..c60a0ec61a421324e3733b506d99531c5965cbc6 100644 > --- a/kernel/fork.c > +++ b/kernel/fork.c > @@ -253,10 +253,9 @@ static int memcg_charge_kernel_stack(struct vm_struct *vm_area) > int i; > int ret; > int nr_charged = 0; > + int nr_pages = vm_area->nr_pages; > > - BUG_ON(vm_area->nr_pages != THREAD_SIZE / PAGE_SIZE); > - > - for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) { > + for (i = 0; i < nr_pages; i++) { > ret = memcg_kmem_charge_page(vm_area->pages[i], GFP_KERNEL, 0); > if (ret) > goto err; > @@ -516,9 +515,10 @@ static void account_kernel_stack(struct task_struct *tsk, int account) > { > if (IS_ENABLED(CONFIG_VMAP_STACK)) { > struct vm_struct *vm_area = task_stack_vm_area(tsk); > + int nr_pages = vm_area->nr_pages; > int i; > > - for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) > + for (i = 0; i < nr_pages; i++) > mod_lruvec_page_state(vm_area->pages[i], NR_KERNEL_STACK_KB, > account * (PAGE_SIZE / 1024)); > } else { > @@ -535,11 +535,11 @@ void exit_task_stack_account(struct task_struct *tsk) > account_kernel_stack(tsk, -1); > > if (IS_ENABLED(CONFIG_VMAP_STACK)) { > - struct vm_struct *vm_area; > + struct vm_struct *vm_area = task_stack_vm_area(tsk); > + int nr_pages = vm_area->nr_pages; > int i; > > - vm_area = task_stack_vm_area(tsk); > - for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) > + for (i = 0; i < nr_pages; i++) > memcg_kmem_uncharge_page(vm_area->pages[i], 0); > } > } > > -- > 2.49.0 > > I think the change makes it very much less clear what's going on here as it suggests the page count for stacks is variable instead of fixed. I can agree "THREAD_SIZE / PAGE_SIZE" open-coded is not the best way to express it though. How about THREAD_STACK_PAGE_COUNT or similar to hide the above division?