virtio_console: make port class a static const structure
Now that the driver core allows for struct class to be in read-only memory, remove the class field of the ports_driver_data structure and create the port_class static class structure declared at build time which places it into read-only memory, instead of having it to be dynamically allocated at load time. Cc: Amit Shah <amit@kernel.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: virtualization@lists.linux-foundation.org Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com> Link: https://lore.kernel.org/r/20230620143751.578239-16-gregkh@linuxfoundation.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
98ab58a7a0
commit
11680fdf29
@@ -40,9 +40,6 @@
|
|||||||
* across multiple devices and multiple ports per device.
|
* across multiple devices and multiple ports per device.
|
||||||
*/
|
*/
|
||||||
struct ports_driver_data {
|
struct ports_driver_data {
|
||||||
/* Used for registering chardevs */
|
|
||||||
struct class *class;
|
|
||||||
|
|
||||||
/* Used for exporting per-port information to debugfs */
|
/* Used for exporting per-port information to debugfs */
|
||||||
struct dentry *debugfs_dir;
|
struct dentry *debugfs_dir;
|
||||||
|
|
||||||
@@ -55,6 +52,10 @@ struct ports_driver_data {
|
|||||||
|
|
||||||
static struct ports_driver_data pdrvdata;
|
static struct ports_driver_data pdrvdata;
|
||||||
|
|
||||||
|
static const struct class port_class = {
|
||||||
|
.name = "virtio-ports",
|
||||||
|
};
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(pdrvdata_lock);
|
static DEFINE_SPINLOCK(pdrvdata_lock);
|
||||||
static DECLARE_COMPLETION(early_console_added);
|
static DECLARE_COMPLETION(early_console_added);
|
||||||
|
|
||||||
@@ -1399,7 +1400,7 @@ static int add_port(struct ports_device *portdev, u32 id)
|
|||||||
"Error %d adding cdev for port %u\n", err, id);
|
"Error %d adding cdev for port %u\n", err, id);
|
||||||
goto free_cdev;
|
goto free_cdev;
|
||||||
}
|
}
|
||||||
port->dev = device_create(pdrvdata.class, &port->portdev->vdev->dev,
|
port->dev = device_create(&port_class, &port->portdev->vdev->dev,
|
||||||
devt, port, "vport%up%u",
|
devt, port, "vport%up%u",
|
||||||
port->portdev->vdev->index, id);
|
port->portdev->vdev->index, id);
|
||||||
if (IS_ERR(port->dev)) {
|
if (IS_ERR(port->dev)) {
|
||||||
@@ -1465,7 +1466,7 @@ static int add_port(struct ports_device *portdev, u32 id)
|
|||||||
|
|
||||||
free_inbufs:
|
free_inbufs:
|
||||||
free_device:
|
free_device:
|
||||||
device_destroy(pdrvdata.class, port->dev->devt);
|
device_destroy(&port_class, port->dev->devt);
|
||||||
free_cdev:
|
free_cdev:
|
||||||
cdev_del(port->cdev);
|
cdev_del(port->cdev);
|
||||||
free_port:
|
free_port:
|
||||||
@@ -1540,7 +1541,7 @@ static void unplug_port(struct port *port)
|
|||||||
port->portdev = NULL;
|
port->portdev = NULL;
|
||||||
|
|
||||||
sysfs_remove_group(&port->dev->kobj, &port_attribute_group);
|
sysfs_remove_group(&port->dev->kobj, &port_attribute_group);
|
||||||
device_destroy(pdrvdata.class, port->dev->devt);
|
device_destroy(&port_class, port->dev->devt);
|
||||||
cdev_del(port->cdev);
|
cdev_del(port->cdev);
|
||||||
|
|
||||||
debugfs_remove(port->debugfs_file);
|
debugfs_remove(port->debugfs_file);
|
||||||
@@ -2244,12 +2245,9 @@ static int __init virtio_console_init(void)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
pdrvdata.class = class_create("virtio-ports");
|
err = class_register(&port_class);
|
||||||
if (IS_ERR(pdrvdata.class)) {
|
if (err)
|
||||||
err = PTR_ERR(pdrvdata.class);
|
|
||||||
pr_err("Error %d creating virtio-ports class\n", err);
|
|
||||||
return err;
|
return err;
|
||||||
}
|
|
||||||
|
|
||||||
pdrvdata.debugfs_dir = debugfs_create_dir("virtio-ports", NULL);
|
pdrvdata.debugfs_dir = debugfs_create_dir("virtio-ports", NULL);
|
||||||
INIT_LIST_HEAD(&pdrvdata.consoles);
|
INIT_LIST_HEAD(&pdrvdata.consoles);
|
||||||
@@ -2271,7 +2269,7 @@ unregister:
|
|||||||
unregister_virtio_driver(&virtio_console);
|
unregister_virtio_driver(&virtio_console);
|
||||||
free:
|
free:
|
||||||
debugfs_remove_recursive(pdrvdata.debugfs_dir);
|
debugfs_remove_recursive(pdrvdata.debugfs_dir);
|
||||||
class_destroy(pdrvdata.class);
|
class_unregister(&port_class);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2282,7 +2280,7 @@ static void __exit virtio_console_fini(void)
|
|||||||
unregister_virtio_driver(&virtio_console);
|
unregister_virtio_driver(&virtio_console);
|
||||||
unregister_virtio_driver(&virtio_rproc_serial);
|
unregister_virtio_driver(&virtio_rproc_serial);
|
||||||
|
|
||||||
class_destroy(pdrvdata.class);
|
class_unregister(&port_class);
|
||||||
debugfs_remove_recursive(pdrvdata.debugfs_dir);
|
debugfs_remove_recursive(pdrvdata.debugfs_dir);
|
||||||
}
|
}
|
||||||
module_init(virtio_console_init);
|
module_init(virtio_console_init);
|
||||||
|
|||||||
Reference in New Issue
Block a user