From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7ECBDA0555 for ; Thu, 9 Jun 2022 13:38:25 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7AB2541614; Thu, 9 Jun 2022 13:38:24 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 1EA8B40220 for ; Thu, 9 Jun 2022 13:38:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1654774702; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bZjTDS6Ltp90nwPQTpEd5ulsNyfKaXTM5YHYB6xZoDA=; b=GKzRUkwtXDpUg23u3UkWJP6lHHSEryzm3R1nqTr9IrsewjEt/W2tHhM2Lq8SVA8Zu1k/c2 tlpRu6sbVnd+0N5mKvHrj8ogK1v8V/rgRkld3xY8wmkdubw70dDhPXj+IfP2xYsAEC+kqe pJvoRJy99NaXsj2VVX/aUyGvU/FWV+M= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-460-4TPo60wHOfi8ZSaXXLMXOQ-1; Thu, 09 Jun 2022 07:38:19 -0400 X-MC-Unique: 4TPo60wHOfi8ZSaXXLMXOQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5B079100BAC0; Thu, 9 Jun 2022 11:38:19 +0000 (UTC) Received: from rh.redhat.com (unknown [10.39.195.82]) by smtp.corp.redhat.com (Postfix) with ESMTP id EBB0C1730C; Thu, 9 Jun 2022 11:38:17 +0000 (UTC) From: Kevin Traynor To: Wenwu Ma Cc: Chenbo Xia , Wei Ling , David Marchand , dpdk stable Subject: patch 'vhost: fix deadlock when message handling failed' has been queued to stable release 21.11.2 Date: Thu, 9 Jun 2022 12:36:37 +0100 Message-Id: <20220609113701.386938-50-ktraynor@redhat.com> In-Reply-To: <20220609113701.386938-1-ktraynor@redhat.com> References: <20220609113701.386938-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=ktraynor@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 21.11.2 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 06/13/22. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable/commit/b3062120fffdf5d4f3ca65127c3f22fda410d4e5 Thanks. Kevin --- >From b3062120fffdf5d4f3ca65127c3f22fda410d4e5 Mon Sep 17 00:00:00 2001 From: Wenwu Ma Date: Sat, 7 May 2022 13:27:53 +0000 Subject: [PATCH] vhost: fix deadlock when message handling failed [ upstream commit 9e89b06d027c6087624f36f288bd82c643c5a269 ] In vhost_user_msg_handler(), if vhost message handling failed, we should check whether the queue is locked and release the lock before returning. Or, it will cause a deadlock later. Fixes: 7f31d4ea05ca ("vhost: fix lock on device readiness notification") Signed-off-by: Wenwu Ma Reviewed-by: Chenbo Xia Tested-by: Wei Ling Acked-by: David Marchand --- lib/vhost/vhost_user.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c index 9a266b5d42..ff47247d2b 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c @@ -2974,5 +2974,4 @@ vhost_user_msg_handler(int vid, int fd) } - ret = 0; request = msg.request.master; if (request > VHOST_USER_NONE && request < VHOST_USER_MAX && @@ -3116,7 +3115,9 @@ skip_to_post_handle: VHOST_LOG_CONFIG(ERR, "vhost message handling failed.\n"); - return -1; + ret = -1; + goto unlock; } + ret = 0; for (i = 0; i < dev->nr_vring; i++) { struct vhost_virtqueue *vq = dev->virtqueue[i]; @@ -3129,8 +3130,9 @@ skip_to_post_handle: } +unlock: if (unlock_required) vhost_user_unlock_all_queue_pairs(dev); - if (!virtio_is_ready(dev)) + if (ret != 0 || !virtio_is_ready(dev)) goto out; @@ -3159,5 +3161,5 @@ skip_to_post_handle: out: - return 0; + return ret; } -- 2.34.3 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2022-06-09 12:34:30.923616928 +0100 +++ 0050-vhost-fix-deadlock-when-message-handling-failed.patch 2022-06-09 12:34:29.765980675 +0100 @@ -1 +1 @@ -From 9e89b06d027c6087624f36f288bd82c643c5a269 Mon Sep 17 00:00:00 2001 +From b3062120fffdf5d4f3ca65127c3f22fda410d4e5 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 9e89b06d027c6087624f36f288bd82c643c5a269 ] + @@ -12 +13,0 @@ -Cc: stable@dpdk.org @@ -23 +24 @@ -index 850848c269..91e69d1d97 100644 +index 9a266b5d42..ff47247d2b 100644 @@ -26 +27 @@ -@@ -2888,5 +2888,4 @@ vhost_user_msg_handler(int vid, int fd) +@@ -2974,5 +2974,4 @@ vhost_user_msg_handler(int vid, int fd) @@ -30,5 +31,5 @@ - request = ctx.msg.request.master; - if (request > VHOST_USER_NONE && request < RTE_DIM(vhost_message_handlers)) -@@ -3032,7 +3031,9 @@ skip_to_post_handle: - } else if (ret == RTE_VHOST_MSG_RESULT_ERR) { - VHOST_LOG_CONFIG(ERR, "(%s) vhost message handling failed.\n", dev->ifname); + request = msg.request.master; + if (request > VHOST_USER_NONE && request < VHOST_USER_MAX && +@@ -3116,7 +3115,9 @@ skip_to_post_handle: + VHOST_LOG_CONFIG(ERR, + "vhost message handling failed.\n"); @@ -43 +44 @@ -@@ -3045,8 +3046,9 @@ skip_to_post_handle: +@@ -3129,8 +3130,9 @@ skip_to_post_handle: @@ -54 +55 @@ -@@ -3075,5 +3077,5 @@ skip_to_post_handle: +@@ -3159,5 +3161,5 @@ skip_to_post_handle: