• Vitaly Kuznetsov's avatar
    Drivers: hv: balloon: replace ha_region_mutex with spinlock · eece30b9
    Vitaly Kuznetsov authored
    lockdep reports possible circular locking dependency when udev is used
    for memory onlining:
    
     systemd-udevd/3996 is trying to acquire lock:
      ((memory_chain).rwsem){++++.+}, at: [<ffffffff810d137e>] __blocking_notifier_call_chain+0x4e/0xc0
    
     but task is already holding lock:
      (&dm_device.ha_region_mutex){+.+.+.}, at: [<ffffffffa015382e>] hv_memory_notifier+0x5e/0xc0 [hv_balloon]
     ...
    
    which is probably a false positive because we take and release
    ha_region_mutex from memory notifier chain depending on the arg. No real
    deadlocks were reported so far (though I'm not really sure about
    preemptible kernels...) but we don't really need to hold the mutex
    for so long. We use it to protect ha_region_list (and its members) and the
    num_pages_onlined counter. None of these operations require us to sleep
    and nothing is slow, switch to using spinlock with interrupts disabled.
    
    While on it, replace list_for_each -> list_for_each_entry as we actually
    need entries in all these cases, drop meaningless list_empty() checks.
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    eece30b9
hv_balloon.c 41.5 KB