* [PATCH v2] vhost: fix deadlock when handling user messages [not found] <20220505134008.2865-1-wenwux.ma@intel.com> @ 2022-05-05 16:17 ` Wenwu Ma 2022-05-06 8:19 ` Xia, Chenbo 2022-05-07 13:27 ` [PATCH v3] vhost: fix deadlock when message handling failed Wenwu Ma 1 sibling, 1 reply; 7+ messages in thread From: Wenwu Ma @ 2022-05-05 16:17 UTC (permalink / raw) To: maxime.coquelin, chenbo.xia, dev Cc: jiayu.hu, yinan.wang, xingguang.he, Wenwu Ma, stable 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") Cc: stable@dpdk.org Signed-off-by: Wenwu Ma <wenwux.ma@intel.com> --- 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 1d390677fa..4baf969ee0 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c @@ -2976,7 +2976,6 @@ vhost_user_msg_handler(int vid, int fd) return -1; } - ret = 0; request = ctx.msg.request.master; if (request > VHOST_USER_NONE && request < VHOST_USER_MAX && vhost_message_str[request]) { @@ -3113,9 +3112,11 @@ vhost_user_msg_handler(int vid, int fd) send_vhost_reply(dev, fd, &ctx); } else if (ret == RTE_VHOST_MSG_RESULT_ERR) { VHOST_LOG_CONFIG(ERR, "(%s) vhost message handling failed.\n", dev->ifname); - return -1; + ret = -1; + goto unlock; } + ret = 0; for (i = 0; i < dev->nr_vring; i++) { struct vhost_virtqueue *vq = dev->virtqueue[i]; bool cur_ready = vq_is_ready(dev, vq); @@ -3126,10 +3127,11 @@ vhost_user_msg_handler(int vid, int fd) } } +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; /* @@ -3156,7 +3158,7 @@ vhost_user_msg_handler(int vid, int fd) } out: - return 0; + return ret; } static int process_slave_message_reply(struct virtio_net *dev, -- 2.25.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH v2] vhost: fix deadlock when handling user messages 2022-05-05 16:17 ` [PATCH v2] vhost: fix deadlock when handling user messages Wenwu Ma @ 2022-05-06 8:19 ` Xia, Chenbo 0 siblings, 0 replies; 7+ messages in thread From: Xia, Chenbo @ 2022-05-06 8:19 UTC (permalink / raw) To: Ma, WenwuX, maxime.coquelin, dev Cc: Hu, Jiayu, Wang, Yinan, He, Xingguang, stable > -----Original Message----- > From: Ma, WenwuX <wenwux.ma@intel.com> > Sent: Friday, May 6, 2022 12:17 AM > To: maxime.coquelin@redhat.com; Xia, Chenbo <chenbo.xia@intel.com>; > dev@dpdk.org > Cc: Hu, Jiayu <jiayu.hu@intel.com>; Wang, Yinan <yinan.wang@intel.com>; He, > Xingguang <xingguang.he@intel.com>; Ma, WenwuX <wenwux.ma@intel.com>; > stable@dpdk.org > Subject: [PATCH v2] vhost: fix deadlock when handling user messages > > 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") > Cc: stable@dpdk.org > > Signed-off-by: Wenwu Ma <wenwux.ma@intel.com> > --- > 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 1d390677fa..4baf969ee0 100644 > --- a/lib/vhost/vhost_user.c > +++ b/lib/vhost/vhost_user.c > @@ -2976,7 +2976,6 @@ vhost_user_msg_handler(int vid, int fd) > return -1; > } > > - ret = 0; > request = ctx.msg.request.master; > if (request > VHOST_USER_NONE && request < VHOST_USER_MAX && > vhost_message_str[request]) { > @@ -3113,9 +3112,11 @@ vhost_user_msg_handler(int vid, int fd) > send_vhost_reply(dev, fd, &ctx); > } else if (ret == RTE_VHOST_MSG_RESULT_ERR) { > VHOST_LOG_CONFIG(ERR, "(%s) vhost message handling failed.\n", > dev->ifname); > - return -1; > + ret = -1; > + goto unlock; > } > > + ret = 0; > for (i = 0; i < dev->nr_vring; i++) { > struct vhost_virtqueue *vq = dev->virtqueue[i]; > bool cur_ready = vq_is_ready(dev, vq); > @@ -3126,10 +3127,11 @@ vhost_user_msg_handler(int vid, int fd) > } > } > > +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; > > /* > @@ -3156,7 +3158,7 @@ vhost_user_msg_handler(int vid, int fd) > } > > out: > - return 0; > + return ret; > } > > static int process_slave_message_reply(struct virtio_net *dev, > -- > 2.25.1 'vhost: fix deadlock when message handling failed' may be a better title. Reviewed-by: Chenbo Xia <chenbo.xia@intel.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3] vhost: fix deadlock when message handling failed [not found] <20220505134008.2865-1-wenwux.ma@intel.com> 2022-05-05 16:17 ` [PATCH v2] vhost: fix deadlock when handling user messages Wenwu Ma @ 2022-05-07 13:27 ` Wenwu Ma 2022-05-07 6:02 ` Xia, Chenbo ` (3 more replies) 1 sibling, 4 replies; 7+ messages in thread From: Wenwu Ma @ 2022-05-07 13:27 UTC (permalink / raw) To: maxime.coquelin, chenbo.xia, dev Cc: jiayu.hu, yinan.wang, xingguang.he, Wenwu Ma, stable 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") Cc: stable@dpdk.org Signed-off-by: Wenwu Ma <wenwux.ma@intel.com> --- 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 1d390677fa..4baf969ee0 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c @@ -2976,7 +2976,6 @@ vhost_user_msg_handler(int vid, int fd) return -1; } - ret = 0; request = ctx.msg.request.master; if (request > VHOST_USER_NONE && request < VHOST_USER_MAX && vhost_message_str[request]) { @@ -3113,9 +3112,11 @@ vhost_user_msg_handler(int vid, int fd) send_vhost_reply(dev, fd, &ctx); } else if (ret == RTE_VHOST_MSG_RESULT_ERR) { VHOST_LOG_CONFIG(ERR, "(%s) vhost message handling failed.\n", dev->ifname); - return -1; + ret = -1; + goto unlock; } + ret = 0; for (i = 0; i < dev->nr_vring; i++) { struct vhost_virtqueue *vq = dev->virtqueue[i]; bool cur_ready = vq_is_ready(dev, vq); @@ -3126,10 +3127,11 @@ vhost_user_msg_handler(int vid, int fd) } } +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; /* @@ -3156,7 +3158,7 @@ vhost_user_msg_handler(int vid, int fd) } out: - return 0; + return ret; } static int process_slave_message_reply(struct virtio_net *dev, -- 2.25.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH v3] vhost: fix deadlock when message handling failed 2022-05-07 13:27 ` [PATCH v3] vhost: fix deadlock when message handling failed Wenwu Ma @ 2022-05-07 6:02 ` Xia, Chenbo 2022-05-09 3:13 ` Ling, WeiX ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Xia, Chenbo @ 2022-05-07 6:02 UTC (permalink / raw) To: Ma, WenwuX, maxime.coquelin, dev Cc: Hu, Jiayu, Wang, Yinan, He, Xingguang, stable > -----Original Message----- > From: Ma, WenwuX <wenwux.ma@intel.com> > Sent: Saturday, May 7, 2022 9:28 PM > To: maxime.coquelin@redhat.com; Xia, Chenbo <chenbo.xia@intel.com>; > dev@dpdk.org > Cc: Hu, Jiayu <jiayu.hu@intel.com>; Wang, Yinan <yinan.wang@intel.com>; He, > Xingguang <xingguang.he@intel.com>; Ma, WenwuX <wenwux.ma@intel.com>; > stable@dpdk.org > Subject: [PATCH v3] vhost: fix deadlock when message handling failed > > 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") > Cc: stable@dpdk.org > > Signed-off-by: Wenwu Ma <wenwux.ma@intel.com> > --- > 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 1d390677fa..4baf969ee0 100644 > --- a/lib/vhost/vhost_user.c > +++ b/lib/vhost/vhost_user.c > @@ -2976,7 +2976,6 @@ vhost_user_msg_handler(int vid, int fd) > return -1; > } > > - ret = 0; > request = ctx.msg.request.master; > if (request > VHOST_USER_NONE && request < VHOST_USER_MAX && > vhost_message_str[request]) { > @@ -3113,9 +3112,11 @@ vhost_user_msg_handler(int vid, int fd) > send_vhost_reply(dev, fd, &ctx); > } else if (ret == RTE_VHOST_MSG_RESULT_ERR) { > VHOST_LOG_CONFIG(ERR, "(%s) vhost message handling failed.\n", > dev->ifname); > - return -1; > + ret = -1; > + goto unlock; > } > > + ret = 0; > for (i = 0; i < dev->nr_vring; i++) { > struct vhost_virtqueue *vq = dev->virtqueue[i]; > bool cur_ready = vq_is_ready(dev, vq); > @@ -3126,10 +3127,11 @@ vhost_user_msg_handler(int vid, int fd) > } > } > > +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; > > /* > @@ -3156,7 +3158,7 @@ vhost_user_msg_handler(int vid, int fd) > } > > out: > - return 0; > + return ret; > } > > static int process_slave_message_reply(struct virtio_net *dev, > -- > 2.25.1 Reviewed-by: Chenbo Xia <chenbo.xia@intel.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH v3] vhost: fix deadlock when message handling failed 2022-05-07 13:27 ` [PATCH v3] vhost: fix deadlock when message handling failed Wenwu Ma 2022-05-07 6:02 ` Xia, Chenbo @ 2022-05-09 3:13 ` Ling, WeiX 2022-05-17 13:15 ` David Marchand 2022-05-17 13:24 ` Maxime Coquelin 3 siblings, 0 replies; 7+ messages in thread From: Ling, WeiX @ 2022-05-09 3:13 UTC (permalink / raw) To: Ma, WenwuX, maxime.coquelin, Xia, Chenbo, dev Cc: Hu, Jiayu, Wang, Yinan, He, Xingguang, Ma, WenwuX, stable > -----Original Message----- > From: Wenwu Ma <wenwux.ma@intel.com> > Sent: Saturday, May 7, 2022 9:28 PM > To: maxime.coquelin@redhat.com; Xia, Chenbo <chenbo.xia@intel.com>; > dev@dpdk.org > Cc: Hu, Jiayu <jiayu.hu@intel.com>; Wang, Yinan <yinan.wang@intel.com>; > He, Xingguang <xingguang.he@intel.com>; Ma, WenwuX > <wenwux.ma@intel.com>; stable@dpdk.org > Subject: [PATCH v3] vhost: fix deadlock when message handling failed > Tested-by: Wei Ling <weix.ling@intel.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3] vhost: fix deadlock when message handling failed 2022-05-07 13:27 ` [PATCH v3] vhost: fix deadlock when message handling failed Wenwu Ma 2022-05-07 6:02 ` Xia, Chenbo 2022-05-09 3:13 ` Ling, WeiX @ 2022-05-17 13:15 ` David Marchand 2022-05-17 13:24 ` Maxime Coquelin 3 siblings, 0 replies; 7+ messages in thread From: David Marchand @ 2022-05-17 13:15 UTC (permalink / raw) To: Wenwu Ma Cc: Maxime Coquelin, Xia, Chenbo, dev, Jiayu Hu, Wang, Yinan, xingguang.he, dpdk stable On Sat, May 7, 2022 at 7:30 AM Wenwu Ma <wenwux.ma@intel.com> wrote: > > 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") > Cc: stable@dpdk.org > > Signed-off-by: Wenwu Ma <wenwux.ma@intel.com> Thanks, lgtm. Acked-by: David Marchand <david.marchand@redhat.com> -- David Marchand ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3] vhost: fix deadlock when message handling failed 2022-05-07 13:27 ` [PATCH v3] vhost: fix deadlock when message handling failed Wenwu Ma ` (2 preceding siblings ...) 2022-05-17 13:15 ` David Marchand @ 2022-05-17 13:24 ` Maxime Coquelin 3 siblings, 0 replies; 7+ messages in thread From: Maxime Coquelin @ 2022-05-17 13:24 UTC (permalink / raw) To: Wenwu Ma, chenbo.xia, dev; +Cc: jiayu.hu, yinan.wang, xingguang.he, stable On 5/7/22 15:27, Wenwu Ma wrote: > 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") > Cc: stable@dpdk.org > > Signed-off-by: Wenwu Ma <wenwux.ma@intel.com> > --- > lib/vhost/vhost_user.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > Applied to dpdk-next-virtio/main. Thanks, Maxime ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-05-17 13:24 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20220505134008.2865-1-wenwux.ma@intel.com> 2022-05-05 16:17 ` [PATCH v2] vhost: fix deadlock when handling user messages Wenwu Ma 2022-05-06 8:19 ` Xia, Chenbo 2022-05-07 13:27 ` [PATCH v3] vhost: fix deadlock when message handling failed Wenwu Ma 2022-05-07 6:02 ` Xia, Chenbo 2022-05-09 3:13 ` Ling, WeiX 2022-05-17 13:15 ` David Marchand 2022-05-17 13:24 ` Maxime Coquelin
patches for DPDK stable branches This inbox may be cloned and mirrored by anyone: git clone --mirror http://inbox.dpdk.org/stable/0 stable/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 stable stable/ http://inbox.dpdk.org/stable \ stable@dpdk.org public-inbox-index stable Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.stable AGPL code for this site: git clone https://public-inbox.org/public-inbox.git