From f60231885fa986fcd5503f4eb9ef3e53a2002b12 Mon Sep 17 00:00:00 2001 From: Corey Minyard Date: Tue, 29 Mar 2022 08:31:36 -0500 Subject: [PATCH] ipmi: Add a sysfs interface to view the number of users A count of users is kept for each interface, allow it to be viewed. Based on work by Chen Guanqiao Cc: Chen Guanqiao Signed-off-by: Corey Minyard --- drivers/char/ipmi/ipmi_msghandler.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c index 65a9e26..8b5d397 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -457,6 +457,8 @@ struct ipmi_smi { struct list_head users; struct srcu_struct users_srcu; atomic_t nr_users; + struct device_attribute nr_users_devattr; + /* Used for wake ups at startup. */ wait_queue_head_t waitq; @@ -3506,6 +3508,17 @@ void ipmi_poll_interface(struct ipmi_user *user) } EXPORT_SYMBOL(ipmi_poll_interface); +static ssize_t nr_users_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct ipmi_smi *intf = container_of(attr, + struct ipmi_smi, nr_users_devattr); + + return sysfs_emit(buf, "%d\n", atomic_read(&intf->nr_users)); +} +static DEVICE_ATTR_RO(nr_users); + static void redo_bmc_reg(struct work_struct *work) { struct ipmi_smi *intf = container_of(work, struct ipmi_smi, @@ -3628,6 +3641,12 @@ int ipmi_add_smi(struct module *owner, if (rv) goto out_err_bmc_reg; + intf->nr_users_devattr = dev_attr_nr_users; + sysfs_attr_init(&intf->nr_users_devattr.attr); + rv = device_create_file(intf->si_dev, &intf->nr_users_devattr); + if (rv) + goto out_err_bmc_reg; + /* * Keep memory order straight for RCU readers. Make * sure everything else is committed to memory before @@ -3727,6 +3746,8 @@ void ipmi_unregister_smi(struct ipmi_smi *intf) /* At this point no users can be added to the interface. */ + device_remove_file(intf->si_dev, &intf->nr_users_devattr); + /* * Call all the watcher interfaces to tell them that * an interface is going away. -- 2.7.4