Commit 6ca2a88a authored by Linus Torvalds's avatar Linus Torvalds

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

Pull x86 fixes from Ingo Molnar:
 "Various fixes:

   - reboot regression fix
   - build message spam fix
   - GPU quirk fix
   - 'make kvmconfig' fix

  plus the wire-up of the renameat2() system call on i386"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86: Remove the PCI reboot method from the default chain
  x86/build: Supress "Nothing to be done for ..." messages
  x86/gpu: Fix sign extension issue in Intel graphics stolen memory quirks
  x86/platform: Fix "make O=dir kvmconfig"
  i386: Wire up the renameat2() syscall
parents 2a83dc7e 5be44a6f
...@@ -250,8 +250,8 @@ archclean: ...@@ -250,8 +250,8 @@ archclean:
PHONY += kvmconfig PHONY += kvmconfig
kvmconfig: kvmconfig:
$(if $(wildcard $(objtree)/.config),, $(error You need an existing .config for this target)) $(if $(wildcard $(objtree)/.config),, $(error You need an existing .config for this target))
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m -O $(objtree) $(objtree)/.config arch/x86/configs/kvm_guest.config $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m -O $(objtree) $(objtree)/.config $(srctree)/arch/x86/configs/kvm_guest.config
$(Q)yes "" | $(MAKE) oldconfig $(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig
define archhelp define archhelp
echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)' echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
......
...@@ -240,7 +240,7 @@ static u32 __init intel_stolen_base(int num, int slot, int func, size_t stolen_s ...@@ -240,7 +240,7 @@ static u32 __init intel_stolen_base(int num, int slot, int func, size_t stolen_s
return base; return base;
} }
#define KB(x) ((x) * 1024) #define KB(x) ((x) * 1024UL)
#define MB(x) (KB (KB (x))) #define MB(x) (KB (KB (x)))
#define GB(x) (MB (KB (x))) #define GB(x) (MB (KB (x)))
......
...@@ -114,8 +114,8 @@ EXPORT_SYMBOL(machine_real_restart); ...@@ -114,8 +114,8 @@ EXPORT_SYMBOL(machine_real_restart);
*/ */
static int __init set_pci_reboot(const struct dmi_system_id *d) static int __init set_pci_reboot(const struct dmi_system_id *d)
{ {
if (reboot_type != BOOT_CF9) { if (reboot_type != BOOT_CF9_FORCE) {
reboot_type = BOOT_CF9; reboot_type = BOOT_CF9_FORCE;
pr_info("%s series board detected. Selecting %s-method for reboots.\n", pr_info("%s series board detected. Selecting %s-method for reboots.\n",
d->ident, "PCI"); d->ident, "PCI");
} }
...@@ -458,20 +458,23 @@ void __attribute__((weak)) mach_reboot_fixups(void) ...@@ -458,20 +458,23 @@ void __attribute__((weak)) mach_reboot_fixups(void)
} }
/* /*
* Windows compatible x86 hardware expects the following on reboot: * To the best of our knowledge Windows compatible x86 hardware expects
* the following on reboot:
* *
* 1) If the FADT has the ACPI reboot register flag set, try it * 1) If the FADT has the ACPI reboot register flag set, try it
* 2) If still alive, write to the keyboard controller * 2) If still alive, write to the keyboard controller
* 3) If still alive, write to the ACPI reboot register again * 3) If still alive, write to the ACPI reboot register again
* 4) If still alive, write to the keyboard controller again * 4) If still alive, write to the keyboard controller again
* 5) If still alive, call the EFI runtime service to reboot * 5) If still alive, call the EFI runtime service to reboot
* 6) If still alive, write to the PCI IO port 0xCF9 to reboot * 6) If no EFI runtime service, call the BIOS to do a reboot
* 7) If still alive, inform BIOS to do a proper reboot
* *
* If the machine is still alive at this stage, it gives up. We default to * We default to following the same pattern. We also have
* following the same pattern, except that if we're still alive after (7) we'll * two other reboot methods: 'triple fault' and 'PCI', which
* try to force a triple fault and then cycle between hitting the keyboard * can be triggered via the reboot= kernel boot option or
* controller and doing that * via quirks.
*
* This means that this function can never return, it can misbehave
* by not rebooting properly and hanging.
*/ */
static void native_machine_emergency_restart(void) static void native_machine_emergency_restart(void)
{ {
...@@ -492,6 +495,11 @@ static void native_machine_emergency_restart(void) ...@@ -492,6 +495,11 @@ static void native_machine_emergency_restart(void)
for (;;) { for (;;) {
/* Could also try the reset bit in the Hammer NB */ /* Could also try the reset bit in the Hammer NB */
switch (reboot_type) { switch (reboot_type) {
case BOOT_ACPI:
acpi_reboot();
reboot_type = BOOT_KBD;
break;
case BOOT_KBD: case BOOT_KBD:
mach_reboot_fixups(); /* For board specific fixups */ mach_reboot_fixups(); /* For board specific fixups */
...@@ -509,43 +517,29 @@ static void native_machine_emergency_restart(void) ...@@ -509,43 +517,29 @@ static void native_machine_emergency_restart(void)
} }
break; break;
case BOOT_TRIPLE:
load_idt(&no_idt);
__asm__ __volatile__("int3");
/* We're probably dead after this, but... */
reboot_type = BOOT_KBD;
break;
case BOOT_BIOS:
machine_real_restart(MRR_BIOS);
/* We're probably dead after this, but... */
reboot_type = BOOT_TRIPLE;
break;
case BOOT_ACPI:
acpi_reboot();
reboot_type = BOOT_KBD;
break;
case BOOT_EFI: case BOOT_EFI:
if (efi_enabled(EFI_RUNTIME_SERVICES)) if (efi_enabled(EFI_RUNTIME_SERVICES))
efi.reset_system(reboot_mode == REBOOT_WARM ? efi.reset_system(reboot_mode == REBOOT_WARM ?
EFI_RESET_WARM : EFI_RESET_WARM :
EFI_RESET_COLD, EFI_RESET_COLD,
EFI_SUCCESS, 0, NULL); EFI_SUCCESS, 0, NULL);
reboot_type = BOOT_CF9_COND; reboot_type = BOOT_BIOS;
break;
case BOOT_BIOS:
machine_real_restart(MRR_BIOS);
/* We're probably dead after this, but... */
reboot_type = BOOT_CF9_SAFE;
break; break;
case BOOT_CF9: case BOOT_CF9_FORCE:
port_cf9_safe = true; port_cf9_safe = true;
/* Fall through */ /* Fall through */
case BOOT_CF9_COND: case BOOT_CF9_SAFE:
if (port_cf9_safe) { if (port_cf9_safe) {
u8 reboot_code = reboot_mode == REBOOT_WARM ? u8 reboot_code = reboot_mode == REBOOT_WARM ? 0x06 : 0x0E;
0x06 : 0x0E;
u8 cf9 = inb(0xcf9) & ~reboot_code; u8 cf9 = inb(0xcf9) & ~reboot_code;
outb(cf9|2, 0xcf9); /* Request hard reset */ outb(cf9|2, 0xcf9); /* Request hard reset */
udelay(50); udelay(50);
...@@ -553,7 +547,15 @@ static void native_machine_emergency_restart(void) ...@@ -553,7 +547,15 @@ static void native_machine_emergency_restart(void)
outb(cf9|reboot_code, 0xcf9); outb(cf9|reboot_code, 0xcf9);
udelay(50); udelay(50);
} }
reboot_type = BOOT_BIOS; reboot_type = BOOT_TRIPLE;
break;
case BOOT_TRIPLE:
load_idt(&no_idt);
__asm__ __volatile__("int3");
/* We're probably dead after this, but... */
reboot_type = BOOT_KBD;
break; break;
} }
} }
......
...@@ -54,5 +54,7 @@ syshdr-$(CONFIG_X86_64) += syscalls_64.h ...@@ -54,5 +54,7 @@ syshdr-$(CONFIG_X86_64) += syscalls_64.h
targets += $(uapisyshdr-y) $(syshdr-y) targets += $(uapisyshdr-y) $(syshdr-y)
PHONY += all
all: $(addprefix $(uapi)/,$(uapisyshdr-y)) all: $(addprefix $(uapi)/,$(uapisyshdr-y))
all: $(addprefix $(out)/,$(syshdr-y)) all: $(addprefix $(out)/,$(syshdr-y))
@:
...@@ -359,3 +359,4 @@ ...@@ -359,3 +359,4 @@
350 i386 finit_module sys_finit_module 350 i386 finit_module sys_finit_module
351 i386 sched_setattr sys_sched_setattr 351 i386 sched_setattr sys_sched_setattr
352 i386 sched_getattr sys_sched_getattr 352 i386 sched_getattr sys_sched_getattr
353 i386 renameat2 sys_renameat2
...@@ -40,4 +40,6 @@ $(obj)/insn_sanity.o: $(srctree)/arch/x86/lib/insn.c $(srctree)/arch/x86/lib/ina ...@@ -40,4 +40,6 @@ $(obj)/insn_sanity.o: $(srctree)/arch/x86/lib/insn.c $(srctree)/arch/x86/lib/ina
HOST_EXTRACFLAGS += -I$(srctree)/tools/include HOST_EXTRACFLAGS += -I$(srctree)/tools/include
hostprogs-y += relocs hostprogs-y += relocs
relocs-objs := relocs_32.o relocs_64.o relocs_common.o relocs-objs := relocs_32.o relocs_64.o relocs_common.o
PHONY += relocs
relocs: $(obj)/relocs relocs: $(obj)/relocs
@:
...@@ -20,13 +20,13 @@ enum reboot_mode { ...@@ -20,13 +20,13 @@ enum reboot_mode {
extern enum reboot_mode reboot_mode; extern enum reboot_mode reboot_mode;
enum reboot_type { enum reboot_type {
BOOT_TRIPLE = 't', BOOT_TRIPLE = 't',
BOOT_KBD = 'k', BOOT_KBD = 'k',
BOOT_BIOS = 'b', BOOT_BIOS = 'b',
BOOT_ACPI = 'a', BOOT_ACPI = 'a',
BOOT_EFI = 'e', BOOT_EFI = 'e',
BOOT_CF9 = 'p', BOOT_CF9_FORCE = 'p',
BOOT_CF9_COND = 'q', BOOT_CF9_SAFE = 'q',
}; };
extern enum reboot_type reboot_type; extern enum reboot_type reboot_type;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment