The SW event timer adapter attempts to flush its event buffer on every adapter tick. If events remain in the buffer after the attempt, another attempt to flush won't occur until the next adapter tick, which delays the enqueue of those events to the event device unecessarily.
Move the buffer flush call so that it happens with every invocation of the service function, rather than on every adapter tick, to avoid the delay. Fixes: cc7b73ea9e3b ("eventdev: add new software timer adapter") Cc: sta...@dpdk.org Signed-off-by: Erik Gabriel Carrillo <erik.g.carri...@intel.com> --- lib/eventdev/rte_event_timer_adapter.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/eventdev/rte_event_timer_adapter.c b/lib/eventdev/rte_event_timer_adapter.c index 23eb1d4a7d..427c4c6287 100644 --- a/lib/eventdev/rte_event_timer_adapter.c +++ b/lib/eventdev/rte_event_timer_adapter.c @@ -855,17 +855,18 @@ swtim_service_func(void *arg) sw->n_expired_timers); sw->n_expired_timers = 0; - event_buffer_flush(&sw->buffer, - adapter->data->event_dev_id, - adapter->data->event_port_id, - &nb_evs_flushed, - &nb_evs_invalid); - - sw->stats.ev_enq_count += nb_evs_flushed; - sw->stats.ev_inv_count += nb_evs_invalid; sw->stats.adapter_tick_count++; } + event_buffer_flush(&sw->buffer, + adapter->data->event_dev_id, + adapter->data->event_port_id, + &nb_evs_flushed, + &nb_evs_invalid); + + sw->stats.ev_enq_count += nb_evs_flushed; + sw->stats.ev_inv_count += nb_evs_invalid; + rte_event_maintain(adapter->data->event_dev_id, adapter->data->event_port_id, 0); -- 2.23.0