rpmsg: core: Make rpmsg_class constant
authorRicardo B. Marliere <ricardo@marliere.net>
Tue, 5 Mar 2024 18:28:27 +0000 (15:28 -0300)
committerMathieu Poirier <mathieu.poirier@linaro.org>
Tue, 26 Mar 2024 17:25:13 +0000 (11:25 -0600)
Since commit 43a7206b0963 ("driver core: class: make class_register() take
a const *"), the driver core allows for struct class to be in read-only
memory, so move the rpmsg_class structure to be declared at build time
placing it into read-only memory, instead of having to be dynamically
allocated at boot time.

Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ricardo B. Marliere <ricardo@marliere.net>
Link: https://lore.kernel.org/r/20240305-class_cleanup-remoteproc-v1-1-19373374e003@marliere.net
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
drivers/rpmsg/rpmsg_char.c
drivers/rpmsg/rpmsg_core.c
drivers/rpmsg/rpmsg_ctrl.c
drivers/rpmsg/rpmsg_internal.h

index 1cb8d7474428afabc65071c2f543bb483736229c..d7a342510902131a6dd91374d191f17063b59250 100644 (file)
@@ -423,7 +423,7 @@ static struct rpmsg_eptdev *rpmsg_chrdev_eptdev_alloc(struct rpmsg_device *rpdev
        init_waitqueue_head(&eptdev->readq);
 
        device_initialize(dev);
-       dev->class = rpmsg_class;
+       dev->class = &rpmsg_class;
        dev->parent = parent;
        dev->groups = rpmsg_eptdev_groups;
        dev_set_drvdata(dev, eptdev);
index 4295c01a2861bc04a817aeaa7de857930db9b08a..0fa08266404dd3c7d7a9d1a7bac348ca571fc042 100644 (file)
@@ -20,7 +20,9 @@
 
 #include "rpmsg_internal.h"
 
-struct class *rpmsg_class;
+const struct class rpmsg_class = {
+       .name = "rpmsg",
+};
 EXPORT_SYMBOL(rpmsg_class);
 
 /**
@@ -715,16 +717,16 @@ static int __init rpmsg_init(void)
 {
        int ret;
 
-       rpmsg_class = class_create("rpmsg");
-       if (IS_ERR(rpmsg_class)) {
-               pr_err("failed to create rpmsg class\n");
-               return PTR_ERR(rpmsg_class);
+       ret = class_register(&rpmsg_class);
+       if (ret) {
+               pr_err("failed to register rpmsg class\n");
+               return ret;
        }
 
        ret = bus_register(&rpmsg_bus);
        if (ret) {
                pr_err("failed to register rpmsg bus: %d\n", ret);
-               class_destroy(rpmsg_class);
+               class_destroy(&rpmsg_class);
        }
        return ret;
 }
@@ -733,7 +735,7 @@ postcore_initcall(rpmsg_init);
 static void __exit rpmsg_fini(void)
 {
        bus_unregister(&rpmsg_bus);
-       class_destroy(rpmsg_class);
+       class_destroy(&rpmsg_class);
 }
 module_exit(rpmsg_fini);
 
index c312794ba4b3f094295bc758812b90859132fa8c..28f57945ccd9f7f1e591e8bf4126cfa626713f10 100644 (file)
@@ -150,7 +150,7 @@ static int rpmsg_ctrldev_probe(struct rpmsg_device *rpdev)
        dev = &ctrldev->dev;
        device_initialize(dev);
        dev->parent = &rpdev->dev;
-       dev->class = rpmsg_class;
+       dev->class = &rpmsg_class;
 
        mutex_init(&ctrldev->ctrl_lock);
        cdev_init(&ctrldev->cdev, &rpmsg_ctrldev_fops);
index b950d6f790a34011e34d35ea87b92da1b8022832..a3ba768138f15a02ff6bd51a0b7f17640d9fa024 100644 (file)
@@ -18,7 +18,7 @@
 #define to_rpmsg_device(d) container_of(d, struct rpmsg_device, dev)
 #define to_rpmsg_driver(d) container_of(d, struct rpmsg_driver, drv)
 
-extern struct class *rpmsg_class;
+extern const struct class rpmsg_class;
 
 /**
  * struct rpmsg_device_ops - indirection table for the rpmsg_device operations