Commit 392fa3a3 authored by Ivan Orlov's avatar Ivan Orlov Committed by Corey Minyard
Browse files

ipmi: make ipmi_class a static const structure



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

Cc: Corey Minyard <minyard@acm.org>
Cc: openipmi-developer@lists.sourceforge.net
Suggested-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarIvan Orlov <ivan.orlov0322@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Message-Id: <20230620143701.577657-2-gregkh@linuxfoundation.org>
Signed-off-by: default avatarCorey Minyard <minyard@acm.org>
parent b8d72e32
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -807,7 +807,9 @@ struct ipmi_reg_list {
static LIST_HEAD(reg_list);
static DEFINE_MUTEX(reg_list_mutex);

static struct class *ipmi_class;
static const struct class ipmi_class = {
	.name = "ipmi",
};

static void ipmi_new_smi(int if_num, struct device *device)
{
@@ -822,7 +824,7 @@ static void ipmi_new_smi(int if_num, struct device *device)
	entry->dev = dev;

	mutex_lock(&reg_list_mutex);
	device_create(ipmi_class, device, dev, NULL, "ipmi%d", if_num);
	device_create(&ipmi_class, device, dev, NULL, "ipmi%d", if_num);
	list_add(&entry->link, &reg_list);
	mutex_unlock(&reg_list_mutex);
}
@@ -840,7 +842,7 @@ static void ipmi_smi_gone(int if_num)
			break;
		}
	}
	device_destroy(ipmi_class, dev);
	device_destroy(&ipmi_class, dev);
	mutex_unlock(&reg_list_mutex);
}

@@ -860,15 +862,13 @@ static int __init init_ipmi_devintf(void)

	pr_info("ipmi device interface\n");

	ipmi_class = class_create("ipmi");
	if (IS_ERR(ipmi_class)) {
		pr_err("ipmi: can't register device class\n");
		return PTR_ERR(ipmi_class);
	}
	rv = class_register(&ipmi_class);
	if (rv)
		return rv;

	rv = register_chrdev(ipmi_major, DEVICE_NAME, &ipmi_fops);
	if (rv < 0) {
		class_destroy(ipmi_class);
		class_unregister(&ipmi_class);
		pr_err("ipmi: can't get major %d\n", ipmi_major);
		return rv;
	}
@@ -880,7 +880,7 @@ static int __init init_ipmi_devintf(void)
	rv = ipmi_smi_watcher_register(&smi_watcher);
	if (rv) {
		unregister_chrdev(ipmi_major, DEVICE_NAME);
		class_destroy(ipmi_class);
		class_unregister(&ipmi_class);
		pr_warn("ipmi: can't register smi watcher\n");
		return rv;
	}
@@ -895,11 +895,11 @@ static void __exit cleanup_ipmi(void)
	mutex_lock(&reg_list_mutex);
	list_for_each_entry_safe(entry, entry2, &reg_list, link) {
		list_del(&entry->link);
		device_destroy(ipmi_class, entry->dev);
		device_destroy(&ipmi_class, entry->dev);
		kfree(entry);
	}
	mutex_unlock(&reg_list_mutex);
	class_destroy(ipmi_class);
	class_unregister(&ipmi_class);
	ipmi_smi_watcher_unregister(&smi_watcher);
	unregister_chrdev(ipmi_major, DEVICE_NAME);
}