Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93c303d2 authored by Corey Minyard's avatar Corey Minyard
Browse files

ipmi_si: Clean up shutdown a bit

parent 57bccb4e
Loading
Loading
Loading
Loading
+11 −21
Original line number Diff line number Diff line
@@ -261,7 +261,6 @@ static int num_max_busy_us;
static bool unload_when_empty = true;

static int try_smi_init(struct smi_info *smi);
static void shutdown_one_si(struct smi_info *smi_info);
static void cleanup_one_si(struct smi_info *smi_info);
static void cleanup_ipmi_si(void);

@@ -2003,14 +2002,8 @@ int ipmi_si_add_smi(struct si_sm_io *io)

	list_add_tail(&new_smi->link, &smi_infos);

	if (initialized) {
	if (initialized)
		rv = try_smi_init(new_smi);
		if (rv) {
			cleanup_one_si(new_smi);
			mutex_unlock(&smi_infos_lock);
			return rv;
		}
	}
out_err:
	mutex_unlock(&smi_infos_lock);
	return rv;
@@ -2220,7 +2213,8 @@ static int try_smi_init(struct smi_info *new_smi)
	return 0;

out_err:
	shutdown_one_si(new_smi);
	ipmi_unregister_smi(new_smi->intf);
	new_smi->intf = NULL;

	kfree(init_name);

@@ -2358,17 +2352,10 @@ static void shutdown_smi(void *send_info)
	smi_info->si_sm = NULL;
}

static void shutdown_one_si(struct smi_info *smi_info)
{
	ipmi_smi_t intf = smi_info->intf;

	if (!intf)
		return;

	smi_info->intf = NULL;
	ipmi_unregister_smi(intf);
}

/*
 * Must be called with smi_infos_lock held, to serialize the
 * smi_info->intf check.
 */
static void cleanup_one_si(struct smi_info *smi_info)
{
	if (!smi_info)
@@ -2376,7 +2363,10 @@ static void cleanup_one_si(struct smi_info *smi_info)

	list_del(&smi_info->link);

	shutdown_one_si(smi_info);
	if (smi_info->intf) {
		ipmi_unregister_smi(smi_info->intf);
		smi_info->intf = NULL;
	}

	if (smi_info->pdev) {
		if (smi_info->pdev_registered)