fpga: fpga-mgr: make fpga_mgr_class a static const structure

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

Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com>
Acked-by: Xu Yilun <yilun.xu@intel.com>
Link: https://lore.kernel.org/r/20230811073043.52808-2-ivan.orlov0322@gmail.com
Signed-off-by: Xu Yilun <yilun.xu@intel.com>
This commit is contained in:
Ivan Orlov 2023-08-11 11:30:42 +04:00 committed by Xu Yilun
parent 7bb2d2190d
commit 909960e2e2
No known key found for this signature in database
GPG Key ID: FCB70381A4A08CDA
1 changed files with 12 additions and 13 deletions

View File

@ -19,7 +19,7 @@
#include <linux/highmem.h> #include <linux/highmem.h>
static DEFINE_IDA(fpga_mgr_ida); static DEFINE_IDA(fpga_mgr_ida);
static struct class *fpga_mgr_class; static const struct class fpga_mgr_class;
struct fpga_mgr_devres { struct fpga_mgr_devres {
struct fpga_manager *mgr; struct fpga_manager *mgr;
@ -693,7 +693,7 @@ static int fpga_mgr_dev_match(struct device *dev, const void *data)
*/ */
struct fpga_manager *fpga_mgr_get(struct device *dev) struct fpga_manager *fpga_mgr_get(struct device *dev)
{ {
struct device *mgr_dev = class_find_device(fpga_mgr_class, NULL, dev, struct device *mgr_dev = class_find_device(&fpga_mgr_class, NULL, dev,
fpga_mgr_dev_match); fpga_mgr_dev_match);
if (!mgr_dev) if (!mgr_dev)
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
@ -713,7 +713,7 @@ struct fpga_manager *of_fpga_mgr_get(struct device_node *node)
{ {
struct device *dev; struct device *dev;
dev = class_find_device_by_of_node(fpga_mgr_class, node); dev = class_find_device_by_of_node(&fpga_mgr_class, node);
if (!dev) if (!dev)
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
@ -809,7 +809,7 @@ fpga_mgr_register_full(struct device *parent, const struct fpga_manager_info *in
mgr->priv = info->priv; mgr->priv = info->priv;
mgr->compat_id = info->compat_id; mgr->compat_id = info->compat_id;
mgr->dev.class = fpga_mgr_class; mgr->dev.class = &fpga_mgr_class;
mgr->dev.groups = mops->groups; mgr->dev.groups = mops->groups;
mgr->dev.parent = parent; mgr->dev.parent = parent;
mgr->dev.of_node = parent->of_node; mgr->dev.of_node = parent->of_node;
@ -967,23 +967,22 @@ static void fpga_mgr_dev_release(struct device *dev)
kfree(mgr); kfree(mgr);
} }
static const struct class fpga_mgr_class = {
.name = "fpga_manager",
.dev_groups = fpga_mgr_groups,
.dev_release = fpga_mgr_dev_release,
};
static int __init fpga_mgr_class_init(void) static int __init fpga_mgr_class_init(void)
{ {
pr_info("FPGA manager framework\n"); pr_info("FPGA manager framework\n");
fpga_mgr_class = class_create("fpga_manager"); return class_register(&fpga_mgr_class);
if (IS_ERR(fpga_mgr_class))
return PTR_ERR(fpga_mgr_class);
fpga_mgr_class->dev_groups = fpga_mgr_groups;
fpga_mgr_class->dev_release = fpga_mgr_dev_release;
return 0;
} }
static void __exit fpga_mgr_class_exit(void) static void __exit fpga_mgr_class_exit(void)
{ {
class_destroy(fpga_mgr_class); class_unregister(&fpga_mgr_class);
ida_destroy(&fpga_mgr_ida); ida_destroy(&fpga_mgr_ida);
} }