diff options
-rw-r--r-- | arch/x86/include/asm/efi.h | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h index 0b19187cc882..1eb5f6433ad8 100644 --- a/arch/x86/include/asm/efi.h +++ b/arch/x86/include/asm/efi.h | |||
@@ -34,10 +34,23 @@ extern unsigned long asmlinkage efi_call_phys(void *, ...); | |||
34 | 34 | ||
35 | /* Use this macro if your virtual returns a non-void value */ | 35 | /* Use this macro if your virtual returns a non-void value */ |
36 | #define efi_call_virt(f, args...) \ | 36 | #define efi_call_virt(f, args...) \ |
37 | ((efi_##f##_t __attribute__((regparm(0)))*)efi.systab->runtime->f)(args) | 37 | ({ \ |
38 | efi_status_t __s; \ | ||
39 | kernel_fpu_begin(); \ | ||
40 | __s = ((efi_##f##_t __attribute__((regparm(0)))*) \ | ||
41 | efi.systab->runtime->f)(args); \ | ||
42 | kernel_fpu_end(); \ | ||
43 | __s; \ | ||
44 | }) | ||
38 | 45 | ||
39 | /* Use this macro if your virtual call does not return any value */ | 46 | /* Use this macro if your virtual call does not return any value */ |
40 | #define __efi_call_virt(f, args...) efi_call_virt(f, args) | 47 | #define __efi_call_virt(f, args...) \ |
48 | ({ \ | ||
49 | kernel_fpu_begin(); \ | ||
50 | ((efi_##f##_t __attribute__((regparm(0)))*) \ | ||
51 | efi.systab->runtime->f)(args); \ | ||
52 | kernel_fpu_end(); \ | ||
53 | }) | ||
41 | 54 | ||
42 | #define efi_ioremap(addr, size, type, attr) ioremap_cache(addr, size) | 55 | #define efi_ioremap(addr, size, type, attr) ioremap_cache(addr, size) |
43 | 56 | ||