x86/efi: Re-disable interrupts after calling firmware services
authorMatt Fleming <matt.fleming@intel.com>
Mon, 24 Feb 2014 18:07:26 +0000 (18:07 +0000)
committerMatt Fleming <matt.fleming@intel.com>
Tue, 4 Mar 2014 21:44:00 +0000 (21:44 +0000)
commit18c46461d9e42d398536055f31f58cdcd2c6347e
treeb719e1cb7c2e3637104ef753be46916603359078
parent108d3f44b16be2ecf0e44c2f2863752918eb7bce
x86/efi: Re-disable interrupts after calling firmware services

Some firmware appears to enable interrupts during boot service calls,
even if we've explicitly disabled them prior to the call. This is
actually allowed per the UEFI spec because boottime services expect to
be called with interrupts enabled.

So that's fine, we just need to ensure that we disable them again in
efi_enter32() before switching to a 64-bit GDT, otherwise an interrupt
may fire causing a 32-bit IRQ handler to run after we've left
compatibility mode.

Despite efi_enter32() being called both for boottime and runtime
services, this really only affects boottime because the runtime services
callchain is executed with interrupts disabled. See efi_thunk().

Signed-off-by: Matt Fleming <matt.fleming@intel.com>
arch/x86/platform/efi/efi_stub_64.S