Commit 1ec63573 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:
 "Misc fixes:

   - MCE related boot crash fix on certain AMD systems

   - FPU exception handling fix

   - FPU handling race fix

   - revert+rewrite of the RSDP boot protocol extension, use boot_params
     instead

   - documentation fix"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/MCE/AMD: Fix the thresholding machinery initialization order
  x86/fpu: Use the correct exception table macro in the XSTATE_OP wrapper
  x86/fpu: Disable bottom halves while loading FPU registers
  x86/acpi, x86/boot: Take RSDP address from boot params if available
  x86/boot: Mostly revert commit ae7e1238 ("Add ACPI RSDP address to setup_header")
  x86/ptrace: Fix documentation for tracehook_report_syscall_entry()
parents a1b3cf6d 60c8144a
Loading
Loading
Loading
Loading
+1 −31
Original line number Diff line number Diff line
@@ -61,18 +61,6 @@ Protocol 2.12: (Kernel 3.8) Added the xloadflags field and extension fields
	 	to struct boot_params for loading bzImage and ramdisk
		above 4G in 64bit.

Protocol 2.13:	(Kernel 3.14) Support 32- and 64-bit flags being set in
		xloadflags to support booting a 64-bit kernel from 32-bit
		EFI

Protocol 2.14:	(Kernel 4.20) Added acpi_rsdp_addr holding the physical
		address of the ACPI RSDP table.
		The bootloader updates version with:
		0x8000 | min(kernel-version, bootloader-version)
		kernel-version being the protocol version supported by
		the kernel and bootloader-version the protocol version
		supported by the bootloader.

**** MEMORY LAYOUT

The traditional memory map for the kernel loader, used for Image or
@@ -209,7 +197,6 @@ Offset Proto Name Meaning
0258/8	2.10+	pref_address	Preferred loading address
0260/4	2.10+	init_size	Linear memory required during initialization
0264/4	2.11+	handover_offset	Offset of handover entry point
0268/8	2.14+	acpi_rsdp_addr	Physical address of RSDP table

(1) For backwards compatibility, if the setup_sects field contains 0, the
    real value is 4.
@@ -322,7 +309,7 @@ Protocol: 2.00+
  Contains the magic number "HdrS" (0x53726448).

Field name:	version
Type:		modify
Type:		read
Offset/size:	0x206/2
Protocol:	2.00+

@@ -330,12 +317,6 @@ Protocol: 2.00+
  e.g. 0x0204 for version 2.04, and 0x0a11 for a hypothetical version
  10.17.

  Up to protocol version 2.13 this information is only read by the
  bootloader. From protocol version 2.14 onwards the bootloader will
  write the used protocol version or-ed with 0x8000 to the field. The
  used protocol version will be the minimum of the supported protocol
  versions of the bootloader and the kernel.

Field name:	realmode_swtch
Type:		modify (optional)
Offset/size:	0x208/4
@@ -763,17 +744,6 @@ Offset/size: 0x264/4

  See EFI HANDOVER PROTOCOL below for more details.

Field name:	acpi_rsdp_addr
Type:		write
Offset/size:	0x268/8
Protocol:	2.14+

  This field can be set by the boot loader to tell the kernel the
  physical address of the ACPI RSDP table.

  A value of 0 indicates the kernel should fall back to the standard
  methods to locate the RSDP.


**** THE IMAGE CHECKSUM

+1 −5
Original line number Diff line number Diff line
@@ -300,7 +300,7 @@ _start:
	# Part 2 of the header, from the old setup.S

		.ascii	"HdrS"		# header signature
		.word	0x020e		# header version number (>= 0x0105)
		.word	0x020d		# header version number (>= 0x0105)
					# or else old loadlin-1.5 will fail)
		.globl realmode_swtch
realmode_swtch:	.word	0, 0		# default_switch, SETUPSEG
@@ -558,10 +558,6 @@ pref_address: .quad LOAD_PHYSICAL_ADDR # preferred load addr
init_size:		.long INIT_SIZE		# kernel initialization size
handover_offset:	.long 0			# Filled in by build.c

acpi_rsdp_addr:		.quad 0			# 64-bit physical pointer to the
						# ACPI RSDP table, added with
						# version 2.14

# End of setup header #####################################################

	.section ".entrytext", "ax"
+1 −1
Original line number Diff line number Diff line
@@ -226,7 +226,7 @@ static inline void copy_fxregs_to_kernel(struct fpu *fpu)
		     "3: movl $-2,%[err]\n\t"				\
		     "jmp 2b\n\t"					\
		     ".popsection\n\t"					\
		     _ASM_EXTABLE_UA(1b, 3b)				\
		     _ASM_EXTABLE(1b, 3b)				\
		     : [err] "=r" (err)					\
		     : "D" (st), "m" (*st), "a" (lmask), "d" (hmask)	\
		     : "memory")
+0 −2
Original line number Diff line number Diff line
@@ -303,6 +303,4 @@ extern void x86_init_noop(void);
extern void x86_init_uint_noop(unsigned int unused);
extern bool x86_pnpbios_disabled(void);

void x86_verify_bootdata_version(void);

#endif
+2 −5
Original line number Diff line number Diff line
@@ -16,9 +16,6 @@
#define RAMDISK_PROMPT_FLAG		0x8000
#define RAMDISK_LOAD_FLAG		0x4000

/* version flags */
#define VERSION_WRITTEN	0x8000

/* loadflags */
#define LOADED_HIGH	(1<<0)
#define KASLR_FLAG	(1<<1)
@@ -89,7 +86,6 @@ struct setup_header {
	__u64	pref_address;
	__u32	init_size;
	__u32	handover_offset;
	__u64	acpi_rsdp_addr;
} __attribute__((packed));

struct sys_desc_table {
@@ -159,7 +155,8 @@ struct boot_params {
	__u8  _pad2[4];					/* 0x054 */
	__u64  tboot_addr;				/* 0x058 */
	struct ist_info ist_info;			/* 0x060 */
	__u8  _pad3[16];				/* 0x070 */
	__u64 acpi_rsdp_addr;				/* 0x070 */
	__u8  _pad3[8];					/* 0x078 */
	__u8  hd0_info[16];	/* obsolete! */		/* 0x080 */
	__u8  hd1_info[16];	/* obsolete! */		/* 0x090 */
	struct sys_desc_table sys_desc_table; /* obsolete! */	/* 0x0a0 */
Loading