[PATCH 2/2] vduse: not take the device semaphore while holding vq spinlock

From: Eugenio Pérez

Date: Thu Jun 11 2026 - 09:39:21 EST


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 <eperezma@xxxxxxxxxx>
---
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