On Mon, Feb 02, 2026 at 08:14:32PM +0800, Lance Yang wrote: > > > + /* Pairs with smp_mb() in pt_walk_lockless_start(). */ > > > > Pairs how? The start thing does something like: > > > > [W] active_lockless_pt_walk_mm = mm > > MB > > [L] page-tables > > > > So this is: > > > > [L] page-tables > > RMB > > [L] active_lockless_pt_walk_mm > > > > ? > > On the walker side (pt_walk_lockless_start): > > [W] active_lockless_pt_walk_mm = mm > MB > [L] page-tables (walker reads page tables) > > So the walker publishes "I'm walking this mm" before reading page tables. > > On the sync side we don't read page-tables. We do: > > RMB > [L] active_lockless_pt_walk_mm (we read the per-CPU pointer below) > > We need to observe the walker's store of active_lockless_pt_walk_mm before > we decide which CPUs to IPI. > > So on the sync side we do smp_rmb(), then read active_lockless_pt_walk_mm. > > That pairs with the full barrier in pt_walk_lockless_start().
No it doesn't; this is not how memory barriers work.

