From d2d00be133a007e844868f4dc542c6975c440d9f Mon Sep 17 00:00:00 2001 From: Dan Duval Date: Wed, 15 Nov 2017 13:01:11 -0500 Subject: [PATCH] Revert "firmware: dmi_scan: add SBMIOS entry and DMI tables" Orabug: 27100376 This reverts commit b9f88fe1e80c6b0178502ac52ba56251824e0e4a. Application of the original cherry-pick introduced a regression resulting in the inability of the system to create a sysfs file needed by DMI. Signed-off-by: Dan Duval Reviewed-by: Dhaval Giani --- .../ABI/testing/sysfs-firmware-dmi-tables | 22 ------ MAINTAINERS | 2 - drivers/firmware/dmi-sysfs.c | 17 ++-- drivers/firmware/dmi_scan.c | 78 ------------------- include/linux/dmi.h | 2 - 5 files changed, 9 insertions(+), 112 deletions(-) delete mode 100644 Documentation/ABI/testing/sysfs-firmware-dmi-tables diff --git a/Documentation/ABI/testing/sysfs-firmware-dmi-tables b/Documentation/ABI/testing/sysfs-firmware-dmi-tables deleted file mode 100644 index ff3cac8ed0bd..000000000000 --- a/Documentation/ABI/testing/sysfs-firmware-dmi-tables +++ /dev/null @@ -1,22 +0,0 @@ -What: /sys/firmware/dmi/tables/ -Date: April 2015 -Contact: Ivan Khoronzhuk -Description: - The firmware provides DMI structures as a packed list of - data referenced by a SMBIOS table entry point. The SMBIOS - entry point contains general information, like SMBIOS - version, DMI table size, etc. The structure, content and - size of SMBIOS entry point is dependent on SMBIOS version. - The format of SMBIOS entry point and DMI structures - can be read in SMBIOS specification. - - The dmi/tables provides raw SMBIOS entry point and DMI tables - through sysfs as an alternative to utilities reading them - from /dev/mem. The raw SMBIOS entry point and DMI table are - presented as binary attributes and are accessible via: - - /sys/firmware/dmi/tables/smbios_entry_point - /sys/firmware/dmi/tables/DMI - - The complete DMI information can be obtained using these two - tables. diff --git a/MAINTAINERS b/MAINTAINERS index d92b1a897ab0..4f455512eb43 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3310,8 +3310,6 @@ F: drivers/hwmon/dme1737.c DMI/SMBIOS SUPPORT M: Jean Delvare S: Maintained -T: quilt http://jdelvare.nerim.net/devel/linux/jdelvare-dmi/ -F: Documentation/ABI/testing/sysfs-firmware-dmi-tables F: drivers/firmware/dmi-id.c F: drivers/firmware/dmi_scan.c F: include/linux/dmi.h diff --git a/drivers/firmware/dmi-sysfs.c b/drivers/firmware/dmi-sysfs.c index ef76e5eecf0b..e0f1cb3d3598 100644 --- a/drivers/firmware/dmi-sysfs.c +++ b/drivers/firmware/dmi-sysfs.c @@ -566,6 +566,7 @@ static struct kobj_type dmi_sysfs_entry_ktype = { .default_attrs = dmi_sysfs_entry_attrs, }; +static struct kobject *dmi_kobj; static struct kset *dmi_kset; /* Global count of all instances seen. Only for setup */ @@ -647,20 +648,17 @@ static void cleanup_entry_list(void) static int __init dmi_sysfs_init(void) { - int error; + int error = -ENOMEM; int val; - if (!dmi_kobj) { - pr_err("dmi-sysfs: dmi entry is absent.\n"); - error = -ENODATA; + /* Set up our directory */ + dmi_kobj = kobject_create_and_add("dmi", firmware_kobj); + if (!dmi_kobj) goto err; - } dmi_kset = kset_create_and_add("entries", NULL, dmi_kobj); - if (!dmi_kset) { - error = -ENOMEM; + if (!dmi_kset) goto err; - } val = 0; error = dmi_walk(dmi_sysfs_register_handle, &val); @@ -677,6 +675,7 @@ static int __init dmi_sysfs_init(void) err: cleanup_entry_list(); kset_unregister(dmi_kset); + kobject_put(dmi_kobj); return error; } @@ -686,6 +685,8 @@ static void __exit dmi_sysfs_exit(void) pr_debug("dmi-sysfs: unloading.\n"); cleanup_entry_list(); kset_unregister(dmi_kset); + kobject_del(dmi_kobj); + kobject_put(dmi_kobj); } module_init(dmi_sysfs_init); diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c index 401e240af5b7..e40d270a96cd 100644 --- a/drivers/firmware/dmi_scan.c +++ b/drivers/firmware/dmi_scan.c @@ -10,9 +10,6 @@ #include #include -struct kobject *dmi_kobj; -EXPORT_SYMBOL_GPL(dmi_kobj); - /* * DMI stands for "Desktop Management Interface". It is part * of and an antecedent to, SMBIOS, which stands for System @@ -23,9 +20,6 @@ static const char dmi_empty_string[] = " "; static u32 dmi_ver __initdata; static u32 dmi_len; static u16 dmi_num; -static u8 smbios_entry_point[32]; -static int smbios_entry_point_size; - /* * Catch too early calls to dmi_check_system(): */ @@ -489,8 +483,6 @@ static int __init dmi_present(const u8 *buf) if (memcmp(buf, "_SM_", 4) == 0 && buf[5] < 32 && dmi_checksum(buf, buf[5])) { smbios_ver = get_unaligned_be16(buf + 6); - smbios_entry_point_size = buf[5]; - memcpy(smbios_entry_point, buf, smbios_entry_point_size); /* Some BIOS report weird SMBIOS version, fix that up */ switch (smbios_ver) { @@ -526,9 +518,6 @@ static int __init dmi_present(const u8 *buf) pr_info("SMBIOS %d.%d present.\n", dmi_ver >> 16, (dmi_ver >> 8) & 0xFF); } else { - smbios_entry_point_size = 15; - memcpy(smbios_entry_point, buf, - smbios_entry_point_size); pr_info("Legacy DMI %d.%d present.\n", dmi_ver >> 16, (dmi_ver >> 8) & 0xFF); } @@ -553,8 +542,6 @@ static int __init dmi_smbios3_present(const u8 *buf) dmi_num = 0; /* No longer specified */ dmi_len = get_unaligned_le32(buf + 12); dmi_base = get_unaligned_le64(buf + 16); - smbios_entry_point_size = buf[6]; - memcpy(smbios_entry_point, buf, smbios_entry_point_size); if (dmi_walk_early(dmi_decode) == 0) { pr_info("SMBIOS %d.%d.%d present.\n", @@ -646,71 +633,6 @@ void __init dmi_scan_machine(void) dmi_initialized = 1; } -static ssize_t raw_table_read(struct file *file, struct kobject *kobj, - struct bin_attribute *attr, char *buf, - loff_t pos, size_t count) -{ - memcpy(buf, attr->private + pos, count); - return count; -} - -static BIN_ATTR(smbios_entry_point, S_IRUSR, raw_table_read, NULL, 0); -static BIN_ATTR(DMI, S_IRUSR, raw_table_read, NULL, 0); - -static int __init dmi_init(void) -{ - struct kobject *tables_kobj; - u8 *dmi_table; - int ret = -ENOMEM; - - if (!dmi_available) { - ret = -ENODATA; - goto err; - } - - /* - * Set up dmi directory at /sys/firmware/dmi. This entry should stay - * even after farther error, as it can be used by other modules like - * dmi-sysfs. - */ - dmi_kobj = kobject_create_and_add("dmi", firmware_kobj); - if (!dmi_kobj) - goto err; - - tables_kobj = kobject_create_and_add("tables", dmi_kobj); - if (!tables_kobj) - goto err; - - dmi_table = dmi_remap(dmi_base, dmi_len); - if (!dmi_table) - goto err_tables; - - bin_attr_smbios_entry_point.size = smbios_entry_point_size; - bin_attr_smbios_entry_point.private = smbios_entry_point; - ret = sysfs_create_bin_file(tables_kobj, &bin_attr_smbios_entry_point); - if (ret) - goto err_unmap; - - bin_attr_DMI.size = dmi_len; - bin_attr_DMI.private = dmi_table; - ret = sysfs_create_bin_file(tables_kobj, &bin_attr_DMI); - if (!ret) - return 0; - - sysfs_remove_bin_file(tables_kobj, - &bin_attr_smbios_entry_point); - err_unmap: - dmi_unmap(dmi_table); - err_tables: - kobject_del(tables_kobj); - kobject_put(tables_kobj); - err: - pr_err("dmi: Firmware registration failed.\n"); - - return ret; -} -subsys_initcall(dmi_init); - /** * dmi_set_dump_stack_arch_desc - set arch description for dump_stack() * diff --git a/include/linux/dmi.h b/include/linux/dmi.h index 2f9f98827c0a..f820f0a336c9 100644 --- a/include/linux/dmi.h +++ b/include/linux/dmi.h @@ -2,7 +2,6 @@ #define __DMI_H__ #include -#include #include /* enum dmi_field is in mod_devicetable.h */ @@ -94,7 +93,6 @@ struct dmi_dev_onboard { int devfn; }; -extern struct kobject *dmi_kobj; extern int dmi_check_system(const struct dmi_system_id *list); const struct dmi_system_id *dmi_first_match(const struct dmi_system_id *list); extern const char * dmi_get_system_info(int field); -- 2.50.1