From nobody Sat Feb 7 18:52:16 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A9D9F2FCBE3 for ; Mon, 19 Jan 2026 22:07:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768860440; cv=none; b=NQIxpxPishopLHwlRwlwh1FAA+u75D5kAsr3BAJJKCqXw4sPpFwiZoqZp4RjZxofFbEgI/9q5+drCmWgYsdYGiRnB6n7fmK4ARvKRTLOOod2GNWJJHZQDYNuYiGxmHhq8YCJg5lfodF6sYJKFYDGDe1UNjyz5dNPWRe1PPBIXoo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768860440; c=relaxed/simple; bh=Uz+rgdCACY4xIfDsBJdwJG1Wp19Ieqw85OkYIQtZgKM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H2hO5AZJKspbZj/uhnNBvbLHXGVJ3m65TpzDfRuXuXTEfFntJoAqI1icZjACk4QB7tGYTvJlWQdtg+FkDwHLm67pRBQScXVfYXCQmjq5Jrmv6cKPHp/+viU787O+82ygo3XFqi7DfGuthxKpywjk/nQkHxU7DAirQw3in/HXjsA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kJSJA0Ye; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kJSJA0Ye" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 59401C116C6; Mon, 19 Jan 2026 22:07:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1768860440; bh=Uz+rgdCACY4xIfDsBJdwJG1Wp19Ieqw85OkYIQtZgKM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kJSJA0Yex7DNtH457O8X0WqNKsu9ixkcZRM/TTyY4EYQV8NQUNuD4KbD2p9teGs6q d6zn4/v7fCR3N30JmDUlvQAoPdRhzWAr3MUhVV29GSCsI3wSKqhe7Gt56UIAJUEnDB LBBXRpjcYEY2sIz8agcCU5MittvsbydGbHOuHt7kl3NzlEQwj47lukZLwK3/UZLLQv JcEG+KeuJCx2k1mMTADQ61A/ZJcBfKA/QdA8pa2+Z4P9tqBDab8J1AZRx8s/x8ARsw +rc+7Cqs5rCU6MjaI25AqwZmETUFiCZePv3rXlZNU+FrLPTIOi4Ese/gE+sdsMnOoK M05bKsRL3WFpw== From: "David Hildenbrand (Red Hat)" To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, "David Hildenbrand (Red Hat)" , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Qi Zheng Subject: [PATCH v1 2/2] mm/memory: handle non-split locks correctly in zap_empty_pte_table() Date: Mon, 19 Jan 2026 23:07:08 +0100 Message-ID: <20260119220708.3438514-3-david@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119220708.3438514-1-david@kernel.org> References: <20260119220708.3438514-1-david@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" While we handle pte_lockptr() =3D=3D pmd_lockptr() correctly in zap_pte_table_if_empty(), we don't handle it in zap_empty_pte_table(), making the spin_trylock() always fail and forcing us onto the slow path. So let's handle the scenario where pte_lockptr() =3D=3D pmd_lockptr() better, which can only happen if CONFIG_SPLIT_PTE_PTLOCKS is not set. This is only relevant once we unlock CONFIG_PT_RECLAIM on architectures that are not x86-64. Signed-off-by: David Hildenbrand (Red Hat) Reviewed-by: Qi Zheng --- mm/memory.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index c3055b2577c27..3852075ea62d4 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1833,16 +1833,18 @@ static bool pte_table_reclaim_possible(unsigned lon= g start, unsigned long end, return details && details->reclaim_pt && (end - start >=3D PMD_SIZE); } =20 -static bool zap_empty_pte_table(struct mm_struct *mm, pmd_t *pmd, pmd_t *p= mdval) +static bool zap_empty_pte_table(struct mm_struct *mm, pmd_t *pmd, + spinlock_t *ptl, pmd_t *pmdval) { spinlock_t *pml =3D pmd_lockptr(mm, pmd); =20 - if (!spin_trylock(pml)) + if (ptl !=3D pml && !spin_trylock(pml)) return false; =20 *pmdval =3D pmdp_get(pmd); pmd_clear(pmd); - spin_unlock(pml); + if (ptl !=3D pml) + spin_unlock(pml); return true; } =20 @@ -1934,7 +1936,7 @@ static unsigned long zap_pte_range(struct mmu_gather = *tlb, * from being repopulated by another thread. */ if (can_reclaim_pt && direct_reclaim && addr =3D=3D end) - direct_reclaim =3D zap_empty_pte_table(mm, pmd, &pmdval); + direct_reclaim =3D zap_empty_pte_table(mm, pmd, ptl, &pmdval); =20 add_mm_rss_vec(mm, rss); lazy_mmu_mode_disable(); --=20 2.52.0