From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3E47AA04DD for ; Wed, 18 Nov 2020 17:37:25 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6D2F8C8FE; Wed, 18 Nov 2020 17:37:22 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by dpdk.org (Postfix) with ESMTP id 252BCC8DA for ; Wed, 18 Nov 2020 17:37:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605717438; 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=IWs1+DaCi/zABk8GYIrTTPrL4mwqlZ3nIgYLsozsvek=; b=I0xYYhKS73OXzF4vTXVxQUqY25FlIsDFaIC/M4LGN9fPuuW6pe3lq8arY+xVQ/CkKPW98E G2fU7WDAXVOFA1ToVlxgYdWkf7V2HjxWNDVcqpgH9Yg26Ke6p59XCkp5WpXyZzud41SMZi +0HNC6aTvLRcDa9/CwofExgaxXi7OC4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-302-aVRVXxgPNMK8BX4UQ8X26Q-1; Wed, 18 Nov 2020 11:37:16 -0500 X-MC-Unique: aVRVXxgPNMK8BX4UQ8X26Q-1 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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id 707F6A483E; Wed, 18 Nov 2020 16:36:50 +0000 (UTC) Received: from rh.redhat.com (ovpn-113-249.ams2.redhat.com [10.36.113.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id 80A575C1A3; Wed, 18 Nov 2020 16:36:49 +0000 (UTC) From: Kevin Traynor To: Lukasz Wojciechowski Cc: David Hunt , dpdk stable Date: Wed, 18 Nov 2020 16:35:05 +0000 Message-Id: <20201118163558.1101823-19-ktraynor@redhat.com> In-Reply-To: <20201118163558.1101823-1-ktraynor@redhat.com> References: <20201118163558.1101823-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 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" Subject: [dpdk-stable] patch 'distributor: fix handshake deadlock' has been queued to LTS release 18.11.11 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: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to LTS release 18.11.11 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/24/20. 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-queue This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable-queue/commit/d5ef205206cc208e8ceae2533c0d71dec5b92a19 Thanks. Kevin. --- >From d5ef205206cc208e8ceae2533c0d71dec5b92a19 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Sat, 17 Oct 2020 05:06:46 +0200 Subject: [PATCH] distributor: fix handshake deadlock [ upstream commit 5acce079e7dc773c17bf2043fc18106392b4a863 ] Synchronization of data exchange between distributor and worker cores is based on 2 handshakes: retptr64 for returning mbufs from workers to distributor and bufptr64 for passing mbufs to workers. Without proper order of verifying those 2 handshakes a deadlock may occur. This can happen when worker core wants to return back mbufs and waits for retptr handshake to be cleared while distributor core waits for bufptr to send mbufs to worker. This can happen as worker core first returns mbufs to distributor and later gets new mbufs, while distributor first releases mbufs to worker and later handle returning packets. This patch fixes possibility of the deadlock by always taking care of returning packets first on the distributor side and handling packets while waiting to release new. Fixes: 775003ad2f96 ("distributor: add new burst-capable library") Signed-off-by: Lukasz Wojciechowski Acked-by: David Hunt --- lib/librte_distributor/rte_distributor.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/librte_distributor/rte_distributor.c b/lib/librte_distributor/rte_distributor.c index a686d06f81..d1f8b14d2e 100644 --- a/lib/librte_distributor/rte_distributor.c +++ b/lib/librte_distributor/rte_distributor.c @@ -338,10 +338,12 @@ release(struct rte_distributor *d, unsigned int wkr) unsigned int i; + handle_returns(d, wkr); + /* Sync with worker on GET_BUF flag */ while (!(__atomic_load_n(&(d->bufs[wkr].bufptr64[0]), __ATOMIC_ACQUIRE) - & RTE_DISTRIB_GET_BUF)) + & RTE_DISTRIB_GET_BUF)) { + handle_returns(d, wkr); rte_pause(); - - handle_returns(d, wkr); + } buf->count = 0; @@ -392,4 +394,5 @@ rte_distributor_process_v1705(struct rte_distributor *d, for (wid = 0 ; wid < d->num_workers; wid++) { /* Sync with worker on GET_BUF flag. */ + handle_returns(d, wid); if (__atomic_load_n(&(d->bufs[wid].bufptr64[0]), __ATOMIC_ACQUIRE) & RTE_DISTRIB_GET_BUF) { -- 2.26.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-11-18 16:33:38.335940327 +0000 +++ 0019-distributor-fix-handshake-deadlock.patch 2020-11-18 16:33:37.925215059 +0000 @@ -1 +1 @@ -From 5acce079e7dc773c17bf2043fc18106392b4a863 Mon Sep 17 00:00:00 2001 +From d5ef205206cc208e8ceae2533c0d71dec5b92a19 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 5acce079e7dc773c17bf2043fc18106392b4a863 ] + @@ -24 +25,0 @@ -Cc: stable@dpdk.org @@ -33 +34 @@ -index c6b19a3886..d6d4350a28 100644 +index a686d06f81..d1f8b14d2e 100644 @@ -36 +37 @@ -@@ -320,10 +320,12 @@ release(struct rte_distributor *d, unsigned int wkr) +@@ -338,10 +338,12 @@ release(struct rte_distributor *d, unsigned int wkr) @@ -52 +53 @@ -@@ -375,4 +377,5 @@ rte_distributor_process(struct rte_distributor *d, +@@ -392,4 +394,5 @@ rte_distributor_process_v1705(struct rte_distributor *d,