]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Revert "firmware: dmi_scan: add SBMIOS entry and DMI tables"
authorDan Duval <dan.duval@oracle.com>
Wed, 15 Nov 2017 18:01:11 +0000 (13:01 -0500)
committerDan Duval <dan.duval@oracle.com>
Thu, 30 Nov 2017 12:18:52 +0000 (07:18 -0500)
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 <dan.duval@oracle.com>
Reviewed-by: Dhaval Giani <dhaval.giani@oracle.com>
Documentation/ABI/testing/sysfs-firmware-dmi-tables [deleted file]
MAINTAINERS
drivers/firmware/dmi-sysfs.c
drivers/firmware/dmi_scan.c
include/linux/dmi.h

diff --git a/Documentation/ABI/testing/sysfs-firmware-dmi-tables b/Documentation/ABI/testing/sysfs-firmware-dmi-tables
deleted file mode 100644 (file)
index ff3cac8..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-What:          /sys/firmware/dmi/tables/
-Date:          April 2015
-Contact:       Ivan Khoronzhuk <ivan.khoronzhuk@globallogic.com>
-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.
index d92b1a897ab06298c61210a45fe21d2d0aafeb24..4f455512eb43e98555f4ccd63c5317b556e93f98 100644 (file)
@@ -3310,8 +3310,6 @@ F:        drivers/hwmon/dme1737.c
 DMI/SMBIOS SUPPORT
 M:     Jean Delvare <jdelvare@suse.de>
 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
index ef76e5eecf0b090d7488f0b73b9cb4d6248da09f..e0f1cb3d3598dab3a3c69386c73c5690b21e28cf 100644 (file)
@@ -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);
index 401e240af5b7dbfb329bf28299e35bcffc132bd9..e40d270a96cd8ac2f2b161b0b5ebff829f9b0854 100644 (file)
@@ -10,9 +10,6 @@
 #include <asm/dmi.h>
 #include <asm/unaligned.h>
 
-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()
  *
index 2f9f98827c0afe14d7ba724827a50460755f1ffe..f820f0a336c971d8ec70d8c9d6b7a5f99f8a02ac 100644 (file)
@@ -2,7 +2,6 @@
 #define __DMI_H__
 
 #include <linux/list.h>
-#include <linux/kobject.h>
 #include <linux/mod_devicetable.h>
 
 /* 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);