From patchwork Sat Apr 19 05:38:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Price X-Patchwork-Id: 14057785 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 1A5AAC369CF for ; Sat, 19 Apr 2025 05:38:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5612B6B0007; Sat, 19 Apr 2025 01:38:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4E8316B0008; Sat, 19 Apr 2025 01:38:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2C7476B000A; Sat, 19 Apr 2025 01:38:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 0F3136B0007 for ; Sat, 19 Apr 2025 01:38:32 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id E6B991619C4 for ; Sat, 19 Apr 2025 05:38:32 +0000 (UTC) X-FDA: 83349688464.10.961244C Received: from mail-qv1-f47.google.com (mail-qv1-f47.google.com [209.85.219.47]) by imf26.hostedemail.com (Postfix) with ESMTP id 20BF4140008 for ; Sat, 19 Apr 2025 05:38:30 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=gourry.net header.s=google header.b=tRkhwy+6; dmarc=none; spf=pass (imf26.hostedemail.com: domain of gourry@gourry.net designates 209.85.219.47 as permitted sender) smtp.mailfrom=gourry@gourry.net ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745041111; a=rsa-sha256; cv=none; b=KNQfDx6RkcIcgThcmvxS7W2Qk/V4erNmukk9t4P6gCw39mw4o06/t3Zv5oZzN9BP4G+SC2 tO3fAlge/lUV0Fv8/7987ZNjSiNKe4rBeUVxszLxH2WQgo7p+OikbXuqDVwDc+2WAu7a7g k3Zbqhpke2zsm8l38vByMGJG6pj+R7I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745041111; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=w1bTt6yFTuQ7vQdV7xpRPwjzlibRkEqLBXyWJok/2X4=; b=qAsMw2Vj5EmtvvOYKvO0waum3S9NqTU3iCiBqFKLeBiqDzgvwNaibXhIOgF9B93UHlDIkR b9eZd12pYKxcQ1MZCPjhsbqk59CMFRdB8eBmCH5xSglr5S3DWSxp9C7gU+f6jRdBfCBVdH 0SY9+ydtETuDczI96sUQO8nnVXjfQ2I= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=gourry.net header.s=google header.b=tRkhwy+6; dmarc=none; spf=pass (imf26.hostedemail.com: domain of gourry@gourry.net designates 209.85.219.47 as permitted sender) smtp.mailfrom=gourry@gourry.net Received: by mail-qv1-f47.google.com with SMTP id 6a1803df08f44-6e8f254b875so24056136d6.1 for ; Fri, 18 Apr 2025 22:38:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gourry.net; s=google; t=1745041110; x=1745645910; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=w1bTt6yFTuQ7vQdV7xpRPwjzlibRkEqLBXyWJok/2X4=; b=tRkhwy+6UI/7iX6NqxwpAwsf2DLeHNp+6yOlNZGQzBccaATBmamXpLx9tqZxheGxYP FbxOnGt4t9WWAZtLag9z8/GBHWV2QO+3pBxSxusiPsMyQSGt3Fw6SfXXUaDjSCGc61Yz ZZS3WjwjgNFlzn9zBXhZpJvZEc+zDSVA665IlIlJlc4QW0rRhkiAOyHNPuUT78i+7GG4 HKxnJWXZTfD7O5ePqPfgd+SfzrfIM8xztSEJY3pKKqLQ7cNxmAj1QpPYXBOK3m2M3ak/ BXZ9F5Ql3t4gF/xseahyrpXvwebrOYlsOUIelFsVaeeIwhfkbfFWNOUyT45MwC9LqkDK GEuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745041110; x=1745645910; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=w1bTt6yFTuQ7vQdV7xpRPwjzlibRkEqLBXyWJok/2X4=; b=BFMtuiSW6V8Nr4UyDFCP/oqP/fgwdJflfgNRYSwdjqnOQzh15IPFps+N57oFRWUaCw SOkKNmDy2hpHDesJo7dj07ZQdmWiTInXDFvysurBBBjjposEOJYeZeNOuA7KARyQ9PqP quSzrV3OBUgOemcmg1iEMq8yl4FnZ1IHk8QNPvT2ZHY0p5NWYnrEW6fKAwuoKPolNNuf nKfL5DldtLcOhwMNdO7uvtExPy/dDUrX07CL6ZKqtgZfAORvUaOa+aN2eDZZOIrAAAU1 if0K5lPlrLBYzl2RB6ghqvXS8stZldTDyEP6pwCwO6UVbr9WJS/NPRQA5fYCkp6dbwb6 cugA== X-Gm-Message-State: AOJu0YyiL3aZmsWYvfIZo66xzWv1yYo7AQbQo/hn4D/Z2xzmB0kh7MqW 0D4h5D47NMCHhf2W/XiJZBcsPhp/YhkFDxcrIsDj93TJQuJrzdOKmn6gpklqkH9mJOzWYQem09O i X-Gm-Gg: ASbGncvIqb1M119ZeCCoogGK1qMIO/xuQjcc9K2WMGnhIBTX86fZ+niDdsVnSOEcKbb SIS+EO+flCyIrUXk+pGpCuoDIvIBA+xuHpd59lxWtz0KE3jnXQz8mrZsgCSDP5W0PlG0Xe3EaAQ IFo9Fnyt36YtHNXiLXNgQJJCK49P2DmTWo5tEj2xtRqGWlUsQQxaTsAnz4LnUl3oA6HLvSws/Xz ZpucJSEIGc6EB3soN8/EfS39jwEW9caZUOyVtcpaQJpYBOH+54dQOVR42pczNjgWWeE6OSB1zOu Pd0EVwFPNvnCEWaURztYvMa63+iMwDkzkUYsFXKA0r5A1EEu/yM5G5ve8Mv6Rpw4H8OChHYW1Po 1nhbXN55YzVxH+ZlYy9gtjCUO6wE3 X-Google-Smtp-Source: AGHT+IGCrA8A+FHDapqOFzvLIREWI4Jo2OiyP1UKGY1JE22mQ0QmetHADCci956kIivIzU/KXqVUhw== X-Received: by 2002:a05:6214:240e:b0:6d8:9ead:c665 with SMTP id 6a1803df08f44-6f2c45a35dfmr93433756d6.27.1745041110016; Fri, 18 Apr 2025 22:38:30 -0700 (PDT) Received: from gourry-fedora-PF4VCD3F.lan (pool-173-79-56-208.washdc.fios.verizon.net. [173.79.56.208]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6f2c2b30c65sm18341956d6.51.2025.04.18.22.38.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Apr 2025 22:38:29 -0700 (PDT) From: Gregory Price To: linux-mm@kvack.org Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com, longman@redhat.com, hannes@cmpxchg.org, mhocko@kernel.org, roman.gushchin@linux.dev, shakeel.butt@linux.dev, muchun.song@linux.dev, tj@kernel.org, mkoutny@suse.com, akpm@linux-foundation.org Subject: [PATCH v3 1/2] cpuset: rename cpuset_node_allowed to cpuset_current_node_allowed Date: Sat, 19 Apr 2025 01:38:23 -0400 Message-ID: <20250419053824.1601470-2-gourry@gourry.net> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250419053824.1601470-1-gourry@gourry.net> References: <20250419053824.1601470-1-gourry@gourry.net> MIME-Version: 1.0 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 20BF4140008 X-Stat-Signature: r9k3hbo87h5ruqag9ydrayyskg3krmhx X-Rspam-User: X-HE-Tag: 1745041110-878764 X-HE-Meta: U2FsdGVkX1+Wa7uZgB8if6zyjcWywMFgrI3k6626ZQCYO3Bcdhi4HgLT1EWP6Vvq6qs3cNg3/5DqYIN4eVDGRmEVDMjB6YjJqmeNcBva+BKHwq8nnEENM7x5BY/UH5Kk8qzFvNpiR0Z3RoObTWWocTkxTI9NV/8g4kUVq6FNczDOEcqIk5wCnqi7LFIkjYmhMeaojQxe7KeaCGZRndZeouOCA6SnE/mLPco9drRe3rJ5KQzUtxSE7jBSLZasgYDbFAD4gfr/w+N1h5zI5hFYIFOWohO/1rUK0EaD1NYTOiAIIgat7jwSEYDHq4F96CpK909PZVL89iQq4nSK+SIMLAye2URMk/zu7f0TVubymaIZx8EWP1M/HuLqfHdq8MNx7/LFdDtX7SyELae+pR0ZOzHdKyQsN9Xlf5d0PVXbAlcdD+z1Bn940NQigE61+ma0U8eP30tYYzJYQfwBYyKdv3BoDNSuYY4aIWIfflFK6OOBJ6oEyJUyfrn9lPNAN0x76RjEoWe93jJobS1dERXijoq5eWHAhCbRKrLgPIJtRB4pogf5Qhy+kuUcF7rRreEQl+RN4PS6CY+jh9n2gBG6S9Z1NU1GGNWT6jkDHm/33D0kWBqd/etxp1+ENEq33bS2R3DrVSf+RlWH/MouCyJit4/RtyduVutCytvUBmCk3DFX1esgQK3UKuCKskdeNHB68ebCPF2GNad4cvC52Gx1PdaTu0r2Hjh9INGWNBQ9VDkUGIUvm/A6LEK3VezK8uDblX1CcH8A5p+DwcDWpvmyI2N9OUFSQmTikB1k37drL+PQ+OKWuE9pOkiT/rZV/mChbrtjBpd3Cn5WbcV7yHUXa18lrjv86ZkOSGmCMXOA/fA8+ILckjOnRAGhefdFDj/8a96JsZP/IIf2fGGw9kSOeHz6Ae+2k24kYeDYSf/1kXCW1cHDAXD/57cfo0U6QHoX/+hXw4QJiXWA7llmq6t keD5xzHn Ai5QnRNlU+84NRvmUwc+tZzMvBJvkuiJwPqyM5fx6VXWLU8ZKhdB/LJF+X17cLLceD7jdTGqa/upKgQ867oi/TFkdt/jw5f0Oo91+v2fw9c7kydOShInIcw0YPA4Hj28VXnWNTc/PnxQGluSy4ukoaQKjznxwFzdu3FdHc+PDKyIM+zaNPtObuZsou+9SpDxjGgFeKWyPB9V6O2yCoYvtJKTmuJBS/Pkm0bfdpPzpMfCb+NCXuOwowew1AhM1rhANwmQbeByoqsFo1QZmoVOBEDLjpnkEJbNO21jW1Ys4Q0Ldr1AOXgYhe/+VRhYE9Yoo+lR3ghQhdwgwT91KtwjrZEm4E2BAePhAOhh+8WXRyOKpJ3ZLrwtZ9u2OSA== 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: Rename cpuset_node_allowed to reflect that the function checks the current task's cpuset.mems. This allows us to make a new cpuset_node_allowed function that checks a target cgroup's cpuset.mems. Acked-by: Waiman Long Signed-off-by: Gregory Price Reviewed-by: Shakeel Butt --- include/linux/cpuset.h | 4 ++-- kernel/cgroup/cpuset.c | 4 ++-- mm/page_alloc.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index 835e7b793f6a..893a4c340d48 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h @@ -82,11 +82,11 @@ extern nodemask_t cpuset_mems_allowed(struct task_struct *p); void cpuset_init_current_mems_allowed(void); int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask); -extern bool cpuset_node_allowed(int node, gfp_t gfp_mask); +extern bool cpuset_current_node_allowed(int node, gfp_t gfp_mask); static inline bool __cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask) { - return cpuset_node_allowed(zone_to_nid(z), gfp_mask); + return cpuset_current_node_allowed(zone_to_nid(z), gfp_mask); } static inline bool cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask) diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index 0f910c828973..f8e6a9b642cb 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -4090,7 +4090,7 @@ static struct cpuset *nearest_hardwall_ancestor(struct cpuset *cs) } /* - * cpuset_node_allowed - Can we allocate on a memory node? + * cpuset_current_node_allowed - Can current task allocate on a memory node? * @node: is this an allowed node? * @gfp_mask: memory allocation flags * @@ -4129,7 +4129,7 @@ static struct cpuset *nearest_hardwall_ancestor(struct cpuset *cs) * GFP_KERNEL - any node in enclosing hardwalled cpuset ok * GFP_USER - only nodes in current tasks mems allowed ok. */ -bool cpuset_node_allowed(int node, gfp_t gfp_mask) +bool cpuset_current_node_allowed(int node, gfp_t gfp_mask) { struct cpuset *cs; /* current cpuset ancestors */ bool allowed; /* is allocation in zone z allowed? */ diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 5079b1b04d49..233ce25f8f3d 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3461,7 +3461,7 @@ get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags, retry: /* * Scan zonelist, looking for a zone with enough free. - * See also cpuset_node_allowed() comment in kernel/cgroup/cpuset.c. + * See also cpuset_current_node_allowed() comment in kernel/cgroup/cpuset.c. */ no_fallback = alloc_flags & ALLOC_NOFRAGMENT; z = ac->preferred_zoneref; @@ -4148,7 +4148,7 @@ gfp_to_alloc_flags(gfp_t gfp_mask, unsigned int order) /* * Ignore cpuset mems for non-blocking __GFP_HIGH (probably * GFP_ATOMIC) rather than fail, see the comment for - * cpuset_node_allowed(). + * cpuset_current_node_allowed(). */ if (alloc_flags & ALLOC_MIN_RESERVE) alloc_flags &= ~ALLOC_CPUSET; From patchwork Sat Apr 19 05:38:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Price X-Patchwork-Id: 14057786 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 D2599C369CA for ; Sat, 19 Apr 2025 05:38:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0DB166B000A; Sat, 19 Apr 2025 01:38:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 062796B000C; Sat, 19 Apr 2025 01:38:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D7A206B000D; Sat, 19 Apr 2025 01:38:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id B25186B000A for ; Sat, 19 Apr 2025 01:38:34 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 6D2961CFEA0 for ; Sat, 19 Apr 2025 05:38:35 +0000 (UTC) X-FDA: 83349688590.20.08E4DB3 Received: from mail-qv1-f53.google.com (mail-qv1-f53.google.com [209.85.219.53]) by imf11.hostedemail.com (Postfix) with ESMTP id 9395140008 for ; Sat, 19 Apr 2025 05:38:33 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=gourry.net header.s=google header.b=X4QIREs1; dmarc=none; spf=pass (imf11.hostedemail.com: domain of gourry@gourry.net designates 209.85.219.53 as permitted sender) smtp.mailfrom=gourry@gourry.net ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745041113; a=rsa-sha256; cv=none; b=LVzUTtj0sKKBAb+TDRqpl/uJHvmqqDCE9R3zbRgl0wgcRqkyKowHfK4hLIhKWT8A4+yWYu THtFtUBYWWgbjGyyiXsBGz3eprNNCicXWY9/rL5PaijqbgvuBGC49+OQyopWB4qN5CcQhE pwJRgKdYn0FJuUBksYeBBWJPxXhkNqA= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=gourry.net header.s=google header.b=X4QIREs1; dmarc=none; spf=pass (imf11.hostedemail.com: domain of gourry@gourry.net designates 209.85.219.53 as permitted sender) smtp.mailfrom=gourry@gourry.net ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745041113; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=kphArVCSz0KLbAMkbfXsG72n7nuxXX/C7s3H9vWRSxo=; b=3mf3ZKmlLriEO9beYB1dSCWUmzB/Ib2Xq0Xuqej2dejRndVmDESSYWqh94snQwRfDareNO XPNpDiinta6RkQ604MjHIohZvhue9DwbZAFNcAwIebIIO/lCwO8Q7j5YyhQRak+k3glxHx 3ONj3ZSV2gpY3meSvF2D6LfQLFNmE3U= Received: by mail-qv1-f53.google.com with SMTP id 6a1803df08f44-6e8f6970326so22247066d6.0 for ; Fri, 18 Apr 2025 22:38:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gourry.net; s=google; t=1745041112; x=1745645912; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kphArVCSz0KLbAMkbfXsG72n7nuxXX/C7s3H9vWRSxo=; b=X4QIREs1Azv+vwK9Ue8fj3kFEDUY5lHb8bq5xnc1z7JkC3hNryo+VnUHqBUt98poVd xyOki1p40Y004aoubK74BuhI2ADZA+r/b3mk0kZlzSvCE7YlntaagR/XAoChbEQn4ReP gjYm0ssBmIFjnNEmut9W3cBrz2UcPDIlueElgRSbmYWF57/3wsYrL5Xgs9jTnP24CeMR wl5z2u7Ojj3GTYut19pyS83BXO6e7QJw9ZwK44DAYZ8/0tROtXf0+43tejRQ7IMfP0h+ BBrJJguYZMSITdEcDEGesljprmgAHDpxK1TzZHaMCVcltwJCo0AI+2MTBS3ffqYBt0Eg JyFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745041112; x=1745645912; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kphArVCSz0KLbAMkbfXsG72n7nuxXX/C7s3H9vWRSxo=; b=wyXpylxSfFeMNpN6sbgC2jIyGjWoJxyvxd23/3LBelGuoScKI7/FXHmKuwYD53AQqN k2Npu0JNnjZL/FCvM28sWQfTu+kjJpav1M/WiUa5IGvVExbj105xa31tw882rrOHaEoN sezDi2HU6hFnkQV/u0J4P063LF8/sMSz0q1sXmdGTIsw/ckN7aYk5bZ3ACvPJgoMvfy9 7F850TSRRp17bXuXTGlrKEM8QACK+OLCJvK2ClGiXIiSuuyGY8B905s1iOaUjrUkTC0J oQmQewRp+JsjMwkAYYdR94omSBMtQW1zSZuFKOpqVg7GI3mWE39Z0lFLK7Haf7etWVOS Gmcg== X-Gm-Message-State: AOJu0Yz9Tgc508jEIstVx30nl5Grs5w7kqfUAxVuekmFXkPurz/m+f7S TyFTr9g4Gx5S/BlfjrFHTegYpf7IsvfRpza6Mi6G+Tx2KD7OWGq1C+8cggtTTldc1R2OTsm5DYr H X-Gm-Gg: ASbGnctz+KS41lQpGELzpNq9a5vbEB4H1m9uBY/F+03DmUaLJycnhG/Ni0o0FNobdOh XHBDHMd4ZWY0s1W+QvjVem3XgJLn/5ZVOXtoq2bV0zf46P7rXvXLKYqDCCt7FXUe49zcH820MQX SrByOCA+6nVxjpgRfLynYF338UGwRbGVsB9tbBQ++yM4jjbnT1GU7jfyq2YkivLKWKfrkUgwAa8 otGP9HnT2gkP1V68r00xybp1kGMV5r4QK75qf49C7bgysXmIumAXSwMVD0XVJ70pxLFE3FIM9Y4 avjP7RG053LXojB4PRnFuEuqCyLy15FswkrV60bZTYMLku9LYBqMh1PP7Rpo85fsRnYIKPAbvK7 zPTvnz84aGN6EaSKC6qcMfmkAQ1b7 X-Google-Smtp-Source: AGHT+IGokloKomTVMayniE6Mf++d9cjUZKWpbDcg5f1ADpmX7RSw+BGIJ9I5WqbA/PGhMdrqH+rBOQ== X-Received: by 2002:ad4:5d43:0:b0:6e8:f940:50af with SMTP id 6a1803df08f44-6f2c4688419mr88612006d6.44.1745041112115; Fri, 18 Apr 2025 22:38:32 -0700 (PDT) Received: from gourry-fedora-PF4VCD3F.lan (pool-173-79-56-208.washdc.fios.verizon.net. [173.79.56.208]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6f2c2b30c65sm18341956d6.51.2025.04.18.22.38.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Apr 2025 22:38:31 -0700 (PDT) From: Gregory Price To: linux-mm@kvack.org Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com, longman@redhat.com, hannes@cmpxchg.org, mhocko@kernel.org, roman.gushchin@linux.dev, shakeel.butt@linux.dev, muchun.song@linux.dev, tj@kernel.org, mkoutny@suse.com, akpm@linux-foundation.org Subject: [PATCH v3 2/2] vmscan,cgroup: apply mems_effective to reclaim Date: Sat, 19 Apr 2025 01:38:24 -0400 Message-ID: <20250419053824.1601470-3-gourry@gourry.net> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250419053824.1601470-1-gourry@gourry.net> References: <20250419053824.1601470-1-gourry@gourry.net> MIME-Version: 1.0 X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 9395140008 X-Stat-Signature: 7i3tnbyezs94ib4jrx7cigqcgy6yi3pp X-Rspam-User: X-HE-Tag: 1745041113-61898 X-HE-Meta: U2FsdGVkX19c8Yzpo7uX/7D8YYD0VynB5NfISwaSvudYK0ZE3DzmFOUjHF2J07sdiBNstAg3p4OKWpQXY/s8C4PL2SmNjfq5P/ABTCi4dMNwu1qxPwKpUd6o3S3pUCY+IRz2dDQ9a0x7BrE/Vg319n6M72BTnzpvTvHFBrnH7b5rtsItvlF2LDHB3b980bv9XINPPacGmBCQNksxsK7Mi0Sepo6CdaDZpp7Q8fTDwEVZl5vzfy9JHjv0m68zhfnUECQ/a7kUYi8q76KWMZ6OaPCw709EYFgtz3pVvBPNC8YIFL62f4DJdpxo44uAoNwFi1xUt+u/gsG5jxuqUY9FEOrGATk85eC0P+jPlCi0pSR74uE1OkxXQy6MfoOHXHPo6GdpqVNgpIdgK9Rzqf8QsjDbKAOxYsQF0wVsnz3U216tocHTsYjmJliB0KE2ygOVd8wmUavJBSEOkRVZ9SxqSraC86xa5IL08rU9FDmPgh4MnxQcjWSTADrQYDoDlpPiOIJQo+oS1ol9NnIJZiz6PPLyZjdoAAOOMqD9Q7kFX2GIagXDeKFAGCEuVxU8sRFAj4YMpj0Mhf/afkWPRbpyq3v1LWsaAUtEkaD70tQqhVDrOBCL6HHG4Yg8XnR3Bp33sCKEVYJf/Qd4SkHaicRb+JMv0LXXwtI8JA/bImKNHlVIlE8l8otoGSC0X7johxpNFlv4grte8YtQMteRqvj2rGh7nfyjJpAbz3ery2d83ukX9E6K978EQyIH68iQBLX47SXFEKGiQcVpf+Q0g+xo39OwvXJv04eT2acrhRzBYwlvgRHz06or1K6tmAx/iVnGzFiM6uwMyJWnD1UlkKmRQVikSt1XO/+ZuPy/cqsXt5ghd+mavNJT02xCvXrSXSnngPtfakI9TH3F/LRJDR3Jnvzb0MRex/8bGx9Mzsjm1mkOSsDUCs4wqAH6fFke6QoDMdxvaNV7OwnXd1OKNyT qU/Kk2dv 5A4GYt4TImy1PTqYlOrAb6SFJtV5+u1wz5o2m7MWCAmKNGUT5XpbhFrqkaJ+NWhdSpji5a1WMJiB7lf7v/wdXVQiKUckGIpiPGQElIokwbao5J11ry5irQQ/D0r8Mz4uEjxg+Y87zNy4/HDVM/b4pe2W4kUznnRISgFC/nyFQ7ln5eQ/el3dh1FBJR6EglR2j51WVQGUlmdt+UxOzSDo/EjN81nYLzXefDRjxnoQi5doGTM52PeTl5ScoeZUFn7Skm9EkuQmMT8t3OCmF//CRf7SXQOb520PBqmqSI14NWewhn6o/2SWpi79PHcBR+QMM+guL0Lr9VMIyAhpYyyerVCcWTpifJhzamBsN 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: It is possible for a reclaimer to cause demotions of an lruvec belonging to a cgroup with cpuset.mems set to exclude some nodes. Attempt to apply this limitation based on the lruvec's memcg and prevent demotion. Notably, this may still allow demotion of shared libraries or any memory first instantiated in another cgroup. This means cpusets still cannot cannot guarantee complete isolation when demotion is enabled, and the docs have been updated to reflect this. This is useful for isolating workloads on a multi-tenant system from certain classes of memory more consistently - with the noted exceptions. Signed-off-by: Gregory Price --- .../ABI/testing/sysfs-kernel-mm-numa | 14 ++++--- include/linux/cpuset.h | 5 +++ include/linux/memcontrol.h | 6 +++ kernel/cgroup/cpuset.c | 21 ++++++++++ mm/memcontrol.c | 6 +++ mm/vmscan.c | 41 +++++++++++-------- 6 files changed, 72 insertions(+), 21 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-kernel-mm-numa b/Documentation/ABI/testing/sysfs-kernel-mm-numa index 77e559d4ed80..27cdcab901f7 100644 --- a/Documentation/ABI/testing/sysfs-kernel-mm-numa +++ b/Documentation/ABI/testing/sysfs-kernel-mm-numa @@ -16,9 +16,13 @@ Description: Enable/disable demoting pages during reclaim Allowing page migration during reclaim enables these systems to migrate pages from fast tiers to slow tiers when the fast tier is under pressure. This migration - is performed before swap. It may move data to a NUMA - node that does not fall into the cpuset of the - allocating process which might be construed to violate - the guarantees of cpusets. This should not be enabled - on systems which need strict cpuset location + is performed before swap if an eligible numa node is + present in cpuset.mems for the cgroup. If cpusets.mems + changes at runtime, it may move data to a NUMA node that + does not fall into the cpuset of the new cpusets.mems, + which might be construed to violate the guarantees of + cpusets. Shared memory, such as libraries, owned by + another cgroup may still be demoted and result in memory + use on a node not present in cpusets.mem. This should not + be enabled on systems which need strict cpuset location guarantees. diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index 893a4c340d48..c64b4a174456 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h @@ -171,6 +171,7 @@ static inline void set_mems_allowed(nodemask_t nodemask) task_unlock(current); } +extern bool cpuset_node_allowed(struct cgroup *cgroup, int nid); #else /* !CONFIG_CPUSETS */ static inline bool cpusets_enabled(void) { return false; } @@ -282,6 +283,10 @@ static inline bool read_mems_allowed_retry(unsigned int seq) return false; } +static inline bool cpuset_node_allowed(struct cgroup *cgroup, int nid) +{ + return false; +} #endif /* !CONFIG_CPUSETS */ #endif /* _LINUX_CPUSET_H */ diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 53364526d877..a6c4e3faf721 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1736,6 +1736,8 @@ static inline void count_objcg_events(struct obj_cgroup *objcg, rcu_read_unlock(); } +bool mem_cgroup_node_allowed(struct mem_cgroup *memcg, int nid); + #else static inline bool mem_cgroup_kmem_disabled(void) { @@ -1793,6 +1795,10 @@ static inline void count_objcg_events(struct obj_cgroup *objcg, { } +static inline bool mem_cgroup_node_allowed(struct mem_cgroup *memcg, int nid) +{ + return true; +} #endif /* CONFIG_MEMCG */ #if defined(CONFIG_MEMCG) && defined(CONFIG_ZSWAP) diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index f8e6a9b642cb..8814ca8ec710 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -4163,6 +4163,27 @@ bool cpuset_current_node_allowed(int node, gfp_t gfp_mask) return allowed; } +bool cpuset_node_allowed(struct cgroup *cgroup, int nid) +{ + struct cgroup_subsys_state *css; + unsigned long flags; + struct cpuset *cs; + bool allowed; + + css = cgroup_get_e_css(cgroup, &cpuset_cgrp_subsys); + if (!css) + return true; + + cs = container_of(css, struct cpuset, css); + spin_lock_irqsave(&callback_lock, flags); + /* On v1 effective_mems may be empty, simply allow */ + allowed = node_isset(nid, cs->effective_mems) || + nodes_empty(cs->effective_mems); + spin_unlock_irqrestore(&callback_lock, flags); + css_put(css); + return allowed; +} + /** * cpuset_spread_node() - On which node to begin search for a page * @rotor: round robin rotor diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 40c07b8699ae..2f61d0060fd1 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -5437,3 +5438,8 @@ static int __init mem_cgroup_swap_init(void) subsys_initcall(mem_cgroup_swap_init); #endif /* CONFIG_SWAP */ + +bool mem_cgroup_node_allowed(struct mem_cgroup *memcg, int nid) +{ + return memcg ? cpuset_node_allowed(memcg->css.cgroup, nid) : true; +} diff --git a/mm/vmscan.c b/mm/vmscan.c index 2b2ab386cab5..32a7ce421e42 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -342,16 +342,22 @@ static void flush_reclaim_state(struct scan_control *sc) } } -static bool can_demote(int nid, struct scan_control *sc) +static bool can_demote(int nid, struct scan_control *sc, + struct mem_cgroup *memcg) { + int demotion_nid; + if (!numa_demotion_enabled) return false; if (sc && sc->no_demotion) return false; - if (next_demotion_node(nid) == NUMA_NO_NODE) + + demotion_nid = next_demotion_node(nid); + if (demotion_nid == NUMA_NO_NODE) return false; - return true; + /* If demotion node isn't in the cgroup's mems_allowed, fall back */ + return mem_cgroup_node_allowed(memcg, demotion_nid); } static inline bool can_reclaim_anon_pages(struct mem_cgroup *memcg, @@ -376,7 +382,7 @@ static inline bool can_reclaim_anon_pages(struct mem_cgroup *memcg, * * Can it be reclaimed from this node via demotion? */ - return can_demote(nid, sc); + return can_demote(nid, sc, memcg); } /* @@ -1096,7 +1102,8 @@ static bool may_enter_fs(struct folio *folio, gfp_t gfp_mask) */ static unsigned int shrink_folio_list(struct list_head *folio_list, struct pglist_data *pgdat, struct scan_control *sc, - struct reclaim_stat *stat, bool ignore_references) + struct reclaim_stat *stat, bool ignore_references, + struct mem_cgroup *memcg) { struct folio_batch free_folios; LIST_HEAD(ret_folios); @@ -1109,7 +1116,7 @@ static unsigned int shrink_folio_list(struct list_head *folio_list, folio_batch_init(&free_folios); memset(stat, 0, sizeof(*stat)); cond_resched(); - do_demote_pass = can_demote(pgdat->node_id, sc); + do_demote_pass = can_demote(pgdat->node_id, sc, memcg); retry: while (!list_empty(folio_list)) { @@ -1658,7 +1665,7 @@ unsigned int reclaim_clean_pages_from_list(struct zone *zone, */ noreclaim_flag = memalloc_noreclaim_save(); nr_reclaimed = shrink_folio_list(&clean_folios, zone->zone_pgdat, &sc, - &stat, true); + &stat, true, NULL); memalloc_noreclaim_restore(noreclaim_flag); list_splice(&clean_folios, folio_list); @@ -2031,7 +2038,8 @@ static unsigned long shrink_inactive_list(unsigned long nr_to_scan, if (nr_taken == 0) return 0; - nr_reclaimed = shrink_folio_list(&folio_list, pgdat, sc, &stat, false); + nr_reclaimed = shrink_folio_list(&folio_list, pgdat, sc, &stat, false, + lruvec_memcg(lruvec)); spin_lock_irq(&lruvec->lru_lock); move_folios_to_lru(lruvec, &folio_list); @@ -2214,7 +2222,7 @@ static unsigned int reclaim_folio_list(struct list_head *folio_list, .no_demotion = 1, }; - nr_reclaimed = shrink_folio_list(folio_list, pgdat, &sc, &stat, true); + nr_reclaimed = shrink_folio_list(folio_list, pgdat, &sc, &stat, true, NULL); while (!list_empty(folio_list)) { folio = lru_to_folio(folio_list); list_del(&folio->lru); @@ -2646,7 +2654,7 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc, * Anonymous LRU management is a waste if there is * ultimately no way to reclaim the memory. */ -static bool can_age_anon_pages(struct pglist_data *pgdat, +static bool can_age_anon_pages(struct lruvec *lruvec, struct scan_control *sc) { /* Aging the anon LRU is valuable if swap is present: */ @@ -2654,7 +2662,8 @@ static bool can_age_anon_pages(struct pglist_data *pgdat, return true; /* Also valuable if anon pages can be demoted: */ - return can_demote(pgdat->node_id, sc); + return can_demote(lruvec_pgdat(lruvec)->node_id, sc, + lruvec_memcg(lruvec)); } #ifdef CONFIG_LRU_GEN @@ -2732,7 +2741,7 @@ static int get_swappiness(struct lruvec *lruvec, struct scan_control *sc) if (!sc->may_swap) return 0; - if (!can_demote(pgdat->node_id, sc) && + if (!can_demote(pgdat->node_id, sc, memcg) && mem_cgroup_get_nr_swap_pages(memcg) < MIN_LRU_BATCH) return 0; @@ -4695,7 +4704,7 @@ static int evict_folios(struct lruvec *lruvec, struct scan_control *sc, int swap if (list_empty(&list)) return scanned; retry: - reclaimed = shrink_folio_list(&list, pgdat, sc, &stat, false); + reclaimed = shrink_folio_list(&list, pgdat, sc, &stat, false, memcg); sc->nr.unqueued_dirty += stat.nr_unqueued_dirty; sc->nr_reclaimed += reclaimed; trace_mm_vmscan_lru_shrink_inactive(pgdat->node_id, @@ -5850,7 +5859,7 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) * Even if we did not try to evict anon pages at all, we want to * rebalance the anon lru active/inactive ratio. */ - if (can_age_anon_pages(lruvec_pgdat(lruvec), sc) && + if (can_age_anon_pages(lruvec, sc) && inactive_is_low(lruvec, LRU_INACTIVE_ANON)) shrink_active_list(SWAP_CLUSTER_MAX, lruvec, sc, LRU_ACTIVE_ANON); @@ -6681,10 +6690,10 @@ static void kswapd_age_node(struct pglist_data *pgdat, struct scan_control *sc) return; } - if (!can_age_anon_pages(pgdat, sc)) + lruvec = mem_cgroup_lruvec(NULL, pgdat); + if (!can_age_anon_pages(lruvec, sc)) return; - lruvec = mem_cgroup_lruvec(NULL, pgdat); if (!inactive_is_low(lruvec, LRU_INACTIVE_ANON)) return;