net/enic: initialize RQ fetch index before enabling RQ
authorHyong Youb Kim <hyonkim@cisco.com>
Fri, 29 Jun 2018 09:29:33 +0000 (02:29 -0700)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 2 Jul 2018 23:53:57 +0000 (01:53 +0200)
The fetch index must be initialized only when RQ is
disabled. Otherwise, it may lead to stale entries in IG descriptor
cache on the VIC.

Fixes: a74629cfa3a1 ("net/enic: enable RQ first and then post Rx buffers")
Cc: stable@dpdk.org
Signed-off-by: Hyong Youb Kim <hyonkim@cisco.com>
Reviewed-by: John Daley <johndale@cisco.com>
drivers/net/enic/enic_main.c

index aba2ff5..863d246 100644 (file)
@@ -320,6 +320,8 @@ enic_alloc_rx_queue_mbufs(struct enic *enic, struct vnic_rq *rq)
         * enic_start_rq().
         */
        rq->need_initial_post = true;
+       /* Initialize fetch index while RQ is disabled */
+       iowrite32(0, &rq->ctrl->fetch_index);
        return 0;
 }
 
@@ -345,7 +347,6 @@ enic_initial_post_rx(struct enic *enic, struct vnic_rq *rq)
        dev_debug(enic, "port=%u, qidx=%u, Write %u posted idx, %u sw held\n",
                enic->port_id, rq->index, rq->posted_index, rq->rx_nb_hold);
        iowrite32(rq->posted_index, &rq->ctrl->posted_index);
-       iowrite32(0, &rq->ctrl->fetch_index);
        rte_rmb();
        rq->need_initial_post = false;
 }