From nobody Sun Apr 5 21:17:39 2026 Received: from out199-18.us.a.mail.aliyun.com (out199-18.us.a.mail.aliyun.com [47.90.199.18]) (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 840C212B143 for ; Tue, 24 Feb 2026 02:01:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=47.90.199.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771898518; cv=none; b=IhSICnJ3YALOKPdF3+eRbC+YA6Vfnx4Ney/zZlIFdtqfPZAqXWAx7J3h+lF7fOIH7PkuXXynb/1L+GfyhhRYfOJnD5EtottlhOJv3bWHM+whMe/OCzrY4Uj+Wsq/1m8Hq17KRZS2qGQhPigt/9u4fR5J8u1tbRDQxoofTiVznRo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771898518; c=relaxed/simple; bh=fStZ+b3y84f86SU1JniOu0fCgNBjcVHf4FwnXgG/qZs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NDzW2f82fr17bQbFdHaEPcfx8J2vjxQ48ykfK9l5jF6DaI5jVCezGfOY8WFkIfhSV1hu5FbCLjDUqiFf8T8DdZT6nV8yIVh10sPJwtJB7eAQFb2btWIP9r1CXeD60t0QQzq1JT26I+/rjyw3yf3Ppeh5Q8VbDcqSrnfqUzBE/bg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=K84o+PnV; arc=none smtp.client-ip=47.90.199.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="K84o+PnV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1771898505; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=5/IX7vo5n7nkNpK4VJsc92/3nwHLcPZ/ZOCy2a+g4eA=; b=K84o+PnVlDDYH00FGtuB/+fDIqMWCx4us09+g9gTJ/PrEs58DbRcnImQtgSty+li1ZNORiAv2PbcQbPGtFu9Y+nyLyAOSgM6UqAz2Qkpdvc02FTbGxppx/bYvkhov8giQuZUMhEcsekBeLMwhFcivn2uat+accg8ynudbY3HEvw= Received: from localhost(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0Wzhrds-_1771898183 cluster:ay36) by smtp.aliyun-inc.com; Tue, 24 Feb 2026 09:56:23 +0800 From: Baolin Wang To: akpm@linux-foundation.org, david@kernel.org Cc: catalin.marinas@arm.com, will@kernel.org, lorenzo.stoakes@oracle.com, ryan.roberts@arm.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, riel@surriel.com, harry.yoo@oracle.com, jannh@google.com, willy@infradead.org, baohua@kernel.org, dev.jain@arm.com, axelrasmussen@google.com, yuanchu@google.com, weixugc@google.com, hannes@cmpxchg.org, zhengqi.arch@bytedance.com, shakeel.butt@linux.dev, baolin.wang@linux.alibaba.com, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/5] mm: use inline helper functions instead of ugly macros Date: Tue, 24 Feb 2026 09:56:04 +0800 Message-ID: X-Mailer: git-send-email 2.47.3 In-Reply-To: References: 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" People have already complained that these *_clear_young_notify() related macros are very ugly, so let's use inline helpers to make them more readabl= e. In addition, I cannot implement these inline helper functions in the mmu_notifier.h file, because some arch-specific files will include the mmu_notifier.h, which introduces header compilation dependencies and causes build errors (e.g., arch/arm64/include/asm/tlbflush.h). Moreover, since these functions are only used in the mm, implementing these inline helpers in the mm/internal.h header seems reasonable. Signed-off-by: Baolin Wang Acked-by: David Hildenbrand (Arm) Reviewed-by: Barry Song Reviewed-by: Rik van Riel --- include/linux/mmu_notifier.h | 54 ------------------------------------ mm/internal.h | 53 +++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 54 deletions(-) diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h index 07a2bbaf86e9..93894b90c8c1 100644 --- a/include/linux/mmu_notifier.h +++ b/include/linux/mmu_notifier.h @@ -515,55 +515,6 @@ static inline void mmu_notifier_range_init_owner( range->owner =3D owner; } =20 -#define clear_flush_young_ptes_notify(__vma, __address, __ptep, __nr) \ -({ \ - int __young; \ - struct vm_area_struct *___vma =3D __vma; \ - unsigned long ___address =3D __address; \ - unsigned int ___nr =3D __nr; \ - __young =3D clear_flush_young_ptes(___vma, ___address, __ptep, ___nr); \ - __young |=3D mmu_notifier_clear_flush_young(___vma->vm_mm, \ - ___address, \ - ___address + \ - ___nr * PAGE_SIZE); \ - __young; \ -}) - -#define pmdp_clear_flush_young_notify(__vma, __address, __pmdp) \ -({ \ - int __young; \ - struct vm_area_struct *___vma =3D __vma; \ - unsigned long ___address =3D __address; \ - __young =3D pmdp_clear_flush_young(___vma, ___address, __pmdp); \ - __young |=3D mmu_notifier_clear_flush_young(___vma->vm_mm, \ - ___address, \ - ___address + \ - PMD_SIZE); \ - __young; \ -}) - -#define ptep_clear_young_notify(__vma, __address, __ptep) \ -({ \ - int __young; \ - struct vm_area_struct *___vma =3D __vma; \ - unsigned long ___address =3D __address; \ - __young =3D ptep_test_and_clear_young(___vma, ___address, __ptep);\ - __young |=3D mmu_notifier_clear_young(___vma->vm_mm, ___address, \ - ___address + PAGE_SIZE); \ - __young; \ -}) - -#define pmdp_clear_young_notify(__vma, __address, __pmdp) \ -({ \ - int __young; \ - struct vm_area_struct *___vma =3D __vma; \ - unsigned long ___address =3D __address; \ - __young =3D pmdp_test_and_clear_young(___vma, ___address, __pmdp);\ - __young |=3D mmu_notifier_clear_young(___vma->vm_mm, ___address, \ - ___address + PMD_SIZE); \ - __young; \ -}) - #else /* CONFIG_MMU_NOTIFIER */ =20 struct mmu_notifier_range { @@ -651,11 +602,6 @@ static inline void mmu_notifier_subscriptions_destroy(= struct mm_struct *mm) =20 #define mmu_notifier_range_update_to_read_only(r) false =20 -#define clear_flush_young_ptes_notify clear_flush_young_ptes -#define pmdp_clear_flush_young_notify pmdp_clear_flush_young -#define ptep_clear_young_notify ptep_test_and_clear_young -#define pmdp_clear_young_notify pmdp_test_and_clear_young - static inline void mmu_notifier_synchronize(void) { } diff --git a/mm/internal.h b/mm/internal.h index e0ef192b0be3..1ba175b8d4f1 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -1789,4 +1790,56 @@ static inline int io_remap_pfn_range_complete(struct= vm_area_struct *vma, return remap_pfn_range_complete(vma, addr, pfn, size, prot); } =20 +#ifdef CONFIG_MMU_NOTIFIER +static inline int clear_flush_young_ptes_notify(struct vm_area_struct *vma, + unsigned long addr, pte_t *ptep, + unsigned int nr) +{ + int young; + + young =3D clear_flush_young_ptes(vma, addr, ptep, nr); + young |=3D mmu_notifier_clear_flush_young(vma->vm_mm, addr, + addr + nr * PAGE_SIZE); + return young; +} + +static inline int pmdp_clear_flush_young_notify(struct vm_area_struct *vma, + unsigned long addr, pmd_t *pmdp) +{ + int young; + + young =3D pmdp_clear_flush_young(vma, addr, pmdp); + young |=3D mmu_notifier_clear_flush_young(vma->vm_mm, addr, addr + PMD_SI= ZE); + return young; +} + +static inline int ptep_clear_young_notify(struct vm_area_struct *vma, + unsigned long addr, pte_t *ptep) +{ + int young; + + young =3D ptep_test_and_clear_young(vma, addr, ptep); + young |=3D mmu_notifier_clear_young(vma->vm_mm, addr, addr + PAGE_SIZE); + return young; +} + +static inline int pmdp_clear_young_notify(struct vm_area_struct *vma, + unsigned long addr, pmd_t *pmdp) +{ + int young; + + young =3D pmdp_test_and_clear_young(vma, addr, pmdp); + young |=3D mmu_notifier_clear_young(vma->vm_mm, addr, addr + PMD_SIZE); + return young; +} + +#else /* CONFIG_MMU_NOTIFIER */ + +#define clear_flush_young_ptes_notify clear_flush_young_ptes +#define pmdp_clear_flush_young_notify pmdp_clear_flush_young +#define ptep_clear_young_notify ptep_test_and_clear_young +#define pmdp_clear_young_notify pmdp_test_and_clear_young + +#endif /* CONFIG_MMU_NOTIFIER */ + #endif /* __MM_INTERNAL_H */ --=20 2.47.3