lkml.org 
[lkml]   [2020]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/8] Drivers: hv: vmbus: Remove unnecessary channel->lock critical sections (sc_list readers)
    Date
    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@gmail.com>
    ---
    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
    \
     
     \ /
      Last update: 2020-06-17 18:48    [W:4.075 / U:0.692 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site