Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 061f49ec authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull x86 fixes from Peter Anvin:
 "Sorry, meant to push out this batch earlier this weekend"

* 'x86/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86, fpu, amd: Clear exceptions in AMD FXSAVE workaround
  ftrace/x86: Load ftrace_ops in parameter not the variable holding it
parents 7e22e911 26bef131
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -293,12 +293,13 @@ static inline int restore_fpu_checking(struct task_struct *tsk)
	/* AMD K7/K8 CPUs don't save/restore FDP/FIP/FOP unless an exception
	   is pending.  Clear the x87 state here by setting it to fixed
	   values. "m" is a random variable that should be in L1 */
	alternative_input(
		ASM_NOP8 ASM_NOP2,
		"emms\n\t"		/* clear stack tags */
		"fildl %P[addr]",	/* set F?P to defined value */
		X86_FEATURE_FXSAVE_LEAK,
		[addr] "m" (tsk->thread.fpu.has_fpu));
	if (unlikely(static_cpu_has(X86_FEATURE_FXSAVE_LEAK))) {
		asm volatile(
			"fnclex\n\t"
			"emms\n\t"
			"fildl %P[addr]"	/* set F?P to defined value */
			: : [addr] "m" (tsk->thread.fpu.has_fpu));
	}

	return fpu_restore_checking(&tsk->thread.fpu);
}
+2 −2
Original line number Diff line number Diff line
@@ -1082,7 +1082,7 @@ ENTRY(ftrace_caller)
	pushl $0	/* Pass NULL as regs pointer */
	movl 4*4(%esp), %eax
	movl 0x4(%ebp), %edx
	leal function_trace_op, %ecx
	movl function_trace_op, %ecx
	subl $MCOUNT_INSN_SIZE, %eax

.globl ftrace_call
@@ -1140,7 +1140,7 @@ ENTRY(ftrace_regs_caller)
	movl 12*4(%esp), %eax	/* Load ip (1st parameter) */
	subl $MCOUNT_INSN_SIZE, %eax	/* Adjust ip */
	movl 0x4(%ebp), %edx	/* Load parent ip (2nd parameter) */
	leal function_trace_op, %ecx /* Save ftrace_pos in 3rd parameter */
	movl function_trace_op, %ecx /* Save ftrace_pos in 3rd parameter */
	pushl %esp		/* Save pt_regs as 4th parameter */

GLOBAL(ftrace_regs_call)
+1 −1
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ END(function_hook)
	MCOUNT_SAVE_FRAME \skip

	/* Load the ftrace_ops into the 3rd parameter */
	leaq function_trace_op, %rdx
	movq function_trace_op(%rip), %rdx

	/* Load ip into the first parameter */
	movq RIP(%rsp), %rdi