From b2d5bfd0d192cca1e7db67a1b7e85e7202db3c8e Mon Sep 17 00:00:00 2001 From: Vitaliy Mysak Date: Fri, 7 Dec 2018 19:04:03 +0000 Subject: [PATCH] OCF: use rte_pause in wait loop Add rte_pause to waiting while loop This commit also adds spdk_pause as interface for rte_pause Change-Id: I56e1023731e2e78febaa4f45808d6f07656d290f Signed-off-by: Vitaliy Mysak Reviewed-on: https://review.gerrithub.io/c/436494 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Changpeng Liu Reviewed-by: Tomasz Zawadzki Reviewed-by: Darek Stojaczyk --- include/spdk/env.h | 5 +++++ lib/bdev/ocf/env/ocf_env.c | 4 +++- lib/env_dpdk/env.c | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/spdk/env.h b/include/spdk/env.h index 5af2182cb..2d2c7faa5 100644 --- a/include/spdk/env.h +++ b/include/spdk/env.h @@ -510,6 +510,11 @@ uint64_t spdk_get_ticks_hz(void); */ void spdk_delay_us(unsigned int us); +/** + * Pause CPU execution for a short while + */ +void spdk_pause(void); + struct spdk_ring; enum spdk_ring_type { diff --git a/lib/bdev/ocf/env/ocf_env.c b/lib/bdev/ocf/env/ocf_env.c index c7b56c0d1..6fa9589d0 100644 --- a/lib/bdev/ocf/env/ocf_env.c +++ b/lib/bdev/ocf/env/ocf_env.c @@ -101,7 +101,9 @@ env_completion_init(env_completion *completion) void env_completion_wait(env_completion *completion) { - while (atomic_read(&completion->atom)); + while (atomic_read(&completion->atom)) { + spdk_pause(); + } } void diff --git a/lib/env_dpdk/env.c b/lib/env_dpdk/env.c index 2b6b03d49..13337f52a 100644 --- a/lib/env_dpdk/env.c +++ b/lib/env_dpdk/env.c @@ -307,6 +307,11 @@ void spdk_delay_us(unsigned int us) rte_delay_us(us); } +void spdk_pause(void) +{ + rte_pause(); +} + void spdk_unaffinitize_thread(void) {