It's an invalid lock pattern, so take them reversely.

This also makes the lock ordering coherent with vduse_dev_reset.

Fixes: e4a249d15eb2 ("vduse: Fix error around jumping over a __cleanup() 
variable")
Fixes: 6c141c034c1b ("vduse: Add suspend")
Signed-off-by: Eugenio Pérez <[email protected]>
---
 drivers/vdpa/vdpa_user/vduse_dev.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c 
b/drivers/vdpa/vdpa_user/vduse_dev.c
index 86bd3116eda7..2c1cafea6536 100644
--- a/drivers/vdpa/vdpa_user/vduse_dev.c
+++ b/drivers/vdpa/vdpa_user/vduse_dev.c
@@ -561,14 +561,14 @@ static int vduse_vdpa_set_vq_address(struct vdpa_device 
*vdpa, u16 idx,

 static void vduse_vq_kick(struct vduse_virtqueue *vq)
 {
-       guard(spinlock)(&vq->kick_lock);
-       if (!vq->ready)
-               return;
-
        guard(rwsem_read)(&vq->dev->rwsem);
        if (vq->dev->suspended)
                return;

+       guard(spinlock)(&vq->kick_lock);
+       if (!vq->ready)
+               return;
+
        if (vq->kickfd)
                eventfd_signal(vq->kickfd);
        else
--
2.54.0


Reply via email to