[dpdk-dev] event/sw: allow fwd and rel when out of credits

Message ID 1504894072-15735-1-git-send-email-gage.eads@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Jerin Jacob
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Eads, Gage Sept. 8, 2017, 6:07 p.m. UTC
  When forwarding or releasing events, the operation would fail if the port
has 0 inflight credits and cannot acquire more, or the inflight count
exceeds the port's new event threshold.

This patch fixes that by counting the number of new events in the burst,
and applying the credit and new event threshold checks accordingly.

Signed-off-by: Gage Eads <gage.eads@intel.com>
---
 drivers/event/sw/sw_evdev_worker.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)
  

Comments

Van Haaren, Harry Sept. 11, 2017, 8:52 a.m. UTC | #1
> From: Eads, Gage
> Sent: Friday, September 8, 2017 7:08 PM
> To: dev@dpdk.org
> Cc: Van Haaren, Harry <harry.van.haaren@intel.com>;
> jerin.jacon@caviumnetworks.com
> Subject: [PATCH] event/sw: allow fwd and rel when out of credits
> 
> When forwarding or releasing events, the operation would fail if the port
> has 0 inflight credits and cannot acquire more, or the inflight count
> exceeds the port's new event threshold.
> 
> This patch fixes that by counting the number of new events in the burst,
> and applying the credit and new event threshold checks accordingly.
> 
> Signed-off-by: Gage Eads <gage.eads@intel.com>

Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
  
Van Haaren, Harry Sept. 11, 2017, 8:55 a.m. UTC | #2
Re-send fixing Jerin's email;

> From: Van Haaren, Harry
> Sent: Monday, September 11, 2017 9:53 AM
> To: Eads, Gage <gage.eads@intel.com>; dev@dpdk.org
> Cc: jerin.jacon@caviumnetworks.com
> Subject: RE: [PATCH] event/sw: allow fwd and rel when out of credits
> 
> > From: Eads, Gage
> > Sent: Friday, September 8, 2017 7:08 PM
> > To: dev@dpdk.org
> > Cc: Van Haaren, Harry <harry.van.haaren@intel.com>;
> > jerin.jacon@caviumnetworks.com
> > Subject: [PATCH] event/sw: allow fwd and rel when out of credits
> >
> > When forwarding or releasing events, the operation would fail if the port
> > has 0 inflight credits and cannot acquire more, or the inflight count
> > exceeds the port's new event threshold.
> >
> > This patch fixes that by counting the number of new events in the burst,
> > and applying the credit and new event threshold checks accordingly.
> >
> > Signed-off-by: Gage Eads <gage.eads@intel.com>
> 
> Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
  
Jerin Jacob Oct. 16, 2017, 11:33 a.m. UTC | #3
-----Original Message-----
> Date: Mon, 11 Sep 2017 08:52:44 +0000
> From: "Van Haaren, Harry" <harry.van.haaren@intel.com>
> To: "Eads, Gage" <gage.eads@intel.com>, "dev@dpdk.org" <dev@dpdk.org>
> CC: "jerin.jacon@caviumnetworks.com" <jerin.jacon@caviumnetworks.com>
> Subject: Re: [dpdk-dev] [PATCH] event/sw: allow fwd and rel when out of
>  credits
> 
> > From: Eads, Gage
> > Sent: Friday, September 8, 2017 7:08 PM
> > To: dev@dpdk.org
> > Cc: Van Haaren, Harry <harry.van.haaren@intel.com>;
> > jerin.jacon@caviumnetworks.com
> > Subject: [PATCH] event/sw: allow fwd and rel when out of credits
> > 
> > When forwarding or releasing events, the operation would fail if the port
> > has 0 inflight credits and cannot acquire more, or the inflight count
> > exceeds the port's new event threshold.
> > 
> > This patch fixes that by counting the number of new events in the burst,
> > and applying the credit and new event threshold checks accordingly.
> > 
> > Signed-off-by: Gage Eads <gage.eads@intel.com>
> 
> Acked-by: Harry van Haaren <harry.van.haaren@intel.com>

Applied to dpdk-next-eventdev/master. Thanks.
  

Patch

diff --git a/drivers/event/sw/sw_evdev_worker.c b/drivers/event/sw/sw_evdev_worker.c
index d76d3d5..b3b3b17 100644
--- a/drivers/event/sw/sw_evdev_worker.c
+++ b/drivers/event/sw/sw_evdev_worker.c
@@ -85,14 +85,18 @@  sw_event_enqueue_burst(void *port, const struct rte_event ev[], uint16_t num)
 	struct sw_port *p = port;
 	struct sw_evdev *sw = (void *)p->sw;
 	uint32_t sw_inflights = rte_atomic32_read(&sw->inflights);
-
-	if (unlikely(p->inflight_max < sw_inflights))
-		return 0;
+	int new = 0;
 
 	if (num > PORT_ENQUEUE_MAX_BURST_SIZE)
 		num = PORT_ENQUEUE_MAX_BURST_SIZE;
 
-	if (p->inflight_credits < num) {
+	for (i = 0; i < num; i++)
+		new += (ev[i].op == RTE_EVENT_OP_NEW);
+
+	if (unlikely(new > 0 && p->inflight_max < sw_inflights))
+		return 0;
+
+	if (p->inflight_credits < new) {
 		/* check if event enqueue brings port over max threshold */
 		uint32_t credit_update_quanta = sw->credit_update_quanta;
 		if (sw_inflights + credit_update_quanta > sw->nb_events_limit)
@@ -101,7 +105,7 @@  sw_event_enqueue_burst(void *port, const struct rte_event ev[], uint16_t num)
 		rte_atomic32_add(&sw->inflights, credit_update_quanta);
 		p->inflight_credits += (credit_update_quanta);
 
-		if (p->inflight_credits < num)
+		if (p->inflight_credits < new)
 			return 0;
 	}