• Tomas Winkler's avatar
    mei: bus: use correct lock ordering · 2da55cfd
    Tomas Winkler authored
    The correct lock order is
      cl_bus_lock
        device_lock
          me_clients_rwsem
    
    This order was violated in bus rescan and remove routines
    when me_client_rwsem was locked before cl_bus_lock.
    
    Chain exists of:
    [    4.321653]   &dev->device_lock --> &dev->me_clients_rwsem -->
    &dev->cl_bus_lock
    [    4.321653]
    [    4.321679]  Possible unsafe locking scenario:
    [    4.321679]
    [    4.321693]        CPU0                    CPU1
    [    4.321701]        ----                    ----
    [    4.321709]   lock(&dev->cl_bus_lock);
    [    4.321720]
    lock(&dev->me_clients_rwsem);
    [    4.321733]                                lock(&dev->cl_bus_lock);
    [    4.321745]   lock(&dev->device_lock);
    [    4.321755]
    [    4.321755]  *** DEADLOCK ***
    [    4.321755]
    Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    2da55cfd
bus.c 20.1 KB