Additions/deletions to/from sc_list (as well as modifications of target_cpu(s)) are protected by channel_mutex, which hv_synic_cleanup() and vmbus_bus_suspend() own for the duration of the channel->lock critical section in question. Signed-off-by: Andrea Parri (Microsoft) <parri.andrea@xxxxxxxxx> --- drivers/hv/hv.c | 3 --- drivers/hv/vmbus_drv.c | 3 --- 2 files changed, 6 deletions(-) diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c index 188b42b07f07b..0c637111e7c70 100644 --- a/drivers/hv/hv.c +++ b/drivers/hv/hv.c @@ -245,7 +245,6 @@ int hv_synic_cleanup(unsigned int cpu) { struct vmbus_channel *channel, *sc; bool channel_found = false; - unsigned long flags; /* * Hyper-V does not provide a way to change the connect CPU once @@ -267,14 +266,12 @@ int hv_synic_cleanup(unsigned int cpu) channel_found = true; break; } - spin_lock_irqsave(&channel->lock, flags); list_for_each_entry(sc, &channel->sc_list, sc_list) { if (sc->target_cpu == cpu) { channel_found = true; break; } } - spin_unlock_irqrestore(&channel->lock, flags); if (channel_found) break; } diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 452c14c656e2a..b5ae45eb8aef7 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -2330,7 +2330,6 @@ static int vmbus_acpi_add(struct acpi_device *device) static int vmbus_bus_suspend(struct device *dev) { struct vmbus_channel *channel, *sc; - unsigned long flags; while (atomic_read(&vmbus_connection.offer_in_progress) != 0) { /* @@ -2388,12 +2387,10 @@ static int vmbus_bus_suspend(struct device *dev) continue; } - spin_lock_irqsave(&channel->lock, flags); list_for_each_entry(sc, &channel->sc_list, sc_list) { pr_err("Sub-channel not deleted!\n"); WARN_ON_ONCE(1); } - spin_unlock_irqrestore(&channel->lock, flags); atomic_inc(&vmbus_connection.nr_chan_fixup_on_resume); } -- 2.25.1