Messages in this thread | | | Date | Mon, 17 Dec 2012 16:00:53 +0000 | From | "Jan Beulich" <> | Subject | Re: [GIT PULL] x86/uapi for 3.8 |
| |
>>> On 17.12.12 at 16:44, Linus Torvalds <torvalds@linux-foundation.org> wrote: > On Mon, Dec 17, 2012 at 1:04 AM, Jan Beulich <JBeulich@suse.com> wrote: >> >> How about this being caused by using the same lower level >> page table entries that swapper_pg_dir uses, namely including >> the _PAGE_GLOBAL bits? efi_call_virt_{pre,epi}log() only write >> CR3 (see 185034e72d591f9465e5e18f937ed642e7ea0070), but >> would need to also flip CR4.PGE afaict. > > Now *this* is the kind of issue that I could easily see causing major > corruption, but be subtle enough to not happen reliably. Coming back > from the EFI calls (or going into them) with stale TLB contents due to > global pages could explain things. > > Good thinking. That efi call code should use flush_tlb_kernel() (or > __flush_tlb_global() if it wants to avoid any paravirtualization > stuff) if it has global pages in different places from the normal > kernel map. Does it really have that?
I don't see it having such. But I also don't think flush_tlb_kernel() is the right mechanism here. I'd rather suggest clearing CR4.PGE in the "prelog", an restore it in the epilog. Para-virtual environments shouldn't be directly interfacing with EFI runtime code anyway.
Jan
| |