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 BF807A0542 for ; Fri, 7 Feb 2020 16:13:46 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B70F51C11E; Fri, 7 Feb 2020 16:13:46 +0100 (CET) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by dpdk.org (Postfix) with ESMTP id 6BFEE1C12F for ; Fri, 7 Feb 2020 16:13:45 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1581088424; 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=hOH0WwPRffU5byP7uqsIHQ3uHHum54/fD6QsvxNj3tI=; b=eYyFOaS5Pb5teNuLDssCbJi10HV9/iNW/iK8tNI2E4LXH4T6TOU9q3SbqfQspFpooyLIqH DjQhl+xqem1UUgFn01wp2UJUDQB9RNUiGBsYmn4exTd/fjUt4AQigEIOwvZPVTbaaWQwbX hXhO1xQfz+4ZJQQyOMLRgrCqeafo7K4= 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-81-oEfo1h0CMoSlYhbaLM2I3Q-1; Fri, 07 Feb 2020 10:13:28 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 88202107B78C; Fri, 7 Feb 2020 15:13:26 +0000 (UTC) Received: from rh.redhat.com (unknown [10.33.36.76]) by smtp.corp.redhat.com (Postfix) with ESMTP id B614810016DA; Fri, 7 Feb 2020 15:13:25 +0000 (UTC) From: Kevin Traynor To: =?UTF-8?q?Mattias=20R=C3=B6nnblom?= Cc: dpdk stable Date: Fri, 7 Feb 2020 15:12:22 +0000 Message-Id: <20200207151248.29804-10-ktraynor@redhat.com> In-Reply-To: <20200207151248.29804-1-ktraynor@redhat.com> References: <20200207151248.29804-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-MC-Unique: oEfo1h0CMoSlYhbaLM2I3Q-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [dpdk-stable] patch 'event/dsw: avoid credit leak on oversized enqueue bursts' has been queued to LTS release 18.11.7 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.7 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 02/13/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 rebasi= ng (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/1caa6035fa2a96f7de= 79d24d15b07b6f598d1697 Thanks. Kevin. --- >From 1caa6035fa2a96f7de79d24d15b07b6f598d1697 Mon Sep 17 00:00:00 2001 From: =3D?UTF-8?q?Mattias=3D20R=3DC3=3DB6nnblom?=3D Date: Tue, 14 Jan 2020 19:03:38 +0100 Subject: [PATCH] event/dsw: avoid credit leak on oversized enqueue bursts MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit [ upstream commit 0c4155c7b5b51a60f676c1d7279bfcd1b14acd38 ] If an application issues rte_event_enqueue_new_burst() or rte_event_enqueue_forward_burst() call with a burst of events longer than the configured max enqueue burst size, DSW allocates credits not only for events actually enqueued, but for the complete burst. If this process is repeated, enough credits will have leaked to cause the event device to backpressure (i.e. disallow) any new enqueue operations. In addition, the port-level enqueue xstats will log the wrong number of events enqueued for oversized enqueues. This patch makes DSW gracefully handle oversized enqueue bursts. Fixes: 1c8e3caa3bfb ("event/dsw: add event scheduling and device start/stop= ") Signed-off-by: Mattias R=C3=B6nnblom --- drivers/event/dsw/dsw_event.c | 38 ++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/drivers/event/dsw/dsw_event.c b/drivers/event/dsw/dsw_event.c index 1641c2d06e..eae53b2404 100644 --- a/drivers/event/dsw/dsw_event.c +++ b/drivers/event/dsw/dsw_event.c @@ -1019,10 +1019,10 @@ dsw_event_enqueue(void *port, const struct rte_even= t *ev) =20 static __rte_always_inline uint16_t -dsw_event_enqueue_burst_generic(void *port, const struct rte_event events[= ], +dsw_event_enqueue_burst_generic(struct dsw_port *source_port, +=09=09=09=09const struct rte_event events[], =09=09=09=09uint16_t events_len, bool op_types_known, =09=09=09=09uint16_t num_new, uint16_t num_release, =09=09=09=09uint16_t num_non_release) { -=09struct dsw_port *source_port =3D port; =09struct dsw_evdev *dsw =3D source_port->dsw; =09bool enough_credits; @@ -1048,11 +1048,8 @@ dsw_event_enqueue_burst_generic(void *port, const st= ruct rte_event events[], =09if (unlikely(events_len =3D=3D 0)) { =09=09dsw_port_note_op(source_port, DSW_MAX_PORT_OPS_PER_BG_TASK); -=09=09dsw_port_flush_out_buffers(dsw, port); +=09=09dsw_port_flush_out_buffers(dsw, source_port); =09=09return 0; =09} =20 -=09if (unlikely(events_len > source_port->enqueue_depth)) -=09=09events_len =3D source_port->enqueue_depth; - =09dsw_port_note_op(source_port, events_len); =20 @@ -1110,6 +1107,11 @@ dsw_event_enqueue_burst(void *port, const struct rte= _event events[], =09=09=09uint16_t events_len) { -=09return dsw_event_enqueue_burst_generic(port, events, events_len, false, -=09=09=09=09=09 0, 0, 0); +=09struct dsw_port *source_port =3D port; + +=09if (unlikely(events_len > source_port->enqueue_depth)) +=09=09events_len =3D source_port->enqueue_depth; + +=09return dsw_event_enqueue_burst_generic(source_port, events, +=09=09=09=09=09 events_len, false, 0, 0, 0); } =20 @@ -1118,6 +1120,12 @@ dsw_event_enqueue_new_burst(void *port, const struct= rte_event events[], =09=09=09 uint16_t events_len) { -=09return dsw_event_enqueue_burst_generic(port, events, events_len, true, -=09=09=09=09=09 events_len, 0, events_len); +=09struct dsw_port *source_port =3D port; + +=09if (unlikely(events_len > source_port->enqueue_depth)) +=09=09events_len =3D source_port->enqueue_depth; + +=09return dsw_event_enqueue_burst_generic(source_port, events, +=09=09=09=09=09 events_len, true, events_len, +=09=09=09=09=09 0, events_len); } =20 @@ -1126,6 +1134,12 @@ dsw_event_enqueue_forward_burst(void *port, const st= ruct rte_event events[], =09=09=09=09uint16_t events_len) { -=09return dsw_event_enqueue_burst_generic(port, events, events_len, true, -=09=09=09=09=09 0, 0, events_len); +=09struct dsw_port *source_port =3D port; + +=09if (unlikely(events_len > source_port->enqueue_depth)) +=09=09events_len =3D source_port->enqueue_depth; + +=09return dsw_event_enqueue_burst_generic(source_port, events, +=09=09=09=09=09 events_len, true, 0, 0, +=09=09=09=09=09 events_len); } =20 --=20 2.21.1 --- Diff of the applied patch vs upstream commit (please double-check if non-= empty: --- --- -=092020-02-07 15:08:18.054801011 +0000 +++ 0010-event-dsw-avoid-credit-leak-on-oversized-enqueue-bur.patch=092020-= 02-07 15:08:17.495063202 +0000 @@ -1 +1 @@ -From 0c4155c7b5b51a60f676c1d7279bfcd1b14acd38 Mon Sep 17 00:00:00 2001 +From 1caa6035fa2a96f7de79d24d15b07b6f598d1697 Mon Sep 17 00:00:00 2001 @@ -8,0 +9,2 @@ +[ upstream commit 0c4155c7b5b51a60f676c1d7279bfcd1b14acd38 ] + @@ -23 +24,0 @@ -Cc: stable@dpdk.org