1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright 2020 Mellanox Technologies, Ltd 3 */ 4 5 #include <errno.h> 6 #include <time.h> 7 8 #include <rte_cycles.h> 9 10 void rte_delay_us_sleep(unsigned int us)11rte_delay_us_sleep(unsigned int us) 12 { 13 struct timespec wait[2]; 14 int ind = 0; 15 16 wait[0].tv_sec = 0; 17 if (us >= US_PER_S) { 18 wait[0].tv_sec = us / US_PER_S; 19 us -= wait[0].tv_sec * US_PER_S; 20 } 21 wait[0].tv_nsec = 1000 * us; 22 23 while (nanosleep(&wait[ind], &wait[1 - ind]) && errno == EINTR) { 24 /* 25 * Sleep was interrupted. Flip the index, so the 'remainder' 26 * will become the 'request' for a next call. 27 */ 28 ind = 1 - ind; 29 } 30 } 31