Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

USB: roles: make role_class a static const structure

Now that the driver core allows for struct class to be in read-only
memory, move the role_class structure to be declared at build time
placing it into read-only memory, instead of having to be dynamically
allocated at load time.

Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com>
Link: https://lore.kernel.org/r/20230620094412.508580-7-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Ivan Orlov and committed by
Greg Kroah-Hartman
044a6115 34d401a1

+9 -8
+9 -8
drivers/usb/roles/class.c
··· 14 14 #include <linux/mutex.h> 15 15 #include <linux/slab.h> 16 16 17 - static struct class *role_class; 17 + static const struct class role_class = { 18 + .name = "usb_role", 19 + }; 18 20 19 21 struct usb_role_switch { 20 22 struct device dev; ··· 97 95 if (id && !fwnode_property_present(fwnode, id)) 98 96 return NULL; 99 97 100 - dev = class_find_device_by_fwnode(role_class, fwnode); 98 + dev = class_find_device_by_fwnode(&role_class, fwnode); 101 99 102 100 return dev ? to_role_switch(dev) : ERR_PTR(-EPROBE_DEFER); 103 101 } ··· 113 111 return NULL; 114 112 } 115 113 116 - dev = class_find_device_by_fwnode(role_class, parent); 114 + dev = class_find_device_by_fwnode(&role_class, parent); 117 115 fwnode_handle_put(parent); 118 116 return dev ? to_role_switch(dev) : ERR_PTR(-EPROBE_DEFER); 119 117 } ··· 193 191 if (!fwnode) 194 192 return NULL; 195 193 196 - dev = class_find_device_by_fwnode(role_class, fwnode); 194 + dev = class_find_device_by_fwnode(&role_class, fwnode); 197 195 if (dev) 198 196 WARN_ON(!try_module_get(dev->parent->driver->owner)); 199 197 ··· 340 338 341 339 sw->dev.parent = parent; 342 340 sw->dev.fwnode = desc->fwnode; 343 - sw->dev.class = role_class; 341 + sw->dev.class = &role_class; 344 342 sw->dev.type = &usb_role_dev_type; 345 343 dev_set_drvdata(&sw->dev, desc->driver_data); 346 344 dev_set_name(&sw->dev, "%s-role-switch", ··· 394 392 395 393 static int __init usb_roles_init(void) 396 394 { 397 - role_class = class_create("usb_role"); 398 - return PTR_ERR_OR_ZERO(role_class); 395 + return class_register(&role_class); 399 396 } 400 397 subsys_initcall(usb_roles_init); 401 398 402 399 static void __exit usb_roles_exit(void) 403 400 { 404 - class_destroy(role_class); 401 + class_unregister(&role_class); 405 402 } 406 403 module_exit(usb_roles_exit); 407 404