• Mika Westerberg's avatar
    thunderbolt: Make sure device runtime resume completes before taking domain lock · 4f7c2e0d
    Mika Westerberg authored
    When a device is authorized from userspace by writing to authorized
    attribute we first take the domain lock and then runtime resume the
    device in question. There are two issues with this.
    
    First is that the device connected notifications are blocked during this
    time which means we get them only after the authorization operation is
    complete. Because of this the authorization needed flag from the
    firmware notification is not reflecting the real authorization status
    anymore. So what happens is that the "authorized" keeps returning 0 even
    if the device was already authorized properly.
    
    Second issue is that each time the controller is runtime resumed the
    connection_id field of device connected notification may be different
    than in the previous resume. We need to use the latest connection_id
    otherwise the firmware rejects the authorization command.
    
    Fix these by moving runtime resume operations to happen before the
    domain lock is taken, and waiting for the updated device connected
    notification from the firmware before we allow runtime resume of a
    device to complete.
    
    While there add missing locking to tb_switch_nvm_read().
    
    Fixes: 09f11b6c ("thunderbolt: Take domain lock in switch sysfs attribute callbacks")
    Reported-by: default avatarPengfei Xu <pengfei.xu@intel.com>
    Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    4f7c2e0d
tb.h 21.5 KB