On Tue, 2019-10-08 at 15:11 +0000, Christopher Lameter wrote: > > On Wed, 2 Oct 2019, Leonardo Bras wrote: > > > + > > +inline unsigned long __begin_lockless_pgtbl_walk(struct mm_struct *mm, > > + bool disable_irq) > > +{ > > + unsigned long irq_mask = 0; > > + > > + if (IS_ENABLED(CONFIG_LOCKLESS_PAGE_TABLE_WALK_TRACKING)) > > + atomic_inc(&mm->lockless_pgtbl_walkers); > > + > > You are creating contention on a single exclusive cacheline. Doesnt this > defeat the whole purpose of the lockless page table walk? Use mmap_sem or > so should cause the same performance regression? Sorry, I did not understand that question. I mean, this is just a refcount and never causes a lock. FYI: This function was updated as following, and will be in v6: #ifdef CONFIG_LOCKLESS_PAGE_TABLE_WALK_TRACKING atomic_inc(&mm->lockless_pgtbl_walkers); #endif smp_mb(); IS_ENABLED doesnt work fine if CONFIG_LOCKLESS_PAGE_TABLE_WALK_TRACKING is not defined, causing an error: the mm member lockless_pgtbl_walkers doesn't exist.