This API implements additional flags in work completions that are required
to support checksum offloads.

Signed-off-by: Gilad Berman <giladb at mellanox.com>
Signed-off-by: Adrien Mazarguil <adrien.mazarguil at 6wind.com>
---
 drivers/net/mlx4/mlx4.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
index 648b210..b77fb22 100644
--- a/drivers/net/mlx4/mlx4.c
+++ b/drivers/net/mlx4/mlx4.c
@@ -914,7 +914,7 @@ txq_complete(struct txq *txq)
        unsigned int elts_comp = txq->elts_comp;
        unsigned int elts_tail;
        const unsigned int elts_n = txq->elts_n;
-       struct ibv_wc wcs[elts_comp];
+       struct ibv_exp_wc wcs[elts_comp];
        int wcs_n;

        if (unlikely(elts_comp == 0))
@@ -923,11 +923,11 @@ txq_complete(struct txq *txq)
        DEBUG("%p: processing %u work requests completions",
              (void *)txq, elts_comp);
 #endif
-       wcs_n = ibv_poll_cq(txq->cq, elts_comp, wcs);
+       wcs_n = ibv_exp_poll_cq(txq->cq, elts_comp, wcs, sizeof(wcs[0]));
        if (unlikely(wcs_n == 0))
                return 0;
        if (unlikely(wcs_n < 0)) {
-               DEBUG("%p: ibv_poll_cq() failed (wcs_n=%d)",
+               DEBUG("%p: ibv_exp_poll_cq() failed (wcs_n=%d)",
                      (void *)txq, wcs_n);
                return -1;
        }
@@ -2317,7 +2317,7 @@ mlx4_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
 {
        struct rxq *rxq = (struct rxq *)dpdk_rxq;
        struct rxq_elt_sp (*elts)[rxq->elts_n] = rxq->elts.sp;
-       struct ibv_wc wcs[pkts_n];
+       struct ibv_exp_wc wcs[pkts_n];
        struct ibv_recv_wr head;
        struct ibv_recv_wr **next = &head.next;
        struct ibv_recv_wr *bad_wr;
@@ -2329,18 +2329,18 @@ mlx4_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf 
**pkts, uint16_t pkts_n)
                return mlx4_rx_burst(dpdk_rxq, pkts, pkts_n);
        if (unlikely(elts == NULL)) /* See RTE_DEV_CMD_SET_MTU. */
                return 0;
-       wcs_n = ibv_poll_cq(rxq->cq, pkts_n, wcs);
+       wcs_n = ibv_exp_poll_cq(rxq->cq, pkts_n, wcs, sizeof(wcs[0]));
        if (unlikely(wcs_n == 0))
                return 0;
        if (unlikely(wcs_n < 0)) {
-               DEBUG("rxq=%p, ibv_poll_cq() failed (wc_n=%d)",
+               DEBUG("rxq=%p, ibv_exp_poll_cq() failed (wc_n=%d)",
                      (void *)rxq, wcs_n);
                return 0;
        }
        assert(wcs_n <= (int)pkts_n);
        /* For each work completion. */
        for (i = 0; (i != wcs_n); ++i) {
-               struct ibv_wc *wc = &wcs[i];
+               struct ibv_exp_wc *wc = &wcs[i];
                uint64_t wr_id = wc->wr_id;
                uint32_t len = wc->byte_len;
                struct rxq_elt_sp *elt = &(*elts)[wr_id];
@@ -2509,7 +2509,7 @@ mlx4_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, 
uint16_t pkts_n)
 {
        struct rxq *rxq = (struct rxq *)dpdk_rxq;
        struct rxq_elt (*elts)[rxq->elts_n] = rxq->elts.no_sp;
-       struct ibv_wc wcs[pkts_n];
+       struct ibv_exp_wc wcs[pkts_n];
        struct ibv_recv_wr head;
        struct ibv_recv_wr **next = &head.next;
        struct ibv_recv_wr *bad_wr;
@@ -2519,18 +2519,18 @@ mlx4_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, 
uint16_t pkts_n)

        if (unlikely(rxq->sp))
                return mlx4_rx_burst_sp(dpdk_rxq, pkts, pkts_n);
-       wcs_n = ibv_poll_cq(rxq->cq, pkts_n, wcs);
+       wcs_n = ibv_exp_poll_cq(rxq->cq, pkts_n, wcs, sizeof(wcs[0]));
        if (unlikely(wcs_n == 0))
                return 0;
        if (unlikely(wcs_n < 0)) {
-               DEBUG("rxq=%p, ibv_poll_cq() failed (wc_n=%d)",
+               DEBUG("rxq=%p, ibv_exp_poll_cq() failed (wc_n=%d)",
                      (void *)rxq, wcs_n);
                return 0;
        }
        assert(wcs_n <= (int)pkts_n);
        /* For each work completion. */
        for (i = 0; (i != wcs_n); ++i) {
-               struct ibv_wc *wc = &wcs[i];
+               struct ibv_exp_wc *wc = &wcs[i];
                uint64_t wr_id = wc->wr_id;
                uint32_t len = wc->byte_len;
                struct rxq_elt *elt = &(*elts)[WR_ID(wr_id).id];
-- 
2.1.0

Reply via email to