[PATCH 4/4] dmicheck: use dmi_load_file in preference to fwts_mmap
Leif Lindholm
leif.lindholm at linaro.org
Thu Nov 15 23:25:17 UTC 2018
dmi_load_file uses the /sys interface to access SMBIOS tables, whereas
fwts_mmap maps (or attempts to map) tables directly through /dev/mem.
Use the proper kernel interface in preference, falling back to /dev/mem
where that is not available.
Signed-off-by: Leif Lindholm <leif.lindholm at linaro.org>
---
Note: this one is really unrelated from the other 3 patches in the
series, but it sprung from the same itch, so I included it.
src/dmi/dmicheck/dmicheck.c | 47 +++++++++++++++++++++++----------------------
1 file changed, 24 insertions(+), 23 deletions(-)
diff --git a/src/dmi/dmicheck/dmicheck.c b/src/dmi/dmicheck/dmicheck.c
index c794973b..19c1bd48 100644
--- a/src/dmi/dmicheck/dmicheck.c
+++ b/src/dmi/dmicheck/dmicheck.c
@@ -322,6 +322,18 @@ static void* dmi_table_smbios(fwts_framework *fw, fwts_smbios_entry *entry)
return NULL;
}
+ if (dmi_load_file("/sys/firmware/dmi/tables/smbios_entry_point", anchor, 4) == FWTS_OK
+ && strncmp(anchor, "_SM_", 4) == 0) {
+ table = malloc(length);
+ if (!table)
+ return NULL;
+ if (dmi_load_file("/sys/firmware/dmi/tables/DMI", table, length) == FWTS_OK) {
+ fwts_log_info(fw, "SMBIOS table loaded from /sys/firmware/dmi/tables/DMI\n");
+ return table;
+ }
+ free(table);
+ }
+
mem = fwts_mmap(addr, length);
if (mem != FWTS_MAP_FAILED) {
/* Can we safely copy the table? */
@@ -337,17 +349,6 @@ static void* dmi_table_smbios(fwts_framework *fw, fwts_smbios_entry *entry)
return table;
}
- if (dmi_load_file("/sys/firmware/dmi/tables/smbios_entry_point", anchor, 4) == FWTS_OK
- && strncmp(anchor, "_SM_", 4) == 0) {
- table = malloc(length);
- if (!table)
- return NULL;
- if (dmi_load_file("/sys/firmware/dmi/tables/DMI", table, length) == FWTS_OK) {
- fwts_log_info(fw, "SMBIOS table loaded from /sys/firmware/dmi/tables/DMI\n");
- return table;
- }
- free(table);
- }
fwts_log_error(fw, "Cannot mmap SMBIOS table from %8.8" PRIx32 "..%8.8" PRIx32 ".",
entry->struct_table_address, entry->struct_table_address + entry->struct_table_length);
@@ -369,6 +370,18 @@ static void* dmi_table_smbios30(fwts_framework *fw, fwts_smbios30_entry *entry)
return NULL;
}
+ if (dmi_load_file("/sys/firmware/dmi/tables/smbios_entry_point", anchor, 5) == FWTS_OK
+ && strncmp(anchor, "_SM3_", 5) == 0) {
+ table = malloc(length);
+ if (!table)
+ return NULL;
+ if (dmi_load_file_variable_size("/sys/firmware/dmi/tables/DMI", table, &length) == FWTS_OK) {
+ fwts_log_info(fw, "SMBIOS30 table loaded from /sys/firmware/dmi/tables/DMI\n");
+ return table;
+ }
+ free(table);
+ }
+
mem = fwts_mmap(addr, length);
if (mem != FWTS_MAP_FAILED) {
/* Can we safely copy the table? */
@@ -384,18 +397,6 @@ static void* dmi_table_smbios30(fwts_framework *fw, fwts_smbios30_entry *entry)
return table;
}
- if (dmi_load_file("/sys/firmware/dmi/tables/smbios_entry_point", anchor, 5) == FWTS_OK
- && strncmp(anchor, "_SM3_", 5) == 0) {
- table = malloc(length);
- if (!table)
- return NULL;
- if (dmi_load_file_variable_size("/sys/firmware/dmi/tables/DMI", table, &length) == FWTS_OK) {
- fwts_log_info(fw, "SMBIOS30 table loaded from /sys/firmware/dmi/tables/DMI\n");
- return table;
- }
- free(table);
- }
-
fwts_log_error(fw, "Cannot mmap SMBIOS 3.0 table from %16.16" PRIx64 "..%16.16" PRIx64 ".",
entry->struct_table_address, entry->struct_table_address + entry->struct_table_max_size);
return NULL;
--
2.11.0
More information about the fwts-devel
mailing list