From patchwork Mon Mar 3 12:13:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brendan Jackman X-Patchwork-Id: 13998711 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 3F056C282C5 for ; Mon, 3 Mar 2025 12:14:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B65F76B0095; Mon, 3 Mar 2025 07:14:22 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AED806B0096; Mon, 3 Mar 2025 07:14:22 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9404A6B0098; Mon, 3 Mar 2025 07:14:22 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 727D46B0095 for ; Mon, 3 Mar 2025 07:14:22 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 1054B1A086C for ; Mon, 3 Mar 2025 12:14:22 +0000 (UTC) X-FDA: 83180132364.29.6A502F6 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) by imf20.hostedemail.com (Postfix) with ESMTP id 4082A1C0007 for ; Mon, 3 Mar 2025 12:14:20 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=tkcteNJf; spf=pass (imf20.hostedemail.com: domain of 39pzFZwgKCIsyprz1p2qv33v0t.r310x29C-11zAprz.36v@flex--jackmanb.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=39pzFZwgKCIsyprz1p2qv33v0t.r310x29C-11zAprz.36v@flex--jackmanb.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741004060; 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: references:dkim-signature; bh=3XM/kMIL2XLwkwjwLCWrp4SEasAEO2v2SGHBA5kN3uY=; b=XgpcC1ja6BhjbZc9/61wmKCbiZNy0ZzWnX16Vksm/BQxXgDKEyQh0InnnCHJH4NwOSOQa1 zO7aW4wmmQv5EQN5JsY+qdh6BRx57SfersxjxLBh3tQjPBon9bWnwdJS308gqLbG/HdrOh vwmdnbQEoaRaYH1tMYSZZyWKT8/hL8Q= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=tkcteNJf; spf=pass (imf20.hostedemail.com: domain of 39pzFZwgKCIsyprz1p2qv33v0t.r310x29C-11zAprz.36v@flex--jackmanb.bounces.google.com designates 209.85.128.73 as permitted sender) smtp.mailfrom=39pzFZwgKCIsyprz1p2qv33v0t.r310x29C-11zAprz.36v@flex--jackmanb.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741004060; a=rsa-sha256; cv=none; b=WGod7aG6BU4BWdUKfnBmzWKFNzoe/DWg3n5G3uDydP7xV0CQzRp447JGEMjUsDy5+YrXIB KgIXVwnZHnY2NXjKtegES2v+xU25xcHnXwb364gl37yTCicjDBVQHV/uUGE4LkYpW7IRfe z943+aJg22L8T5K8ZYZHrFSsizL0jz8= Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-438e4e9a53fso29988115e9.1 for ; Mon, 03 Mar 2025 04:14:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1741004059; x=1741608859; darn=kvack.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=3XM/kMIL2XLwkwjwLCWrp4SEasAEO2v2SGHBA5kN3uY=; b=tkcteNJfE+9GlMr20wbIriiWk3PwxieoQWkQ2DnIf/nHX5nHM4TTkRtH/nMlL7GJrq rYJH5lhigY4AeQHc9jgkWDLGQ9YHyOHHdh0WL6byGbR7QUrc7WUd/WAzEsoqPdXqsm5D lVBu8bBGdlhp8iinWBUACUI4wdksCPcTbhwVCIwNfMjLlRF9tnM9MqIF2Hn3lpJC0DEf zJRk2w7B+NzPmJ4kwLJh74WnGy4kTMikhywVdD631M5i4JFKblhDTQ4YNX0eLQKElhv3 hbwBOLydYJ2u9GoSW5vsTJPvyCVYS+3TyRd6TbD7j1SRnHfU2D9Ko1tUTguCjg2L64KZ FDkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741004059; x=1741608859; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=3XM/kMIL2XLwkwjwLCWrp4SEasAEO2v2SGHBA5kN3uY=; b=aom90v9xTKYSpxHptOmlDVufLBJymmcqv0KWYI/+8LtYLI3l0BZI/S5cMbhvXwNiD8 h7a4Qv0oT8N33UsV71kIXBZKJ5C56O9cEdmf/EIf49U9319qEgvfGlCtIK1fvryJLc6M 7sO3vhynqJECVgU+AEFw68OdQZG3Z5XtxMONstU1/4Cz4oJoivomZQ7Djto6u+WZI7XK /hlibrWT37F0eLrnUQfjgoD4zJePGn6bwEEbPOklf1l2xstyQtWmDl2FR0o8NcuTN1Bb r3hEwdkOb2tpiWb3o/7exn354FaHU2SEpAYi5xmnSB70Efv6uHOWsPyg/tSDutEF4kt8 vJPQ== X-Forwarded-Encrypted: i=1; AJvYcCUgioEPxa1d13qfcX5PK2ve9RnCXajSXKoeN7QKDrWnwS3+b0Z4EbLkGKUMWwG+c8dy3Un2DOFvxA==@kvack.org X-Gm-Message-State: AOJu0YxgHkyx5IVPNN9n0P94W6XYWjw63Va39HEtK+lZXCEaRIkJMBsY 7pjvaWpvIQLHElveGwFBYH8GN35AE1RvvuL51r2q2Mk2M1YvZvYosmO3GVbyRPhbZZD2hbzkpta 2XgF11WbuTw== X-Google-Smtp-Source: AGHT+IGYc3bDnw0zgL8aV6CcStUU7x4W8H3EWnZWGR+FbnL9xa0DOINfyPtYIKSdc9eErLJbdsTXinjHx6+yIQ== X-Received: from wmbg14.prod.google.com ([2002:a05:600c:a40e:b0:439:9438:468b]) (user=jackmanb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:511e:b0:439:9aca:3285 with SMTP id 5b1f17b1804b1-43ba66dfe1amr102550035e9.6.1741004022222; Mon, 03 Mar 2025 04:13:42 -0800 (PST) Date: Mon, 03 Mar 2025 12:13:26 +0000 Mime-Version: 1.0 X-B4-Tracking: v=1; b=H4sIAOWcxWcC/32NTQ7CIBSEr9K8tRh+VNCV9zBdFHilxFoIGKJpu Lu0B3AzyTfJfLNCxuQxw61bIWHx2YelAT90YKZhcUi8bQyc8jPlXJI4ONRzME+yhcVIrheuzEl ZiVRB28WEo//szkffePL5HdJ3vyhsa//ZCiOMCEkZjloIpvXdheBmPJrwgr7W+gOR0x54swAAA A== X-Change-Id: 20250227-pageblock-lockdep-9628c48d7e08 X-Mailer: b4 0.15-dev Message-ID: <20250303-pageblock-lockdep-v2-1-3fc0c37e9532@google.com> Subject: [PATCH v2] mm/page_alloc: Add lockdep assertion for pageblock type change From: Brendan Jackman To: Andrew Morton , David Hildenbrand , Oscar Salvador Cc: Johannes Weiner , Vlastimil Babka , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Brendan Jackman X-Stat-Signature: 3uennjuma7qt7hz5nr97hiehuudys8it X-Rspamd-Queue-Id: 4082A1C0007 X-Rspamd-Server: rspam06 X-Rspam-User: X-HE-Tag: 1741004060-793539 X-HE-Meta: U2FsdGVkX18ruquQkiAIdoVPcQgD7wJOcOcJ0NztxL+oarXOsiVroMMOhh+2E0KQm1Z9YkdXZNiTq7BpCMJdmH2u4sYmMYF9gXJHR2OMTif33cPmRz2MzBOsAXa40REZWY7iaWn9dYWTWViojX5+AjtR9UHlyBXriD11wPw7grqEXhdDMo3E+4+FHVuct/KWQC/4/cmxPmJyvXE5MP1lpdDLVnP0FzL05M1iF2eC2a5z9AN5drpD+9UPOiu1zjuEi9ccju4PlcwQqrvzuZkRgUy1M0CbD74Lz3nUYm1PDD4X/lWTuYEzED23X4e6fuyNXl4azd5xTuibdbLM38KNjsVpq0fvjmgblu1g2mQp2sKsjFh/06sXQYK0Nh4N2vbiCjnLTZSFdSlqrSOHhzzoBQkFaG92mN7A2GNP0dKJmoJilsyNLwO9p//BtcD3uAauRR5oRkZTmzaGEznzbZyeEGzePTDwVX88rdIjreb9oNWlfoZRqnIXsrppme+b/6MUJGwI1KNdehNeltXJDU2VdciiQ39lNwaqB1G8h3KYjT7VrvCyHd5P5DvEnXU5zfVcCwyai4gSPE/sT4Xl4oJL8vBnaI7SuHmY46s+hn74kiUBaZeMBu4FvHqSZb5WPXbOhrhepxp+MJJkIkbeu04qhdo1DYJ6+SGaZy8O2ym4/YTAujSjFxVJ/8q30uWTmnaJYh5suI0hQ9wxgjdXeaVcivlnUAOMvL/EVL98KtozV/A+uUEhzHu0KNOcOQrbUml+skzhjYeEhZCEK1Rcd/MAywmTFIiLABZdz/4Wj3gRD6MJ5hVBe2k2G0ifdtdKAart0XmkoPnLwyxDWHHxgSfI461v2ZP/n+W0i27TWfZRuKrR0vJ5F0fuQIJxVwfug7Rza6wiWiRRXveUbP0ACRXr2Q17qpQyGCB35BGEVOS4J13B7a0QpD43921XMB7sA1Kgy5Bm0Dv28OyP1r2feWf aajRNi39 iRCDXmcF5/jZzXtlhOXjswXJ4BIK2l6PI44bIGMn7FRglyxFuvcbg4tSC3hQiPd1Upwka4pYDBMe3vmaf97oH+G0V3pzrAyApbj4BzqZj5iJ5Xwnc/kfH4kTa+G/16b3/hnqvN9T2TWhOzsdxq5bR5CcwjzL0g6L/c0uTse/8NZpkhM8Bf/ajNUJ/vLRK29C6VkvQGA45rsHPGhW9ZGx6zTcArQDyhOzTJAQll0PsBEdF/LRGW/2faGJMNYNcZj527LCUZJDOFQLDZQm5x30r7Mbb6mWB0PLwFIqLGR3H2k/I4vPfROe2ULImB4+RYdNuV+qBh4sh2daxmyao5/aFOawRBBlEDBeKepvvUVhI+aRDZFcYWjcWjYNVIc4D5d+fiMzD8kC6PUfNf64UroggQBvxk1L3hLgwGTfudGuqFvWHA7vvlunrP+ukWWQPmAha1QL0cel3LRDgALr3xAPTKC3/VH8/b7dj9c0z38jh7WjENJlUsXZd4wC1p12vfe6KokfxjqVvj73Isiq3CdSgRRdOeXuWo3Mni9xMv+5nrMGoaUJldrOAwZT2kXyhUYQgf73JRArQvMHFF6rWsRlNpoeR0Qd1ETSSKiNPY7nwUprJHyhho+oDsy7W6R4fgqBMJsV+wWUm4QbzW2gi2Z3Q4C07xXIkG8L4UTO9g8B2QHBvokyzc7kRD2k70w== 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: Since the migratetype hygiene patches [0], the locking here is a bit more formalised. For other stuff, it's pretty obvious that it would be protected by the zone lock. But it didn't seem totally self-evident that it should protect the pageblock type. So it seems particularly helpful to have it written in the code. [0] https://lore.kernel.org/lkml/20240320180429.678181-3-hannes@cmpxchg.org/T/ Signed-off-by: Brendan Jackman --- Note Vlastimil Acked the first version, I did not carry his ack since I've changed the diff. Not sure if I'm being overly pedantic there? Changes in v2: - Fixed missing in_mem_hotplug() setup for !CONFIG_MEMORY_HOTPLUG - Expanded commit message to include a bit more rationale - Link to v1: https://lore.kernel.org/r/20250227-pageblock-lockdep-v1-1-3701efb331bb@google.com --- include/linux/memory_hotplug.h | 5 +++++ mm/memory_hotplug.c | 5 +++++ mm/page_alloc.c | 4 ++++ 3 files changed, 14 insertions(+) --- base-commit: 83c34e70d8dd67525c2547e8c5ee1a4bf37ac06b change-id: 20250227-pageblock-lockdep-9628c48d7e08 Best regards, diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index eaac5ae8c05c8ee2f2868d5bc1b04d1f68235b3f..508a1d074527a3349c1c9789ecf35d5ab08a5ba6 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h @@ -175,6 +175,7 @@ void put_online_mems(void); void mem_hotplug_begin(void); void mem_hotplug_done(void); +bool in_mem_hotplug(void); /* See kswapd_is_running() */ static inline void pgdat_kswapd_lock(pg_data_t *pgdat) @@ -223,6 +224,10 @@ static inline void put_online_mems(void) {} static inline void mem_hotplug_begin(void) {} static inline void mem_hotplug_done(void) {} +static inline bool in_mem_hotplug(void) +{ + return false; +} static inline bool movable_node_is_enabled(void) { diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index e3655f07dd6e33efb3e811cab07f240649487441..c44c2765b21f1e9e4b2d68abda9ac161fb2869ec 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -267,6 +267,11 @@ void mem_hotplug_done(void) cpus_read_unlock(); } +bool in_mem_hotplug(void) +{ + return percpu_is_write_locked(&mem_hotplug_lock); +} + u64 max_mem_size = U64_MAX; /* add this memory to iomem resource */ diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 579789600a3c7bfb7b0d847d51af702a9d4b139a..1ed21179676d05c66f77f9dbebf88e36bbe402e9 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -417,6 +417,10 @@ void set_pfnblock_flags_mask(struct page *page, unsigned long flags, void set_pageblock_migratetype(struct page *page, int migratetype) { + lockdep_assert_once(system_state == SYSTEM_BOOTING || + in_mem_hotplug() || + lockdep_is_held(&page_zone(page)->lock)); + if (unlikely(page_group_by_mobility_disabled && migratetype < MIGRATE_PCPTYPES)) migratetype = MIGRATE_UNMOVABLE;