Author: yongari
Date: Mon Feb 22 23:35:35 2010
New Revision: 204230
URL: http://svn.freebsd.org/changeset/base/204230

Log:
  Remove Tx mbuf parsing code for VLAN in TSO path. Controller does
  not support TSO over VLAN if VLAN hardware tagging is disabled so
  there is no need to check VLAN here.

Modified:
  head/sys/dev/alc/if_alc.c

Modified: head/sys/dev/alc/if_alc.c
==============================================================================
--- head/sys/dev/alc/if_alc.c   Mon Feb 22 22:41:36 2010        (r204229)
+++ head/sys/dev/alc/if_alc.c   Mon Feb 22 23:35:35 2010        (r204230)
@@ -1788,7 +1788,7 @@ alc_encap(struct alc_softc *sc, struct m
        struct tcphdr *tcp;
        bus_dma_segment_t txsegs[ALC_MAXTXSEGS];
        bus_dmamap_t map;
-       uint32_t cflags, hdrlen, ip_off, poff, vtag;
+       uint32_t cflags, hdrlen, poff, vtag;
        int error, idx, nsegs, prod;
 
        ALC_LOCK_ASSERT(sc);
@@ -1798,7 +1798,7 @@ alc_encap(struct alc_softc *sc, struct m
        m = *m_head;
        ip = NULL;
        tcp = NULL;
-       ip_off = poff = 0;
+       poff = 0;
        if ((m->m_pkthdr.csum_flags & (ALC_CSUM_FEATURES | CSUM_TSO)) != 0) {
                /*
                 * AR8131/AR8132 requires offset of TCP/UDP header in its
@@ -1808,7 +1808,6 @@ alc_encap(struct alc_softc *sc, struct m
                 * cycles on FreeBSD so fast host CPU is required to get
                 * smooth TSO performance.
                 */
-               struct ether_header *eh;
 
                if (M_WRITABLE(m) == 0) {
                        /* Get a writable copy. */
@@ -1822,32 +1821,13 @@ alc_encap(struct alc_softc *sc, struct m
                        *m_head = m;
                }
 
-               ip_off = sizeof(struct ether_header);
-               m = m_pullup(m, ip_off);
+               m = m_pullup(m, sizeof(struct ether_header) + sizeof(struct 
ip));
                if (m == NULL) {
                        *m_head = NULL;
                        return (ENOBUFS);
                }
-               eh = mtod(m, struct ether_header *);
-               /*
-                * Check if hardware VLAN insertion is off.
-                * Additional check for LLC/SNAP frame?
-                */
-               if (eh->ether_type == htons(ETHERTYPE_VLAN)) {
-                       ip_off = sizeof(struct ether_vlan_header);
-                       m = m_pullup(m, ip_off);
-                       if (m == NULL) {
-                               *m_head = NULL;
-                               return (ENOBUFS);
-                       }
-               }
-               m = m_pullup(m, ip_off + sizeof(struct ip));
-               if (m == NULL) {
-                       *m_head = NULL;
-                       return (ENOBUFS);
-               }
-               ip = (struct ip *)(mtod(m, char *) + ip_off);
-               poff = ip_off + (ip->ip_hl << 2);
+               ip = (struct ip *)(mtod(m, char *) + sizeof(struct 
ether_header));
+               poff = sizeof(struct ether_header) + (ip->ip_hl << 2);
                if ((m->m_pkthdr.csum_flags & CSUM_TSO) != 0) {
                        m = m_pullup(m, poff + sizeof(struct tcphdr));
                        if (m == NULL) {
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to