From: Juha-Matti Tilli <juha-matti.ti...@iki.fi>

Change SLEEP_NSEC into SLEEP_USEC and make odp_pktin_wait_time return
always microseconds.

Signed-off-by: Juha-Matti Tilli <juha-matti.ti...@iki.fi>
---
/** Email created from pull request 341 (jmtilli:genuinesleep)
 ** https://github.com/Linaro/odp/pull/341
 ** Patch: https://github.com/Linaro/odp/pull/341.patch
 ** Base sha: 4f2ebb270c30a46c97355da84587a2220281798c
 ** Merge commit sha: 778c806208ffacd9ea920d81437aec468241dd82
 **/
 platform/linux-generic/odp_packet_io.c | 48 ++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 22 deletions(-)

diff --git a/platform/linux-generic/odp_packet_io.c 
b/platform/linux-generic/odp_packet_io.c
index 5880a2a12..862cef6d5 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -33,9 +33,9 @@
 #include <time.h>
 
 /* Sleep this many nanoseconds between pktin receive calls */
-#define SLEEP_NSEC  1000
+#define SLEEP_USEC  1
 
-/* Check total sleep time about every SLEEP_CHECK * SLEEP_NSEC nanoseconds.
+/* Check total sleep time about every SLEEP_CHECK * SLEEP_USEC microseconds.
  * Must be power of two. */
 #define SLEEP_CHECK 32
 
@@ -1577,9 +1577,10 @@ int odp_pktin_recv_tmo(odp_pktin_queue_t queue, 
odp_packet_t packets[], int num,
        odp_time_t t1, t2;
        struct timespec ts;
        int started = 0;
+       int i;
 
        ts.tv_sec  = 0;
-       ts.tv_nsec = SLEEP_NSEC;
+       ts.tv_nsec = 1000*SLEEP_USEC;
 
        while (1) {
                ret = odp_pktin_recv(queue, packets, num);
@@ -1596,21 +1597,22 @@ int odp_pktin_recv_tmo(odp_pktin_queue_t queue, 
odp_packet_t packets[], int num,
                        if (odp_unlikely(!started)) {
                                odp_time_t t;
 
-                               t = odp_time_local_from_ns(wait * SLEEP_NSEC);
+                               t = odp_time_local_from_ns(wait * 1000);
                                started = 1;
                                t1 = odp_time_sum(odp_time_local(), t);
                        }
 
                        /* Check every SLEEP_CHECK rounds if total wait time
                         * has been exceeded. */
-                       if ((wait & (SLEEP_CHECK - 1)) == 0) {
-                               t2 = odp_time_local();
-
-                               if (odp_time_cmp(t2, t1) > 0)
-                                       return 0;
+                       for (i = 0; i < SLEEP_USEC; i++) {
+                               if ((wait & (SLEEP_CHECK - 1)) == 0) {
+                                       t2 = odp_time_local();
+       
+                                       if (odp_time_cmp(t2, t1) > 0)
+                                               return 0;
+                               }
+                               wait--;
                        }
-
-                       wait--;
                }
 
                nanosleep(&ts, NULL);
@@ -1628,7 +1630,7 @@ int odp_pktin_recv_mq_tmo(const odp_pktin_queue_t 
queues[], unsigned num_q,
        int started = 0;
 
        ts.tv_sec  = 0;
-       ts.tv_nsec = SLEEP_NSEC;
+       ts.tv_nsec = 1000 * SLEEP_USEC;
 
        while (1) {
                for (i = 0; i < num_q; i++) {
@@ -1648,19 +1650,21 @@ int odp_pktin_recv_mq_tmo(const odp_pktin_queue_t 
queues[], unsigned num_q,
                        if (odp_unlikely(!started)) {
                                odp_time_t t;
 
-                               t = odp_time_local_from_ns(wait * SLEEP_NSEC);
+                               t = odp_time_local_from_ns(wait * 1000);
                                started = 1;
                                t1 = odp_time_sum(odp_time_local(), t);
                        }
 
-                       if ((wait & (SLEEP_CHECK - 1)) == 0) {
-                               t2 = odp_time_local();
-
-                               if (odp_time_cmp(t2, t1) > 0)
-                                       return 0;
+                       for (i = 0; i < SLEEP_USEC; i++) {
+                               if ((wait & (SLEEP_CHECK - 1)) == 0) {
+                                       t2 = odp_time_local();
+       
+                                       if (odp_time_cmp(t2, t1) > 0)
+                                               return 0;
+                               }
+       
+                               wait--;
                        }
-
-                       wait--;
                }
 
                nanosleep(&ts, NULL);
@@ -1672,9 +1676,9 @@ uint64_t odp_pktin_wait_time(uint64_t nsec)
        if (nsec == 0)
                return 0;
 
-       /* number of nanosleep calls rounded up by one, so that
+       /* number of microseconds rounded up by one, so that
         * recv_mq_tmo call waits at least 'nsec' nanoseconds. */
-       return (nsec / SLEEP_NSEC) + 1;
+       return (nsec / (1000)) + 1;
 }
 
 int odp_pktout_send(odp_pktout_queue_t queue, const odp_packet_t packets[],

Reply via email to