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

misc: genwqe: make class_genwqe a static const structure

Now that the driver core allows for struct class to be in read-only
memory, move the class_genwqe structure to be declared at build time
placing it into read-only memory, instead of having to be dynamically
allocated at boot time. Update the 'class_genwqe' field of the
'genwqe_dev' struct correspondingly.

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

authored by

Ivan Orlov and committed by
Greg Kroah-Hartman
b5fa3379 60df28ac

+27 -24
+26 -23
drivers/misc/genwqe/card_base.c
··· 42 42 MODULE_LICENSE("GPL"); 43 43 44 44 static char genwqe_driver_name[] = GENWQE_DEVNAME; 45 - static struct class *class_genwqe; 45 + 46 46 static struct dentry *debugfs_genwqe; 47 47 static struct genwqe_dev *genwqe_devices[GENWQE_CARD_NO_MAX]; 48 48 ··· 105 105 MODULE_DEVICE_TABLE(pci, genwqe_device_table); 106 106 107 107 /** 108 + * genwqe_devnode() - Set default access mode for genwqe devices. 109 + * @dev: Pointer to device (unused) 110 + * @mode: Carrier to pass-back given mode (permissions) 111 + * 112 + * Default mode should be rw for everybody. Do not change default 113 + * device name. 114 + */ 115 + static char *genwqe_devnode(const struct device *dev, umode_t *mode) 116 + { 117 + if (mode) 118 + *mode = 0666; 119 + return NULL; 120 + } 121 + 122 + static const struct class class_genwqe = { 123 + .name = GENWQE_DEVNAME, 124 + .devnode = genwqe_devnode, 125 + }; 126 + 127 + /** 108 128 * genwqe_dev_alloc() - Create and prepare a new card descriptor 109 129 * 110 130 * Return: Pointer to card descriptor, or ERR_PTR(err) on error ··· 146 126 return ERR_PTR(-ENOMEM); 147 127 148 128 cd->card_idx = i; 149 - cd->class_genwqe = class_genwqe; 129 + cd->class_genwqe = &class_genwqe; 150 130 cd->debugfs_genwqe = debugfs_genwqe; 151 131 152 132 /* ··· 1360 1340 }; 1361 1341 1362 1342 /** 1363 - * genwqe_devnode() - Set default access mode for genwqe devices. 1364 - * @dev: Pointer to device (unused) 1365 - * @mode: Carrier to pass-back given mode (permissions) 1366 - * 1367 - * Default mode should be rw for everybody. Do not change default 1368 - * device name. 1369 - */ 1370 - static char *genwqe_devnode(const struct device *dev, umode_t *mode) 1371 - { 1372 - if (mode) 1373 - *mode = 0666; 1374 - return NULL; 1375 - } 1376 - 1377 - /** 1378 1343 * genwqe_init_module() - Driver registration and initialization 1379 1344 */ 1380 1345 static int __init genwqe_init_module(void) 1381 1346 { 1382 1347 int rc; 1383 1348 1384 - class_genwqe = class_create(GENWQE_DEVNAME); 1385 - if (IS_ERR(class_genwqe)) { 1349 + rc = class_register(&class_genwqe); 1350 + if (rc) { 1386 1351 pr_err("[%s] create class failed\n", __func__); 1387 1352 return -ENOMEM; 1388 1353 } 1389 - 1390 - class_genwqe->devnode = genwqe_devnode; 1391 1354 1392 1355 debugfs_genwqe = debugfs_create_dir(GENWQE_DEVNAME, NULL); 1393 1356 ··· 1384 1381 1385 1382 err_out0: 1386 1383 debugfs_remove(debugfs_genwqe); 1387 - class_destroy(class_genwqe); 1384 + class_unregister(&class_genwqe); 1388 1385 return rc; 1389 1386 } 1390 1387 ··· 1395 1392 { 1396 1393 pci_unregister_driver(&genwqe_driver); 1397 1394 debugfs_remove(debugfs_genwqe); 1398 - class_destroy(class_genwqe); 1395 + class_unregister(&class_genwqe); 1399 1396 } 1400 1397 1401 1398 module_init(genwqe_init_module);
+1 -1
drivers/misc/genwqe/card_base.h
··· 289 289 290 290 /* char device */ 291 291 dev_t devnum_genwqe; /* major/minor num card */ 292 - struct class *class_genwqe; /* reference to class object */ 292 + const struct class *class_genwqe; /* reference to class object */ 293 293 struct device *dev; /* for device creation */ 294 294 struct cdev cdev_genwqe; /* char device for card */ 295 295