• Ivan Vecera's avatar
    iavf: Detach device during reset task · aa626da9
    Ivan Vecera authored
    iavf_reset_task() takes crit_lock at the beginning and holds
    it during whole call. The function subsequently calls
    iavf_init_interrupt_scheme() that grabs RTNL. Problem occurs
    when userspace initiates during the reset task any ndo callback
    that runs under RTNL like iavf_open() because some of that
    functions tries to take crit_lock. This leads to classic A-B B-A
    deadlock scenario.
    
    To resolve this situation the device should be detached in
    iavf_reset_task() prior taking crit_lock to avoid subsequent
    ndos running under RTNL and reattach the device at the end.
    
    Fixes: 62fe2a86 ("i40evf: add missing rtnl_lock() around i40evf_set_interrupt_capability")
    Cc: Jacob Keller <jacob.e.keller@intel.com>
    Cc: Patryk Piotrowski <patryk.piotrowski@intel.com>
    Cc: SlawomirX Laba <slawomirx.laba@intel.com>
    Tested-by: default avatarVitaly Grinberg <vgrinber@redhat.com>
    Signed-off-by: default avatarIvan Vecera <ivecera@redhat.com>
    Tested-by: default avatarKonrad Jankowski <konrad0.jankowski@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    aa626da9
iavf_main.c 142 KB