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

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



Yes, this patch fixes the problem I was seeing when running dom0 with one CPU.
I am now able to use VMDq with the ixgbe driver using the current netchannel2 
tree.
Thanks Mitch

Renato

> -----Original Message-----
> From: cluemerchant@xxxxxxxxx [mailto:cluemerchant@xxxxxxxxx] 
> On Behalf Of Mitch Williams
> Sent: Tuesday, February 17, 2009 3:44 PM
> To: xen-devel@xxxxxxxxxxxxxxxxxxx
> Cc: Santos, Jose Renato G; steven.smith@xxxxxxxxxxxxx
> Subject: [PATCH ixgbe] Fix VMDq operation when maxcpus=1
> 
> 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);
> 
_______________________________________________
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®.