net/i40e: fix metadata in first mbuf of scattered Rx
authorDumitru Ceara <dumitru.ceara@gmail.com>
Tue, 26 Jul 2016 10:46:09 +0000 (12:46 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Thu, 28 Jul 2016 16:11:56 +0000 (18:11 +0200)
The driver is incorrectly setting the RSS field in the last mbuf in
the packet chain instead of the first. Moreover, the last mbuf might
have already been freed if it only contained the Ethernet CRC.

Also, fix the call to i40e_rxd_build_fdir to store the fdir flags in
the first mbuf of the chain instead of the last.

Fixes: 4861cde46116 ("i40e: new poll mode driver")
Fixes: 5a21d9715f81 ("i40e: report flow director matching")

Signed-off-by: Dumitru Ceara <dumitru.ceara@gmail.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
drivers/net/i40e/i40e_rxtx.c

index d3cfb98..554d167 100644 (file)
@@ -1436,10 +1436,10 @@ i40e_recv_scattered_pkts(void *rx_queue,
                        i40e_rxd_pkt_type_mapping((uint8_t)((qword1 &
                        I40E_RXD_QW1_PTYPE_MASK) >> I40E_RXD_QW1_PTYPE_SHIFT));
                if (pkt_flags & PKT_RX_RSS_HASH)
-                       rxm->hash.rss =
+                       first_seg->hash.rss =
                                rte_le_to_cpu_32(rxd.wb.qword0.hi_dword.rss);
                if (pkt_flags & PKT_RX_FDIR)
-                       pkt_flags |= i40e_rxd_build_fdir(&rxd, rxm);
+                       pkt_flags |= i40e_rxd_build_fdir(&rxd, first_seg);
 
 #ifdef RTE_LIBRTE_IEEE1588
                pkt_flags |= i40e_get_iee15888_flags(first_seg, qword1);