On SMT systems when a spinloop is done without a pause it may cause excessive latency. This problem was found by the fix_empty_spinloops coccinelle script.
This is compile tested only! I don't have this hardware. Signed-off-by: Stephen Hemminger <[email protected]> --- drivers/event/cnxk/cn10k_worker.c | 2 +- drivers/event/cnxk/cn20k_worker.c | 2 +- drivers/event/cnxk/cnxk_tim_worker.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/event/cnxk/cn10k_worker.c b/drivers/event/cnxk/cn10k_worker.c index 80077ec8a1..69ac67115a 100644 --- a/drivers/event/cnxk/cn10k_worker.c +++ b/drivers/event/cnxk/cn10k_worker.c @@ -93,7 +93,7 @@ sso_lmt_aw_wait_fc(struct cn10k_sso_hws *ws, int64_t req) retry: while (rte_atomic_load_explicit(ws->fc_cache_space, rte_memory_order_relaxed) < 0) - ; + rte_pause(); cached = rte_atomic_fetch_sub_explicit(ws->fc_cache_space, req, rte_memory_order_acquire) - req; diff --git a/drivers/event/cnxk/cn20k_worker.c b/drivers/event/cnxk/cn20k_worker.c index 53daf3b4b0..49dfb2a28c 100644 --- a/drivers/event/cnxk/cn20k_worker.c +++ b/drivers/event/cnxk/cn20k_worker.c @@ -93,7 +93,7 @@ sso_lmt_aw_wait_fc(struct cn20k_sso_hws *ws, int64_t req) retry: while (rte_atomic_load_explicit(ws->fc_cache_space, rte_memory_order_relaxed) < 0) - ; + rte_pause(); cached = rte_atomic_fetch_sub_explicit(ws->fc_cache_space, req, rte_memory_order_acquire) - req; diff --git a/drivers/event/cnxk/cnxk_tim_worker.h b/drivers/event/cnxk/cnxk_tim_worker.h index 09f84091ab..887c0800e2 100644 --- a/drivers/event/cnxk/cnxk_tim_worker.h +++ b/drivers/event/cnxk/cnxk_tim_worker.h @@ -405,9 +405,9 @@ cnxk_tim_add_entry_mp(struct cnxk_tim_ring *const tim_ring, : [crem] "r"(&bkt->w1) : "memory"); #else - while (rte_atomic_load_explicit((int64_t __rte_atomic *)&bkt->w1, + while (rte_atomic_load_explicit((int64_t __rte_atomic *)&bkt->w1, rte_memory_order_relaxed) < 0) - ; + rte_pause(); #endif goto __retry; } else if (!rem) { -- 2.51.0

