On Tue, Feb 02, 2021 at 01:35:38PM -0800, Nadav Amit wrote: > > On Feb 2, 2021, at 3:00 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > > > On Tue, Feb 02, 2021 at 01:32:36AM -0800, Nadav Amit wrote: > >>> On Feb 1, 2021, at 3:36 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > >>> > >>> > >>> https://lkml.kernel.org/r/20210127235347.1402-1-will@xxxxxxxxxx > >> > >> I have seen this series, and applied my patches on it. > >> > >> Despite Will’s patches, there were still inconsistencies between fullmm > >> and need_flush_all. > >> > >> Am I missing something? > > > > I wasn't aware you were on top. I'll look again. > > Looking on arm64’s tlb_flush() makes me think that there is currently a bug > that this patch fixes. Arm64’s tlb_flush() does: > > /* > * If we're tearing down the address space then we only care about > * invalidating the walk-cache, since the ASID allocator won't > * reallocate our ASID without invalidating the entire TLB. > */ > if (tlb->fullmm) { > if (!last_level) > flush_tlb_mm(tlb->mm); > return; > } > > But currently tlb_mmu_finish() can mistakenly set fullmm incorrectly (if > mm_tlb_flush_nested() is true), which might skip the TLB flush. But in that case isn't 'freed_tables' set to 1, so 'last_level' will be false and we'll do the flush in the code above? Will