ipmi_si: Convert over to a shutdown handler
authorCorey Minyard <cminyard@mvista.com>
Fri, 6 Apr 2018 03:03:35 +0000 (22:03 -0500)
committerCorey Minyard <cminyard@mvista.com>
Wed, 18 Apr 2018 15:22:59 +0000 (10:22 -0500)
Move the shutdown handling to a shutdown function called from
the IPMI core code.  That makes for a cleaner shutdown.

Signed-off-by: Corey Minyard <cminyard@mvista.com>
drivers/char/ipmi/ipmi_si_intf.c

index 24702ab..00a3240 100644 (file)
@@ -1209,9 +1209,11 @@ static void set_maintenance_mode(void *send_info, bool enable)
                atomic_set(&smi_info->req_events, 0);
 }
 
+static void shutdown_smi(void *send_info);
 static const struct ipmi_smi_handlers handlers = {
        .owner                  = THIS_MODULE,
        .start_processing       = smi_start_processing,
+       .shutdown               = shutdown_smi,
        .get_smi_info           = get_smi_info,
        .sender                 = sender,
        .request_events         = request_events,
@@ -2301,20 +2303,9 @@ skip_fallback_noirq:
 }
 module_init(init_ipmi_si);
 
-static void shutdown_one_si(struct smi_info *smi_info)
+static void shutdown_smi(void *send_info)
 {
-       int           rv = 0;
-
-       if (smi_info->intf) {
-               ipmi_smi_t intf = smi_info->intf;
-
-               smi_info->intf = NULL;
-               rv = ipmi_unregister_smi(intf);
-               if (rv) {
-                       pr_err(PFX "Unable to unregister device: errno=%d\n",
-                              rv);
-               }
-       }
+       struct smi_info *smi_info = send_info;
 
        if (smi_info->dev_group_added) {
                device_remove_group(smi_info->io.dev, &ipmi_si_dev_attr_group);
@@ -2372,6 +2363,20 @@ static void shutdown_one_si(struct smi_info *smi_info)
        smi_info->si_sm = NULL;
 }
 
+static void shutdown_one_si(struct smi_info *smi_info)
+{
+       int rv;
+       ipmi_smi_t intf = smi_info->intf;
+
+       if (!intf)
+               return;
+
+       smi_info->intf = NULL;
+       rv = ipmi_unregister_smi(intf);
+       if (rv)
+               pr_err(PFX "Unable to unregister device: errno=%d\n", rv);
+}
+
 static void cleanup_one_si(struct smi_info *smi_info)
 {
        if (!smi_info)