Date: Sun, 19 Jul 2009 12:16:54 GMT From: Andre Oppermann <andre@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 166266 for review Message-ID: <200907191216.n6JCGsRg037534@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166266 Change 166266 by andre@andre_flirtbox on 2009/07/19 12:15:56 IFC. Affected files ... .. //depot/projects/tcp_reass/amd64/amd64/pmap.c#9 integrate .. //depot/projects/tcp_reass/arm/conf/AVILA#7 integrate .. //depot/projects/tcp_reass/arm/conf/CAMBRIA#3 integrate .. //depot/projects/tcp_reass/cam/ata/ata_da.c#2 integrate .. //depot/projects/tcp_reass/geom/vinum/geom_vinum.c#4 integrate .. //depot/projects/tcp_reass/i386/i386/pmap.c#8 integrate .. //depot/projects/tcp_reass/net80211/ieee80211_freebsd.c#6 integrate .. //depot/projects/tcp_reass/net80211/ieee80211_input.c#8 integrate .. //depot/projects/tcp_reass/net80211/ieee80211_input.h#4 integrate .. //depot/projects/tcp_reass/net80211/ieee80211_ioctl.h#7 integrate .. //depot/projects/tcp_reass/netinet6/in6_mcast.c#5 integrate .. //depot/projects/tcp_reass/nfsclient/nfs_vnops.c#10 integrate .. //depot/projects/tcp_reass/vm/vm_page.c#9 integrate Differences ... ==== //depot/projects/tcp_reass/amd64/amd64/pmap.c#9 (text+ko) ==== @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.663 2009/07/12 23:31:20 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.664 2009/07/18 01:50:05 alc Exp $"); /* * Manages physical address maps. @@ -752,21 +752,6 @@ /* The PAT bit is different for PTE's and PDE's. */ pat_flag = is_pde ? PG_PDE_PAT : PG_PTE_PAT; - /* If we don't support PAT, map extended modes to older ones. */ - if (!(cpu_feature & CPUID_PAT)) { - switch (mode) { - case PAT_UNCACHEABLE: - case PAT_WRITE_THROUGH: - case PAT_WRITE_BACK: - break; - case PAT_UNCACHED: - case PAT_WRITE_COMBINING: - case PAT_WRITE_PROTECTED: - mode = PAT_UNCACHEABLE; - break; - } - } - /* Map the caching mode to a PAT index. */ switch (mode) { case PAT_UNCACHEABLE: @@ -4295,7 +4280,9 @@ pa += PAGE_SIZE; } pmap_invalidate_range(kernel_pmap, va, tmpva); - pmap_invalidate_cache(); + /* If "Self Snoop" is supported, do nothing. */ + if (!(cpu_feature & CPUID_SS)) + pmap_invalidate_cache(); return ((void *)(va + offset)); } @@ -4634,7 +4621,9 @@ */ if (changed) { pmap_invalidate_range(kernel_pmap, base, tmpva); - pmap_invalidate_cache(); + /* If "Self Snoop" is supported, do nothing. */ + if (!(cpu_feature & CPUID_SS)) + pmap_invalidate_cache(); } return (error); } ==== //depot/projects/tcp_reass/arm/conf/AVILA#7 (text+ko) ==== @@ -16,7 +16,7 @@ # If you are in doubt as to the purpose or necessity of a line, check first # in NOTES. # -# $FreeBSD: src/sys/arm/conf/AVILA,v 1.32 2009/05/27 16:16:56 thompsa Exp $ +# $FreeBSD: src/sys/arm/conf/AVILA,v 1.33 2009/07/17 18:35:45 rpaulo Exp $ ident AVILA @@ -105,6 +105,7 @@ device wlan # 802.11 support options IEEE80211_DEBUG options IEEE80211_SUPPORT_TDMA +options IEEE80211_SUPPORT_MESH device wlan_wep # 802.11 WEP support device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support ==== //depot/projects/tcp_reass/arm/conf/CAMBRIA#3 (text+ko) ==== @@ -16,7 +16,7 @@ # If you are in doubt as to the purpose or necessity of a line, check first # in NOTES. # -# $FreeBSD: src/sys/arm/conf/CAMBRIA,v 1.11 2009/05/10 00:00:25 kuriyama Exp $ +# $FreeBSD: src/sys/arm/conf/CAMBRIA,v 1.12 2009/07/17 18:35:45 rpaulo Exp $ ident CAMBRIA @@ -108,6 +108,7 @@ device wlan # 802.11 support options IEEE80211_DEBUG options IEEE80211_SUPPORT_TDMA +options IEEE80211_SUPPORT_MESH device wlan_wep # 802.11 WEP support device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support ==== //depot/projects/tcp_reass/cam/ata/ata_da.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/cam/ata/ata_da.c,v 1.1 2009/07/10 08:18:08 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/ata/ata_da.c,v 1.2 2009/07/17 21:48:08 mav Exp $"); #include <sys/param.h> @@ -275,7 +275,6 @@ if (softc->flags & ADA_FLAG_CAN_FLUSHCACHE) { ccb = cam_periph_getccb(periph, /*priority*/1); - ccb->ccb_h.ccb_state = ADA_CCB_DUMP; cam_fill_ataio(&ccb->ataio, 1, adadone, @@ -289,7 +288,9 @@ ata_48bit_cmd(&ccb->ataio, ATA_FLUSHCACHE48, 0, 0, 0); else ata_48bit_cmd(&ccb->ataio, ATA_FLUSHCACHE, 0, 0, 0); - xpt_polled_action(ccb); + cam_periph_runccb(ccb, /*error_routine*/NULL, /*cam_flags*/0, + /*sense_flags*/SF_RETRY_UA, + softc->disk->d_devstat); if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) xpt_print(periph->path, "Synchronize cache failed\n"); ==== //depot/projects/tcp_reass/geom/vinum/geom_vinum.c#4 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/geom/vinum/geom_vinum.c,v 1.28 2009/05/06 19:34:32 lulf Exp $"); +__FBSDID("$FreeBSD: src/sys/geom/vinum/geom_vinum.c,v 1.29 2009/07/18 11:12:48 lulf Exp $"); #include <sys/param.h> #include <sys/bio.h> @@ -133,10 +133,12 @@ error = ENXIO; gp = pp->geom; sc = gp->softc; - if (dw > 0 && dr == 0) - dr = 1; - else if (dw < 0 && dr == 0) - dr = -1; + /* + * We want to modify the read count with the write count in case we have + * plexes in a RAID-5 organization. + */ + dr += dw; + LIST_FOREACH(d, &sc->drives, drive) { if (d->consumer == NULL) continue; ==== //depot/projects/tcp_reass/i386/i386/pmap.c#8 (text+ko) ==== @@ -75,7 +75,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.640 2009/07/12 23:31:20 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.641 2009/07/18 01:50:05 alc Exp $"); /* * Manages physical address maps. @@ -4420,7 +4420,9 @@ pa += PAGE_SIZE; } pmap_invalidate_range(kernel_pmap, va, tmpva); - pmap_invalidate_cache(); + /* If "Self Snoop" is supported, do nothing. */ + if (!(cpu_feature & CPUID_SS)) + pmap_invalidate_cache(); return ((void *)(va + offset)); } @@ -4467,7 +4469,9 @@ * Flush CPU caches to make sure any data isn't cached that shouldn't * be, etc. */ - pmap_invalidate_cache(); + /* If "Self Snoop" is supported, do nothing. */ + if (!(cpu_feature & CPUID_SS)) + pmap_invalidate_cache(); } int @@ -4526,7 +4530,9 @@ * be, etc. */ pmap_invalidate_range(kernel_pmap, base, tmpva); - pmap_invalidate_cache(); + /* If "Self Snoop" is supported, do nothing. */ + if (!(cpu_feature & CPUID_SS)) + pmap_invalidate_cache(); return (0); } ==== //depot/projects/tcp_reass/net80211/ieee80211_freebsd.c#6 (text+ko) ==== @@ -24,7 +24,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_freebsd.c,v 1.36 2009/06/05 23:10:30 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_freebsd.c,v 1.37 2009/07/18 20:19:53 sam Exp $"); /* * IEEE 802.11 support (FreeBSD-specific code) @@ -53,6 +53,7 @@ #include <net/route.h> #include <net80211/ieee80211_var.h> +#include <net80211/ieee80211_input.h> SYSCTL_NODE(_net, OID_AUTO, wlan, CTLFLAG_RD, 0, "IEEE 80211 parameters"); @@ -408,6 +409,43 @@ return m; } +/* + * Re-align the payload in the mbuf. This is mainly used (right now) + * to handle IP header alignment requirements on certain architectures. + */ +struct mbuf * +ieee80211_realign(struct ieee80211vap *vap, struct mbuf *m, size_t align) +{ + int pktlen, space; + struct mbuf *n; + + pktlen = m->m_pkthdr.len; + space = pktlen + align; + if (space < MINCLSIZE) + n = m_gethdr(M_DONTWAIT, MT_DATA); + else { + n = m_getjcl(M_DONTWAIT, MT_DATA, M_PKTHDR, + space <= MCLBYTES ? MCLBYTES : +#if MJUMPAGESIZE != MCLBYTES + space <= MJUMPAGESIZE ? MJUMPAGESIZE : +#endif + space <= MJUM9BYTES ? MJUM9BYTES : MJUM16BYTES); + } + if (__predict_true(n != NULL)) { + m_move_pkthdr(n, m); + n->m_data = (caddr_t)(ALIGN(n->m_data + align) - align); + m_copydata(m, 0, pktlen, mtod(n, caddr_t)); + n->m_len = pktlen; + } else { + IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY, + mtod(m, const struct ieee80211_frame *), NULL, + "%s", "no mbuf to realign"); + vap->iv_stats.is_rx_badalign++; + } + m_freem(m); + return n; +} + int ieee80211_add_callback(struct mbuf *m, void (*func)(struct ieee80211_node *, void *, int), void *arg) ==== //depot/projects/tcp_reass/net80211/ieee80211_input.c#8 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_input.c,v 1.131 2009/07/11 15:02:45 rpaulo Exp $"); +__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_input.c,v 1.132 2009/07/18 20:19:53 sam Exp $"); #include "opt_wlan.h" @@ -285,53 +285,9 @@ } #ifdef ALIGNED_POINTER if (!ALIGNED_POINTER(mtod(m, caddr_t) + sizeof(*eh), uint32_t)) { - struct mbuf *n, *n0, **np; - caddr_t newdata; - int off, pktlen; - - n0 = NULL; - np = &n0; - off = 0; - pktlen = m->m_pkthdr.len; - while (pktlen > off) { - if (n0 == NULL) { - MGETHDR(n, M_DONTWAIT, MT_DATA); - if (n == NULL) { - m_freem(m); - return NULL; - } - M_MOVE_PKTHDR(n, m); - n->m_len = MHLEN; - } else { - MGET(n, M_DONTWAIT, MT_DATA); - if (n == NULL) { - m_freem(m); - m_freem(n0); - return NULL; - } - n->m_len = MLEN; - } - if (pktlen - off >= MINCLSIZE) { - MCLGET(n, M_DONTWAIT); - if (n->m_flags & M_EXT) - n->m_len = n->m_ext.ext_size; - } - if (n0 == NULL) { - newdata = - (caddr_t)ALIGN(n->m_data + sizeof(*eh)) - - sizeof(*eh); - n->m_len -= newdata - n->m_data; - n->m_data = newdata; - } - if (n->m_len > pktlen - off) - n->m_len = pktlen - off; - m_copydata(m, off, n->m_len, mtod(n, caddr_t)); - off += n->m_len; - *np = n; - np = &n->m_next; - } - m_freem(m); - m = n0; + m = ieee80211_realign(vap, m, sizeof(*eh)); + if (m == NULL) + return NULL; } #endif /* ALIGNED_POINTER */ if (llc != NULL) { ==== //depot/projects/tcp_reass/net80211/ieee80211_input.h#4 (text+ko) ==== @@ -22,7 +22,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/net80211/ieee80211_input.h,v 1.3 2009/03/24 20:39:08 sam Exp $ + * $FreeBSD: src/sys/net80211/ieee80211_input.h,v 1.4 2009/07/18 20:19:53 sam Exp $ */ #ifndef _NET80211_IEEE80211_INPUT_H_ #define _NET80211_IEEE80211_INPUT_H_ @@ -146,6 +146,7 @@ struct ieee80211_node *, struct mbuf *); struct mbuf *ieee80211_defrag(struct ieee80211_node *, struct mbuf *, int); +struct mbuf *ieee80211_realign(struct ieee80211vap *, struct mbuf *, size_t); struct mbuf *ieee80211_decap(struct ieee80211vap *, struct mbuf *, int); struct mbuf *ieee80211_decap1(struct mbuf *, int *); int ieee80211_setup_rates(struct ieee80211_node *ni, ==== //depot/projects/tcp_reass/net80211/ieee80211_ioctl.h#7 (text+ko) ==== @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/net80211/ieee80211_ioctl.h,v 1.38 2009/07/11 15:02:45 rpaulo Exp $ + * $FreeBSD: src/sys/net80211/ieee80211_ioctl.h,v 1.39 2009/07/18 20:19:53 sam Exp $ */ #ifndef _NET80211_IEEE80211_IOCTL_H_ #define _NET80211_IEEE80211_IOCTL_H_ @@ -235,8 +235,9 @@ uint32_t is_hwmp_wrongseq; /* wrong hwmp seq no. */ uint32_t is_hwmp_rootreqs; /* root PREQs sent */ uint32_t is_hwmp_rootrann; /* root RANNs sent */ + uint32_t is_rx_badalign; /* dropped 'cuz misaligned */ - uint32_t is_spare[16]; + uint32_t is_spare[15]; }; /* ==== //depot/projects/tcp_reass/netinet6/in6_mcast.c#5 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/netinet6/in6_mcast.c,v 1.7 2009/07/14 22:48:30 rwatson Exp $"); +__FBSDID("$FreeBSD: src/sys/netinet6/in6_mcast.c,v 1.8 2009/07/18 17:38:18 bms Exp $"); #include "opt_inet6.h" @@ -2160,14 +2160,24 @@ if (error) return (EADDRNOTAVAIL); /* + * Some badly behaved applications don't pass an ifindex + * or a scope ID, which is an API violation. In this case, + * perform a lookup as per a v6 join. + * * XXX For now, stomp on zone ID for the corner case. * This is not the 'KAME way', but we need to see the ifp * directly until such time as this implementation is * refactored, assuming the scope IDs are the way to go. */ ifindex = ntohs(gsa->sin6.sin6_addr.s6_addr16[1]); - KASSERT(ifindex != 0, ("%s: bad zone ID", __func__)); - ifp = ifnet_byindex(ifindex); + if (ifindex == 0) { + CTR2(KTR_MLD, "%s: warning: no ifindex, looking up " + "ifp for group %s.", __func__, + ip6_sprintf(ip6tbuf, &gsa->sin6.sin6_addr)); + ifp = in6p_lookup_mcast_ifp(inp, &gsa->sin6); + } else { + ifp = ifnet_byindex(ifindex); + } if (ifp == NULL) return (EADDRNOTAVAIL); } ==== //depot/projects/tcp_reass/nfsclient/nfs_vnops.c#10 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_vnops.c,v 1.316 2009/07/14 22:54:29 kib Exp $"); +__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_vnops.c,v 1.317 2009/07/17 19:38:07 rmacklem Exp $"); /* * vnode op calls for Sun NFS version 2 and 3 @@ -1061,7 +1061,8 @@ if (error == 0) newvp = NFSTOV(np); vfs_unbusy(mp); - vn_lock(dvp, ltype | LK_RETRY); + if (newvp != dvp) + vn_lock(dvp, ltype | LK_RETRY); if (dvp->v_iflag & VI_DOOMED) { if (error == 0) { if (newvp == dvp) ==== //depot/projects/tcp_reass/vm/vm_page.c#9 (text+ko) ==== @@ -98,7 +98,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/vm/vm_page.c,v 1.379 2009/07/12 23:31:20 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/vm/vm_page.c,v 1.380 2009/07/18 01:50:05 alc Exp $"); #include "opt_vm.h" @@ -1161,7 +1161,9 @@ mtx_unlock(&vm_page_queue_free_mtx); if (object != NULL) { - if (object->memattr != VM_MEMATTR_DEFAULT) + /* Ignore device objects; the pager sets "memattr" for them. */ + if (object->memattr != VM_MEMATTR_DEFAULT && + object->type != OBJT_DEVICE) pmap_page_set_memattr(m, object->memattr); vm_page_insert(m, object, pindex); } else
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907191216.n6JCGsRg037534>