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)

Reply via email to