Move RSDP address out of setup_header
Subsystems (3)
cover Move RSDP address out of setup_header
Resend with Daniel's mailo address corrected
Instead of passing the RSDP address for Xen PVH guests from grub2 to the kernel in setup_header move it into the non-legacy part of the boot_params structure.
This patch series should be applied rather sooner than later in order to avoid shipping linux 4.20 with a corky boot protocol.
Juergen Gross (2):
x86/boot: revert commit ae7e1238e68f2a (Add ACPI RSDP address to
setup_header)
x86/acpi, x86/boot: Take RSDP address from boot params if available
Documentation/x86/boot.txt | 32 +------------------------------- arch/x86/boot/header.S | 6 +----- arch/x86/include/asm/x86_init.h | 2 -- arch/x86/include/uapi/asm/bootparam.h | 7 ++----- arch/x86/kernel/acpi/boot.c | 2 +- arch/x86/kernel/head32.c | 1 - arch/x86/kernel/head64.c | 2 -- arch/x86/kernel/setup.c | 17 ----------------- 8 files changed, 5 insertions(+), 64 deletions(-)
Signature · 1 line
2.16.4
PATCH 1/2 x86/boot: revert commit ae7e1238e68f2a (Add ACPI RSDP address to setup_header)
Peter Anvin pointed out that commit ae7e1238e68f2a ("x86/boot: Add ACPI RSDP address to setup_header") should be reverted as setup_header should contain only items set by legacy BIOS.
So revert said commit. Instead of fully reverting the depending commit e7b66d16fe4172 ("x86/acpi, x86/boot: Take RSDP address for boot params if available") just remove the setup_header reference in order to replace it by a boot_params in a followup patch.
--- Documentation/x86/boot.txt | 32 +------------------------------- arch/x86/boot/header.S | 6 +----- arch/x86/include/asm/x86_init.h | 2 -- arch/x86/include/uapi/asm/bootparam.h | 4 ---- arch/x86/kernel/acpi/boot.c | 2 +- arch/x86/kernel/head32.c | 1 - arch/x86/kernel/head64.c | 2 -- arch/x86/kernel/setup.c | 17 ----------------- 8 files changed, 3 insertions(+), 63 deletions(-)
Documentation/x86/boot.txt +1 -31
@@ -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
arch/x86/boot/header.S +1 -5
@@ -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"
arch/x86/include/asm/x86_init.h +0 -2
@@ -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
arch/x86/include/uapi/asm/bootparam.h +0 -4
@@ -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 {
arch/x86/kernel/acpi/boot.c +1 -1
@@ -1776,5 +1776,5 @@ void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size)u64 x86_default_get_root_pointer (void ) { -return boot_params.hdr.acpi_rsdp_addr; +return 0 ; }
arch/x86/kernel/head32.c +0 -1
@@ -37,7 +37,6 @@ asmlinkage __visible void __init i386_start_kernel(void)cr4_init_shadow ();sanitize_boot_params (&boot_params); -x86_verify_bootdata_version ();x86_early_init_platform_quirks ();
arch/x86/kernel/head64.c +0 -2
@@ -457,8 +457,6 @@ void __init x86_64_start_reservations(char *real_mode_data)if (!boot_params.hdr.version)copy_bootdata (__va (real_mode_data)); -x86_verify_bootdata_version (); -x86_early_init_platform_quirks ();switch (boot_params.hdr.hardware_subarch) {
arch/x86/kernel/setup.c +0 -17
@@ -1280,23 +1280,6 @@ void __init setup_arch(char **cmdline_p)unwind_init (); } -/* -* From boot protocol 2.14 onwards we expect the bootloader to set the -* version to "0x8000 | <used version>". In case we find a version >= 2.14 -* without the 0x8000 we assume the boot loader supports 2.13 only and -* reset the version accordingly. The 0x8000 flag is removed in any case. -*/ -void __init x86_verify_bootdata_version (void ) -{ -if (boot_params.hdr.version &VERSION_WRITTEN ) - boot_params.hdr.version &= ~VERSION_WRITTEN ; -else if (boot_params.hdr.version >=0x020e ) - boot_params.hdr.version =0x020d ; - -if (boot_params.hdr.version <0x020e ) - boot_params.hdr.acpi_rsdp_addr =0 ; -} -#ifdef CONFIG_X86_32 static struct resource video_ram_resource = {
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
PATCH 1/2 x86/boot: revert commit ae7e1238e68f2a (Add ACPI RSDP address to setup_header)
In reply to Juergen GrossPeter Anvin pointed out that commit ae7e1238e68f2a ("x86/boot: Add ACPI RSDP address to setup_header") should be reverted as setup_header should contain only items set by legacy BIOS.
So revert said commit. Instead of fully reverting the depending commit e7b66d16fe4172 ("x86/acpi, x86/boot: Take RSDP address for boot params if available") just remove the setup_header reference in order to replace it by a boot_params in a followup patch.
--- Documentation/x86/boot.txt | 32 +------------------------------- arch/x86/boot/header.S | 6 +----- arch/x86/include/asm/x86_init.h | 2 -- arch/x86/include/uapi/asm/bootparam.h | 4 ---- arch/x86/kernel/acpi/boot.c | 2 +- arch/x86/kernel/head32.c | 1 - arch/x86/kernel/head64.c | 2 -- arch/x86/kernel/setup.c | 17 ----------------- 8 files changed, 3 insertions(+), 63 deletions(-)
Documentation/x86/boot.txt +1 -31
@@ -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
arch/x86/boot/header.S +1 -5
@@ -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"
arch/x86/include/asm/x86_init.h +0 -2
@@ -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
arch/x86/include/uapi/asm/bootparam.h +0 -4
@@ -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 {
arch/x86/kernel/acpi/boot.c +1 -1
@@ -1776,5 +1776,5 @@ void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size)u64 x86_default_get_root_pointer (void ) { -return boot_params.hdr.acpi_rsdp_addr; +return 0 ; }
arch/x86/kernel/head32.c +0 -1
@@ -37,7 +37,6 @@ asmlinkage __visible void __init i386_start_kernel(void)cr4_init_shadow ();sanitize_boot_params (&boot_params); -x86_verify_bootdata_version ();x86_early_init_platform_quirks ();
arch/x86/kernel/head64.c +0 -2
@@ -457,8 +457,6 @@ void __init x86_64_start_reservations(char *real_mode_data)if (!boot_params.hdr.version)copy_bootdata (__va (real_mode_data)); -x86_verify_bootdata_version (); -x86_early_init_platform_quirks ();switch (boot_params.hdr.hardware_subarch) {
arch/x86/kernel/setup.c +0 -17
@@ -1280,23 +1280,6 @@ void __init setup_arch(char **cmdline_p)unwind_init (); } -/* -* From boot protocol 2.14 onwards we expect the bootloader to set the -* version to "0x8000 | <used version>". In case we find a version >= 2.14 -* without the 0x8000 we assume the boot loader supports 2.13 only and -* reset the version accordingly. The 0x8000 flag is removed in any case. -*/ -void __init x86_verify_bootdata_version (void ) -{ -if (boot_params.hdr.version &VERSION_WRITTEN ) - boot_params.hdr.version &= ~VERSION_WRITTEN ; -else if (boot_params.hdr.version >=0x020e ) - boot_params.hdr.version =0x020d ; - -if (boot_params.hdr.version <0x020e ) - boot_params.hdr.acpi_rsdp_addr =0 ; -} -#ifdef CONFIG_X86_32 static struct resource video_ram_resource = {
Signature · 1 line
2.16.4
tip-bot for Juergen Gross
merge bot[tip:x86/urgent] x86/boot: Mostly revert commit ae7e1238e68f2a ("Add ACPI RSDP address to setup_header")
x86/boot: Mostly revert commit ae7e1238e68f2a ("Add ACPI RSDP address to setup_header")
Commit-ID: 3841840449817ba6cf3e636008bc4e1061a03388 Gitweb: https://git.kernel.org/tip/3841840449817ba6cf3e636008bc4e1061a03388 Author: Juergen Gross <[email protected]> AuthorDate: Tue, 20 Nov 2018 08:25:28 +0100 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 20 Nov 2018 09:43:10 +0100
x86/boot: Mostly revert commit ae7e1238e68f2a ("Add ACPI RSDP address to setup_header")
Peter Anvin pointed out that commit:
ae7e1238e68f2a ("x86/boot: Add ACPI RSDP address to setup_header")
should be reverted as setup_header should only contain items set by the legacy BIOS.
So revert said commit. Instead of fully reverting the dependent commit of:
e7b66d16fe4172 ("x86/acpi, x86/boot: Take RSDP address for boot params if available")
just remove the setup_header reference in order to replace it by a boot_params in a followup patch.
--- Documentation/x86/boot.txt | 32 +------------------------------- arch/x86/boot/header.S | 6 +----- arch/x86/include/asm/x86_init.h | 2 -- arch/x86/include/uapi/asm/bootparam.h | 4 ---- arch/x86/kernel/acpi/boot.c | 2 +- arch/x86/kernel/head32.c | 1 - arch/x86/kernel/head64.c | 2 -- arch/x86/kernel/setup.c | 17 ----------------- 8 files changed, 3 insertions(+), 63 deletions(-)
Documentation/x86/boot.txt +1 -31
@@ -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
arch/x86/boot/header.S +1 -5
@@ -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"
arch/x86/include/asm/x86_init.h +0 -2
@@ -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
arch/x86/include/uapi/asm/bootparam.h +0 -4
@@ -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 {
arch/x86/kernel/acpi/boot.c +1 -1
@@ -1776,5 +1776,5 @@ void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size)u64 x86_default_get_root_pointer (void ) { -return boot_params.hdr.acpi_rsdp_addr; +return 0 ; }
arch/x86/kernel/head32.c +0 -1
@@ -37,7 +37,6 @@ asmlinkage __visible void __init i386_start_kernel(void)cr4_init_shadow ();sanitize_boot_params (&boot_params); -x86_verify_bootdata_version ();x86_early_init_platform_quirks ();
arch/x86/kernel/head64.c +0 -2
@@ -457,8 +457,6 @@ void __init x86_64_start_reservations(char *real_mode_data)if (!boot_params.hdr.version)copy_bootdata (__va (real_mode_data)); -x86_verify_bootdata_version (); -x86_early_init_platform_quirks ();switch (boot_params.hdr.hardware_subarch) {
arch/x86/kernel/setup.c +0 -17
@@ -1280,23 +1280,6 @@ void __init setup_arch(char **cmdline_p)unwind_init (); } -/* -* From boot protocol 2.14 onwards we expect the bootloader to set the -* version to "0x8000 | <used version>". In case we find a version >= 2.14 -* without the 0x8000 we assume the boot loader supports 2.13 only and -* reset the version accordingly. The 0x8000 flag is removed in any case. -*/ -void __init x86_verify_bootdata_version (void ) -{ -if (boot_params.hdr.version &VERSION_WRITTEN ) - boot_params.hdr.version &= ~VERSION_WRITTEN ; -else if (boot_params.hdr.version >=0x020e ) - boot_params.hdr.version =0x020d ; - -if (boot_params.hdr.version <0x020e ) - boot_params.hdr.acpi_rsdp_addr =0 ; -} -#ifdef CONFIG_X86_32 static struct resource video_ram_resource = {
PATCH 2/2 x86/acpi, x86/boot: Take RSDP address from boot params if available
In reply to Juergen GrossIn case the RSDP address in struct boot_params is specified don't try to find the table by searching, but take the address directly as set by the boot loader.
--- arch/x86/include/uapi/asm/bootparam.h | 3 ++- arch/x86/kernel/acpi/boot.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-)
arch/x86/include/uapi/asm/bootparam.h +2 -1
@@ -155,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 */
arch/x86/kernel/acpi/boot.c +1 -1
@@ -1776,5 +1776,5 @@ void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size)u64 x86_default_get_root_pointer (void ) { -return 0 ; +return boot_params.acpi_rsdp_addr; }
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
PATCH 2/2 x86/acpi, x86/boot: Take RSDP address from boot params if available
In reply to Juergen GrossIn case the RSDP address in struct boot_params is specified don't try to find the table by searching, but take the address directly as set by the boot loader.
--- arch/x86/include/uapi/asm/bootparam.h | 3 ++- arch/x86/kernel/acpi/boot.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-)
arch/x86/include/uapi/asm/bootparam.h +2 -1
@@ -155,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 */
arch/x86/kernel/acpi/boot.c +1 -1
@@ -1776,5 +1776,5 @@ void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size)u64 x86_default_get_root_pointer (void ) { -return 0 ; +return boot_params.acpi_rsdp_addr; }
Signature · 1 line
2.16.4
tip-bot for Juergen Gross
merge bot[tip:x86/urgent] x86/acpi, x86/boot: Take RSDP address from boot params if available
x86/acpi, x86/boot: Take RSDP address from boot params if available
Commit-ID: e6e094e053af75cbc164e950814d3d084fb1e698 Gitweb: https://git.kernel.org/tip/e6e094e053af75cbc164e950814d3d084fb1e698 Author: Juergen Gross <[email protected]> AuthorDate: Tue, 20 Nov 2018 08:25:29 +0100 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 20 Nov 2018 09:43:11 +0100
x86/acpi, x86/boot: Take RSDP address from boot params if available
In case the RSDP address in struct boot_params is specified don't try to find the table by searching, but take the address directly as set by the boot loader.
--- arch/x86/include/uapi/asm/bootparam.h | 3 ++- arch/x86/kernel/acpi/boot.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-)
arch/x86/include/uapi/asm/bootparam.h +2 -1
@@ -155,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 */
arch/x86/kernel/acpi/boot.c +1 -1
@@ -1776,5 +1776,5 @@ void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size)u64 x86_default_get_root_pointer (void ) { -return 0 ; +return boot_params.acpi_rsdp_addr; }
Hi,
Quoted 14 lines · Juergen Gross
Resend with Daniel's mailo address corrected
Instead of passing the RSDP address for Xen PVH guests from grub2 to the kernel in
setup_headermove it into the non-legacy part of theboot_paramsstructure.This patch series should be applied rather sooner than later in order to avoid shipping linux 4.20 with a corky boot protocol.
Juergen Gross (2):
x86/boot: revert commitae7e1238e68f2a(Add ACPI RSDP address to
setup_header)
x86/acpi, x86/boot: Take RSDP address from boot params if available
Quoted 9 lines
Documentation/x86/boot.txt | 32 +------------------------------- arch/x86/boot/header.S | 6 +----- arch/x86/include/asm/x86_init.h | 2 -- arch/x86/include/uapi/asm/bootparam.h | 7 ++----- arch/x86/kernel/acpi/boot.c | 2 +- arch/x86/kernel/head32.c | 1 - arch/x86/kernel/head64.c | 2 -- arch/x86/kernel/setup.c | 17 ----------------- 8 files changed, 5 insertions(+), 64 deletions(-)
FWIW, I can confirm that I can boot a Xen domU in PVH mode with the following four patches added on top of Linux 4.19.5 (applied in this order), in combination with grub master branch with patchset v5 for grub on top:
Date: Wed Oct 10 08:14:55 2018 +0200
x86/boot: Add ACPI RSDP address to setup_header
Date: Wed Oct 10 08:14:56 2018 +0200
x86/acpi, x86/boot: Take RSDP address for boot params if available
Date: Tue Nov 20 08:25:28 2018 +0100
x86/boot: revert commit ae7e1238e68f2a (Add ACPI RSDP address to setup_header)
Date: Tue Nov 20 08:25:29 2018 +0100
x86/acpi, x86/boot: Take RSDP address from boot params if available
[ 0.205884] Booting paravirtualized kernel on Xen PVH
Thanks,
Hans
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel