patches for DPDK stable branches
 help / color / mirror / Atom feed
From: luca.boccassi@gmail.com
To: Shijith Thotton <sthotton@marvell.com>
Cc: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>,
	dpdk stable <stable@dpdk.org>
Subject: patch 'eventdev/timer: fix timeout event wait behavior' has been queued to stable release 20.11.9
Date: Thu, 15 Jun 2023 02:32:09 +0100	[thread overview]
Message-ID: <20230615013258.1439718-14-luca.boccassi@gmail.com> (raw)
In-Reply-To: <20230615013258.1439718-1-luca.boccassi@gmail.com>

Hi,

FYI, your patch has been queued to stable release 20.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 06/17/23. 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/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/e6a734e6270ef1290b26b9ed44d45b9b4788d2c7

Thanks.

Luca Boccassi

---
From e6a734e6270ef1290b26b9ed44d45b9b4788d2c7 Mon Sep 17 00:00:00 2001
From: Shijith Thotton <sthotton@marvell.com>
Date: Tue, 21 Mar 2023 10:50:23 +0530
Subject: [PATCH] eventdev/timer: fix timeout event wait behavior

[ upstream commit fb9c213317b5e07918c9306f2036f8cc07126a85 ]

Improved the accuracy and consistency of timeout event wait behavior by
refactoring it. Previously, the delay function used for waiting could be
inaccurate, leading to inconsistent results. This commit updates the
wait behavior to use a timeout-based approach, enabling the wait for the
exact number of timer ticks before proceeding.

The new function timeout_event_dequeue mimics the behavior of the tested
systems closely. It dequeues timer expiry events until either the
expected number of events have been dequeued or the specified time has
elapsed. The WAIT_TICKS macro defines the waiting behavior based on the
type of timer being used (software or hardware).

Fixes: d1f3385d0076 ("test: add event timer adapter auto-test")

Signed-off-by: Shijith Thotton <sthotton@marvell.com>
Acked-by: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>
---
 app/test/test_event_timer_adapter.c | 165 +++++++++++-----------------
 1 file changed, 67 insertions(+), 98 deletions(-)

diff --git a/app/test/test_event_timer_adapter.c b/app/test/test_event_timer_adapter.c
index 622c62f914..8ea0d84145 100644
--- a/app/test/test_event_timer_adapter.c
+++ b/app/test/test_event_timer_adapter.c
@@ -47,9 +47,10 @@ static uint64_t global_bkt_tck_ns;
 static uint64_t global_info_bkt_tck_ns;
 static volatile uint8_t arm_done;
 
-#define CALC_TICKS(tks)					\
-	ceil((double)(tks * global_bkt_tck_ns) / global_info_bkt_tck_ns)
+#define CALC_TICKS(tks) ceil((double)((tks) * global_bkt_tck_ns) / global_info_bkt_tck_ns)
 
+/* Wait double timeout ticks for software and an extra tick for hardware */
+#define WAIT_TICKS(tks) (using_services ? 2 * (tks) : tks + 1)
 
 static bool using_services;
 static uint32_t test_lcore1;
@@ -385,10 +386,31 @@ timdev_teardown(void)
 	rte_mempool_free(eventdev_test_mempool);
 }
 
+static inline uint16_t
+timeout_event_dequeue(struct rte_event *evs, uint64_t nb_evs, uint64_t ticks)
+{
+	uint16_t ev_cnt = 0;
+	uint64_t end_cycle;
+
+	if (using_services && nb_evs == MAX_TIMERS)
+		ticks = 2 * ticks;
+
+	end_cycle = rte_rdtsc() + ticks * global_bkt_tck_ns * rte_get_tsc_hz() / 1E9;
+
+	while (ev_cnt < nb_evs && rte_rdtsc() < end_cycle) {
+		ev_cnt += rte_event_dequeue_burst(evdev, TEST_PORT_ID, &evs[ev_cnt], nb_evs, 0);
+		rte_pause();
+	}
+
+	return ev_cnt;
+}
+
 static inline int
 test_timer_state(void)
 {
 	struct rte_event_timer *ev_tim;
+	const uint64_t max_ticks = 100;
+	uint64_t ticks, wait_ticks;
 	struct rte_event ev;
 	const struct rte_event_timer tim = {
 		.ev.op = RTE_EVENT_OP_NEW,
@@ -399,11 +421,10 @@ test_timer_state(void)
 		.state = RTE_EVENT_TIMER_NOT_ARMED,
 	};
 
-
 	rte_mempool_get(eventdev_test_mempool, (void **)&ev_tim);
 	*ev_tim = tim;
 	ev_tim->ev.event_ptr = ev_tim;
-	ev_tim->timeout_ticks = CALC_TICKS(120);
+	ev_tim->timeout_ticks = CALC_TICKS(max_ticks + 20);
 
 	TEST_ASSERT_EQUAL(rte_event_timer_arm_burst(timdev, &ev_tim, 1), 0,
 			"Armed timer exceeding max_timeout.");
@@ -411,8 +432,9 @@ test_timer_state(void)
 			"Improper timer state set expected %d returned %d",
 			RTE_EVENT_TIMER_ERROR_TOOLATE, ev_tim->state);
 
+	ticks = 10;
 	ev_tim->state = RTE_EVENT_TIMER_NOT_ARMED;
-	ev_tim->timeout_ticks = CALC_TICKS(10);
+	ev_tim->timeout_ticks = CALC_TICKS(ticks);
 
 	TEST_ASSERT_EQUAL(rte_event_timer_arm_burst(timdev, &ev_tim, 1), 1,
 			"Failed to arm timer with proper timeout.");
@@ -421,14 +443,15 @@ test_timer_state(void)
 			RTE_EVENT_TIMER_ARMED, ev_tim->state);
 
 	if (!using_services)
-		rte_delay_us(20);
+		wait_ticks = 2 * ticks;
 	else
-		rte_delay_us(1000 + 200);
-	TEST_ASSERT_EQUAL(rte_event_dequeue_burst(evdev, 0, &ev, 1, 0), 1,
-			"Armed timer failed to trigger.");
+		wait_ticks = ticks;
+
+	TEST_ASSERT_EQUAL(timeout_event_dequeue(&ev, 1, WAIT_TICKS(wait_ticks)), 1,
+			  "Armed timer failed to trigger.");
 
 	ev_tim->state = RTE_EVENT_TIMER_NOT_ARMED;
-	ev_tim->timeout_ticks = CALC_TICKS(90);
+	ev_tim->timeout_ticks = CALC_TICKS(max_ticks - 10);
 	TEST_ASSERT_EQUAL(rte_event_timer_arm_burst(timdev, &ev_tim, 1), 1,
 			"Failed to arm timer with proper timeout.");
 	TEST_ASSERT_EQUAL(rte_event_timer_cancel_burst(timdev, &ev_tim, 1),
@@ -1061,8 +1084,9 @@ stat_inc_reset_ev_enq(void)
 	int ret, i, n;
 	int num_evtims = MAX_TIMERS;
 	struct rte_event_timer *evtims[num_evtims];
-	struct rte_event evs[BATCH_SIZE];
+	struct rte_event evs[num_evtims];
 	struct rte_event_timer_adapter_stats stats;
+	uint64_t ticks = 5;
 	const struct rte_event_timer init_tim = {
 		.ev.op = RTE_EVENT_OP_NEW,
 		.ev.queue_id = TEST_QUEUE_ID,
@@ -1070,7 +1094,7 @@ stat_inc_reset_ev_enq(void)
 		.ev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL,
 		.ev.event_type =  RTE_EVENT_TYPE_TIMER,
 		.state = RTE_EVENT_TIMER_NOT_ARMED,
-		.timeout_ticks = CALC_TICKS(5), // expire in .5 sec
+		.timeout_ticks = CALC_TICKS(ticks), /**< expire in .5 sec */
 	};
 
 	ret = rte_mempool_get_bulk(eventdev_test_mempool, (void **)evtims,
@@ -1095,31 +1119,12 @@ stat_inc_reset_ev_enq(void)
 			  "succeeded = %d, rte_errno = %s",
 			  num_evtims, ret, rte_strerror(rte_errno));
 
-	rte_delay_ms(1000);
-
-#define MAX_TRIES num_evtims
-	int sum = 0;
-	int tries = 0;
-	bool done = false;
-	while (!done) {
-		sum += rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs,
-					       RTE_DIM(evs), 10);
-		if (sum >= num_evtims || ++tries >= MAX_TRIES)
-			done = true;
-
-		rte_delay_ms(10);
-	}
-
-	TEST_ASSERT_EQUAL(sum, num_evtims, "Expected %d timer expiry events, "
-			  "got %d", num_evtims, sum);
-
-	TEST_ASSERT(tries < MAX_TRIES, "Exceeded max tries");
-
-	rte_delay_ms(100);
+	n = timeout_event_dequeue(evs, RTE_DIM(evs), WAIT_TICKS(ticks));
+	TEST_ASSERT_EQUAL(n, num_evtims, "Expected %d timer expiry events, got %d",
+			  num_evtims, n);
 
 	/* Make sure the eventdev is still empty */
-	n = rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, RTE_DIM(evs),
-				      10);
+	n = timeout_event_dequeue(evs, 1, WAIT_TICKS(1));
 
 	TEST_ASSERT_EQUAL(n, 0, "Dequeued unexpected number of timer expiry "
 			  "events from event device");
@@ -1156,6 +1161,7 @@ event_timer_arm(void)
 	struct rte_event_timer_adapter *adapter = timdev;
 	struct rte_event_timer *evtim = NULL;
 	struct rte_event evs[BATCH_SIZE];
+	uint64_t ticks = 5;
 	const struct rte_event_timer init_tim = {
 		.ev.op = RTE_EVENT_OP_NEW,
 		.ev.queue_id = TEST_QUEUE_ID,
@@ -1163,7 +1169,7 @@ event_timer_arm(void)
 		.ev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL,
 		.ev.event_type =  RTE_EVENT_TYPE_TIMER,
 		.state = RTE_EVENT_TIMER_NOT_ARMED,
-		.timeout_ticks = CALC_TICKS(5), // expire in .5 sec
+		.timeout_ticks = CALC_TICKS(ticks), /**< expire in .5 sec */
 	};
 
 	rte_mempool_get(eventdev_test_mempool, (void **)&evtim);
@@ -1190,10 +1196,7 @@ event_timer_arm(void)
 	TEST_ASSERT_EQUAL(rte_errno, EALREADY, "Unexpected rte_errno value "
 			  "after arming already armed timer");
 
-	/* Let timer expire */
-	rte_delay_ms(1000);
-
-	n = rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, RTE_DIM(evs), 0);
+	n = timeout_event_dequeue(evs, RTE_DIM(evs), WAIT_TICKS(ticks));
 	TEST_ASSERT_EQUAL(n, 1, "Failed to dequeue expected number of expiry "
 			  "events from event device");
 
@@ -1213,6 +1216,7 @@ event_timer_arm_double(void)
 	struct rte_event_timer_adapter *adapter = timdev;
 	struct rte_event_timer *evtim = NULL;
 	struct rte_event evs[BATCH_SIZE];
+	uint64_t ticks = 5;
 	const struct rte_event_timer init_tim = {
 		.ev.op = RTE_EVENT_OP_NEW,
 		.ev.queue_id = TEST_QUEUE_ID,
@@ -1220,7 +1224,7 @@ event_timer_arm_double(void)
 		.ev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL,
 		.ev.event_type =  RTE_EVENT_TYPE_TIMER,
 		.state = RTE_EVENT_TIMER_NOT_ARMED,
-		.timeout_ticks = CALC_TICKS(5), // expire in .5 sec
+		.timeout_ticks = CALC_TICKS(ticks), /**< expire in .5 sec */
 	};
 
 	rte_mempool_get(eventdev_test_mempool, (void **)&evtim);
@@ -1240,10 +1244,7 @@ event_timer_arm_double(void)
 	TEST_ASSERT_EQUAL(rte_errno, EALREADY, "Unexpected rte_errno value "
 			  "after double-arm");
 
-	/* Let timer expire */
-	rte_delay_ms(600);
-
-	n = rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, RTE_DIM(evs), 0);
+	n = timeout_event_dequeue(evs, RTE_DIM(evs), WAIT_TICKS(ticks));
 	TEST_ASSERT_EQUAL(n, 1, "Dequeued incorrect number of expiry events - "
 			  "expected: 1, actual: %d", n);
 
@@ -1270,6 +1271,7 @@ event_timer_arm_expiry(void)
 		.ev.event_type =  RTE_EVENT_TYPE_TIMER,
 		.state = RTE_EVENT_TIMER_NOT_ARMED,
 	};
+	uint64_t ticks = 30;
 
 	rte_mempool_get(eventdev_test_mempool, (void **)&evtim);
 	if (evtim == NULL) {
@@ -1279,7 +1281,7 @@ event_timer_arm_expiry(void)
 
 	/* Set up an event timer */
 	*evtim = init_tim;
-	evtim->timeout_ticks = CALC_TICKS(30),	// expire in 3 secs
+	evtim->timeout_ticks = CALC_TICKS(ticks); /**< expire in 3 secs */
 	evtim->ev.event_ptr = evtim;
 
 	ret = rte_event_timer_arm_burst(adapter, &evtim, 1);
@@ -1288,17 +1290,10 @@ event_timer_arm_expiry(void)
 	TEST_ASSERT_EQUAL(evtim->state, RTE_EVENT_TIMER_ARMED, "Event "
 			  "timer in incorrect state");
 
-	rte_delay_ms(2999);
-
-	n = rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, RTE_DIM(evs), 0);
+	n = timeout_event_dequeue(evs, RTE_DIM(evs), ticks - 1);
 	TEST_ASSERT_EQUAL(n, 0, "Dequeued unexpected timer expiry event");
 
-	/* Delay 100 ms to account for the adapter tick window - should let us
-	 * dequeue one event
-	 */
-	rte_delay_ms(100);
-
-	n = rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, RTE_DIM(evs), 0);
+	n = timeout_event_dequeue(evs, RTE_DIM(evs), WAIT_TICKS(1));
 	TEST_ASSERT_EQUAL(n, 1, "Dequeued incorrect number (%d) of timer "
 			  "expiry events", n);
 	TEST_ASSERT_EQUAL(evs[0].event_type, RTE_EVENT_TYPE_TIMER,
@@ -1330,6 +1325,7 @@ event_timer_arm_rearm(void)
 		.ev.event_type = RTE_EVENT_TYPE_TIMER,
 		.state = RTE_EVENT_TIMER_NOT_ARMED,
 	};
+	uint64_t ticks = 1;
 
 	rte_mempool_get(eventdev_test_mempool, (void **)&evtim);
 	if (evtim == NULL) {
@@ -1339,7 +1335,7 @@ event_timer_arm_rearm(void)
 
 	/* Set up a timer */
 	*evtim = init_tim;
-	evtim->timeout_ticks = CALC_TICKS(1);  // expire in 0.1 sec
+	evtim->timeout_ticks = CALC_TICKS(ticks); /**< expire in 0.1 sec */
 	evtim->ev.event_ptr = evtim;
 
 	/* Arm it */
@@ -1347,10 +1343,7 @@ event_timer_arm_rearm(void)
 	TEST_ASSERT_EQUAL(ret, 1, "Failed to arm event timer: %s\n",
 			  rte_strerror(rte_errno));
 
-	/* Add 100ms to account for the adapter tick window */
-	rte_delay_ms(100 + 100);
-
-	n = rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, RTE_DIM(evs), 0);
+	n = timeout_event_dequeue(evs, RTE_DIM(evs), WAIT_TICKS(ticks));
 	TEST_ASSERT_EQUAL(n, 1, "Failed to dequeue expected number of expiry "
 			  "events from event device");
 
@@ -1367,10 +1360,7 @@ event_timer_arm_rearm(void)
 	TEST_ASSERT_EQUAL(ret, 1, "Failed to arm event timer: %s\n",
 			  rte_strerror(rte_errno));
 
-	/* Add 100ms to account for the adapter tick window */
-	rte_delay_ms(100 + 100);
-
-	n = rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, RTE_DIM(evs), 0);
+	n = timeout_event_dequeue(evs, RTE_DIM(evs), WAIT_TICKS(ticks));
 	TEST_ASSERT_EQUAL(n, 1, "Failed to dequeue expected number of expiry "
 			  "events from event device");
 
@@ -1392,7 +1382,8 @@ event_timer_arm_max(void)
 	int ret, i, n;
 	int num_evtims = MAX_TIMERS;
 	struct rte_event_timer *evtims[num_evtims];
-	struct rte_event evs[BATCH_SIZE];
+	struct rte_event evs[num_evtims];
+	uint64_t ticks = 5;
 	const struct rte_event_timer init_tim = {
 		.ev.op = RTE_EVENT_OP_NEW,
 		.ev.queue_id = TEST_QUEUE_ID,
@@ -1400,7 +1391,7 @@ event_timer_arm_max(void)
 		.ev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL,
 		.ev.event_type =  RTE_EVENT_TYPE_TIMER,
 		.state = RTE_EVENT_TIMER_NOT_ARMED,
-		.timeout_ticks = CALC_TICKS(5), // expire in .5 sec
+		.timeout_ticks = CALC_TICKS(ticks), /**< expire in .5 sec */
 	};
 
 	ret = rte_mempool_get_bulk(eventdev_test_mempool, (void **)evtims,
@@ -1420,31 +1411,12 @@ event_timer_arm_max(void)
 			  "succeeded = %d, rte_errno = %s",
 			  num_evtims, ret, rte_strerror(rte_errno));
 
-	rte_delay_ms(1000);
-
-#define MAX_TRIES num_evtims
-	int sum = 0;
-	int tries = 0;
-	bool done = false;
-	while (!done) {
-		sum += rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs,
-					       RTE_DIM(evs), 10);
-		if (sum >= num_evtims || ++tries >= MAX_TRIES)
-			done = true;
-
-		rte_delay_ms(10);
-	}
-
-	TEST_ASSERT_EQUAL(sum, num_evtims, "Expected %d timer expiry events, "
-			  "got %d", num_evtims, sum);
-
-	TEST_ASSERT(tries < MAX_TRIES, "Exceeded max tries");
-
-	rte_delay_ms(100);
+	n = timeout_event_dequeue(evs, RTE_DIM(evs), WAIT_TICKS(ticks));
+	TEST_ASSERT_EQUAL(n, num_evtims, "Expected %d timer expiry events, got %d",
+			  num_evtims, n);
 
 	/* Make sure the eventdev is still empty */
-	n = rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, RTE_DIM(evs),
-				    10);
+	n = timeout_event_dequeue(evs, 1, WAIT_TICKS(1));
 
 	TEST_ASSERT_EQUAL(n, 0, "Dequeued unexpected number of timer expiry "
 			  "events from event device");
@@ -1564,6 +1536,7 @@ event_timer_cancel(void)
 		.ev.event_type =  RTE_EVENT_TYPE_TIMER,
 		.state = RTE_EVENT_TIMER_NOT_ARMED,
 	};
+	uint64_t ticks = 30;
 
 	rte_mempool_get(eventdev_test_mempool, (void **)&evtim);
 	if (evtim == NULL) {
@@ -1581,7 +1554,7 @@ event_timer_cancel(void)
 	/* Set up a timer */
 	*evtim = init_tim;
 	evtim->ev.event_ptr = evtim;
-	evtim->timeout_ticks = CALC_TICKS(30);  // expire in 3 sec
+	evtim->timeout_ticks = CALC_TICKS(ticks); /**< expire in 3 sec */
 
 	/* Check that cancelling an inited but unarmed timer fails */
 	ret = rte_event_timer_cancel_burst(adapter, &evtim, 1);
@@ -1605,10 +1578,8 @@ event_timer_cancel(void)
 	TEST_ASSERT_EQUAL(evtim->state, RTE_EVENT_TIMER_CANCELED,
 			  "evtim in incorrect state");
 
-	rte_delay_ms(3000);
-
 	/* Make sure that no expiry event was generated */
-	n = rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, RTE_DIM(evs), 0);
+	n = timeout_event_dequeue(evs, RTE_DIM(evs), WAIT_TICKS(ticks));
 	TEST_ASSERT_EQUAL(n, 0, "Dequeued unexpected timer expiry event\n");
 
 	rte_mempool_put(eventdev_test_mempool, evtim);
@@ -1631,8 +1602,8 @@ event_timer_cancel_double(void)
 		.ev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL,
 		.ev.event_type =  RTE_EVENT_TYPE_TIMER,
 		.state = RTE_EVENT_TIMER_NOT_ARMED,
-		.timeout_ticks = CALC_TICKS(5), // expire in .5 sec
 	};
+	uint64_t ticks = 30;
 
 	rte_mempool_get(eventdev_test_mempool, (void **)&evtim);
 	if (evtim == NULL) {
@@ -1643,7 +1614,7 @@ event_timer_cancel_double(void)
 	/* Set up a timer */
 	*evtim = init_tim;
 	evtim->ev.event_ptr = evtim;
-	evtim->timeout_ticks = CALC_TICKS(30);  // expire in 3 sec
+	evtim->timeout_ticks = CALC_TICKS(ticks); /**< expire in 3 sec */
 
 	ret = rte_event_timer_arm_burst(adapter, &evtim, 1);
 	TEST_ASSERT_EQUAL(ret, 1, "Failed to arm event timer: %s\n",
@@ -1665,10 +1636,8 @@ event_timer_cancel_double(void)
 	TEST_ASSERT_EQUAL(rte_errno, EALREADY, "Unexpected rte_errno value "
 			  "after double-cancel: rte_errno = %d", rte_errno);
 
-	rte_delay_ms(3000);
-
 	/* Still make sure that no expiry event was generated */
-	n = rte_event_dequeue_burst(evdev, TEST_PORT_ID, evs, RTE_DIM(evs), 0);
+	n = timeout_event_dequeue(evs, RTE_DIM(evs), WAIT_TICKS(ticks));
 	TEST_ASSERT_EQUAL(n, 0, "Dequeued unexpected timer expiry event\n");
 
 	rte_mempool_put(eventdev_test_mempool, evtim);
-- 
2.39.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2023-06-15 01:56:35.491691152 +0100
+++ 0014-eventdev-timer-fix-timeout-event-wait-behavior.patch	2023-06-15 01:56:34.523540341 +0100
@@ -1 +1 @@
-From fb9c213317b5e07918c9306f2036f8cc07126a85 Mon Sep 17 00:00:00 2001
+From e6a734e6270ef1290b26b9ed44d45b9b4788d2c7 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit fb9c213317b5e07918c9306f2036f8cc07126a85 ]
+
@@ -19 +20,0 @@
-Cc: stable@dpdk.org
@@ -24,2 +25,2 @@
- app/test/test_event_timer_adapter.c | 169 +++++++++++-----------------
- 1 file changed, 68 insertions(+), 101 deletions(-)
+ app/test/test_event_timer_adapter.c | 165 +++++++++++-----------------
+ 1 file changed, 67 insertions(+), 98 deletions(-)
@@ -28 +29 @@
-index 5e7feec1c7..510bebcf86 100644
+index 622c62f914..8ea0d84145 100644
@@ -31 +32 @@
-@@ -57,9 +57,10 @@ static uint64_t global_bkt_tck_ns;
+@@ -47,9 +47,10 @@ static uint64_t global_bkt_tck_ns;
@@ -44 +45 @@
-@@ -441,10 +442,31 @@ timdev_teardown(void)
+@@ -385,10 +386,31 @@ timdev_teardown(void)
@@ -76 +77 @@
-@@ -455,11 +477,10 @@ test_timer_state(void)
+@@ -399,11 +421,10 @@ test_timer_state(void)
@@ -89 +90 @@
-@@ -467,8 +488,9 @@ test_timer_state(void)
+@@ -411,8 +432,9 @@ test_timer_state(void)
@@ -100 +101 @@
-@@ -477,14 +499,15 @@ test_timer_state(void)
+@@ -421,14 +443,15 @@ test_timer_state(void)
@@ -121 +122 @@
-@@ -1208,8 +1231,9 @@ stat_inc_reset_ev_enq(void)
+@@ -1061,8 +1084,9 @@ stat_inc_reset_ev_enq(void)
@@ -132 +133 @@
-@@ -1217,7 +1241,7 @@ stat_inc_reset_ev_enq(void)
+@@ -1070,7 +1094,7 @@ stat_inc_reset_ev_enq(void)
@@ -141 +142 @@
-@@ -1242,31 +1266,12 @@ stat_inc_reset_ev_enq(void)
+@@ -1095,31 +1119,12 @@ stat_inc_reset_ev_enq(void)
@@ -177 +178 @@
-@@ -1303,6 +1308,7 @@ event_timer_arm(void)
+@@ -1156,6 +1161,7 @@ event_timer_arm(void)
@@ -185 +186 @@
-@@ -1310,7 +1316,7 @@ event_timer_arm(void)
+@@ -1163,7 +1169,7 @@ event_timer_arm(void)
@@ -194 +195 @@
-@@ -1337,10 +1343,7 @@ event_timer_arm(void)
+@@ -1190,10 +1196,7 @@ event_timer_arm(void)
@@ -206 +207 @@
-@@ -1360,6 +1363,7 @@ event_timer_arm_double(void)
+@@ -1213,6 +1216,7 @@ event_timer_arm_double(void)
@@ -214 +215 @@
-@@ -1367,7 +1371,7 @@ event_timer_arm_double(void)
+@@ -1220,7 +1224,7 @@ event_timer_arm_double(void)
@@ -223 +224 @@
-@@ -1387,10 +1391,7 @@ event_timer_arm_double(void)
+@@ -1240,10 +1244,7 @@ event_timer_arm_double(void)
@@ -235 +236 @@
-@@ -1417,6 +1418,7 @@ event_timer_arm_expiry(void)
+@@ -1270,6 +1271,7 @@ event_timer_arm_expiry(void)
@@ -243 +244 @@
-@@ -1426,7 +1428,7 @@ event_timer_arm_expiry(void)
+@@ -1279,7 +1281,7 @@ event_timer_arm_expiry(void)
@@ -252 +253 @@
-@@ -1435,17 +1437,10 @@ event_timer_arm_expiry(void)
+@@ -1288,17 +1290,10 @@ event_timer_arm_expiry(void)
@@ -272 +273 @@
-@@ -1477,6 +1472,7 @@ event_timer_arm_rearm(void)
+@@ -1330,6 +1325,7 @@ event_timer_arm_rearm(void)
@@ -280 +281 @@
-@@ -1486,7 +1482,7 @@ event_timer_arm_rearm(void)
+@@ -1339,7 +1335,7 @@ event_timer_arm_rearm(void)
@@ -289 +290 @@
-@@ -1494,10 +1490,7 @@ event_timer_arm_rearm(void)
+@@ -1347,10 +1343,7 @@ event_timer_arm_rearm(void)
@@ -301 +302 @@
-@@ -1514,10 +1507,7 @@ event_timer_arm_rearm(void)
+@@ -1367,10 +1360,7 @@ event_timer_arm_rearm(void)
@@ -313 +314 @@
-@@ -1539,7 +1529,8 @@ event_timer_arm_max(void)
+@@ -1392,7 +1382,8 @@ event_timer_arm_max(void)
@@ -323 +324 @@
-@@ -1547,7 +1538,7 @@ event_timer_arm_max(void)
+@@ -1400,7 +1391,7 @@ event_timer_arm_max(void)
@@ -332 +333 @@
-@@ -1567,31 +1558,12 @@ event_timer_arm_max(void)
+@@ -1420,31 +1411,12 @@ event_timer_arm_max(void)
@@ -368 +369 @@
-@@ -1711,6 +1683,7 @@ event_timer_cancel(void)
+@@ -1564,6 +1536,7 @@ event_timer_cancel(void)
@@ -376 +377 @@
-@@ -1728,7 +1701,7 @@ event_timer_cancel(void)
+@@ -1581,7 +1554,7 @@ event_timer_cancel(void)
@@ -385 +386 @@
-@@ -1752,10 +1725,8 @@ event_timer_cancel(void)
+@@ -1605,10 +1578,8 @@ event_timer_cancel(void)
@@ -397 +398 @@
-@@ -1778,8 +1749,8 @@ event_timer_cancel_double(void)
+@@ -1631,8 +1602,8 @@ event_timer_cancel_double(void)
@@ -407 +408 @@
-@@ -1790,7 +1761,7 @@ event_timer_cancel_double(void)
+@@ -1643,7 +1614,7 @@ event_timer_cancel_double(void)
@@ -416 +417 @@
-@@ -1812,10 +1783,8 @@ event_timer_cancel_double(void)
+@@ -1665,10 +1636,8 @@ event_timer_cancel_double(void)
@@ -428,11 +428,0 @@
-@@ -1973,9 +1942,7 @@ test_timer_ticks_remaining(void)
- 		rte_delay_ms(100);
- 	}
- 
--	rte_delay_ms(100);
--
--	TEST_ASSERT_EQUAL(rte_event_dequeue_burst(evdev, 0, &ev, 1, 0), 1,
-+	TEST_ASSERT_EQUAL(timeout_event_dequeue(&ev, 1, WAIT_TICKS(1)), 1,
- 			  "Armed timer failed to trigger.");
- 	TEST_ASSERT_EQUAL(ev_tim->state, RTE_EVENT_TIMER_NOT_ARMED,
- 			  "Improper timer state set expected %d returned %d",

  parent reply	other threads:[~2023-06-15  1:33 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-15  1:31 patch 'kni: fix build with Linux 6.3' " luca.boccassi
2023-06-15  1:31 ` patch 'examples/ip_pipeline: fix build with GCC 13' " luca.boccassi
2023-06-15  1:31 ` patch 'examples/ntb: " luca.boccassi
2023-06-15  1:31 ` patch 'ring: fix use after free' " luca.boccassi
2023-06-15  1:32 ` patch 'vfio: fix include with musl runtime' " luca.boccassi
2023-06-15  1:32 ` patch 'kernel/freebsd: fix function parameter list' " luca.boccassi
2023-06-15  1:32 ` patch 'build: fix case of project language name' " luca.boccassi
2023-06-15  1:32 ` patch 'telemetry: fix autotest on Alpine' " luca.boccassi
2023-06-15  1:32 ` patch 'test/malloc: fix missing free' " luca.boccassi
2023-06-15  1:32 ` patch 'test/malloc: fix statistics checks' " luca.boccassi
2023-06-15  1:32 ` patch 'eal: avoid calling cleanup twice' " luca.boccassi
2023-06-15  1:32 ` patch 'pci: fix comment referencing renamed function' " luca.boccassi
2023-06-15  1:32 ` patch 'eal/x86: improve multiple of 64 bytes memcpy performance' " luca.boccassi
2023-06-15  1:32 ` luca.boccassi [this message]
2023-06-15  1:32 ` patch 'doc: fix event timer adapter guide' " luca.boccassi
2023-06-15  1:32 ` patch 'event/dsw: free rings on close' " luca.boccassi
2023-06-15  1:32 ` patch 'eventdev/timer: fix buffer flush' " luca.boccassi
2023-06-15  1:32 ` patch 'eal/linux: fix secondary process crash for mp hotplug' " luca.boccassi
2023-06-15  1:32 ` patch 'eal/linux: fix legacy mem init with many segments' " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix build warning' " luca.boccassi
2023-06-15  1:32 ` patch 'net/tap: set locally administered bit for fixed MAC address' " luca.boccassi
2023-06-15  1:32 ` patch 'net/dpaa2: fix checksum good flags' " luca.boccassi
2023-06-15  1:32 ` patch 'app/testpmd: fix GTP L2 length in checksum engine' " luca.boccassi
2023-06-15  1:32 ` patch 'net/vmxnet3: fix drop of empty segments in Tx' " luca.boccassi
2023-06-15  1:32 ` patch 'net/txgbe: fix use-after-free on remove' " luca.boccassi
2023-06-15  1:32 ` patch 'ethdev: fix MAC address occupies two entries' " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix variable type mismatch' " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix Rx multiple firmware reset interrupts' " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix FEC mode for 200G ports' " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix FEC mode check' " luca.boccassi
2023-06-15  1:32 ` patch 'doc: fix format in flow API guide' " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix mbuf leakage when RxQ started during reset' " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix mbuf leakage when RxQ started after " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix device start return value' " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix uninitialized variable' " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix inaccurate log' " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix redundant line break in " luca.boccassi
2023-06-15  1:32 ` patch 'net/hns3: fix IMP reset trigger' " luca.boccassi
2023-06-15  1:32 ` patch 'net/nfp: fix offloading flows' " luca.boccassi
2023-06-15  1:32 ` patch 'net/vmxnet3: fix return code in initializing' " luca.boccassi
2023-06-15  1:32 ` patch 'doc: fix auth algos in cryptoperf app' " luca.boccassi
2023-06-15  1:32 ` patch 'crypto/scheduler: fix last element for valid args' " luca.boccassi
2023-06-15  1:32 ` patch 'test/crypto: fix session creation check' " luca.boccassi
2023-06-15  1:32 ` patch 'vhost: fix invalid call FD handling' " luca.boccassi
2023-06-15  1:32 ` patch 'net/virtio: fix initialization to return negative errno' " luca.boccassi
2023-06-15  1:32 ` patch 'net/virtio-user: fix leak when initialisation fails' " luca.boccassi
2023-06-15  1:32 ` patch 'net/mlx5: enhance error log for tunnel offloading' " luca.boccassi
2023-06-15  1:32 ` patch 'net/mlx5: fix duplicated tag index matching in SWS' " luca.boccassi
2023-06-15  1:32 ` patch 'net/qede: fix RSS indirection table initialization' " luca.boccassi
2023-06-15  1:32 ` patch 'doc: fix typo in cnxk platform guide' " luca.boccassi
2023-06-15  1:32 ` patch 'net/i40e: fix Rx data buffer size' " luca.boccassi
2023-06-15  1:32 ` patch 'net/ice: " luca.boccassi
2023-06-15  1:32 ` patch 'net/iavf: " luca.boccassi
2023-06-15  1:32 ` patch 'net/ice: fix statistics' " luca.boccassi
2023-06-15  1:32 ` patch 'net/ice: fix DCF RSS initialization' " luca.boccassi
2023-06-15  1:32 ` patch 'net/iavf: release large VF when closing device' " luca.boccassi
2023-06-15  1:32 ` patch 'net/ice: fix DCF control thread crash' " luca.boccassi
2023-06-15  1:32 ` patch 'net/ice/base: remove unreachable code' " luca.boccassi
2023-06-15  1:32 ` patch 'net/ice: fix outer UDP checksum offload' " luca.boccassi
2023-06-15  1:32 ` patch 'net/iavf: fix virtchnl command called in interrupt' " luca.boccassi
2023-06-15  1:32 ` patch 'test/mbuf: fix crash in a forked process' " luca.boccassi
2023-06-15  1:32 ` patch 'doc: fix typo in graph guide' " luca.boccassi
2023-06-15  1:32 ` patch 'doc: remove warning with Doxygen 1.9.7' " luca.boccassi
2023-06-28 14:10   ` patch 'examples/l2fwd-cat: fix external build' " luca.boccassi
2023-06-28 14:10     ` patch 'test: add graph tests' " luca.boccassi
2023-06-28 14:55       ` David Marchand
2023-06-28 14:10     ` patch 'mbuf: fix Doxygen comment of distributor metadata' " luca.boccassi
2023-06-28 14:10     ` patch 'crypto/openssl: skip workaround at compilation time' " luca.boccassi
2023-06-28 14:10     ` patch 'ethdev: update documentation for API to set FEC' " luca.boccassi
2023-06-28 14:10     ` patch 'ethdev: check that at least one FEC mode is specified' " luca.boccassi
2023-06-28 14:10     ` patch 'ethdev: update documentation for API to get FEC' " luca.boccassi
2023-06-28 14:10     ` patch 'net/bonding: fix startup when NUMA is not supported' " luca.boccassi
2023-06-28 14:10     ` patch 'net/bonding: fix destroy dedicated queues flow' " luca.boccassi
2023-06-28 14:10     ` patch 'net/txgbe/base: fix Tx with fiber hotplug' " luca.boccassi
2023-06-28 14:10     ` patch 'net/txgbe: fix to set autoneg for 1G speed' " luca.boccassi
2023-06-28 14:10     ` patch 'net/txgbe: fix extended statistics' " luca.boccassi
2023-06-28 14:10     ` patch 'net/nfp: fix address always related with PF ID 0' " luca.boccassi
2023-06-28 14:10     ` patch 'common/sfc_efx/base: fix Rx queue without RSS hash prefix' " luca.boccassi
2023-06-28 14:10     ` patch 'net/ice: fix tunnel packet Tx descriptor' " luca.boccassi
2023-06-28 14:10     ` patch 'net/ixgbe: add proper memory barriers in Rx' " luca.boccassi
2023-06-28 14:10     ` patch 'net/iavf: fix abnormal disable HW interrupt' " luca.boccassi
2023-06-28 14:10     ` patch 'net/i40e: fix tunnel packet Tx descriptor' " luca.boccassi
2023-06-28 14:10     ` patch 'net/e1000: fix queue number initialization' " luca.boccassi
2023-06-28 14:10     ` patch 'net/mlx5: fix risk in NEON Rx descriptor read' " luca.boccassi
2023-06-28 14:10     ` patch 'net/mlx5: fix device removal event handling' " luca.boccassi
2023-06-28 14:10     ` patch 'common/mlx5: adjust fork call with new kernel API' " luca.boccassi
2023-07-14 22:34       ` patch 'ipc: fix file descriptor leakage with unhandled messages' " luca.boccassi
2023-07-14 22:34         ` patch 'fib: fix adding default route' " luca.boccassi
2023-07-14 22:34         ` patch 'mem: fix memsegs exhausted message' " luca.boccassi
2023-07-14 22:34         ` patch 'net/netvsc: fix sizeof calculation' " luca.boccassi
2023-07-14 22:34         ` patch 'app/testpmd: fix checksum engine with GTP on 32-bit' " luca.boccassi
2023-07-14 22:34         ` patch 'net/hns3: fix non-zero weight for disabled TC' " luca.boccassi
2023-07-14 22:34         ` patch 'net/hns3: fix index to look up table in NEON Rx' " luca.boccassi
2023-07-14 22:34         ` patch 'ethdev: fix potential leak in PCI probing helper' " luca.boccassi
2023-07-14 22:34         ` patch 'net/mlx5: forbid MPRQ restart' " luca.boccassi
2023-07-14 22:34         ` patch 'net/ice: fix 32-bit build' " luca.boccassi
2023-07-14 22:34         ` patch 'net/ice: fix RSS hash key generation' " luca.boccassi
2023-07-14 22:34         ` patch 'baseband/fpga_5gnr_fec: fix possible division by zero' " luca.boccassi
2023-07-14 22:34         ` patch 'baseband/fpga_5gnr_fec: fix starting unconfigured queue' " luca.boccassi
2023-07-14 22:34         ` patch 'test/crypto: fix PDCP-SDAP test vectors' " luca.boccassi
2023-07-14 22:34         ` patch 'examples/fips_validation: fix digest length in AES-GCM' " luca.boccassi
2023-07-14 22:34         ` patch 'app/crypto-perf: fix socket ID default value' " luca.boccassi
2023-07-14 22:34         ` patch 'examples/ipsec-secgw: fix TAP default MAC address' " luca.boccassi
2023-07-14 22:34         ` patch 'kni: fix build with Linux 6.5' " luca.boccassi
2023-07-20 10:58           ` patch 'doc: fix typos and wording in flow API guide' " luca.boccassi
2023-07-20 10:58             ` patch 'net/i40e: fix comments' " luca.boccassi
2023-07-20 10:58             ` patch 'net/iavf: fix stop ordering' " luca.boccassi
2023-07-20 10:58             ` patch 'common/iavf: fix MAC type for 710 NIC' " luca.boccassi
2023-07-20 10:58             ` patch 'net/ixgbe: fix Rx and Tx queue status' " luca.boccassi
2023-07-20 10:58             ` patch 'net/igc: " luca.boccassi
2023-07-20 10:58             ` patch 'net/e1000: " luca.boccassi
2023-07-20 10:58             ` patch 'net/mlx5: fix LRO TCP checksum' " luca.boccassi
2023-07-20 10:58             ` patch 'doc: update BIOS settings and supported HW for NTB' " luca.boccassi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230615013258.1439718-14-luca.boccassi@gmail.com \
    --to=luca.boccassi@gmail.com \
    --cc=erik.g.carrillo@intel.com \
    --cc=stable@dpdk.org \
    --cc=sthotton@marvell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).