Skip to content

Commit ab21f3d

Browse files
rbmarlierekeithbusch
authored andcommitted
nvme: core: constify struct class usage
Since commit 43a7206 ("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 structures nvme_class, nvme_subsys_class and nvme_ns_chr_class to be declared at build time placing them 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> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Keith Busch <kbusch@kernel.org>
1 parent 5f5ea0e commit ab21f3d

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

drivers/nvme/host/core.c

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,21 @@ static DEFINE_MUTEX(nvme_subsystems_lock);
114114

115115
static DEFINE_IDA(nvme_instance_ida);
116116
static dev_t nvme_ctrl_base_chr_devt;
117-
static struct class *nvme_class;
118-
static struct class *nvme_subsys_class;
117+
static int nvme_class_uevent(const struct device *dev, struct kobj_uevent_env *env);
118+
static const struct class nvme_class = {
119+
.name = "nvme",
120+
.dev_uevent = nvme_class_uevent,
121+
};
122+
123+
static const struct class nvme_subsys_class = {
124+
.name = "nvme-subsystem",
125+
};
119126

120127
static DEFINE_IDA(nvme_ns_chr_minor_ida);
121128
static dev_t nvme_ns_chr_devt;
122-
static struct class *nvme_ns_chr_class;
129+
static const struct class nvme_ns_chr_class = {
130+
.name = "nvme-generic",
131+
};
123132

124133
static void nvme_put_subsystem(struct nvme_subsystem *subsys);
125134
static void nvme_remove_invalid_namespaces(struct nvme_ctrl *ctrl,
@@ -2881,7 +2890,7 @@ static int nvme_init_subsystem(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id)
28812890
subsys->awupf = le16_to_cpu(id->awupf);
28822891
nvme_mpath_default_iopolicy(subsys);
28832892

2884-
subsys->dev.class = nvme_subsys_class;
2893+
subsys->dev.class = &nvme_subsys_class;
28852894
subsys->dev.release = nvme_release_subsystem;
28862895
subsys->dev.groups = nvme_subsys_attrs_groups;
28872896
dev_set_name(&subsys->dev, "nvme-subsys%d", ctrl->instance);
@@ -3435,7 +3444,7 @@ int nvme_cdev_add(struct cdev *cdev, struct device *cdev_device,
34353444
if (minor < 0)
34363445
return minor;
34373446
cdev_device->devt = MKDEV(MAJOR(nvme_ns_chr_devt), minor);
3438-
cdev_device->class = nvme_ns_chr_class;
3447+
cdev_device->class = &nvme_ns_chr_class;
34393448
cdev_device->release = nvme_cdev_rel;
34403449
device_initialize(cdev_device);
34413450
cdev_init(cdev, fops);
@@ -4627,7 +4636,7 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev,
46274636
ctrl->device = &ctrl->ctrl_device;
46284637
ctrl->device->devt = MKDEV(MAJOR(nvme_ctrl_base_chr_devt),
46294638
ctrl->instance);
4630-
ctrl->device->class = nvme_class;
4639+
ctrl->device->class = &nvme_class;
46314640
ctrl->device->parent = ctrl->dev;
46324641
if (ops->dev_attr_groups)
46334642
ctrl->device->groups = ops->dev_attr_groups;
@@ -4860,42 +4869,36 @@ static int __init nvme_core_init(void)
48604869
if (result < 0)
48614870
goto destroy_delete_wq;
48624871

4863-
nvme_class = class_create("nvme");
4864-
if (IS_ERR(nvme_class)) {
4865-
result = PTR_ERR(nvme_class);
4872+
result = class_register(&nvme_class);
4873+
if (result)
48664874
goto unregister_chrdev;
4867-
}
4868-
nvme_class->dev_uevent = nvme_class_uevent;
48694875

4870-
nvme_subsys_class = class_create("nvme-subsystem");
4871-
if (IS_ERR(nvme_subsys_class)) {
4872-
result = PTR_ERR(nvme_subsys_class);
4876+
result = class_register(&nvme_subsys_class);
4877+
if (result)
48734878
goto destroy_class;
4874-
}
48754879

48764880
result = alloc_chrdev_region(&nvme_ns_chr_devt, 0, NVME_MINORS,
48774881
"nvme-generic");
48784882
if (result < 0)
48794883
goto destroy_subsys_class;
48804884

4881-
nvme_ns_chr_class = class_create("nvme-generic");
4882-
if (IS_ERR(nvme_ns_chr_class)) {
4883-
result = PTR_ERR(nvme_ns_chr_class);
4885+
result = class_register(&nvme_ns_chr_class);
4886+
if (result)
48844887
goto unregister_generic_ns;
4885-
}
4888+
48864889
result = nvme_init_auth();
48874890
if (result)
48884891
goto destroy_ns_chr;
48894892
return 0;
48904893

48914894
destroy_ns_chr:
4892-
class_destroy(nvme_ns_chr_class);
4895+
class_unregister(&nvme_ns_chr_class);
48934896
unregister_generic_ns:
48944897
unregister_chrdev_region(nvme_ns_chr_devt, NVME_MINORS);
48954898
destroy_subsys_class:
4896-
class_destroy(nvme_subsys_class);
4899+
class_unregister(&nvme_subsys_class);
48974900
destroy_class:
4898-
class_destroy(nvme_class);
4901+
class_unregister(&nvme_class);
48994902
unregister_chrdev:
49004903
unregister_chrdev_region(nvme_ctrl_base_chr_devt, NVME_MINORS);
49014904
destroy_delete_wq:
@@ -4911,9 +4914,9 @@ static int __init nvme_core_init(void)
49114914
static void __exit nvme_core_exit(void)
49124915
{
49134916
nvme_exit_auth();
4914-
class_destroy(nvme_ns_chr_class);
4915-
class_destroy(nvme_subsys_class);
4916-
class_destroy(nvme_class);
4917+
class_unregister(&nvme_ns_chr_class);
4918+
class_unregister(&nvme_subsys_class);
4919+
class_unregister(&nvme_class);
49174920
unregister_chrdev_region(nvme_ns_chr_devt, NVME_MINORS);
49184921
unregister_chrdev_region(nvme_ctrl_base_chr_devt, NVME_MINORS);
49194922
destroy_workqueue(nvme_delete_wq);

0 commit comments

Comments
 (0)