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 BAFBDC3ABBF for ; Wed, 7 May 2025 12:46:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8ED156B008A; Wed, 7 May 2025 08:46:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8C5E36B008C; Wed, 7 May 2025 08:46:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 764606B0092; Wed, 7 May 2025 08:46:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 4ABFC6B008C for ; Wed, 7 May 2025 08:46:37 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id AE4AE1404E1 for ; Wed, 7 May 2025 12:46:38 +0000 (UTC) X-FDA: 83416085676.27.0A46964 Received: from mail-lf1-f43.google.com (mail-lf1-f43.google.com [209.85.167.43]) by imf30.hostedemail.com (Postfix) with ESMTP id B511480010 for ; Wed, 7 May 2025 12:46:36 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=linaro.org header.s=google header.b=jIgchlwq; dmarc=pass (policy=none) header.from=linaro.org; spf=pass (imf30.hostedemail.com: domain of linus.walleij@linaro.org designates 209.85.167.43 as permitted sender) smtp.mailfrom=linus.walleij@linaro.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1746621996; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=LgWepu9xvbYwJ5+fU2cwMaVscw3vfDIKdHM0P21oZL0=; b=YxlKg0Dk+Z3X2P40aVWxYBC5f4APjowZHNn06pixcUw+Lqci7RnUO0MfYcW5bQBuLD2pdX /YmHAShqFLxN4X71yBRnJLkNTWXMqPsM4pDLhv0FPar9Wi80Q5jk7VHJgquEj4Jg7vk7BR SPwsDX2H0VwLKk1e2OGSwdkD3vVu/WU= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=linaro.org header.s=google header.b=jIgchlwq; dmarc=pass (policy=none) header.from=linaro.org; spf=pass (imf30.hostedemail.com: domain of linus.walleij@linaro.org designates 209.85.167.43 as permitted sender) smtp.mailfrom=linus.walleij@linaro.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1746621996; a=rsa-sha256; cv=none; b=XqFnelPQiwSWkiKthcAuyt873ZipBL4lodDEmXzfKQHcT60mojtzMyCNG3rDq1sV/zZaCd LWXbORUmuQwPv+HqRo3p6b5RP0K57tlHuq+sNpphKJcXhStrKHQmdI44OWSB/q3XaPLY+/ cobpbX41/p3g65gsS1KIxIOZGkeZOzE= Received: by mail-lf1-f43.google.com with SMTP id 2adb3069b0e04-54c0fa6d455so8267841e87.1 for ; Wed, 07 May 2025 05:46:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1746621994; x=1747226794; darn=kvack.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=LgWepu9xvbYwJ5+fU2cwMaVscw3vfDIKdHM0P21oZL0=; b=jIgchlwqJwIKh8VH/9a8bj6saDr+HFj7gUaYyXlfum+c6jgIziyJ3nTIyS3h+KVB3O pkqalbaYoMI0BToEsvoVAdPbyYypefhzN8qoCq9PaawyeFpCnpHzQHwDU6RQC/pC5YSU cOtoFX/LSH5VtnNNfn9kBv7WMLZvE8ZEq4b4G9hlpKXizWhcebsed2b4liWJ/Hvsccaq rO2Isp30hNT/45FECrWdiYdwy8qF83d3JavFaFmJdqPaJwhsE2e2c8LE4OQoc1hreWo8 uzp5mCcXvq0yJqjeBBXKkkF/eKUBficZMoXW58hOt0jsyLo3BQZKWd28iBtGF6ZXlQFK jBMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746621994; x=1747226794; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LgWepu9xvbYwJ5+fU2cwMaVscw3vfDIKdHM0P21oZL0=; b=MMPVh3hJ/w6L8u/JjIzvuVIjg8yXK3aVnmN8Tl3Fr2iZbUJj4Ak/mm+6n6NS/IWAyJ JiFFPa47YgNiRgge8/lu74O3fxhNaHPv3k3/eLHm8fN5Kolu67dB+FX/0+Uel01gmIh3 pPMFj8uUA8YYBpbn7uBJQ6HqIsliqWj+VGwyogXHolrXgdkwKqzRobHic2BS9n22HlBz GN7VcegAzeOiUHL7h0RLU8aeZAkrfSn1PsjBao4vsbN9DWflyoJPIOmcJ36yN8mGyOgJ CtejBPJ1TSfvc+6p75iN1UfwUlvfpG1xztGrgbUJ8WJiomDB2NBctbxGJCFjKRTCGGYy Lb6g== X-Forwarded-Encrypted: i=1; AJvYcCU5UQcdh11kYySUNihKWn9xJFbvnTbCmvy9boeCd+T6mmjhw55udRdT23W91BvrOo/sxIKnNUynwQ==@kvack.org X-Gm-Message-State: AOJu0YwEjC7xnKUciuaqQ4/ScRVuRQ5ysuOKwwZyoxAxKQOEQENWoCS5 JaO6Hp2XYVRtYtFZc9/pO/tHfF7c+05sQjp+mvZmr47iWYAfgcURfezkZFOnwoZ7sH+Uozg0LOF r X-Gm-Gg: ASbGnctVfARBkQbqphTd/60N+r6Z6zFzHSpoPq/A18dSRStqnMgJzSutDJ9nhF8en+6 G+Rxcca7prVPQxWVpk25VIP4JtYytAx3yFk9yd/5NPwzyt1x7ANqrMT34YDhF7XoGkJVJtm/gxZ 3YmhT4L3p2SQmkaY6+tEiTBtBsHpAQDxH7+/iy9JvgCicItt+3+x6iyFYKndQbe9m1yxO0+22ZA yWn3xqohBdFZyz1LztJSHNuOyajhFxy9E4EzYOlEHEFduYPt2SwZ3ekZ8Lc9VxtXunvKofRVnKP w2hhAJ41T/ePmE5RzsehS6iHVTEB2ayp0z4aR5UYOFOWfjjpueU= X-Google-Smtp-Source: AGHT+IEfdu9042RBvt11YfugT2DqckO1uwjr7iVKLfNhNP4TwktK0pUMCHLM2TYAAmG/+5cgdK+Ftg== X-Received: by 2002:a05:6512:a84:b0:545:1049:eb44 with SMTP id 2adb3069b0e04-54fb963cd5dmr1077831e87.36.1746621994384; Wed, 07 May 2025 05:46:34 -0700 (PDT) Received: from [192.168.1.140] ([85.235.12.238]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54ea94bedd4sm2323003e87.55.2025.05.07.05.46.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 05:46:33 -0700 (PDT) From: Linus Walleij Date: Wed, 07 May 2025 14:46:29 +0200 Subject: [PATCH v2 3/5] fork: Remove assumption that vm_area->nr_pages equals to THREAD_SIZE MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20250507-fork-fixes-v2-3-82ab1e42cde3@linaro.org> References: <20250507-fork-fixes-v2-0-82ab1e42cde3@linaro.org> In-Reply-To: <20250507-fork-fixes-v2-0-82ab1e42cde3@linaro.org> To: Andrew Morton , linux-mm@kvack.org, Pasha Tatashin Cc: Linus Walleij X-Mailer: b4 0.14.2 X-Stat-Signature: 5iffpgqbmhue47x9oje6neu5s5e73nwr X-Rspamd-Queue-Id: B511480010 X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1746621996-702467 X-HE-Meta: U2FsdGVkX1/Brx0mAhHzO2u4kI4T7+OtdciaLfPqEP5KKJY2p9O4Q2HpnO1pyN4M8UOHrObKRTBeFlbqSivNxDL1LIJEBJ2VrHhR6I95YFg+5gxN7Spfmw8LNdoLStqCvlEgtv3LRYBD5lGL9MxA+q3QZBx7WRLXiKXFpoVAyDll8TCzXFqSFjhJCU9+3mUm+DIb14n78ra3HvimahHIeG3YV5kbI9C62Yn7h5lrgx5+5hbagIvdO1fz0a4scQ84kuoZbThPGfn7kZHBPVPwdVAJGQD6Jn9QYNtxk5f+5zryrT4Fs4QA8viCxoERLaPumTB4H0tQwbfmkl4G6vV/KHlIFTx4ALR1rLyl68jZ6oequSigK5zuLdhv0SnB31kFox4yWax+lLrG/ve26arEyhfbBmAERErOgQebX0lsUSZdId7x8w7RBuGoQYSuxPHO2CDx9MHe+Pp37RLlU6enuZXpfyh47MJFwMZh7qxGzj1OjeV2+1fORmx8hFBb/RHX+lwNNtFOtyJMSGzNvi6Sdklrm3wCIlNYx5JYv530YF+lD8rf9z643B/D5MSbwkLWv1F/E1Ma4fBhg9NWyRWv8AXPjw5hYhqbG55U1u5D0ffn4jIzAxKyYlm8Muh5ZPodyvhuipDXOv3gQmQCzBQeKpq/5TvwjjrFSFTe0YM7gUoRgH0GEa/FcB4y+elqKsYAAnpTg0zwItuq95aaEKAWqQRfsZveMkRat6d2N4X2oWlBDig4oxMmF/84Bg6RlezMAdjmHQWG8dFU0/rjvNEA6Yub3Zv8jpTUE4We4l72MEy8nTyTt0d8FaSxJNeQXktf/xwlO/5KcfRoe82TZCWkkZko21yX2tTtIheKBtOIS6OPaYdO2zadhXI07YsPI7XXyGe+QFSIkX1Ljcqasuax8f+00TkNg3hMjal4qO8QzLtUEKJWXT2czMSNRJ1gAcTfc19653IkecOUv86cuWU varjyuuN NPIu7B2w6csQ3efcTl21iBgKHcRmqyovUosGJqgz1CWeJFj3UOkQ7TkJox75dGNZN6heTjU7KJk5mY/yKTx9ChlJ3YU+Y0OISwyK2sYGCfUZTrU5RWvpvEvN+0ugHU6u4I6IiZ50iKdAfWaq7C4DGukblPkQzDAgQa7Eq8onUoLQlJhjiR+OLpG5ofMEQAYoRCSIiFMUBPWajVz/ClZwd2L+3IIxm0FuMit3VWvAxaJClqy2WzduTtMBgtH9jo04R7ZZWaviif8z3PBckGFETPfUOum+yRvJ0D1eC3mdco2X0J+JDYVv3ha1Gx4lebA1r+ClXDL+S6dERl4ok5Amj+RHwQ0DJmjr6iD6rmQH4GCYTVL2ITgeT7KXDWQVHvOhA2U5EPoDjsqDdM/qq6+n86m0torGmRkDVEsJlyra0hc0Hti+tKd7OuKwlDfJaHcJOvd+IhgX/cR+wlIJzuBQJ19NBjw== 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: 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