From 8a99e501345489ae30b16a5e519e111220d39a06 Mon Sep 17 00:00:00 2001 From: "Andrea Parri (Microsoft)" Date: Wed, 17 Jun 2020 18:46:40 +0200 Subject: Drivers: hv: vmbus: Remove unnecessary channel->lock critical sections (sc_list updaters) None of the readers/updaters of sc_list rely on channel->lock for synchronization. Signed-off-by: Andrea Parri (Microsoft) Link: https://lore.kernel.org/r/20200617164642.37393-7-parri.andrea@gmail.com Reviewed-by: Michael Kelley Signed-off-by: Wei Liu --- drivers/hv/channel_mgmt.c | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) (limited to 'drivers/hv') diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index 36dd8b6c544a..92f8bb2077a9 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c @@ -400,8 +400,6 @@ static void vmbus_release_relid(u32 relid) void hv_process_channel_removal(struct vmbus_channel *channel) { - unsigned long flags; - lockdep_assert_held(&vmbus_connection.channel_mutex); BUG_ON(!channel->rescind); @@ -422,14 +420,10 @@ void hv_process_channel_removal(struct vmbus_channel *channel) if (channel->offermsg.child_relid != INVALID_RELID) vmbus_channel_unmap_relid(channel); - if (channel->primary_channel == NULL) { + if (channel->primary_channel == NULL) list_del(&channel->listentry); - } else { - struct vmbus_channel *primary_channel = channel->primary_channel; - spin_lock_irqsave(&primary_channel->lock, flags); + else list_del(&channel->sc_list); - spin_unlock_irqrestore(&primary_channel->lock, flags); - } /* * If this is a "perf" channel, updates the hv_numa_map[] masks so that @@ -470,7 +464,6 @@ static void vmbus_add_channel_work(struct work_struct *work) struct vmbus_channel *newchannel = container_of(work, struct vmbus_channel, add_channel_work); struct vmbus_channel *primary_channel = newchannel->primary_channel; - unsigned long flags; int ret; /* @@ -531,13 +524,10 @@ err_deq_chan: */ newchannel->probe_done = true; - if (primary_channel == NULL) { + if (primary_channel == NULL) list_del(&newchannel->listentry); - } else { - spin_lock_irqsave(&primary_channel->lock, flags); + else list_del(&newchannel->sc_list); - spin_unlock_irqrestore(&primary_channel->lock, flags); - } /* vmbus_process_offer() has mapped the channel. */ vmbus_channel_unmap_relid(newchannel); @@ -557,7 +547,6 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel) { struct vmbus_channel *channel; struct workqueue_struct *wq; - unsigned long flags; bool fnew = true; /* @@ -609,10 +598,10 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel) } } - if (fnew) + if (fnew) { list_add_tail(&newchannel->listentry, &vmbus_connection.chn_list); - else { + } else { /* * Check to see if this is a valid sub-channel. */ @@ -630,9 +619,7 @@ static void vmbus_process_offer(struct vmbus_channel *newchannel) * Process the sub-channel. */ newchannel->primary_channel = channel; - spin_lock_irqsave(&channel->lock, flags); list_add_tail(&newchannel->sc_list, &channel->sc_list); - spin_unlock_irqrestore(&channel->lock, flags); } vmbus_channel_map_relid(newchannel); -- cgit v1.2.3