On Tue, Nov 15, 2022 at 11:48 PM Alexander Gordeev <agordeev@xxxxxxxxxxxxx> wrote: > > Which actually brings a question whether CONFIG_MMU_GATHER_NO_GATHER > mode could be beneficial for UP? No, the NO_GATHER case wouldn't work for UP in general, because once we drop the page table lock, even on UP we end up possibly re-scheduling due to preemption (and even without actual kernel preemption, we have that explicit "cond_resched()" there). And if we schedule to another thread that shares the same VM, that other thread will continue to use the existing TLB entries. And if those TLB entries then point to pages that were already free'd... So the NO_GATHER case requires that you flush the TLB early even on UP, although the requirements are a _bit_ less strict than on SMP. And TLB flushes are not necessarily cheap, even on UP. Now, we could possibly optimize this to the point where it *would* be quite possible - instead of actually flushing the TLB, just set the bit to "flush on next thread switch". So I think the UP case *could* be made to be non-gathering. But I don't think anybody cares about - or tests - UP enough for it to make sense to worry about it. Linus