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

Configure Feed

Select the types of activity you want to include in your feed.

USB: gadget: f_printer: make usb_gadget_class a static const structure

Now that the driver core allows for struct class to be in read-only
memory, move the usb_gadget_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-10-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Ivan Orlov and committed by
Greg Kroah-Hartman
2c10e7a0 e571e843

+11 -14
+11 -14
drivers/usb/gadget/function/f_printer.c
··· 54 54 #define DEFAULT_Q_LEN 10 /* same as legacy g_printer gadget */ 55 55 56 56 static int major, minors; 57 - static struct class *usb_gadget_class; 57 + static const struct class usb_gadget_class = { 58 + .name = "usb_printer_gadget", 59 + }; 60 + 58 61 static DEFINE_IDA(printer_ida); 59 62 static DEFINE_MUTEX(printer_ida_lock); /* protects access do printer_ida */ 60 63 ··· 1123 1120 1124 1121 /* Setup the sysfs files for the printer gadget. */ 1125 1122 devt = MKDEV(major, dev->minor); 1126 - pdev = device_create(usb_gadget_class, NULL, devt, 1123 + pdev = device_create(&usb_gadget_class, NULL, devt, 1127 1124 NULL, "g_printer%d", dev->minor); 1128 1125 if (IS_ERR(pdev)) { 1129 1126 ERROR(dev, "Failed to create device: g_printer\n"); ··· 1146 1143 return 0; 1147 1144 1148 1145 fail_cdev_add: 1149 - device_destroy(usb_gadget_class, devt); 1146 + device_destroy(&usb_gadget_class, devt); 1150 1147 1151 1148 fail_rx_reqs: 1152 1149 while (!list_empty(&dev->rx_reqs)) { ··· 1413 1410 1414 1411 dev = func_to_printer(f); 1415 1412 1416 - device_destroy(usb_gadget_class, MKDEV(major, dev->minor)); 1413 + device_destroy(&usb_gadget_class, MKDEV(major, dev->minor)); 1417 1414 1418 1415 /* Remove Character Device */ 1419 1416 cdev_del(&dev->printer_cdev); ··· 1515 1512 int status; 1516 1513 dev_t devt; 1517 1514 1518 - usb_gadget_class = class_create("usb_printer_gadget"); 1519 - if (IS_ERR(usb_gadget_class)) { 1520 - status = PTR_ERR(usb_gadget_class); 1521 - usb_gadget_class = NULL; 1522 - pr_err("unable to create usb_gadget class %d\n", status); 1515 + status = class_register(&usb_gadget_class); 1516 + if (status) 1523 1517 return status; 1524 - } 1525 1518 1526 1519 status = alloc_chrdev_region(&devt, 0, count, "USB printer gadget"); 1527 1520 if (status) { 1528 1521 pr_err("alloc_chrdev_region %d\n", status); 1529 - class_destroy(usb_gadget_class); 1530 - usb_gadget_class = NULL; 1522 + class_unregister(&usb_gadget_class); 1531 1523 return status; 1532 1524 } 1533 1525 ··· 1538 1540 unregister_chrdev_region(MKDEV(major, 0), minors); 1539 1541 major = minors = 0; 1540 1542 } 1541 - class_destroy(usb_gadget_class); 1542 - usb_gadget_class = NULL; 1543 + class_unregister(&usb_gadget_class); 1543 1544 }