[PATCH] vhost: fix deadlock with no multiqueue
Maxime Coquelin
maxime.coquelin at redhat.com
Thu Mar 23 15:48:42 CET 2023
On 3/23/23 15:44, David Marchand wrote:
> This deadlock happens when a guest, that had virtio ports with multi
> queues configured, does not announce the multi q feature in
> SET_FEATURES.
> In such a situation, all vq locks are already taken before calling
> free_vq(), which itself takes the lock.
>
> As mentioned in the code, in this situation, the virtio device is not
> running yet and no datapath thread is using the vq. So we can
> release the lock before calling free_vq().
>
> Bugzilla ID: 1196
> Fixes: 4b02c2673757 ("vhost: annotate async accesses")
>
> Signed-off-by: David Marchand <david.marchand at redhat.com>
> ---
> lib/vhost/vhost_user.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c
> index f5edba8548..d60e39b6bc 100644
> --- a/lib/vhost/vhost_user.c
> +++ b/lib/vhost/vhost_user.c
> @@ -397,6 +397,9 @@ vhost_user_set_features(struct virtio_net **pdev,
> dev->virtqueue[dev->nr_vring] = NULL;
> cleanup_vq(vq, 1);
> cleanup_vq_inflight(dev, vq);
> + /* vhost_user_lock_all_queue_pairs locked all qps */
> + vq_assert_lock(dev, vq);
> + rte_spinlock_unlock(&vq->access_lock);
> free_vq(dev, vq);
> }
> }
Reviewed-by: Maxime Coquelin <maxime.coquelin at redhat.com>
Thanks,
Maxime
More information about the dev
mailing list