diff options
author | Corey Minyard <cminyard@mvista.com> | 2018-04-05 23:03:35 -0400 |
---|---|---|
committer | Corey Minyard <cminyard@mvista.com> | 2018-04-18 11:22:59 -0400 |
commit | 7960f18a56475bf2177c5ff56c72eb4c12c56440 (patch) | |
tree | bc60689ccf2baebdbff23ae2c027b296144c012d | |
parent | e86ee2d44b44056243da17c120ad258717cedf9b (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.c | 31 |
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 | ||
1212 | static void shutdown_smi(void *send_info); | ||
1212 | static const struct ipmi_smi_handlers handlers = { | 1213 | static 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 | } |
2302 | module_init(init_ipmi_si); | 2304 | module_init(init_ipmi_si); |
2303 | 2305 | ||
2304 | static void shutdown_one_si(struct smi_info *smi_info) | 2306 | static 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 | ||
2366 | static 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 | |||
2375 | static void cleanup_one_si(struct smi_info *smi_info) | 2380 | static void cleanup_one_si(struct smi_info *smi_info) |
2376 | { | 2381 | { |
2377 | if (!smi_info) | 2382 | if (!smi_info) |