From: Jeremy Kerr <j...@ozlabs.org> In an upcoming change, we'll want to grab a reference to the ipmi_smi_t from a struct bmc_device. This change adds a pointer to allow this.
Signed-off-by: Jeremy Kerr <j...@ozlabs.org> Reworked to support multiple interfaces on a BMC. Signed-off-by: Corey Minyard <cminy...@mvista.com> --- drivers/char/ipmi/ipmi_msghandler.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c index 7579f19a..2fefb5f 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -265,6 +265,7 @@ struct ipmi_proc_entry { struct bmc_device { struct platform_device pdev; struct ipmi_device_id id; + struct list_head intfs; unsigned char guid[16]; int guid_set; char name[16]; @@ -403,6 +404,7 @@ struct ipmi_smi { wait_queue_head_t waitq; struct bmc_device *bmc; + struct list_head bmc_link; char *my_dev_name; /* @@ -2611,9 +2613,10 @@ static void ipmi_bmc_unregister(ipmi_smi_t intf) } mutex_lock(&ipmidriver_mutex); + list_del(&intf->bmc_link); + intf->bmc = NULL; kref_put(&bmc->usecount, cleanup_bmc_device); mutex_unlock(&ipmidriver_mutex); - intf->bmc = NULL; } static int ipmi_bmc_register(ipmi_smi_t intf, int ifnum) @@ -2641,7 +2644,10 @@ static int ipmi_bmc_register(ipmi_smi_t intf, int ifnum) */ if (old_bmc) { kfree(bmc); + mutex_lock(&ipmidriver_mutex); intf->bmc = old_bmc; + list_add_tail(&intf->bmc_link, &bmc->intfs); + mutex_unlock(&ipmidriver_mutex); bmc = old_bmc; printk(KERN_INFO @@ -2690,6 +2696,7 @@ static int ipmi_bmc_register(ipmi_smi_t intf, int ifnum) kref_init(&bmc->usecount); rv = platform_device_register(&bmc->pdev); + list_add_tail(&intf->bmc_link, &bmc->intfs); mutex_unlock(&ipmidriver_mutex); if (rv) { put_device(&bmc->pdev.dev); @@ -2967,6 +2974,7 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers, kfree(intf); return -ENOMEM; } + INIT_LIST_HEAD(&intf->bmc->intfs); intf->intf_num = -1; /* Mark it invalid for now. */ kref_init(&intf->refcount); intf->bmc->id = *device_id; -- 2.7.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openipmi-developer mailing list Openipmi-developer@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openipmi-developer