aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorey Minyard <cminyard@mvista.com>2018-04-05 23:03:35 -0400
committerCorey Minyard <cminyard@mvista.com>2018-04-18 11:22:59 -0400
commit7960f18a56475bf2177c5ff56c72eb4c12c56440 (patch)
treebc60689ccf2baebdbff23ae2c027b296144c012d
parente86ee2d44b44056243da17c120ad258717cedf9b (diff)
ipmi_si: Convert over to a shutdown handler
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>
-rw-r--r--drivers/char/ipmi/ipmi_si_intf.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
index 24702ab853a8..00a324060dcd 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -1209,9 +1209,11 @@ static void set_maintenance_mode(void *send_info, bool enable)
1209 atomic_set(&smi_info->req_events, 0); 1209 atomic_set(&smi_info->req_events, 0);
1210} 1210}
1211 1211
1212static void shutdown_smi(void *send_info);
1212static const struct ipmi_smi_handlers handlers = { 1213static const struct ipmi_smi_handlers handlers = {
1213 .owner = THIS_MODULE, 1214 .owner = THIS_MODULE,
1214 .start_processing = smi_start_processing, 1215 .start_processing = smi_start_processing,
1216 .shutdown = shutdown_smi,
1215 .get_smi_info = get_smi_info, 1217 .get_smi_info = get_smi_info,
1216 .sender = sender, 1218 .sender = sender,
1217 .request_events = request_events, 1219 .request_events = request_events,
@@ -2301,20 +2303,9 @@ skip_fallback_noirq:
2301} 2303}
2302module_init(init_ipmi_si); 2304module_init(init_ipmi_si);
2303 2305
2304static void shutdown_one_si(struct smi_info *smi_info) 2306static void shutdown_smi(void *send_info)
2305{ 2307{
2306 int rv = 0; 2308 struct smi_info *smi_info = send_info;
2307
2308 if (smi_info->intf) {
2309 ipmi_smi_t intf = smi_info->intf;
2310
2311 smi_info->intf = NULL;
2312 rv = ipmi_unregister_smi(intf);
2313 if (rv) {
2314 pr_err(PFX "Unable to unregister device: errno=%d\n",
2315 rv);
2316 }
2317 }
2318 2309
2319 if (smi_info->dev_group_added) { 2310 if (smi_info->dev_group_added) {
2320 device_remove_group(smi_info->io.dev, &ipmi_si_dev_attr_group); 2311 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)
2372 smi_info->si_sm = NULL; 2363 smi_info->si_sm = NULL;
2373} 2364}
2374 2365
2366static void shutdown_one_si(struct smi_info *smi_info)
2367{
2368 int rv;
2369 ipmi_smi_t intf = smi_info->intf;
2370
2371 if (!intf)
2372 return;
2373
2374 smi_info->intf = NULL;
2375 rv = ipmi_unregister_smi(intf);
2376 if (rv)
2377 pr_err(PFX "Unable to unregister device: errno=%d\n", rv);
2378}
2379
2375static void cleanup_one_si(struct smi_info *smi_info) 2380static void cleanup_one_si(struct smi_info *smi_info)
2376{ 2381{
2377 if (!smi_info) 2382 if (!smi_info)