Hi,

If there's no objections, I'm going to commit it soon.

Thanks

On Tue, Dec 20, 2011 at 15:30 +0100, Mike Belopuhov wrote:
> hi,
> 
> hardware vlan tagging/stripping got broken with the driver update.
> freebsd people have changed the code to handle events from the vlan(4)
> pseudo-device into the hardware driver.  so when you configure new
> vlan a special function is called and driver can setup a vlan filtering
> table.  because of this, their driver checks for the num_vlans counter
> that's incremented every time you add a new vlan.  in particular, when
> stripping tags and configuring rx ring.
> 
> as we don't do anything like that, we should just configure rx ring to
> do vlan stripping and that's about it.
> 
> i've tested it on 82598 and 82599.  ok?
> 
> --- dev/pci/if_ix.c
> +++ dev/pci/if_ix.c
> @@ -3114,8 +3114,7 @@ ixgbe_rxeof(struct ix_queue *que, int count)
>                               /* Singlet, prepare to send */
>                               sendmp = mh;
>  #if NVLAN > 0
> -                             if ((sc->num_vlans) &&
> -                                 (staterr & IXGBE_RXD_STAT_VP)) {
> +                             if (staterr & IXGBE_RXD_STAT_VP) {
>                                       sendmp->m_pkthdr.ether_vtag = vtag;
>                                       sendmp->m_flags |= M_VLANTAG;
>                               }
> @@ -3142,8 +3141,7 @@ ixgbe_rxeof(struct ix_queue *que, int count)
>                                sendmp = mp;
>                                sendmp->m_pkthdr.len = mp->m_len;
>  #if NVLAN > 0
> -                             if ((sc->num_vlans) &&
> -                                 (staterr & IXGBE_RXD_STAT_VP)) {
> +                             if (staterr & IXGBE_RXD_STAT_VP) {
>                                       sendmp->m_pkthdr.ether_vtag = vtag;
>                                       sendmp->m_flags |= M_VLANTAG;
>                               }
> @@ -3243,15 +3241,6 @@ ixgbe_setup_vlan_hw_support(struct ix_softc *sc)
>       int             i;
>  
>       /*
> -      * We get here thru ixgbe_init, meaning
> -      * a soft reset, this has already cleared
> -      * the VFTA and other state, so if there
> -      * have been no vlan's registered do nothing.
> -      */
> -     if (sc->num_vlans == 0)
> -             return;
> -
> -     /*
>        * A soft reset zero's out the VFTA, so
>        * we need to repopulate it now.
>        */

Reply via email to