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
178178
179179 struct efi_setup_data {
180180 u64 fw_vendor;
181− u64 runtime;
182181 u64 tables;
183182 u64 smbios;
184183 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
142142 struct efi_setup_data *esd = (void *)sd + sizeof(struct setup_data);
143143
144144 esd->fw_vendor = efi.fw_vendor;
145− esd->runtime = efi.runtime;
146145 esd->tables = efi.config_table;
147146 esd->smbios = efi.smbios;
148147
arch/x86/platform/efi/efi.c+1−3
@@ -376,6 +376,7 @@ static int __init efi_systab_init(u64 phys) · 375 unmodified lines
376376 systab64->con_out > U32_MAX ||
377377 systab64->stderr_handle > U32_MAX ||
378378 systab64->stderr > U32_MAX ||
379+ systab64->runtime > U32_MAX ||
379380 systab64->boottime > U32_MAX;
380381
381382 if (efi_setup) {
@@ -388,17 +389,14 @@ static int __init efi_systab_init(u64 phys) · 6 unmodified lines
388389 }
389390
390391 efi_systab.fw_vendor = (unsigned long)data->fw_vendor;
391− efi_systab.runtime = (void *)(unsigned long)data->runtime;
392392 efi_systab.tables = (unsigned long)data->tables;
393393
394394 over4g |= data->fw_vendor > U32_MAX ||
395− data->runtime > U32_MAX ||
396395 data->tables > U32_MAX;
397396
398397 early_memunmap(data, sizeof(*data));
399398 } else {
400399 over4g |= systab64->fw_vendor > U32_MAX ||
401− systab64->runtime > U32_MAX ||
402400 systab64->tables > U32_MAX;
403401 }
404402 } else {