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