This is preparatory patch to pass DMI entry point to kexec'ed kernel. Signed-off-by: Andy Shevchenko <andriy.shevche...@linux.intel.com> --- drivers/firmware/dmi_scan.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-)
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c index 88bebe1..b88def6 100644 --- a/drivers/firmware/dmi_scan.c +++ b/drivers/firmware/dmi_scan.c @@ -595,11 +595,8 @@ static int __init dmi_smbios3_present(const u8 *buf) return 1; } -void __init dmi_scan_machine(void) +static resource_size_t __init dmi_get_entry_point(void) { - char __iomem *p, *q; - char buf[32]; - if (efi_enabled(EFI_CONFIG_TABLES)) { /* * According to the DMTF SMBIOS reference spec v3.0.0, it is @@ -614,32 +611,32 @@ void __init dmi_scan_machine(void) * have the 64-bit entry point, but fail to decode it, fall * back to the legacy one (if available) */ - if (efi.smbios3 != EFI_INVALID_TABLE_ADDR) { - p = dmi_early_remap(efi.smbios3, 32); - if (p == NULL) - goto error; - memcpy_fromio(buf, p, 32); - dmi_early_unmap(p, 32); - - if (!dmi_smbios3_present(buf)) { - dmi_available = 1; - goto out; - } - } - if (efi.smbios == EFI_INVALID_TABLE_ADDR) - goto error; + if (efi.smbios3 != EFI_INVALID_TABLE_ADDR) + return efi.smbios3; + if (efi.smbios != EFI_INVALID_TABLE_ADDR) + return efi.smbios; + } + return 0; +} + +void __init dmi_scan_machine(void) +{ + resource_size_t ep = dmi_get_entry_point(); + char __iomem *p, *q; + char buf[32]; + if (ep) { /* This is called as a core_initcall() because it isn't * needed during early boot. This also means we can * iounmap the space when we're done with it. */ - p = dmi_early_remap(efi.smbios, 32); + p = dmi_early_remap(ep, 32); if (p == NULL) goto error; memcpy_fromio(buf, p, 32); dmi_early_unmap(p, 32); - if (!dmi_present(buf)) { + if (!dmi_smbios3_present(buf) || !dmi_present(buf)) { dmi_available = 1; goto out; } -- 2.10.2