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

Reply via email to