diff options
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/cpu/common.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/fpu/signal.c | 11 | ||||
-rw-r--r-- | arch/x86/kernel/fpu/xstate.c | 1 | ||||
-rw-r--r-- | arch/x86/kernel/mcount_64.S | 6 |
4 files changed, 12 insertions, 9 deletions
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 4ddd780aeac9..c2b7522cbf35 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
@@ -273,10 +273,9 @@ __setup("nosmap", setup_disable_smap); | |||
273 | 273 | ||
274 | static __always_inline void setup_smap(struct cpuinfo_x86 *c) | 274 | static __always_inline void setup_smap(struct cpuinfo_x86 *c) |
275 | { | 275 | { |
276 | unsigned long eflags; | 276 | unsigned long eflags = native_save_fl(); |
277 | 277 | ||
278 | /* This should have been cleared long ago */ | 278 | /* This should have been cleared long ago */ |
279 | raw_local_save_flags(eflags); | ||
280 | BUG_ON(eflags & X86_EFLAGS_AC); | 279 | BUG_ON(eflags & X86_EFLAGS_AC); |
281 | 280 | ||
282 | if (cpu_has(c, X86_FEATURE_SMAP)) { | 281 | if (cpu_has(c, X86_FEATURE_SMAP)) { |
diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c index ef29b742cea7..31c6a60505e6 100644 --- a/arch/x86/kernel/fpu/signal.c +++ b/arch/x86/kernel/fpu/signal.c | |||
@@ -385,20 +385,19 @@ fpu__alloc_mathframe(unsigned long sp, int ia32_frame, | |||
385 | */ | 385 | */ |
386 | void fpu__init_prepare_fx_sw_frame(void) | 386 | void fpu__init_prepare_fx_sw_frame(void) |
387 | { | 387 | { |
388 | int fsave_header_size = sizeof(struct fregs_state); | ||
389 | int size = xstate_size + FP_XSTATE_MAGIC2_SIZE; | 388 | int size = xstate_size + FP_XSTATE_MAGIC2_SIZE; |
390 | 389 | ||
391 | if (config_enabled(CONFIG_X86_32)) | ||
392 | size += fsave_header_size; | ||
393 | |||
394 | fx_sw_reserved.magic1 = FP_XSTATE_MAGIC1; | 390 | fx_sw_reserved.magic1 = FP_XSTATE_MAGIC1; |
395 | fx_sw_reserved.extended_size = size; | 391 | fx_sw_reserved.extended_size = size; |
396 | fx_sw_reserved.xfeatures = xfeatures_mask; | 392 | fx_sw_reserved.xfeatures = xfeatures_mask; |
397 | fx_sw_reserved.xstate_size = xstate_size; | 393 | fx_sw_reserved.xstate_size = xstate_size; |
398 | 394 | ||
399 | if (config_enabled(CONFIG_IA32_EMULATION)) { | 395 | if (config_enabled(CONFIG_IA32_EMULATION) || |
396 | config_enabled(CONFIG_X86_32)) { | ||
397 | int fsave_header_size = sizeof(struct fregs_state); | ||
398 | |||
400 | fx_sw_reserved_ia32 = fx_sw_reserved; | 399 | fx_sw_reserved_ia32 = fx_sw_reserved; |
401 | fx_sw_reserved_ia32.extended_size += fsave_header_size; | 400 | fx_sw_reserved_ia32.extended_size = size + fsave_header_size; |
402 | } | 401 | } |
403 | } | 402 | } |
404 | 403 | ||
diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c index 6454f2731b56..70fc312221fc 100644 --- a/arch/x86/kernel/fpu/xstate.c +++ b/arch/x86/kernel/fpu/xstate.c | |||
@@ -694,7 +694,6 @@ void *get_xsave_addr(struct xregs_state *xsave, int xstate_feature) | |||
694 | if (!boot_cpu_has(X86_FEATURE_XSAVE)) | 694 | if (!boot_cpu_has(X86_FEATURE_XSAVE)) |
695 | return NULL; | 695 | return NULL; |
696 | 696 | ||
697 | xsave = ¤t->thread.fpu.state.xsave; | ||
698 | /* | 697 | /* |
699 | * We should not ever be requesting features that we | 698 | * We should not ever be requesting features that we |
700 | * have not enabled. Remember that pcntxt_mask is | 699 | * have not enabled. Remember that pcntxt_mask is |
diff --git a/arch/x86/kernel/mcount_64.S b/arch/x86/kernel/mcount_64.S index 94ea120fa21f..87e1762e2bca 100644 --- a/arch/x86/kernel/mcount_64.S +++ b/arch/x86/kernel/mcount_64.S | |||
@@ -278,6 +278,12 @@ trace: | |||
278 | /* save_mcount_regs fills in first two parameters */ | 278 | /* save_mcount_regs fills in first two parameters */ |
279 | save_mcount_regs | 279 | save_mcount_regs |
280 | 280 | ||
281 | /* | ||
282 | * When DYNAMIC_FTRACE is not defined, ARCH_SUPPORTS_FTRACE_OPS is not | ||
283 | * set (see include/asm/ftrace.h and include/linux/ftrace.h). Only the | ||
284 | * ip and parent ip are used and the list function is called when | ||
285 | * function tracing is enabled. | ||
286 | */ | ||
281 | call *ftrace_trace_function | 287 | call *ftrace_trace_function |
282 | 288 | ||
283 | restore_mcount_regs | 289 | restore_mcount_regs |