diff options
author | Andrea Parri (Microsoft) <parri.andrea@gmail.com> | 2020-06-17 18:46:40 +0200 |
---|---|---|
committer | Wei Liu <wei.liu@kernel.org> | 2020-06-19 15:38:30 +0000 |
commit | 8a99e501345489ae30b16a5e519e111220d39a06 (patch) | |
tree | c9d068498cb7af35b34f352c9ac4fe79b3b73de4 | |
parent | 3eb0ac869c66d73a034004b97b3a4abe1c5cb998 (diff) | |
download | linux-stable-8a99e501345489ae30b16a5e519e111220d39a06.tar.gz linux-stable-8a99e501345489ae30b16a5e519e111220d39a06.tar.bz2 linux-stable-8a99e501345489ae30b16a5e519e111220d39a06.zip |
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) <parri.andrea@gmail.com>
Link: https://lore.kernel.org/r/20200617164642.37393-7-parri.andrea@gmail.com
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Signed-off-by: Wei Liu <wei.liu@kernel.org>
-rw-r--r-- | drivers/hv/channel_mgmt.c | 25 |
1 files changed, 6 insertions, 19 deletions
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); |