Date: Wed, 8 Dec 2004 11:51:54 +0000 (GMT) From: Robert Watson <rwatson@freebsd.org> To: Iasen Kostov <tbyte@OTEL.net> Cc: freebsd-net@freebsd.org Subject: Re: em(4) VLAN + PROMISC still doesn't work with latest CVS version Message-ID: <Pine.NEB.3.96L.1041208114926.98791F-100000@fledge.watson.org> In-Reply-To: <41B6E8B3.8090009@OTEL.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 8 Dec 2004, Iasen Kostov wrote: > #:> ident if_em.c > if_em.c: > $FreeBSD: src/sys/dev/em/if_em.c,v 1.44.2.4 2004/11/23 22:28:40 > rwatson Exp $ > > I've deleted the whole dir and cvsuped. Does 1.54 differs much from > 1.44.2.4 ? Very odd. I have 1.44.2.4 checked out here, and if_em.diff applied without a hitch. Here's a version of the patch generated using cvs diff against the older revision. It should be basically identical to the version I sent you before, though. Diffing the two diffs generates only line number differences. If this doesn't work, drop me a copy of your if_em.c and I'll apply the change manually. Robert N M Watson FreeBSD Core Team, TrustedBSD Projects robert@fledge.watson.org Principal Research Scientist, McAfee Research Index: if_em.c =================================================================== RCS file: /home/ncvs/src/sys/dev/em/if_em.c,v retrieving revision 1.44.2.4 diff -u -r1.44.2.4 if_em.c --- if_em.c 23 Nov 2004 22:28:40 -0000 1.44.2.4 +++ if_em.c 8 Dec 2004 11:01:19 -0000 @@ -1220,36 +1220,6 @@ } } - /* - * Map the packet for DMA. - */ - if (bus_dmamap_create(adapter->txtag, BUS_DMA_NOWAIT, &q.map)) { - adapter->no_tx_map_avail++; - return (ENOMEM); - } - error = bus_dmamap_load_mbuf(adapter->txtag, q.map, - m_head, em_tx_cb, &q, BUS_DMA_NOWAIT); - if (error != 0) { - adapter->no_tx_dma_setup++; - bus_dmamap_destroy(adapter->txtag, q.map); - return (error); - } - KASSERT(q.nsegs != 0, ("em_encap: empty packet")); - - if (q.nsegs > adapter->num_tx_desc_avail) { - adapter->no_tx_desc_avail2++; - bus_dmamap_destroy(adapter->txtag, q.map); - return (ENOBUFS); - } - - - if (ifp->if_hwassist > 0) { - em_transmit_checksum_setup(adapter, m_head, - &txd_upper, &txd_lower); - } else - txd_upper = txd_lower = 0; - - /* Find out if we are in vlan mode */ #if __FreeBSD_version < 500000 if ((m_head->m_flags & (M_PROTO1|M_PKTHDR)) == (M_PROTO1|M_PKTHDR) && @@ -1273,20 +1243,17 @@ m_head = m_pullup(m_head, sizeof(eh)); if (m_head == NULL) { *m_headp = NULL; - bus_dmamap_destroy(adapter->txtag, q.map); return (ENOBUFS); } eh = *mtod(m_head, struct ether_header *); M_PREPEND(m_head, sizeof(*evl), M_DONTWAIT); if (m_head == NULL) { *m_headp = NULL; - bus_dmamap_destroy(adapter->txtag, q.map); return (ENOBUFS); } m_head = m_pullup(m_head, sizeof(*evl)); if (m_head == NULL) { *m_headp = NULL; - bus_dmamap_destroy(adapter->txtag, q.map); return (ENOBUFS); } evl = mtod(m_head, struct ether_vlan_header *); @@ -1299,6 +1266,36 @@ *m_headp = m_head; } + /* + * Map the packet for DMA. + */ + if (bus_dmamap_create(adapter->txtag, BUS_DMA_NOWAIT, &q.map)) { + adapter->no_tx_map_avail++; + return (ENOMEM); + } + error = bus_dmamap_load_mbuf(adapter->txtag, q.map, + m_head, em_tx_cb, &q, BUS_DMA_NOWAIT); + if (error != 0) { + adapter->no_tx_dma_setup++; + bus_dmamap_destroy(adapter->txtag, q.map); + return (error); + } + KASSERT(q.nsegs != 0, ("em_encap: empty packet")); + + if (q.nsegs > adapter->num_tx_desc_avail) { + adapter->no_tx_desc_avail2++; + bus_dmamap_destroy(adapter->txtag, q.map); + return (ENOBUFS); + } + + + if (ifp->if_hwassist > 0) { + em_transmit_checksum_setup(adapter, m_head, + &txd_upper, &txd_lower); + } else + txd_upper = txd_lower = 0; + + i = adapter->next_avail_tx_desc; if (adapter->pcix_82544) { txd_saved = i;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1041208114926.98791F-100000>