From nobody Tue Apr 7 20:07:30 2026 Received: from out30-124.freemail.mail.aliyun.com (out30-124.freemail.mail.aliyun.com [115.124.30.124]) (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 7C42539A803 for ; Fri, 27 Feb 2026 09:45:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772185502; cv=none; b=Ur/EfkJUoNPOKJPmb8MIHcM2Wy2XliVnFAofexUHOh/gmgK659DeFqd+x4h/2C/m4qR+So32OqJu99bnXuUzAQoFJ0ussajO3RbYsBbZFm0YuJlHnroMgWuaWc3X6WRZQQooie6OmoqN/FsCLzM+nrdR9kuiRtvqFQnZTKeMP4w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772185502; c=relaxed/simple; bh=t4x6GDmpzLr4rlZ/nE7xyLxijf20R7tQkFBqzX5v+0o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QGNgjrzz365jT+n3ywUfFByumSIQpl2OiCBFCek0broWoNkcYgd6KTY+2fC/vED2cCb4vHU8cdH+hDFxQQ4YdQ8FKOuODO1/6cUUB+Rq8+2egxXnciSX1NqbK+I0zSO0FSHEq3t2AuL/O+BhTH2oVT+QUmIyq44ZhC8jSw8jw00= 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=UrKHb74w; arc=none smtp.client-ip=115.124.30.124 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="UrKHb74w" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1772185493; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=QGeaEqvp4zEvzyk67BVba1jL/iSgAiyyvsTj8YvMr1U=; b=UrKHb74wLbO48li+JV0SeWIFhs4iRNVSvxESvKfGZRRx3VgQOXcrXHyIz9rUGZtvx3XkklHW2/laLQfzcMm4D1H+ubqDCx740ao4xieWdLMNGmguTPJ9Fj1lH1wlZ56Z2FyxiQ9+t2dS7wVQNaXRMT6aMOXxBaMQh7K6vkYhVXk= Received: from localhost(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0Wztvd.X_1772185491 cluster:ay36) by smtp.aliyun-inc.com; Fri, 27 Feb 2026 17:44:51 +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 v2 1/6] mm: use inline helper functions instead of ugly macros Date: Fri, 27 Feb 2026 17:44:35 +0800 Message-ID: <4ffb2946062b9452be53d6b2fa3e359ba6446a93.1772185080.git.baolin.wang@linux.alibaba.com> 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, we 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. Reviewed-by: Rik van Riel Reviewed-by: Barry Song Acked-by: David Hildenbrand (Arm) Signed-off-by: Baolin Wang --- include/linux/mmu_notifier.h | 54 ------------------------------------ mm/internal.h | 52 ++++++++++++++++++++++++++++++++++ 2 files changed, 52 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 f4d95e2ab799..f27cdad98c1e 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -1791,4 +1792,55 @@ 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