On 11/08/2013 08:47 PM, Bryan Benson wrote: > This is a fix for the ixgbe hardware offload flags not being set when bulk > alloc RX is used. The issue was caused by masking off the bits that store the > hardware offload values in the status_error field to retrieve the done bit > for the descriptor. > > Commit 7431041062b9fd0555bac7ca4abebc99e3379fa5 in DPDK-1.3.0 introduced bulk > dequeue, which included the bug. > --- > lib/librte_pmd_ixgbe/ixgbe_rxtx.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > index 07830b7..a183c11 100755 > --- a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > +++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > @@ -1035,7 +1035,8 @@ ixgbe_rx_scan_hw_ring(struct igb_rx_queue *rxq) > struct igb_rx_entry *rxep; > struct rte_mbuf *mb; > uint16_t pkt_len; > - int s[LOOK_AHEAD], nb_dd; > + uint32_t s[LOOK_AHEAD]; > + int nb_dd; > int i, j, nb_rx = 0; > > > @@ -1058,12 +1059,12 @@ ixgbe_rx_scan_hw_ring(struct igb_rx_queue *rxq) > for (j = LOOK_AHEAD-1; j >= 0; --j) > s[j] = rxdp[j].wb.upper.status_error; > > - /* Clear everything but the status bits (LSB) */ > - for (j = 0; j < LOOK_AHEAD; ++j) > - s[j] &= IXGBE_RXDADV_STAT_DD; > + nb_dd = 0; > + /* add to nd_dd when the status bit is set (LSB) */ > + for (j = 0; j < LOOK_AHEAD; ++j) { > + nb_dd += s[j] & IXGBE_RXDADV_STAT_DD; > + } > > - /* Compute how many status bits were set */ > - nb_dd = s[0]+s[1]+s[2]+s[3]+s[4]+s[5]+s[6]+s[7]; > nb_rx += nb_dd; > > /* Translate descriptor info to mbuf format */ Acked.
-- Ivan Boule 6WIND Development Engineer