Skip to content

Commit

Permalink
vmbus: pass channel to hv_process_channel_removal
Browse files Browse the repository at this point in the history
Rather than passing relid and then looking up the channel.
Pass the channel directly, since caller already knows it.

Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Stephen Hemminger authored and Greg Kroah-Hartman committed Sep 25, 2018
1 parent 581ae6b commit 800b932
Showing 4 changed files with 8 additions and 17 deletions.
3 changes: 1 addition & 2 deletions drivers/hv/channel.c
Original file line number Diff line number Diff line change
@@ -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);
17 changes: 5 additions & 12 deletions drivers/hv/channel_mgmt.c
Original file line number Diff line number Diff line change
@@ -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);
}
3 changes: 1 addition & 2 deletions drivers/hv/vmbus_drv.c
Original file line number Diff line number Diff line change
@@ -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 */
2 changes: 1 addition & 1 deletion include/linux/hyperv.h
Original file line number Diff line number Diff line change
@@ -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);
/*

0 comments on commit 800b932

Please sign in to comment.