From: Pavan Nikhilesh <[email protected]>
Add an I/O write barrier after LMTST submissions in the new-event
helper so the stores are ordered before the next iteration.
Enqueue small bursts, below one LMT line of entries, event by event
instead of using the LMTST path.
Fixes: c3320d21b475 ("event/cnxk: use LMTST for enqueue new burst")
Fixes: b08b193bceab ("event/cnxk: add CN20K SSO enqueue fast path")
Signed-off-by: Pavan Nikhilesh <[email protected]>
---
drivers/event/cnxk/cn10k_worker.c | 9 +++++++++
drivers/event/cnxk/cn20k_worker.c | 9 +++++++++
2 files changed, 18 insertions(+)
diff --git a/drivers/event/cnxk/cn10k_worker.c
b/drivers/event/cnxk/cn10k_worker.c
index f33c3a561a88..a8ddbc5d8bfb 100644
--- a/drivers/event/cnxk/cn10k_worker.c
+++ b/drivers/event/cnxk/cn10k_worker.c
@@ -350,6 +350,8 @@ cn10k_sso_hws_new_event_lmtst(struct cn10k_sso_hws *ws,
uint8_t queue_id,
roc_lmt_submit_steorl(wdata[1], pa[1]);
}
+ rte_io_wmb();
+
left -= (sz0 + sz1);
if (left)
goto again;
@@ -395,6 +397,13 @@ cn10k_sso_hws_enq_new_burst(void *port, const struct
rte_event ev[],
uint8_t queue_id;
int32_t space;
+ if (nb_events < BIT(ROC_SSO_AW_PER_LMT_LINE_LOG2)) {
+ for (idx = 0; idx < nb_events; idx++)
+ if (!cn10k_sso_hws_new_event(ws, &ev[idx]))
+ break;
+ return idx;
+ }
+
/* Do a common back-pressure check and return */
space = sso_read_xaq_space(ws) - ws->xae_waes;
if (space <= 0)
diff --git a/drivers/event/cnxk/cn20k_worker.c
b/drivers/event/cnxk/cn20k_worker.c
index 8c1df3dbafc1..c15e3cd46ae7 100644
--- a/drivers/event/cnxk/cn20k_worker.c
+++ b/drivers/event/cnxk/cn20k_worker.c
@@ -308,6 +308,8 @@ cn20k_sso_hws_new_event_lmtst(struct cn20k_sso_hws *ws,
uint8_t queue_id,
roc_lmt_submit_steorl(wdata[1], pa[1]);
}
+ rte_io_wmb();
+
left -= (sz0 + sz1);
if (left)
goto again;
@@ -350,6 +352,13 @@ cn20k_sso_hws_enq_new_burst(void *port, const struct
rte_event ev[], uint16_t nb
uint8_t queue_id;
int32_t space;
+ if (nb_events < BIT(ROC_SSO_AW_PER_LMT_LINE_LOG2)) {
+ for (idx = 0; idx < nb_events; idx++)
+ if (!cn20k_sso_hws_new_event(ws, &ev[idx]))
+ break;
+ return idx;
+ }
+
/* Do a common back-pressure check and return */
space = sso_read_xaq_space(ws) - ws->xae_waes;
if (space <= 0)
--
2.50.1 (Apple Git-155)