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 4AB1EC28B28 for ; Wed, 12 Mar 2025 10:56:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 710D6280002; Wed, 12 Mar 2025 06:56:18 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6BE80280001; Wed, 12 Mar 2025 06:56:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 58788280002; Wed, 12 Mar 2025 06:56:18 -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 3AE25280001 for ; Wed, 12 Mar 2025 06:56:18 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 171A8C0CB9 for ; Wed, 12 Mar 2025 10:56:19 +0000 (UTC) X-FDA: 83212594878.06.A054658 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) by imf03.hostedemail.com (Postfix) with ESMTP id 0FF6220002 for ; Wed, 12 Mar 2025 10:56:16 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=UOKs93ZN; spf=pass (imf03.hostedemail.com: domain of parri.andrea@gmail.com designates 209.85.208.49 as permitted sender) smtp.mailfrom=parri.andrea@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741776977; 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=snvG7I/yxcNLJbo5TymkPopQ91uklMZuBR4ddw0uRDg=; b=N4UnBahSItlKTqL4V55p/q95Z90yL4OBdFB7h7vXxlyi07x5RBbq780v1DYGidiqxA+OEH Yi1+huymmvAzaBHYXKBTptxtn0Xqe52gRtNAweY/yEkqJX+FW4W7gTsUNcxMKqgGD0uxIe 0RdM8sRF+xzy4QlIXtQmK1+haitsXdY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741776977; a=rsa-sha256; cv=none; b=DK9WPCeWh+s2WXwmYo84Y9uQgn6242kPnjiOrkEgh/7T9aC1xbH4BBxn0rye5/Dgk80cAd NZdSzo1+o8Pg2+4ptJuMiKvq2mjBUcaUNMacnwVVSziKVLgzOJskMhZ4AR3iYb97uO920t eQN1o2AL5MAkw+ven9tYk3WeI9G7LMA= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=UOKs93ZN; spf=pass (imf03.hostedemail.com: domain of parri.andrea@gmail.com designates 209.85.208.49 as permitted sender) smtp.mailfrom=parri.andrea@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-5e5e8274a74so7609820a12.1 for ; Wed, 12 Mar 2025 03:56:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741776975; x=1742381775; 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=snvG7I/yxcNLJbo5TymkPopQ91uklMZuBR4ddw0uRDg=; b=UOKs93ZNR4/k0xLGf49Qxsj0U5LRD4tXrtM55SZdotmyaJdF5naTgG9aiTv7vgLdD4 0WsLvpS7M1ub+To6mA8Ho2OKwa09kvXh86TJYQ2+BDlIbBpuwK2S/9DXaOsiUaSLv5X1 7mFN+yNIK/DKMSLhPgl4JBcuvILy+pQS/mr/oD50gYqrUfqmE36W+OY2VdvVmyKK+iaY olRq3ZRsbeOFidqtwMV9bPOP90fUzfXSryFTSjsixxWbok/ztTxkvxFZZoMQ3AiRWf9W rOt4v99wzJtf0n1inmgLHbsGi65f/+OkP4tufftq8FBhPMWLSOKUH8is/TxlD6QXVTLS cSAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741776975; x=1742381775; 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=snvG7I/yxcNLJbo5TymkPopQ91uklMZuBR4ddw0uRDg=; b=bvxe+5kJG9rirvKI8QrZT8YaDMCjvEHV57Akn0PXn4agp2BVR9jIcvJai4HIZF0YKY sbqnsI8IUxLrIlyBiY+GOt5Ok7fIFkMigU09uKSGzDfitmz4gSVmyXOQDGV1itOtWspM LZk9Ag1G1Nu97T2SS86ugXxNjSt0xsHhuPMgXzqf64hUNJl0PgZDh/4wbGXcjUwRwP5P EDH/50mJa/LsxXSIBVEkSgkwSffXuf1dOSZpEIyPN+TdDti9QdjpE/0OGBUrItTf/i/R 7B7oGsBXwLkNZaELdW/02f/QBBKUgjInjEZi24T1HGQ6Ha78JOA2ObDS6MuYwjau8+I6 MHQQ== X-Forwarded-Encrypted: i=1; AJvYcCXcLdKkoXAw7M03/Y4WHkBCwmOc0JA/r36Kl2vg9fyDnE1ka6RxyAsoc/LVVM4QvfmZVBkSBgN5Qw==@kvack.org X-Gm-Message-State: AOJu0YyDImHOR0asr3TelJNhOqcAAlN/P7OSZ4OimZ4W3s8T/Zmjpgt1 Eq/mIRBbsYeMbGmS7Lhhw75KR/bOu9OXV3bkrKZsMblkv2Rbq8CQ X-Gm-Gg: ASbGncvcFb4lutyQqRHFiaYJ0O2XDGMOzJ4yKO9ZtJEeA1spNrbDlFRXUHMTLMPOsmL NCpXMbW9fZQJwJ8md3a7aVXOjYUfBlXvKNB912mz0AQ2+XaZ7w1CgX9mp6vImKFBsBk4GAz5lFg RiLErPmxAdN8FyrWjhOwAELn3E8jjO9sQ8DwsLW2b6xbfy7UPpJI9ydHS6rINsBuE82TqDEYVGB nLfsDUP0VtSQCCTz6S6kSnUBHHGl27qVotBMQK03wF1x0xMgwP07YldHe2ke6hYQSiqc6BsRU/Y Asjf3qjnifPnzBHiOXJW8lWogrlvxeo8lWaSDvsq X-Google-Smtp-Source: AGHT+IEggCYXkJhdsjo3s4+6397QaF8ywtamlavWlpZUsbKmH/epfuxy3n9O12rcC8hc/sGVoSs9DQ== X-Received: by 2002:a05:6402:5248:b0:5e7:b081:8b2f with SMTP id 4fb4d7f45d1cf-5e7b0819420mr3910525a12.8.1741776975107; Wed, 12 Mar 2025 03:56:15 -0700 (PDT) Received: from andrea ([31.189.82.201]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e5c74a8f2fsm9802846a12.41.2025.03.12.03.56.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Mar 2025 03:56:14 -0700 (PDT) Date: Wed, 12 Mar 2025 11:56:10 +0100 From: Andrea Parri To: Mathieu Desnoyers Cc: Andrew Morton , linux-kernel@vger.kernel.org, Lorenzo Stoakes , Matthew Wilcox , Alan Stern , Will Deacon , Peter Zijlstra , Boqun Feng , Nicholas Piggin , David Howells , Jade Alglave , Luc Maranget , "Paul E. McKenney" , linux-mm@kvack.org Subject: Re: [RFC PATCH] mm: Add missing release barrier on PGDAT_RECLAIM_LOCKED unlock Message-ID: References: <20250307193047.66079-1-mathieu.desnoyers@efficios.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250307193047.66079-1-mathieu.desnoyers@efficios.com> X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 0FF6220002 X-Stat-Signature: t7p1k66n66bfadfsfznqfqw3b1dqjw9h X-HE-Tag: 1741776976-458679 X-HE-Meta: U2FsdGVkX1/vza+UUv7mocbZthOWU64IGWRQHQe92hMw+5qANnpaaojGns+h0XwTVxCd7tLI7UG+Yo738t7Etd1Mdy2FBEgSXOuvHlGUb6FdrWS4SOX5SBrjYMV9S26J+ded2DkjJr4CvVkKu0HzVL8+nH7MCJyLGRWr0ezN0di3QXv/56xY2Ee23Vi7tyqBI0igim9XgrgeWKf8Yv0zSyvPvNY+QpPT623U7ZvgYj4s3EbNWlZPTh+E8BI9cqNI8FWcAV6QQU/Aez1F6I1Mw3WZOwMvd9tJWdRusVTfA+3lgeWbwoLE7zhgpLlAH5zFCx9AlT3oMyWgfmVxsdvi/VemKls1ByT6TuSH73hQhflVcU/3zTkgzjWf5A5FBsCm8Q/q8b3YAsyg7yPWxZptXGLwXh5RE1l+efsIaf6i/E69v+/4aM7aUP9LvRJgYsVQZnGs+4ab2A669XcyuXMKD5CHMZJ4ai0R1etJ+gZgnX0yygThm0Z538BXOF3YcMbgFbQurbkUD92Bi6dyAvMZRA/EZdTQbNy8VSPWlPVjFNgNCbXBj117ZIBv44VMI6t7LwTI4589tpwM1IDjrusSNJwS3cuXm/R37lEozuRgV5+8SSu+KfNNVEUX9j00EtrR4AKldTTm5Coioy0fmxLsLtwJt4VEoRSjKw7mr6pD+tIs8kUevtVRju4KKZPZeCtLj8T/09GcXAJ6IzGQMuCffWIyhIZA5EWoigzn+IDXywYOGKnSiE9m49o8zkcQlO8p/GS8Uta5stmLBrOQHUHm4D4hpNFhP9gkg80SU7tRQpm5u0iSDt7zRHn4tQimADUhunuaVlsYApHIlIfVt5CPmerU66COz7JKfcmbFbX08huHUlKMhtA0LozdEruUJLOzMORkeyiJp7SoGSaaHVcNtptKcToJNS9dpQC+3FYlqjkkPa4W/4O7naULKkpUv+c+sVre1/erG92b2zvoHcJ bCkAUZG8 Y0eD8krX+GwS3Y1anaY1HAP4unFPYWl9/eKMYQPaH5E3XwJR2kq13aK0DlVPT8F6IxcuTNctLsnHhAv4qGO39y0CqL0S1z+ZLgnsyNGdW9Z4QvOVDOqzTPi01ZDjWLAje1yZm7YVmDMK7h5cmTjwx7FTrNcSdbjbhDZG+d9XjacKOkBj9ItKTZPbisAv1RgnLDrlklcU63XeY4+j3wHrYWTh4U6S00fYSv/K5qLfGey9VGqD0KKn/uGgJpRQF0KIB706QEgN4bWKnTMXC5rA4yaX8GNokSXNxmoW/o95QMeiLN/Wo3k8Srx+IpYpYkAxid2XzL1909zhaR1nGQK+0Tnp/FmJHphPLkT1dxx4CdmaIwaqhMiuRbwkekBu0futTzDr5G3bWpklO2BPY6IMV3vLLZ+q4ubRK6av5F7zEE2ypobGh/492Xo2A8R4wacvD7qcLPPkLEups8Ydw28gNBfPe13SX7LaW1QtKlygM3kNe3xjRvJhGxgaTJbefS9WVBHJj4dH85lYNevuFEJOlFPGqRuTDn1x542upmMkgZt6CdyZzXtnPLg6o1oK7dIBYVuv1jAvV+p1lk22DMyq52ZPBAVfJuhTsQpT39dnRqXVKbhovX6SpdaUVaq62I5WTBJdiNI//d+x8ksJa2CdkWWTh4ecUIrj9ECVAmISRy3dQGEx3sBGGfHKd/fHNJgqHJlPqE0DTERPEJq2g55Lx0cgmV5rwF/ViXxjaGpa9VNoph/pYNo52jRWdvAaZ05M79niUPqBToqfCm4hVBkQlxiqHvKNooAe3JGDKvjtBIIIuRmL036Kv/jERGPnD45/npGVjuable3AKNM/WH0D0gVta8ArKYuZ73XD7AJg4jftcbSVwFUOCdtw4LtljsxxogPnueSRZsXFuwpg= 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 Fri, Mar 07, 2025 at 02:30:47PM -0500, Mathieu Desnoyers wrote: > The PGDAT_RECLAIM_LOCKED bit is used to provide mutual exclusion of > node reclaim for struct pglist_data using a single bit. > > It is "locked" with a test_and_set_bit (similarly to a try lock) which > provides full ordering with respect to loads and stores done within > __node_reclaim(). > > It is "unlocked" with clear_bit(), which does not provide any ordering > with respect to loads and stores done before clearing the bit. > > The lack of clear_bit() memory ordering with respect to stores within > __node_reclaim() can cause a subsequent CPU to fail to observe stores > from a prior node reclaim. This is not an issue in practice on TSO (e.g. > x86), but it is an issue on weakly-ordered architectures (e.g. arm64). > > Fix this with following changes: > > A) Use clear_bit_unlock rather than clear_bit to clear PGDAT_RECLAIM_LOCKED > with a release memory ordering semantic. > > This provides stronger memory ordering (release rather than relaxed). > > B) Use test_and_set_bit_lock rather than test_and_set_bit to test-and-set > PGDAT_RECLAIM_LOCKED with an acquire memory ordering semantic. > > This changes the "lock" acquisition from a full barrier to an acquire > memory ordering, which is weaker. The acquire semi-permeable barrier > paired with the release on unlock is sufficient for this mutual > exclusion use-case. FWIW, this aligns with my understanding. Is (A) intended to be (submitted separately and) backported? Andrea > Signed-off-by: Mathieu Desnoyers > Cc: Andrew Morton > Cc: Lorenzo Stoakes > Cc: Matthew Wilcox > Cc: Alan Stern > Cc: Andrea Parri > Cc: Will Deacon > Cc: Peter Zijlstra > Cc: Boqun Feng > Cc: Nicholas Piggin > Cc: David Howells > Cc: Jade Alglave > Cc: Luc Maranget > Cc: "Paul E. McKenney" > Cc: linux-mm@kvack.org > --- > mm/vmscan.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index c22175120f5d..021b25bdba91 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -7567,11 +7567,11 @@ int node_reclaim(struct pglist_data *pgdat, gfp_t gfp_mask, unsigned int order) > if (node_state(pgdat->node_id, N_CPU) && pgdat->node_id != numa_node_id()) > return NODE_RECLAIM_NOSCAN; > > - if (test_and_set_bit(PGDAT_RECLAIM_LOCKED, &pgdat->flags)) > + if (test_and_set_bit_lock(PGDAT_RECLAIM_LOCKED, &pgdat->flags)) > return NODE_RECLAIM_NOSCAN; > > ret = __node_reclaim(pgdat, gfp_mask, order); > - clear_bit(PGDAT_RECLAIM_LOCKED, &pgdat->flags); > + clear_bit_unlock(PGDAT_RECLAIM_LOCKED, &pgdat->flags); > > if (ret) > count_vm_event(PGSCAN_ZONE_RECLAIM_SUCCESS); > -- > 2.25.1 >