From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id D4D521B489 for ; Fri, 4 Jan 2019 14:27:52 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4656C811DC; Fri, 4 Jan 2019 13:27:52 +0000 (UTC) Received: from ktraynor.remote.csb (ovpn-117-13.ams2.redhat.com [10.36.117.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0D7675C1A1; Fri, 4 Jan 2019 13:27:48 +0000 (UTC) From: Kevin Traynor To: Matthias Gatto Cc: Maxime Coquelin , dpdk stable Date: Fri, 4 Jan 2019 13:24:30 +0000 Message-Id: <20190104132455.15170-48-ktraynor@redhat.com> In-Reply-To: <20190104132455.15170-1-ktraynor@redhat.com> References: <20190104132455.15170-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Fri, 04 Jan 2019 13:27:52 +0000 (UTC) Subject: [dpdk-stable] patch 'vhost: fix race condition when adding fd in the fdset' has been queued to LTS release 18.11.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Jan 2019 13:27:53 -0000 Hi, FYI, your patch has been queued to LTS release 18.11.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 01/11/19. 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. Thanks. Kevin Traynor --- >>From 80a1d99db3eb06e3786223d5422bf37697ddf726 Mon Sep 17 00:00:00 2001 From: Matthias Gatto Date: Thu, 6 Dec 2018 16:00:07 +0000 Subject: [PATCH] vhost: fix race condition when adding fd in the fdset [ upstream commit 276d63505be94bb8d5fdf754af0105707ea433c1 ] fdset_add can call fdset_shrink_nolock which call fdset_move concurrently to poll that is call in fdset_event_dispatch. This patch add a mutex to protect poll from been call at the same time fdset_add call fdset_shrink_nolock. Fixes: 1b815b89599c ("vhost: try to shrink pfdset when fdset_add fails") Signed-off-by: Matthias Gatto Reviewed-by: Maxime Coquelin --- lib/librte_vhost/fd_man.c | 4 ++++ lib/librte_vhost/fd_man.h | 1 + lib/librte_vhost/socket.c | 1 + 3 files changed, 6 insertions(+) diff --git a/lib/librte_vhost/fd_man.c b/lib/librte_vhost/fd_man.c index 38347ab1d..55d4856f9 100644 --- a/lib/librte_vhost/fd_man.c +++ b/lib/librte_vhost/fd_man.c @@ -130,5 +130,7 @@ fdset_add(struct fdset *pfdset, int fd, fd_cb rcb, fd_cb wcb, void *dat) i = pfdset->num < MAX_FDS ? pfdset->num++ : -1; if (i == -1) { + pthread_mutex_lock(&pfdset->fd_pooling_mutex); fdset_shrink_nolock(pfdset); + pthread_mutex_unlock(&pfdset->fd_pooling_mutex); i = pfdset->num < MAX_FDS ? pfdset->num++ : -1; if (i == -1) { @@ -247,5 +249,7 @@ fdset_event_dispatch(void *arg) pthread_mutex_unlock(&pfdset->fd_mutex); + pthread_mutex_lock(&pfdset->fd_pooling_mutex); val = poll(pfdset->rwfds, numfds, 1000 /* millisecs */); + pthread_mutex_unlock(&pfdset->fd_pooling_mutex); if (val < 0) continue; diff --git a/lib/librte_vhost/fd_man.h b/lib/librte_vhost/fd_man.h index 3331bcd97..3ab5cfdd6 100644 --- a/lib/librte_vhost/fd_man.h +++ b/lib/librte_vhost/fd_man.h @@ -25,4 +25,5 @@ struct fdset { struct fdentry fd[MAX_FDS]; pthread_mutex_t fd_mutex; + pthread_mutex_t fd_pooling_mutex; int num; /* current fd number of this fdset */ diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c index 01b60ff9e..9cf34ad17 100644 --- a/lib/librte_vhost/socket.c +++ b/lib/librte_vhost/socket.c @@ -91,4 +91,5 @@ static struct vhost_user vhost_user = { .fd = { [0 ... MAX_FDS - 1] = {-1, NULL, NULL, NULL, 0} }, .fd_mutex = PTHREAD_MUTEX_INITIALIZER, + .fd_pooling_mutex = PTHREAD_MUTEX_INITIALIZER, .num = 0 }, -- 2.19.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2019-01-04 13:23:08.614777750 +0000 +++ 0048-vhost-fix-race-condition-when-adding-fd-in-the-fdset.patch 2019-01-04 13:23:07.000000000 +0000 @@ -1,8 +1,10 @@ -From 276d63505be94bb8d5fdf754af0105707ea433c1 Mon Sep 17 00:00:00 2001 +From 80a1d99db3eb06e3786223d5422bf37697ddf726 Mon Sep 17 00:00:00 2001 From: Matthias Gatto Date: Thu, 6 Dec 2018 16:00:07 +0000 Subject: [PATCH] vhost: fix race condition when adding fd in the fdset +[ upstream commit 276d63505be94bb8d5fdf754af0105707ea433c1 ] + fdset_add can call fdset_shrink_nolock which call fdset_move concurrently to poll that is call in fdset_event_dispatch. @@ -10,7 +12,6 @@ fdset_add call fdset_shrink_nolock. Fixes: 1b815b89599c ("vhost: try to shrink pfdset when fdset_add fails") -Cc: stable@dpdk.org Signed-off-by: Matthias Gatto Reviewed-by: Maxime Coquelin