On Tue, Sep 11, 2018 at 09:36:51AM -0700, Andy Lutomirski wrote: > > save_pgd = efi_call_phys_prolog(); > > local_irq_save(flags); > > status = efi_call_phys(...); > > local_irq_restore(flags); > > > > efi_call_phys_epilog(save_pgd); > > > > So, yes, interrupts are very much enabled. > > Does fixing that solve the problem? It seems more robust. The problem is still that in efi_call_phys_prolog() we load the gdt with its physical address, and when we reload the %cr3 in _epilog from initial_page_table to swapper_pg_dir again the gdt is no longer mapped. Blocking interrupts is more robust, but we can't block NMIs that way that would also trigger the issue, no? So I am in favor of changing the order in efi_call_phys_epilog() too. Regards, Joerg