On Mon, Nov 16, 2015 at 07:32:36PM +0100, Ard Biesheuvel wrote: > +static inline void efi_set_pgd(struct mm_struct *mm) > +{ > + if (unlikely(mm->context.vmalloc_seq != init_mm.context.vmalloc_seq)) > + __check_vmalloc_seq(mm); > + > + cpu_switch_mm(mm->pgd, mm); > + > + flush_tlb_all(); > + if (icache_is_vivt_asid_tagged()) > + __flush_icache_all(); > +} I don't think that's sufficient. There's a gap between switching the mm and flushing the TLBs where we could have different global TLB entries from those in the page tables - and that can cause problems with CPUs which speculatively prefetch. Some CPUs raise exceptions for this... -- FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net. -- 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>