Message ID | 20170418211848.10190.65062.stgit@tlendack-t1.amdoffice.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Apr 18, 2017 at 04:18:48PM -0500, Tom Lendacky wrote: > Add a function that will determine if a supplied physical address matches > the address of an EFI table. > > Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> > --- > drivers/firmware/efi/efi.c | 33 +++++++++++++++++++++++++++++++++ > include/linux/efi.h | 7 +++++++ > 2 files changed, 40 insertions(+) > > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > index b372aad..8f606a3 100644 > --- a/drivers/firmware/efi/efi.c > +++ b/drivers/firmware/efi/efi.c > @@ -55,6 +55,25 @@ struct efi __read_mostly efi = { > }; > EXPORT_SYMBOL(efi); > > +static unsigned long *efi_tables[] = { > + &efi.mps, > + &efi.acpi, > + &efi.acpi20, > + &efi.smbios, > + &efi.smbios3, > + &efi.sal_systab, > + &efi.boot_info, > + &efi.hcdp, > + &efi.uga, > + &efi.uv_systab, > + &efi.fw_vendor, > + &efi.runtime, > + &efi.config_table, > + &efi.esrt, > + &efi.properties_table, > + &efi.mem_attr_table, > +}; > + > static bool disable_runtime; > static int __init setup_noefi(char *arg) > { > @@ -854,6 +873,20 @@ int efi_status_to_err(efi_status_t status) > return err; > } > > +bool efi_table_address_match(unsigned long phys_addr) efi_is_table_address() reads easier/better in the code.
On 5/15/2017 1:09 PM, Borislav Petkov wrote: > On Tue, Apr 18, 2017 at 04:18:48PM -0500, Tom Lendacky wrote: >> Add a function that will determine if a supplied physical address matches >> the address of an EFI table. >> >> Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> >> --- >> drivers/firmware/efi/efi.c | 33 +++++++++++++++++++++++++++++++++ >> include/linux/efi.h | 7 +++++++ >> 2 files changed, 40 insertions(+) >> >> diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c >> index b372aad..8f606a3 100644 >> --- a/drivers/firmware/efi/efi.c >> +++ b/drivers/firmware/efi/efi.c >> @@ -55,6 +55,25 @@ struct efi __read_mostly efi = { >> }; >> EXPORT_SYMBOL(efi); >> >> +static unsigned long *efi_tables[] = { >> + &efi.mps, >> + &efi.acpi, >> + &efi.acpi20, >> + &efi.smbios, >> + &efi.smbios3, >> + &efi.sal_systab, >> + &efi.boot_info, >> + &efi.hcdp, >> + &efi.uga, >> + &efi.uv_systab, >> + &efi.fw_vendor, >> + &efi.runtime, >> + &efi.config_table, >> + &efi.esrt, >> + &efi.properties_table, >> + &efi.mem_attr_table, >> +}; >> + >> static bool disable_runtime; >> static int __init setup_noefi(char *arg) >> { >> @@ -854,6 +873,20 @@ int efi_status_to_err(efi_status_t status) >> return err; >> } >> >> +bool efi_table_address_match(unsigned long phys_addr) > > efi_is_table_address() reads easier/better in the code. Will do. Thanks, Tom >
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index b372aad..8f606a3 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -55,6 +55,25 @@ struct efi __read_mostly efi = { }; EXPORT_SYMBOL(efi); +static unsigned long *efi_tables[] = { + &efi.mps, + &efi.acpi, + &efi.acpi20, + &efi.smbios, + &efi.smbios3, + &efi.sal_systab, + &efi.boot_info, + &efi.hcdp, + &efi.uga, + &efi.uv_systab, + &efi.fw_vendor, + &efi.runtime, + &efi.config_table, + &efi.esrt, + &efi.properties_table, + &efi.mem_attr_table, +}; + static bool disable_runtime; static int __init setup_noefi(char *arg) { @@ -854,6 +873,20 @@ int efi_status_to_err(efi_status_t status) return err; } +bool efi_table_address_match(unsigned long phys_addr) +{ + unsigned int i; + + if (phys_addr == EFI_INVALID_TABLE_ADDR) + return false; + + for (i = 0; i < ARRAY_SIZE(efi_tables); i++) + if (*(efi_tables[i]) == phys_addr) + return true; + + return false; +} + #ifdef CONFIG_KEXEC static int update_efi_random_seed(struct notifier_block *nb, unsigned long code, void *unused) diff --git a/include/linux/efi.h b/include/linux/efi.h index ec36f42..cd768a1 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1079,6 +1079,8 @@ static inline bool efi_enabled(int feature) return test_bit(feature, &efi.flags) != 0; } extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); + +extern bool efi_table_address_match(unsigned long phys_addr); #else static inline bool efi_enabled(int feature) { @@ -1092,6 +1094,11 @@ static inline bool efi_enabled(int feature) { return false; } + +static inline bool efi_table_address_match(unsigned long phys_addr) +{ + return false; +} #endif extern int efi_status_to_err(efi_status_t status);
Add a function that will determine if a supplied physical address matches the address of an EFI table. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> --- drivers/firmware/efi/efi.c | 33 +++++++++++++++++++++++++++++++++ include/linux/efi.h | 7 +++++++ 2 files changed, 40 insertions(+)