xnanosleep forces the thread into quiesce state in anticipation that it will be sleeping for a considerable time and that the thread may need to quiesce before the sleep is finished.
In some cases, a very short sleep may be requested and in that case the overhead of going to into quiesce state may be unnecessary. To allow for those cases add a xnanosleep_no_quiesce() variant. Suggested-by: Ilya Maximets <i.maxim...@ovn.org> Signed-off-by: Kevin Traynor <ktray...@redhat.com> --- lib/util.c | 19 +++++++++++++++---- lib/util.h | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/util.c b/lib/util.c index 1195c7982..0daf06e8f 100644 --- a/lib/util.c +++ b/lib/util.c @@ -2372,9 +2372,7 @@ xsleep(unsigned int seconds) } -/* High resolution sleep. */ -void -xnanosleep(uint64_t nanoseconds) +static void +__xnanosleep(uint64_t nanoseconds) { - ovsrcu_quiesce_start(); #ifndef _WIN32 int retval; @@ -2404,7 +2402,20 @@ xnanosleep(uint64_t nanoseconds) } #endif +} + +/* High resolution sleep with thread quiesce. */ +void +xnanosleep(uint64_t nanoseconds) { + ovsrcu_quiesce_start(); + __xnanosleep(nanoseconds); ovsrcu_quiesce_end(); } +/* High resolution sleep without thread quiesce. */ +void +xnanosleep_no_quiesce(uint64_t nanoseconds) { + __xnanosleep(nanoseconds); +} + /* Determine whether standard output is a tty or not. This is useful to decide * whether to use color output or not when --color option for utilities is set diff --git a/lib/util.h b/lib/util.h index 9ff84b3dc..f35f33021 100644 --- a/lib/util.h +++ b/lib/util.h @@ -594,4 +594,5 @@ ovs_u128_is_superset(ovs_u128 super, ovs_u128 sub) void xsleep(unsigned int seconds); void xnanosleep(uint64_t nanoseconds); +void xnanosleep_no_quiesce(uint64_t nanoseconds); bool is_stdout_a_tty(void); -- 2.39.0 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev