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

Commit 800b9329 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Greg Kroah-Hartman
Browse files

vmbus: pass channel to hv_process_channel_removal



Rather than passing relid and then looking up the channel.
Pass the channel directly, since caller already knows it.

Signed-off-by: default avatarStephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 581ae6b7
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -690,8 +690,7 @@ void vmbus_close(struct vmbus_channel *channel)
			wait_for_completion(&cur_channel->rescind_event);
			mutex_lock(&vmbus_connection.channel_mutex);
			vmbus_close_internal(cur_channel);
			hv_process_channel_removal(
					   cur_channel->offermsg.child_relid);
			hv_process_channel_removal(cur_channel);
		} else {
			mutex_lock(&vmbus_connection.channel_mutex);
			vmbus_close_internal(cur_channel);
+5 −12
Original line number Diff line number Diff line
@@ -385,21 +385,14 @@ static void vmbus_release_relid(u32 relid)
	trace_vmbus_release_relid(&msg, ret);
}

void hv_process_channel_removal(u32 relid)
void hv_process_channel_removal(struct vmbus_channel *channel)
{
	struct vmbus_channel *primary_channel;
	unsigned long flags;
	struct vmbus_channel *primary_channel, *channel;

	BUG_ON(!mutex_is_locked(&vmbus_connection.channel_mutex));

	/*
	 * Make sure channel is valid as we may have raced.
	 */
	channel = relid2channel(relid);
	if (!channel)
		return;

	BUG_ON(!channel->rescind);

	if (channel->target_cpu != get_cpu()) {
		put_cpu();
		smp_call_function_single(channel->target_cpu,
@@ -429,7 +422,7 @@ void hv_process_channel_removal(u32 relid)
		cpumask_clear_cpu(channel->target_cpu,
				  &primary_channel->alloced_cpus_in_node);

	vmbus_release_relid(relid);
	vmbus_release_relid(channel->offermsg.child_relid);

	free_channel(channel);
}
@@ -943,7 +936,7 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr)
			 * The channel is currently not open;
			 * it is safe for us to cleanup the channel.
			 */
			hv_process_channel_removal(rescind->child_relid);
			hv_process_channel_removal(channel);
		} else {
			complete(&channel->rescind_event);
		}
+1 −2
Original line number Diff line number Diff line
@@ -864,10 +864,9 @@ static void vmbus_device_release(struct device *device)
	struct vmbus_channel *channel = hv_dev->channel;

	mutex_lock(&vmbus_connection.channel_mutex);
	hv_process_channel_removal(channel->offermsg.child_relid);
	hv_process_channel_removal(channel);
	mutex_unlock(&vmbus_connection.channel_mutex);
	kfree(hv_dev);

}

/* The one and only one */
+1 −1
Original line number Diff line number Diff line
@@ -1443,7 +1443,7 @@ extern bool vmbus_prep_negotiate_resp(struct icmsg_hdr *icmsghdrp, u8 *buf,
				const int *srv_version, int srv_vercnt,
				int *nego_fw_version, int *nego_srv_version);

void hv_process_channel_removal(u32 relid);
void hv_process_channel_removal(struct vmbus_channel *channel);

void vmbus_setevent(struct vmbus_channel *channel);
/*