Thread (27 messages) 27 messages, 4 authors, 2017-10-26

Re: [PATCH 1/3] evendev: fix inconsistency in event queue config

From: Van Haaren, Harry <hidden>
Date: 2017-10-20 16:39:01

From: Pavan Nikhilesh Bhagavatula [mailto:pbhagavatula@caviumnetworks.com]
Sent: Friday, October 20, 2017 11:31 AM
To: Van Haaren, Harry <redacted>
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH 1/3] evendev: fix inconsistency in event
queue config

On Fri, Oct 20, 2017 at 09:54:36AM +0000, Van Haaren, Harry wrote:
quoted
quoted
From: Pavan Nikhilesh [mailto:pbhagavatula@caviumnetworks.com]
Sent: Thursday, October 12, 2017 2:16 PM
To: jerin.jacob@caviumnetworks.com; hemant.agrawal@nxp.com; Van Haaren,
Harry [off-list ref]
Cc: dev@dpdk.org; Pavan Nikhilesh <redacted>
Subject: [dpdk-dev] [PATCH 1/3] evendev: fix inconsistency in event
queue
quoted
quoted
config

With the current scheme of event queue configuration the cfg schedule
type macros (RTE_EVENT_QUEUE_CFG_*_ONLY) are inconsistent with the
event schedule type (RTE_SCHED_TYPE_*) this requires unnecessary
conversion between the fastpath and slowpath API's while scheduling
events or configuring event queues.

This patch aims to fix such inconsistency by using event schedule
types (RTE_SCHED_TYPE_*) for event queue configuration.
True - worth cleaning up.

quoted
This patch also fixes example/eventdev_pipeline_sw_pmd as it doesn't
convert RTE_EVENT_QUEUE_CFG_*_ONLY to RTE_SCHED_TYPE_* which leads to
improper events being enqueued to the eventdev.

Fixes: adb5d5486c39 ("examples/eventdev_pipeline_sw_pmd: add sample
app")
quoted
quoted
Signed-off-by: Pavan Nikhilesh <redacted>


 app/test-eventdev/evt_common.h           | 21 -------------
 app/test-eventdev/test_order_queue.c     |  4 +--
 app/test-eventdev/test_perf_queue.c      |  4 +--
 drivers/event/dpaa2/dpaa2_eventdev.c     |  4 +--
 drivers/event/sw/sw_evdev.c              | 28 +++++------------
 examples/eventdev_pipeline_sw_pmd/main.c | 18 +++++------
 lib/librte_eventdev/rte_eventdev.c       | 20 +++++-------
 lib/librte_eventdev/rte_eventdev.h       | 54 ++++++++++---------------
----
quoted
quoted
---
 test/test/test_eventdev.c                | 12 +++----
 test/test/test_eventdev_sw.c             | 16 +++++-----
 10 files changed, 60 insertions(+), 121 deletions(-)
diff --git a/app/test-eventdev/evt_common.h b/app/test-
eventdev/evt_common.h
quoted
quoted
index 4102076..ee896a2 100644
--- a/app/test-eventdev/evt_common.h
+++ b/app/test-eventdev/evt_common.h
@@ -92,25 +92,4 @@ evt_has_all_types_queue(uint8_t dev_id)
 			true : false;
 }

-static inline uint32_t
-evt_sched_type2queue_cfg(uint8_t sched_type)
-{
-	uint32_t ret;
-
-	switch (sched_type) {
-	case RTE_SCHED_TYPE_ATOMIC:
-		ret = RTE_EVENT_QUEUE_CFG_ATOMIC_ONLY;
-		break;
-	case RTE_SCHED_TYPE_ORDERED:
-		ret = RTE_EVENT_QUEUE_CFG_ORDERED_ONLY;
-		break;
-	case RTE_SCHED_TYPE_PARALLEL:
-		ret = RTE_EVENT_QUEUE_CFG_PARALLEL_ONLY;
-		break;
-	default:
-		rte_panic("Invalid sched_type %d\n", sched_type);
-	}
-	return ret;
-}

We should note here, that SCHED_TYPE are integer values:
#define RTE_SCHED_TYPE_ORDERED          0
#define RTE_SCHED_TYPE_ATOMIC           1
#define RTE_SCHED_TYPE_PARALLEL         2

While the EVENT_QUEUE_CFG_ types were bitmasks (before being removed in
this patch)
quoted
#define RTE_EVENT_QUEUE_CFG_ATOMIC_ONLY        (1ULL << 0)
#define RTE_EVENT_QUEUE_CFG_ORDERED_ONLY       (2ULL << 0)
#define RTE_EVENT_QUEUE_CFG_PARALLEL_ONLY      (3ULL << 0)
#define RTE_EVENT_QUEUE_CFG_SINGLE_LINK        (1ULL << 2)


I'm not against this change - but we must be careful that if there was any
bit-masking being used previously,
quoted
that that will subtly have broken if we change to sched types. I'm
reviewing with that in mind..
quoted
The RTE_EVENT_QUEUE_CFG_ALL_TYPES  config flag now means that all
SCHED_TYPEs
quoted
are valid. Previously this was contained in the bitmask.. this may lead to
issues.
quoted
See patch 2/3, where *only* the schedule_type is read, and returned. What
if it the "ALL_TYPES" flag is
quoted
set on the queue? It will be reported wrongly. Currently there is no
integer value for "ALL_TYPES",
quoted
so we cannot represent "ALL TYPES" in the return value from get_attr().

Am I explaining my reasoning clearly enough?
Hey Harry,

I do understand what you mean, my initial thought was to include "ALL_TYPES"
as
a schedule_type in queue config but this would just complicate things.

As these values are only used in config phase we could have a check to see
if
event_queue_cfg is not "ALL_TYPES" and only then return the value of
sched_type
else return a error value in case of get_attr().

I think most of the places this specific check is handled, one such missed
place would be get_attr(). If we could come to a conclusion to fix it in a
correct way I will send out a v2.

Sure, I see two sane-ish options:

1) Return an error code from get_attr(), which actually means "ALL TYPES". Feels a bit weird, because an error value is really a valid return.

2) Return UINT_MAX (aka, -1) as the scheduling value. Applications that use/care about the scheduling type must check, others can ignore it.

I'm not sure which of these is the better/less-bad solution. Opinions? -H
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help