mips: mt: make mt_class constant
authorRicardo B. Marliere <ricardo@marliere.net>
Tue, 5 Mar 2024 13:37:50 +0000 (10:37 -0300)
committerThomas Bogendoerfer <tsbogend@alpha.franken.de>
Thu, 7 Mar 2024 16:18:50 +0000 (17:18 +0100)
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 mt_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>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
arch/mips/include/asm/mips_mt.h
arch/mips/kernel/mips-mt.c
arch/mips/kernel/rtlx-mt.c

index b444523..28917f1 100644 (file)
@@ -26,6 +26,6 @@ static inline void mips_mt_set_cpuoptions(void) { }
 #endif
 
 struct class;
-extern struct class *mt_class;
+extern const struct class mt_class;
 
 #endif /* __ASM_MIPS_MT_H */
index c07d644..c938ba2 100644 (file)
@@ -229,19 +229,13 @@ void mips_mt_set_cpuoptions(void)
        }
 }
 
-struct class *mt_class;
+const struct class mt_class = {
+       .name = "mt",
+};
 
 static int __init mips_mt_init(void)
 {
-       struct class *mtc;
-
-       mtc = class_create("mt");
-       if (IS_ERR(mtc))
-               return PTR_ERR(mtc);
-
-       mt_class = mtc;
-
-       return 0;
+       return class_register(&mt_class);
 }
 
 subsys_initcall(mips_mt_init);
index 38c6925..ff7535d 100644 (file)
@@ -95,11 +95,11 @@ int __init rtlx_module_init(void)
                atomic_set(&channel_wqs[i].in_open, 0);
                mutex_init(&channel_wqs[i].mutex);
 
-               dev = device_create(mt_class, NULL, MKDEV(major, i), NULL,
+               dev = device_create(&mt_class, NULL, MKDEV(major, i), NULL,
                                    "%s%d", RTLX_MODULE_NAME, i);
                if (IS_ERR(dev)) {
                        while (i--)
-                               device_destroy(mt_class, MKDEV(major, i));
+                               device_destroy(&mt_class, MKDEV(major, i));
 
                        err = PTR_ERR(dev);
                        goto out_chrdev;
@@ -127,7 +127,7 @@ int __init rtlx_module_init(void)
 
 out_class:
        for (i = 0; i < RTLX_CHANNELS; i++)
-               device_destroy(mt_class, MKDEV(major, i));
+               device_destroy(&mt_class, MKDEV(major, i));
 out_chrdev:
        unregister_chrdev(major, RTLX_MODULE_NAME);
 
@@ -139,7 +139,7 @@ void __exit rtlx_module_exit(void)
        int i;
 
        for (i = 0; i < RTLX_CHANNELS; i++)
-               device_destroy(mt_class, MKDEV(major, i));
+               device_destroy(&mt_class, MKDEV(major, i));
 
        unregister_chrdev(major, RTLX_MODULE_NAME);