mei: make mei_class a static const structure
authorIvan Orlov <ivan.orlov0322@gmail.com>
Fri, 11 Aug 2023 21:30:52 +0000 (01:30 +0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Aug 2023 11:42:00 +0000 (13:42 +0200)
Now that the driver core allows for struct class to be in read-only
memory, move the mei_class structure to be declared at build time
placing it into read-only memory, instead of having to be dynamically
allocated at boot time.

Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com>
Link: https://lore.kernel.org/r/20230811213052.85044-1-ivan.orlov0322@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/mei/main.c

index 51876da..bb4e9ea 100644 (file)
 #include "mei_dev.h"
 #include "client.h"
 
-static struct class *mei_class;
+static const struct class mei_class = {
+       .name = "mei",
+};
+
 static dev_t mei_devt;
 #define MEI_MAX_DEVS  MINORMASK
 static DEFINE_MUTEX(mei_minor_lock);
@@ -1115,7 +1118,7 @@ void mei_set_devstate(struct mei_device *dev, enum mei_dev_state state)
 
        dev->dev_state = state;
 
-       clsdev = class_find_device_by_devt(mei_class, dev->cdev.dev);
+       clsdev = class_find_device_by_devt(&mei_class, dev->cdev.dev);
        if (clsdev) {
                sysfs_notify(&clsdev->kobj, NULL, "dev_state");
                put_device(clsdev);
@@ -1232,7 +1235,7 @@ int mei_register(struct mei_device *dev, struct device *parent)
                goto err_dev_add;
        }
 
-       clsdev = device_create_with_groups(mei_class, parent, devno,
+       clsdev = device_create_with_groups(&mei_class, parent, devno,
                                           dev, mei_groups,
                                           "mei%d", dev->minor);
 
@@ -1264,7 +1267,7 @@ void mei_deregister(struct mei_device *dev)
 
        mei_dbgfs_deregister(dev);
 
-       device_destroy(mei_class, devno);
+       device_destroy(&mei_class, devno);
 
        mei_minor_free(dev);
 }
@@ -1274,12 +1277,9 @@ static int __init mei_init(void)
 {
        int ret;
 
-       mei_class = class_create("mei");
-       if (IS_ERR(mei_class)) {
-               pr_err("couldn't create class\n");
-               ret = PTR_ERR(mei_class);
-               goto err;
-       }
+       ret = class_register(&mei_class);
+       if (ret)
+               return ret;
 
        ret = alloc_chrdev_region(&mei_devt, 0, MEI_MAX_DEVS, "mei");
        if (ret < 0) {
@@ -1298,15 +1298,14 @@ static int __init mei_init(void)
 err_chrdev:
        unregister_chrdev_region(mei_devt, MEI_MAX_DEVS);
 err_class:
-       class_destroy(mei_class);
-err:
+       class_unregister(&mei_class);
        return ret;
 }
 
 static void __exit mei_exit(void)
 {
        unregister_chrdev_region(mei_devt, MEI_MAX_DEVS);
-       class_destroy(mei_class);
+       class_unregister(&mei_class);
        mei_cl_bus_exit();
 }