Commit 95217783 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fixes from Ingo Molnar:
 "A KVM guest fix, and a kdump kernel relocation errors fix"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/timer: Force PIT initialization when !X86_FEATURE_ARAT
  x86/purgatory: Change compiler flags from -mcmodel=kernel to -mcmodel=large to fix kexec relocation errors
parents ad32b480 afa8b475
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -834,6 +834,10 @@ bool __init apic_needs_pit(void)
	if (!boot_cpu_has(X86_FEATURE_APIC))
	if (!boot_cpu_has(X86_FEATURE_APIC))
		return true;
		return true;


	/* Virt guests may lack ARAT, but still have DEADLINE */
	if (!boot_cpu_has(X86_FEATURE_ARAT))
		return true;

	/* Deadline timer is based on TSC so no further PIT action required */
	/* Deadline timer is based on TSC so no further PIT action required */
	if (boot_cpu_has(X86_FEATURE_TSC_DEADLINE_TIMER))
	if (boot_cpu_has(X86_FEATURE_TSC_DEADLINE_TIMER))
		return false;
		return false;
+19 −16
Original line number Original line Diff line number Diff line
@@ -18,37 +18,40 @@ targets += purgatory.ro
KASAN_SANITIZE	:= n
KASAN_SANITIZE	:= n
KCOV_INSTRUMENT := n
KCOV_INSTRUMENT := n


# These are adjustments to the compiler flags used for objects that
# make up the standalone purgatory.ro

PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss

# Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
# Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
# in turn leaves some undefined symbols like __fentry__ in purgatory and not
# in turn leaves some undefined symbols like __fentry__ in purgatory and not
# sure how to relocate those.
# sure how to relocate those.
ifdef CONFIG_FUNCTION_TRACER
ifdef CONFIG_FUNCTION_TRACER
CFLAGS_REMOVE_sha256.o		+= $(CC_FLAGS_FTRACE)
PURGATORY_CFLAGS_REMOVE		+= $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_purgatory.o	+= $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_string.o		+= $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_kexec-purgatory.o	+= $(CC_FLAGS_FTRACE)
endif
endif


ifdef CONFIG_STACKPROTECTOR
ifdef CONFIG_STACKPROTECTOR
CFLAGS_REMOVE_sha256.o		+= -fstack-protector
PURGATORY_CFLAGS_REMOVE		+= -fstack-protector
CFLAGS_REMOVE_purgatory.o	+= -fstack-protector
CFLAGS_REMOVE_string.o		+= -fstack-protector
CFLAGS_REMOVE_kexec-purgatory.o	+= -fstack-protector
endif
endif


ifdef CONFIG_STACKPROTECTOR_STRONG
ifdef CONFIG_STACKPROTECTOR_STRONG
CFLAGS_REMOVE_sha256.o		+= -fstack-protector-strong
PURGATORY_CFLAGS_REMOVE		+= -fstack-protector-strong
CFLAGS_REMOVE_purgatory.o	+= -fstack-protector-strong
CFLAGS_REMOVE_string.o		+= -fstack-protector-strong
CFLAGS_REMOVE_kexec-purgatory.o	+= -fstack-protector-strong
endif
endif


ifdef CONFIG_RETPOLINE
ifdef CONFIG_RETPOLINE
CFLAGS_REMOVE_sha256.o		+= $(RETPOLINE_CFLAGS)
PURGATORY_CFLAGS_REMOVE		+= $(RETPOLINE_CFLAGS)
CFLAGS_REMOVE_purgatory.o	+= $(RETPOLINE_CFLAGS)
CFLAGS_REMOVE_string.o		+= $(RETPOLINE_CFLAGS)
CFLAGS_REMOVE_kexec-purgatory.o	+= $(RETPOLINE_CFLAGS)
endif
endif


CFLAGS_REMOVE_purgatory.o	+= $(PURGATORY_CFLAGS_REMOVE)
CFLAGS_purgatory.o		+= $(PURGATORY_CFLAGS)

CFLAGS_REMOVE_sha256.o		+= $(PURGATORY_CFLAGS_REMOVE)
CFLAGS_sha256.o			+= $(PURGATORY_CFLAGS)

CFLAGS_REMOVE_string.o		+= $(PURGATORY_CFLAGS_REMOVE)
CFLAGS_string.o			+= $(PURGATORY_CFLAGS)

$(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE
$(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE
		$(call if_changed,ld)
		$(call if_changed,ld)