[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Re: [PATCH ixgbe] Fix VMDq operation when maxcpus=1



Applied, thanks.

Steven.

> Renato reported a crash in ixgbe when the Dom0 kernel was booted with
> maxcpus=1.
> 
> Added checks to the single-vector code path to make sure we don't call
> any vmq functions before the ring is activated.
> 
> Signed-off-by: Mitch Williams <mitch.a.williams@xxxxxxxxx>
> 
> (Patch is attached as well as inline due to previous issue with
> mangled patches.)
> 
> diff -r 9681e69b222b drivers/net/ixgbe/ixgbe_main.c
> --- a/drivers/net/ixgbe/ixgbe_main.c  Thu Feb 12 17:38:15 2009 +0000
> +++ b/drivers/net/ixgbe/ixgbe_main.c  Tue Feb 17 14:06:44 2009 -0800
> @@ -541,6 +541,11 @@
> 
>       i = rx_ring->next_to_use;
>       bi = &rx_ring->rx_buffer_info[i];
> +#ifdef CONFIG_XEN_NETDEV2_VMQ
> +     if ((adapter->flags & IXGBE_FLAG_VMDQ_ENABLED) &&
> +         (!rx_ring->active))
> +             return;
> +#endif
> 
>       while (cleaned_count--) {
>               rx_desc = IXGBE_RX_DESC_ADV(*rx_ring, i);
> @@ -1123,7 +1128,13 @@
> 
>               /* ERR_MASK will only have valid bits if EOP set */
>               if (unlikely(staterr & IXGBE_RXDADV_ERR_FRAME_ERR_MASK)) {
> -                     dev_kfree_skb_irq(skb);
> +#ifdef CONFIG_XEN_NETDEV2_VMQ
> +                     if ((adapter->flags & IXGBE_FLAG_VMDQ_ENABLED) &&
> +                          rx_ring->queue_index)
> +                             vmq_free_skb(skb, rx_ring->queue_index);
> +                     else
> +#endif
> +                             dev_kfree_skb_irq(skb);
>                       goto next_desc;
>               }
> 
> @@ -1600,7 +1611,8 @@
>               ixgbe_update_rx_dca(adapter, rx_ring);
>  #endif
> 
> -     ixgbe_clean_rx_irq(adapter, rx_ring, &work_done, budget);
> +     if (rx_ring->active)
> +             ixgbe_clean_rx_irq(adapter, rx_ring, &work_done, budget);
> 
>       /* If all Rx work done, exit the polling mode */
>       if ((work_done == 0) || !netif_running(adapter->netdev)) {
> @@ -1644,7 +1656,9 @@
>               if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
>                       ixgbe_update_rx_dca(adapter, rx_ring);
>  #endif
> -             ixgbe_clean_rx_irq(adapter, rx_ring, &work_done, budget);
> +             if (rx_ring->active)
> +                     ixgbe_clean_rx_irq(adapter, rx_ring,
> +                                        &work_done, budget);
>               enable_mask |= rx_ring->v_idx;
>               r_idx = find_next_bit(q_vector->rxr_idx, adapter->num_rx_queues,
>                                     r_idx + 1);


Attachment: signature.asc
Description: Digital signature

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.