Skip to content

Commit

Permalink
mei: make mei_class a static const structure
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Ivan Orlov <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
ivanorlov2206 authored and gregkh committed Aug 22, 2023
1 parent 979ca1c commit df8e2c3
Showing 1 changed file with 12 additions and 13 deletions.
25 changes: 12 additions & 13 deletions drivers/misc/mei/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@
#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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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);
}
Expand All @@ -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) {
Expand All @@ -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();
}

Expand Down

0 comments on commit df8e2c3

Please sign in to comment.