HID: hidraw: make hidraw_class structure const
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Jun 2023 18:31:43 +0000 (20:31 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 5 Aug 2023 06:31:41 +0000 (08:31 +0200)
Now that the driver core allows for struct class to be in read-only
memory, making all 'class' structures to be declared at build time
placing them into read-only memory, instead of having to be dynamically
allocated at load time.

Cc: Jiri Kosina <jikos@kernel.org>
Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Cc: linux-input@vger.kernel.org
Cc: Ivan Orlov <ivan.orlov0322@gmail.com>
Link: https://lore.kernel.org/r/20230620183141.681353-4-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hid/hidraw.c

index e63c56a..13c8dd8 100644 (file)
@@ -32,7 +32,9 @@
 
 static int hidraw_major;
 static struct cdev hidraw_cdev;
-static struct class *hidraw_class;
+static const struct class hidraw_class = {
+       .name = "hidraw",
+};
 static struct hidraw *hidraw_table[HIDRAW_MAX_DEVICES];
 static DECLARE_RWSEM(minors_rwsem);
 
@@ -329,7 +331,7 @@ static void drop_ref(struct hidraw *hidraw, int exists_bit)
                        hid_hw_close(hidraw->hid);
                        wake_up_interruptible(&hidraw->wait);
                }
-               device_destroy(hidraw_class,
+               device_destroy(&hidraw_class,
                               MKDEV(hidraw_major, hidraw->minor));
        } else {
                --hidraw->open;
@@ -569,7 +571,7 @@ int hidraw_connect(struct hid_device *hid)
                goto out;
        }
 
-       dev->dev = device_create(hidraw_class, &hid->dev, MKDEV(hidraw_major, minor),
+       dev->dev = device_create(&hidraw_class, &hid->dev, MKDEV(hidraw_major, minor),
                                 NULL, "%s%d", "hidraw", minor);
 
        if (IS_ERR(dev->dev)) {
@@ -623,11 +625,9 @@ int __init hidraw_init(void)
 
        hidraw_major = MAJOR(dev_id);
 
-       hidraw_class = class_create("hidraw");
-       if (IS_ERR(hidraw_class)) {
-               result = PTR_ERR(hidraw_class);
+       result = class_register(&hidraw_class);
+       if (result)
                goto error_cdev;
-       }
 
         cdev_init(&hidraw_cdev, &hidraw_ops);
        result = cdev_add(&hidraw_cdev, dev_id, HIDRAW_MAX_DEVICES);
@@ -639,7 +639,7 @@ out:
        return result;
 
 error_class:
-       class_destroy(hidraw_class);
+       class_unregister(&hidraw_class);
 error_cdev:
        unregister_chrdev_region(dev_id, HIDRAW_MAX_DEVICES);
        goto out;
@@ -650,7 +650,7 @@ void hidraw_exit(void)
        dev_t dev_id = MKDEV(hidraw_major, 0);
 
        cdev_del(&hidraw_cdev);
-       class_destroy(hidraw_class);
+       class_unregister(&hidraw_class);
        unregister_chrdev_region(dev_id, HIDRAW_MAX_DEVICES);
 
 }