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 A96D7A04DD for ; Wed, 18 Nov 2020 17:37:36 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 20FE4C922; Wed, 18 Nov 2020 17:37:27 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by dpdk.org (Postfix) with ESMTP id 360D1F90 for ; Wed, 18 Nov 2020 17:37:25 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605717443; 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=3UbGATx4H8c1SA4qwYaWzKRal06rXz0LXVzINbzz+18=; b=QLfjTQiRAQkFN6/YbtbkjF/AMID2Gob5XcyewqeK2ES1mJObaJkOGUlICxUl3yddvnmanJ o+taMy9ZJDoe+0vvl5DxGt0YUm64m8Y5cRdSHawDwSh/PoW0hHJ6Y/FFdDPKuGsnpMDQCL WNxfu4OxohHKd7j3cH/3hbtApByZ4f4= 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-273-CtQlaiuvN-WVpaPyV8PcWg-1; Wed, 18 Nov 2020 11:37:18 -0500 X-MC-Unique: CtQlaiuvN-WVpaPyV8PcWg-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 0EAE818B615C; Wed, 18 Nov 2020 16:36:49 +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 A2D455C1A3; Wed, 18 Nov 2020 16:36:47 +0000 (UTC) From: Kevin Traynor To: Lukasz Wojciechowski Cc: David Hunt , Honnappa Nagarahalli , dpdk stable Date: Wed, 18 Nov 2020 16:35:04 +0000 Message-Id: <20201118163558.1101823-18-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 synchronization' 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/7f43d9a52f6c913ae693f61c8f9d67aefd23282a Thanks. Kevin. --- >From 7f43d9a52f6c913ae693f61c8f9d67aefd23282a Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Sat, 17 Oct 2020 05:06:45 +0200 Subject: [PATCH] distributor: fix handshake synchronization [ upstream commit bea84d5592eb2658cf8c36214a9db75d398efa1c ] rte_distributor_return_pkt function which is run on worker cores must wait for distributor core to clear handshake on retptr64 before using those buffers. While the handshake is set distributor core controls buffers and any operations on worker side might overwrite buffers which are unread yet. Same situation appears in the legacy single distributor. Function rte_distributor_return_pkt_single shouldn't modify the bufptr64 until handshake on it is cleared by distributor lcore. Fixes: 775003ad2f96 ("distributor: add new burst-capable library") Signed-off-by: Lukasz Wojciechowski Acked-by: David Hunt Reviewed-by: Honnappa Nagarahalli --- lib/librte_distributor/rte_distributor.c | 12 ++++++++++++ lib/librte_distributor/rte_distributor_v20.c | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/lib/librte_distributor/rte_distributor.c b/lib/librte_distributor/rte_distributor.c index 62a7634049..a686d06f81 100644 --- a/lib/librte_distributor/rte_distributor.c +++ b/lib/librte_distributor/rte_distributor.c @@ -184,4 +184,16 @@ rte_distributor_return_pkt_v1705(struct rte_distributor *d, } + /* Spin while handshake bits are set (scheduler clears it). + * Sync with worker on GET_BUF flag. + */ + while (unlikely(__atomic_load_n(&(buf->retptr64[0]), __ATOMIC_RELAXED) + & RTE_DISTRIB_GET_BUF)) { + rte_pause(); + uint64_t t = rte_rdtsc()+100; + + while (rte_rdtsc() < t) + rte_pause(); + } + /* Sync with distributor to acquire retptrs */ __atomic_thread_fence(__ATOMIC_ACQUIRE); diff --git a/lib/librte_distributor/rte_distributor_v20.c b/lib/librte_distributor/rte_distributor_v20.c index 35adc8ea84..5459ccb3f9 100644 --- a/lib/librte_distributor/rte_distributor_v20.c +++ b/lib/librte_distributor/rte_distributor_v20.c @@ -78,4 +78,8 @@ rte_distributor_return_pkt_v20(struct rte_distributor_v20 *d, uint64_t req = (((int64_t)(uintptr_t)oldpkt) << RTE_DISTRIB_FLAG_BITS) | RTE_DISTRIB_RETURN_BUF; + while (unlikely(__atomic_load_n(&buf->bufptr64, __ATOMIC_RELAXED) + & RTE_DISTRIB_FLAGS_MASK)) + rte_pause(); + /* Sync with distributor on RETURN_BUF flag. */ __atomic_store_n(&(buf->bufptr64), req, __ATOMIC_RELEASE); -- 2.26.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-11-18 16:33:38.319552303 +0000 +++ 0018-distributor-fix-handshake-synchronization.patch 2020-11-18 16:33:37.925215059 +0000 @@ -1 +1 @@ -From bea84d5592eb2658cf8c36214a9db75d398efa1c Mon Sep 17 00:00:00 2001 +From 7f43d9a52f6c913ae693f61c8f9d67aefd23282a Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit bea84d5592eb2658cf8c36214a9db75d398efa1c ] + @@ -16 +17,0 @@ -Cc: stable@dpdk.org @@ -22,2 +23,2 @@ - lib/librte_distributor/rte_distributor.c | 12 ++++++++++++ - lib/librte_distributor/rte_distributor_single.c | 4 ++++ + lib/librte_distributor/rte_distributor.c | 12 ++++++++++++ + lib/librte_distributor/rte_distributor_v20.c | 4 ++++ @@ -27 +28 @@ -index 1c047f065a..c6b19a3886 100644 +index 62a7634049..a686d06f81 100644 @@ -30 +31 @@ -@@ -170,4 +170,16 @@ rte_distributor_return_pkt(struct rte_distributor *d, +@@ -184,4 +184,16 @@ rte_distributor_return_pkt_v1705(struct rte_distributor *d, @@ -47,5 +48,5 @@ -diff --git a/lib/librte_distributor/rte_distributor_single.c b/lib/librte_distributor/rte_distributor_single.c -index abaf7730c3..f4725b1d0b 100644 ---- a/lib/librte_distributor/rte_distributor_single.c -+++ b/lib/librte_distributor/rte_distributor_single.c -@@ -75,4 +75,8 @@ rte_distributor_return_pkt_single(struct rte_distributor_single *d, +diff --git a/lib/librte_distributor/rte_distributor_v20.c b/lib/librte_distributor/rte_distributor_v20.c +index 35adc8ea84..5459ccb3f9 100644 +--- a/lib/librte_distributor/rte_distributor_v20.c ++++ b/lib/librte_distributor/rte_distributor_v20.c +@@ -78,4 +78,8 @@ rte_distributor_return_pkt_v20(struct rte_distributor_v20 *d,