event/sw: fix credit return on invalid queue id
authorHarry van Haaren <harry.van.haaren@intel.com>
Tue, 18 Apr 2017 09:58:40 +0000 (10:58 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 19 Apr 2017 22:26:55 +0000 (00:26 +0200)
This patch returns a credit when an rte_event is
enqueued with an invalid queue_id. Previously a
credit was leaked from the system.

Note that the eventdev instance does not attempt
to free any resources that the rte_event owns. As
a result, resources owned by the rte_event are leaked.
Eg. if the rte_event represents an rte_mbuf, the mbuf
will not be freed, and causes a leak from the mempool.

Fixes: 656af9180014 ("event/sw: add worker core functions")

Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
Acked-by: David Hunt <david.hunt@intel.com>
drivers/event/sw/sw_evdev_worker.c

index b9b6f8d..9cb6bef 100644 (file)
@@ -105,9 +105,12 @@ sw_event_enqueue_burst(void *port, const struct rte_event ev[], uint16_t num)
                 */
                if ((new_ops[i] & QE_FLAG_COMPLETE) && outstanding)
                        p->outstanding_releases--;
-               /* Branch to avoid touching p->stats except error case */
-               if (unlikely(invalid_qid))
+
+               /* error case: branch to avoid touching p->stats */
+               if (unlikely(invalid_qid)) {
                        p->stats.rx_dropped++;
+                       p->inflight_credits++;
+               }
        }
 
        /* returns number of events actually enqueued */