Re: [PATCH] thunderbolt: Make sure device runtime resume completes before taking domain lock

From: Mika Westerberg
Date: Wed Jun 12 2019 - 06:42:42 EST


On Wed, Jun 05, 2019 at 05:04:38PM +0300, Mika Westerberg wrote:
> 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: 09f11b6c99fe ("thunderbolt: Take domain lock in switch sysfs attribute callbacks")
> Reported-by: Pengfei Xu <pengfei.xu@xxxxxxxxx>
> Signed-off-by: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx>

Applied to thunderbolt.git/fixes.