vhost: do not take lock on owner reset
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Mon, 12 Feb 2018 15:46:12 +0000 (16:46 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 13 Feb 2018 17:58:02 +0000 (18:58 +0100)
A deadlock happens when handling VHOST_USER_RESET_OWNER request
for the same reason the lock is not taken for
VHOST_USER_GET_VRING_BASE.

It is safe not to take the lock, as the queues are no more used
by the application when the virtqueues and the device are reset.

Fixes: a3688046995f ("vhost: protect active rings from async ring changes")
Cc: stable@dpdk.org
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Reviewed-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Jianfeng Tan <jianfeng.tan@intel.com>
lib/librte_vhost/vhost_user.c

index 65ee339..90ed211 100644 (file)
@@ -1348,16 +1348,16 @@ vhost_user_msg_handler(int vid, int fd)
        }
 
        /*
-        * Note: we don't lock all queues on VHOST_USER_GET_VRING_BASE,
-        * since it is sent when virtio stops and device is destroyed.
-        * destroy_device waits for queues to be inactive, so it is safe.
-        * Otherwise taking the access_lock would cause a dead lock.
+        * Note: we don't lock all queues on VHOST_USER_GET_VRING_BASE
+        * and VHOST_USER_RESET_OWNER, since it is sent when virtio stops
+        * and device is destroyed. destroy_device waits for queues to be
+        * inactive, so it is safe. Otherwise taking the access_lock
+        * would cause a dead lock.
         */
        switch (msg.request.master) {
        case VHOST_USER_SET_FEATURES:
        case VHOST_USER_SET_PROTOCOL_FEATURES:
        case VHOST_USER_SET_OWNER:
-       case VHOST_USER_RESET_OWNER:
        case VHOST_USER_SET_MEM_TABLE:
        case VHOST_USER_SET_LOG_BASE:
        case VHOST_USER_SET_LOG_FD: