diff options
Diffstat (limited to 'arch/x86/boot/compressed/acpi.c')
| -rw-r--r-- | arch/x86/boot/compressed/acpi.c | 19 | 
1 files changed, 13 insertions, 6 deletions
diff --git a/arch/x86/boot/compressed/acpi.c b/arch/x86/boot/compressed/acpi.c index 15255f388a85..149795c369f2 100644 --- a/arch/x86/boot/compressed/acpi.c +++ b/arch/x86/boot/compressed/acpi.c @@ -26,7 +26,7 @@ struct mem_vector immovable_mem[MAX_NUMNODES*2];   */  #define MAX_ADDR_LEN 19 -static acpi_physical_address get_acpi_rsdp(void) +static acpi_physical_address get_cmdline_acpi_rsdp(void)  {  	acpi_physical_address addr = 0; @@ -278,10 +278,7 @@ acpi_physical_address get_rsdp_addr(void)  {  	acpi_physical_address pa; -	pa = get_acpi_rsdp(); - -	if (!pa) -		pa = boot_params->acpi_rsdp_addr; +	pa = boot_params->acpi_rsdp_addr;  	/*  	 * Try to get EFI data from setup_data. This can happen when we're a @@ -311,7 +308,17 @@ static unsigned long get_acpi_srat_table(void)  	char arg[10];  	u8 *entry; -	rsdp = (struct acpi_table_rsdp *)(long)boot_params->acpi_rsdp_addr; +	/* +	 * Check whether we were given an RSDP on the command line. We don't +	 * stash this in boot params because the kernel itself may have +	 * different ideas about whether to trust a command-line parameter. +	 */ +	rsdp = (struct acpi_table_rsdp *)get_cmdline_acpi_rsdp(); + +	if (!rsdp) +		rsdp = (struct acpi_table_rsdp *)(long) +			boot_params->acpi_rsdp_addr; +  	if (!rsdp)  		return 0;  |