From nobody Sun Jul 26 01:05:48 2026 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D844040BCB6 for ; Fri, 10 Jul 2026 10:42:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783680164; cv=none; b=u+/KBJbIrN5tSA2DR4hZTb0bCM69TbrZO8W2VJphOrLacfNHa3qPbxizsKQKLYYuxB5x5TFKEhrChJabU9Fwz8r+VlMa8YWE7TnqJakN2Ang46kICyPGIuVdIV1gAkVkX0/TkhO48JYZeDtjN+UeuZYRUffw4L8K97uhAmnTgEY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783680164; c=relaxed/simple; bh=hvg2eIJW3W5IntN8hk1akDVckNcGwAcn6UofVGjU3eI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=WFEWaOWtzByHs1h7QagqYK4PdDJsumCjmwGX/XwlMF+plt5x3d2JDdBlQEMuqlTUUPkog6Is7lz0ZqWYmfMc+/2CKJnf1u1meHSRirm2JCvWoj8NyOX8L+8lF4+9Rhy3N91sVDqLA9gdbbsKSO6E+O35xf98XqJkRlFD6be+OuI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--jackmanb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=dQg29Hbq; arc=none smtp.client-ip=209.85.128.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--jackmanb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="dQg29Hbq" Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-49244130073so6964085e9.1 for ; Fri, 10 Jul 2026 03:42:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1783680161; x=1784284961; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=fIBOMMuJQhrTdV+Tjmcx1KZT+n3b2t8dDXgjQ/32pgM=; b=dQg29HbqOS2hDj2Zyk29gwtZ0AfWc381B7nm9gAm0RQ1Br6zlSmRtoQL/PlJviKi4y 3Mob2ABBbYWYUw8xZdoO/uibqtRXookzc212bW46MryQKCNlnbO+VGV9FSAjPuLj7qBj y8VJRJ+j/KR4InmR7qK4M2oYpRbVJzGRweLG6dXPplftl9Cm8awigCR09ERwtirN9Uzp Hq2GfCODdPW3plrtoGgCx1+F4QxpOpyGzJvTJ/jLTaiayUUtHaiXE5OfTYAk7hTSiQHm /BKNMBhMHP/zdLs6Is6k31L//YxKcH4kRgMZTKp75g6A+1Y46IE1PX1kIPKmJrXUOP2D kNiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783680161; x=1784284961; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=fIBOMMuJQhrTdV+Tjmcx1KZT+n3b2t8dDXgjQ/32pgM=; b=UuSn6xSsTJuXZUh0QP/K8AL6XzS7L/znqrKwlA85zx2yxO9K6UVj+W6K++gsH2oP31 stiuWFK5s8jbc8j4JzePh+t+aH+w+TF02PVN8IhjnvStXM3bLO0mNtgjkPkY0e82aV9X t9zWKCDefaoBdkE8URzzWC4DA21cvRWBn6Y6JKZClh/U4qge+6SSKbvhWnv3sAikD8rq RKgzaJTnRs+rbqCzLncbmo+69ehIbk5ubu/ViaDOfTlGcVLgFMZ+3ckGl1qo3jhdmnOu TvkXojqUD7fzWkwA/8jJWsGhqGhg+oyHDd+AsqyB2HAr+zi61Q8EQPfaCetwxS99HMDC maWA== X-Forwarded-Encrypted: i=1; AHgh+RrL0YdPSvqCMIuYEwKlj44d2Sw2tgUo+thAWW9sdYzuh66vt75gqLFDbK1X2y53Cq+4aZSMaFfdqhe49bM=@vger.kernel.org X-Gm-Message-State: AOJu0YwPCVw6WOkUmZb3pbM1r4lK2hzZP1zJWFfB6hoCwaMrykGqlfE8 XCWKMtqL0xPCGafRZz1bZA39lIARKUdZcUB0PdPEZoihKNORwPZyQmRh8kARIJpCvPM6U/wjS/w AAvA3ThMnvPCf4g== X-Received: from wmlz4.prod.google.com ([2002:a05:600c:2204:b0:492:1eeb:6111]) (user=jackmanb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:528e:b0:492:4363:e7eb with SMTP id 5b1f17b1804b1-493e68f03damr112833265e9.32.1783680161137; Fri, 10 Jul 2026 03:42:41 -0700 (PDT) Date: Fri, 10 Jul 2026 10:42:20 +0000 In-Reply-To: <20260710-spin-trylock-followup-v1-0-affb5fe5ed00@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260710-spin-trylock-followup-v1-0-affb5fe5ed00@google.com> X-Mailer: b4 0.15.2 Message-ID: <20260710-spin-trylock-followup-v1-1-affb5fe5ed00@google.com> Subject: [PATCH 1/2] mm/page_alloc: don't spin_trylock() in NMI on UP From: Brendan Jackman To: Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Johannes Weiner , Zi Yan , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt , Shakeel Butt , Harry Yoo , Alexei Starovoitov Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-rt-devel@lists.linux.dev, Brendan Jackman , sashiko-bot@kernel.org, stable@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable As noted in can_spin_trylock(), using this is unsafe in this context. commit 620b46ed6ae17 ("mm/page_alloc: return NULL early from alloc_frozen_pages_nolock() in NMI on UP") fixed this on the alloc side but missed the free side. Reported-by: sashiko-bot@kernel.org Link: https://sashiko.dev/#/patchset/20260703-alloc-trylock-v5-0-c87b714e19= d3@google.com Cc: stable@vger.kernel.org Fixes: d7242af86434 ("mm: Introduce alloc_frozen_pages_nolock()") Signed-off-by: Brendan Jackman --- mm/page_alloc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 9c97a86da2b9f..5fe1c11f919d7 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2979,8 +2979,7 @@ static void __free_frozen_pages(struct page *page, un= signed int order, migratetype =3D MIGRATE_MOVABLE; } =20 - if (unlikely((fpi_flags & FPI_TRYLOCK) && IS_ENABLED(CONFIG_PREEMPT_RT) - && (in_nmi() || in_hardirq()))) { + if (unlikely((fpi_flags & FPI_TRYLOCK) && !can_spin_trylock())) { add_page_to_zone_llist(zone, page, order); return; } --=20 2.54.0 From nobody Sun Jul 26 01:05:48 2026 Received: from mail-ej1-f74.google.com (mail-ej1-f74.google.com [209.85.218.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 426693E3D90 for ; Fri, 10 Jul 2026 10:42:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783680169; cv=none; b=oSomyOnZ+2AOhxxuFzqaHtcvPEK2YrWigX07jA2a0UM6jN8k9KKVwRLlqlpJ/jnGukGyNbgMTW15cULtjvCNzIXDOsLmE+4nJtcFaAaei1vSJMIEIfDUZ1OqsMaTlLVDamK6QgcifacRictp/RztpwaWqaEqfVEbg6JP/gycfoM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783680169; c=relaxed/simple; bh=aiYpWqC+lEbJSqYbGuGqsr3lOJ9pBZxhrFZ54bihihs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=rnnBIzmrica9Nm6SFIrFJK5aCjD4lNs3WYPu7D/r/VJp9QtBKofDQyOZTQOXb/fmoTVgyFZI4CLoO4790ayNKsAR6aGF6CHjRldgCpHWoGQCw5eIGg/MwrTMgaMvGnD5NaCI9nAYELJDfg7Ad+QaGwUBkZ7X+VBo1beYSNkTMy8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--jackmanb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=iwbIzcOs; arc=none smtp.client-ip=209.85.218.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--jackmanb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="iwbIzcOs" Received: by mail-ej1-f74.google.com with SMTP id a640c23a62f3a-c160b9c0676so33007366b.0 for ; Fri, 10 Jul 2026 03:42:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1783680163; x=1784284963; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=SFOgGA5tRZCdjyayy1zy4J6RFFsh/yatP8j3QKMHQdQ=; b=iwbIzcOsb6EyR6ytK/rQVMiW+DZjUG0XBrdpeyLjRETced/y6Yd2QrR3L4NGu1bYHa iFyzU+WBCOUU/R7sFQOTYtBuReT19rKLEHd415USF6hGSfgbxGxjwbvEvuPIWN+EiX/U bZVvk10s0FJHwAvClQ6BBNDuRC96+8Wp4ymqTaBuRAxOr9fAkg9u9pquByOGv8XE/Bcz 7hP2aZq5AgXDjxYmhxrU1YOuyYFFrN/HqU6e/jdsz51MyEOie++rc+AYdWoHUKySu+6Y Y5Ja7tgh+7JW/sDt91xQezfFIaSfRqGFviq273PzpzQKVtHNCGRJlfbStv+t+3yNXQgM UMgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783680163; x=1784284963; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SFOgGA5tRZCdjyayy1zy4J6RFFsh/yatP8j3QKMHQdQ=; b=gXyfQDAcuOioJoJCeWAoi97CQKJBeLjrI7kwQvxTwLtRZtuDssqzXXbdcw1ZSnEHdO WbOHck6X6VZYFhNyIdwdtNPSKkSppnSKjwCf9mqDYyukcOx+07HT8JhgZr9Li/CaEEo8 ODQZFePfvWbmZT4t3WlBs8fHJp8wNxsmbJ1z0Xw9hvI7WZRw/xNjAjv8pK2z1YcnJUxn Vm/GbYi8XoBuAOMuEV9C1aRNqPsRJv7n92+SWN9RQO9l/o5TrDTrJ9a7k9wuxjQMS+kG 2CXQjsU/mhfu/0BRhZSA8lqFInIcRs0WhYPnHV6E8YV/S8OzXCNZgE/GuIGuOUiHmWIc Q9YQ== X-Forwarded-Encrypted: i=1; AFNElJ/Opfj3xCgtFabqcnYEkEJ3OGt8GptWOZ+Dbhbdr/uyAOORUTG0cEE94NGFA+jp4AyxO013d8xcrXzTRGA=@vger.kernel.org X-Gm-Message-State: AOJu0YxrsX4qjQa0ARph2xsJCK9lZGSWqTT76/yUKOPwZKDfyMxhh6j3 TAaYWo3z6DdYL2l/FwmZKNJUlV6iot+8+pf4vDJb4QsaHs7YBAsnFifyZfd18NmWTMIqnlUv40z IVWFX9ZDHvr3tnA== X-Received: from ejn24.prod.google.com ([2002:a17:906:598:b0:c12:7dd1:56a5]) (user=jackmanb job=prod-delivery.src-stubby-dispatcher) by 2002:a17:907:7245:b0:c12:b227:614b with SMTP id a640c23a62f3a-c15ce03d925mr500309166b.27.1783680162267; Fri, 10 Jul 2026 03:42:42 -0700 (PDT) Date: Fri, 10 Jul 2026 10:42:21 +0000 In-Reply-To: <20260710-spin-trylock-followup-v1-0-affb5fe5ed00@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260710-spin-trylock-followup-v1-0-affb5fe5ed00@google.com> X-Mailer: b4 0.15.2 Message-ID: <20260710-spin-trylock-followup-v1-2-affb5fe5ed00@google.com> Subject: [PATCH 2/2] mm/page_alloc: rename FPI_TRYLOCK -> FPI_NOLOCK From: Brendan Jackman To: Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Johannes Weiner , Zi Yan , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt , Shakeel Butt , Harry Yoo , Alexei Starovoitov Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-rt-devel@lists.linux.dev, Brendan Jackman Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable As discussed in the linked patch, the there is some inconsistency between "trylock" and "nolock" nomenclature, let's align it. Since "nolock" is used in the public API it seems to have more mindshare so do that. The linked patch did this for the ALLOC_ flag but forgot about FPI_. Link: https://lore.kernel.org/all/20260703-alloc-trylock-v5-1-c87b714e19d3@= google.com/ Signed-off-by: Brendan Jackman --- mm/page_alloc.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 5fe1c11f919d7..ba8d882072de5 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -90,7 +90,7 @@ typedef int __bitwise fpi_t; #define FPI_TO_TAIL ((__force fpi_t)BIT(1)) =20 /* Free the page without taking locks. Rely on trylock only. */ -#define FPI_TRYLOCK ((__force fpi_t)BIT(2)) +#define FPI_NOLOCK ((__force fpi_t)BIT(2)) =20 /* free_pages_prepare() has already been called for page(s) being freed. */ #define FPI_PREPARED ((__force fpi_t)BIT(3)) @@ -1419,7 +1419,7 @@ static __always_inline bool __free_pages_prepare(stru= ct page *page, page_table_check_free(page, order); pgalloc_tag_sub(page, 1 << order); =20 - if (!PageHighMem(page) && !(fpi_flags & FPI_TRYLOCK)) { + if (!PageHighMem(page) && !(fpi_flags & FPI_NOLOCK)) { debug_check_no_locks_freed(page_address(page), PAGE_SIZE << order); debug_check_no_obj_freed(page_address(page), @@ -1558,7 +1558,7 @@ static void free_one_page(struct zone *zone, struct p= age *page, struct llist_head *llhead; unsigned long flags; =20 - if (unlikely(fpi_flags & FPI_TRYLOCK)) { + if (unlikely(fpi_flags & FPI_NOLOCK)) { if (!spin_trylock_irqsave(&zone->lock, flags)) { add_page_to_zone_llist(zone, page, order); return; @@ -1569,7 +1569,7 @@ static void free_one_page(struct zone *zone, struct p= age *page, =20 /* The lock succeeded. Process deferred pages. */ llhead =3D &zone->trylock_free_pages; - if (unlikely(!llist_empty(llhead) && !(fpi_flags & FPI_TRYLOCK))) { + if (unlikely(!llist_empty(llhead) && !(fpi_flags & FPI_NOLOCK))) { struct llist_node *llnode; struct page *p, *tmp; =20 @@ -2882,7 +2882,7 @@ static bool free_frozen_page_commit(struct zone *zone, if (pcp->free_count < (batch << CONFIG_PCP_BATCH_SCALE_MAX)) pcp->free_count +=3D (1 << order); =20 - if (unlikely(fpi_flags & FPI_TRYLOCK)) { + if (unlikely(fpi_flags & FPI_NOLOCK)) { /* * Do not attempt to take a zone lock. Let pcp->count get * over high mark temporarily. @@ -2979,7 +2979,7 @@ static void __free_frozen_pages(struct page *page, un= signed int order, migratetype =3D MIGRATE_MOVABLE; } =20 - if (unlikely((fpi_flags & FPI_TRYLOCK) && !can_spin_trylock())) { + if (unlikely((fpi_flags & FPI_NOLOCK) && !can_spin_trylock())) { add_page_to_zone_llist(zone, page, order); return; } @@ -3001,7 +3001,7 @@ void free_frozen_pages(struct page *page, unsigned in= t order) =20 void free_frozen_pages_nolock(struct page *page, unsigned int order) { - __free_frozen_pages(page, order, FPI_TRYLOCK); + __free_frozen_pages(page, order, FPI_NOLOCK); } =20 /* @@ -5409,7 +5409,7 @@ struct page *__alloc_frozen_pages_noprof(gfp_t gfp, u= nsigned int order, if (memcg_kmem_online() && (gfp & __GFP_ACCOUNT) && page && unlikely(__memcg_kmem_charge_page(page, gfp, order) !=3D 0)) { __free_frozen_pages(page, order, - alloc_flags & ALLOC_NOLOCK ? FPI_TRYLOCK : 0); + alloc_flags & ALLOC_NOLOCK ? FPI_NOLOCK : 0); page =3D NULL; } =20 @@ -5532,7 +5532,7 @@ EXPORT_SYMBOL(__free_pages); */ void free_pages_nolock(struct page *page, unsigned int order) { - ___free_pages(page, order, FPI_TRYLOCK); + ___free_pages(page, order, FPI_NOLOCK); } =20 /** --=20 2.54.0