net/bnxt: fix endianness in ring macros
authorLance Richardson <lance.richardson@broadcom.com>
Sun, 2 Jun 2019 17:42:36 +0000 (13:42 -0400)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 13 Jun 2019 14:54:29 +0000 (23:54 +0900)
Descriptor fields in CP ring are in little-endian form, convert
to CPU endian before performing arithmetic operations.

Also use more general comparison when checking for ring
index wrap.

Fixes: f2a768d4d186 ("net/bnxt: add completion ring")
Cc: stable@dpdk.org
Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
drivers/net/bnxt/bnxt_cpr.h

index c7af569..ee5ca82 100644 (file)
 #include <rte_io.h>
 
 #define CMP_VALID(cmp, raw_cons, ring)                                 \
-       (!!(((struct cmpl_base *)(cmp))->info3_v & CMPL_BASE_V) ==      \
-        !((raw_cons) & ((ring)->ring_size)))
+       (!!(rte_le_to_cpu_32(((struct cmpl_base *)(cmp))->info3_v) &    \
+           CMPL_BASE_V) == !((raw_cons) & ((ring)->ring_size)))
 
 #define CMPL_VALID(cmp, v)                                             \
-       (!!(((struct cmpl_base *)(cmp))->info3_v & CMPL_BASE_V) == !(v))
+       (!!(rte_le_to_cpu_32(((struct cmpl_base *)(cmp))->info3_v) &    \
+           CMPL_BASE_V) == !(v))
 
 #define CMP_TYPE(cmp)                                          \
        (((struct cmpl_base *)cmp)->type & CMPL_BASE_TYPE_MASK)
@@ -31,7 +32,7 @@
 
 #define NEXT_CMPL(cpr, idx, v, inc)    do { \
        (idx) += (inc); \
-       if (unlikely((idx) == (cpr)->cp_ring_struct->ring_size)) { \
+       if (unlikely((idx) >= (cpr)->cp_ring_struct->ring_size)) { \
                (v) = !(v); \
                (idx) = 0; \
        } \