History

efi/x86: Remove runtime table address from kexec EFI setup data

Since commit 33b85447fa61946b ("efi/x86: Drop two near identical versions of efi_runtime_init()"), we no longer map the EFI runtime services table before calling SetVirtualAddressMap(), which means we don't need the 1:1 mapped physical address of this table, and so there is no point in passing the address via EFI setup data on kexec boot. Note that the kexec tools will still look for this address in sysfs, so we still need to provide it.

Ard Biesheuvel committed 6 years ago

Commit 0a673611 parent 06c0bd93 files · +1 −5Browse files

Unified · Split

3 files
  1. arch/x86/include/asm/efi.h +0 −1
  2. arch/x86/kernel/kexec-bzimage64.c +0 −1
  3. arch/x86/platform/efi/efi.c +1 −3
arch/x86/include/asm/efi.h+0−1
@@ -178,7 +178,6 @@ extern void __init efi_uv1_memmap_phys_epilog(pgd_t *save_pgd); · 177 unmodified lines
178 178
179struct efi_setup_data {179struct efi_setup_data {
180 u64 fw_vendor;180 u64 fw_vendor;
181 u64 runtime;
182 u64 tables;181 u64 tables;
183 u64 smbios;182 u64 smbios;
184 u64 reserved[8];183 u64 reserved[8];
arch/x86/kernel/kexec-bzimage64.c+0−1
@@ -142,7 +142,6 @@ prepare_add_efi_setup_data(struct boot_params *params, · 141 unmodified lines
142 struct efi_setup_data *esd = (void *)sd + sizeof(struct setup_data);142 struct efi_setup_data *esd = (void *)sd + sizeof(struct setup_data);
143 143
144 esd->fw_vendor = efi.fw_vendor;144 esd->fw_vendor = efi.fw_vendor;
145 esd->runtime = efi.runtime;
146 esd->tables = efi.config_table;145 esd->tables = efi.config_table;
147 esd->smbios = efi.smbios;146 esd->smbios = efi.smbios;
148 147
arch/x86/platform/efi/efi.c+1−3
@@ -376,6 +376,7 @@ static int __init efi_systab_init(u64 phys) · 375 unmodified lines
376 systab64->con_out > U32_MAX ||376 systab64->con_out > U32_MAX ||
377 systab64->stderr_handle > U32_MAX ||377 systab64->stderr_handle > U32_MAX ||
378 systab64->stderr > U32_MAX ||378 systab64->stderr > U32_MAX ||
379 systab64->runtime > U32_MAX ||
379 systab64->boottime > U32_MAX;380 systab64->boottime > U32_MAX;
380 381
381 if (efi_setup) {382 if (efi_setup) {
@@ -388,17 +389,14 @@ static int __init efi_systab_init(u64 phys) · 6 unmodified lines
388 }389 }
389 390
390 efi_systab.fw_vendor = (unsigned long)data->fw_vendor;391 efi_systab.fw_vendor = (unsigned long)data->fw_vendor;
391 efi_systab.runtime = (void *)(unsigned long)data->runtime;
392 efi_systab.tables = (unsigned long)data->tables;392 efi_systab.tables = (unsigned long)data->tables;
393 393
394 over4g |= data->fw_vendor > U32_MAX ||394 over4g |= data->fw_vendor > U32_MAX ||
395 data->runtime > U32_MAX ||
396 data->tables > U32_MAX;395 data->tables > U32_MAX;
397 396
398 early_memunmap(data, sizeof(*data));397 early_memunmap(data, sizeof(*data));
399 } else {398 } else {
400 over4g |= systab64->fw_vendor > U32_MAX ||399 over4g |= systab64->fw_vendor > U32_MAX ||
401 systab64->runtime > U32_MAX ||
402 systab64->tables > U32_MAX;400 systab64->tables > U32_MAX;
403 }401 }
404 } else {402 } else {