[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <D93MIOI9YLAD.1WDMNT59MMEM2@gmail.com>
Date: Fri, 11 Apr 2025 17:16:24 +1000
From: "Nicholas Piggin" <npiggin@...il.com>
To: "Alexander Gordeev" <agordeev@...ux.ibm.com>, "Andrew Morton"
<akpm@...ux-foundation.org>, "Andrey Ryabinin" <ryabinin.a.a@...il.com>
Cc: "Hugh Dickins" <hughd@...gle.com>, "Guenter Roeck" <linux@...ck-us.net>,
"Juergen Gross" <jgross@...e.com>, "Jeremy Fitzhardinge" <jeremy@...p.org>,
<linux-kernel@...r.kernel.org>, <linux-mm@...ck.org>,
<kasan-dev@...glegroups.com>, <sparclinux@...r.kernel.org>,
<xen-devel@...ts.xenproject.org>, <linuxppc-dev@...ts.ozlabs.org>,
<linux-s390@...r.kernel.org>
Subject: Re: [PATCH v1 4/4] mm: Allow detection of wrong
arch_enter_lazy_mmu_mode() context
On Tue Apr 8, 2025 at 1:11 AM AEST, Alexander Gordeev wrote:
> The lazy MMU batching may be only be entered and left under the
> protection of the page table locks for all page tables which may
> be modified. Yet, there were cases arch_enter_lazy_mmu_mode()
> was called without the locks taken, e.g. commit b9ef323ea168
> ("powerpc/64s: Disable preemption in hash lazy mmu mode").
>
> Make default arch_enter|leave|flush_lazy_mmu_mode() callbacks
> complain at least in case the preemption is enabled to detect
> wrong contexts.
>
> Most platforms do not implement the callbacks, so to aovid a
> performance impact allow the complaint when CONFIG_DEBUG_VM
> option is enabled only.
>
> Signed-off-by: Alexander Gordeev <agordeev@...ux.ibm.com>
This is a good debugging feature independent of how the fix
is done. I would just warn once, since it's not a bug for
the arch and could fire frequently if it fires at all.
Reviewed-by: Nicholas Piggin <npiggin@...il.com>
> ---
> include/linux/pgtable.h | 15 ++++++++++++---
> 1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
> index e2b705c14945..959590bb66da 100644
> --- a/include/linux/pgtable.h
> +++ b/include/linux/pgtable.h
> @@ -232,9 +232,18 @@ static inline int pmd_dirty(pmd_t pmd)
> * and the mode cannot be used in interrupt context.
> */
> #ifndef __HAVE_ARCH_ENTER_LAZY_MMU_MODE
> -#define arch_enter_lazy_mmu_mode() do {} while (0)
> -#define arch_leave_lazy_mmu_mode() do {} while (0)
> -#define arch_flush_lazy_mmu_mode() do {} while (0)
> +static inline void arch_enter_lazy_mmu_mode(void)
> +{
> + VM_WARN_ON(preemptible());
> +}
> +static inline void arch_leave_lazy_mmu_mode(void)
> +{
> + VM_WARN_ON(preemptible());
> +}
> +static inline void arch_flush_lazy_mmu_mode(void)
> +{
> + VM_WARN_ON(preemptible());
> +}
> #endif
>
> #ifndef pte_batch_hint
Powered by blists - more mailing lists