On Thu, May 25, 2017 at 6:39 PM, Rik van Riel <riel@xxxxxxxxxx> wrote: > On Thu, 2017-05-25 at 17:47 -0700, Andy Lutomirski wrote: >> >> +++ b/arch/x86/mm/tlb.c >> @@ -311,7 +311,7 @@ void flush_tlb_mm_range(struct mm_struct *mm, >> unsigned long start, >> goto out; >> } >> >> - if (!current->mm) { >> + if (this_cpu_read(cpu_tlbstate.state) != TLBSTATE_OK) { >> leave_mm(smp_processor_id()); > > Unless -mm changed leave_mm (I did not check), this > is not quite correct yet. > > The reason is leave_mm (at least in the latest Linus > tree) ignores the cpu argument for one of its checks. > > You should probably fix that in an earlier patch, > assuming you haven't already done so in -mm. > > void leave_mm(int cpu) > { > struct mm_struct *active_mm = > this_cpu_read(cpu_tlbstate.active_mm); > if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) > BUG(); > if (cpumask_test_cpu(cpu, mm_cpumask(active_mm))) { > cpumask_clear_cpu(cpu, mm_cpumask(active_mm)); > load_cr3(swapper_pg_dir); I agree it's odd, but what's the bug? Both before and after, leave_mm needed to be called with cpu == smp_processor_id(), and smp_processor_id() warns if it's called in a preemptible context. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>