diff options
Diffstat (limited to 'arch/x86/include/asm/apm.h')
| -rw-r--r-- | arch/x86/include/asm/apm.h | 6 | 
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/x86/include/asm/apm.h b/arch/x86/include/asm/apm.h index 4d4015ddcf26..c356098b6fb9 100644 --- a/arch/x86/include/asm/apm.h +++ b/arch/x86/include/asm/apm.h @@ -7,6 +7,8 @@  #ifndef _ASM_X86_MACH_DEFAULT_APM_H  #define _ASM_X86_MACH_DEFAULT_APM_H +#include <asm/nospec-branch.h> +  #ifdef APM_ZERO_SEGS  #	define APM_DO_ZERO_SEGS \  		"pushl %%ds\n\t" \ @@ -32,6 +34,7 @@ static inline void apm_bios_call_asm(u32 func, u32 ebx_in, u32 ecx_in,  	 * N.B. We do NOT need a cld after the BIOS call  	 * because we always save and restore the flags.  	 */ +	firmware_restrict_branch_speculation_start();  	__asm__ __volatile__(APM_DO_ZERO_SEGS  		"pushl %%edi\n\t"  		"pushl %%ebp\n\t" @@ -44,6 +47,7 @@ static inline void apm_bios_call_asm(u32 func, u32 ebx_in, u32 ecx_in,  		  "=S" (*esi)  		: "a" (func), "b" (ebx_in), "c" (ecx_in)  		: "memory", "cc"); +	firmware_restrict_branch_speculation_end();  }  static inline bool apm_bios_call_simple_asm(u32 func, u32 ebx_in, @@ -56,6 +60,7 @@ static inline bool apm_bios_call_simple_asm(u32 func, u32 ebx_in,  	 * N.B. We do NOT need a cld after the BIOS call  	 * because we always save and restore the flags.  	 */ +	firmware_restrict_branch_speculation_start();  	__asm__ __volatile__(APM_DO_ZERO_SEGS  		"pushl %%edi\n\t"  		"pushl %%ebp\n\t" @@ -68,6 +73,7 @@ static inline bool apm_bios_call_simple_asm(u32 func, u32 ebx_in,  		  "=S" (si)  		: "a" (func), "b" (ebx_in), "c" (ecx_in)  		: "memory", "cc"); +	firmware_restrict_branch_speculation_end();  	return error;  }  |