From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 04:38:38 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 65EE7106566C;
	Sun, 10 May 2009 04:38:38 +0000 (UTC)
	(envelope-from jeff@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 3AE278FC14;
	Sun, 10 May 2009 04:38:38 +0000 (UTC)
	(envelope-from jeff@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4A4cbeY043557;
	Sun, 10 May 2009 04:38:37 GMT (envelope-from jeff@svn.freebsd.org)
Received: (from jeff@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4A4cb25043556;
	Sun, 10 May 2009 04:38:37 GMT (envelope-from jeff@svn.freebsd.org)
Message-Id: <200905100438.n4A4cb25043556@svn.freebsd.org>
From: Jeff Roberson <jeff@FreeBSD.org>
Date: Sun, 10 May 2009 04:38:37 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191957 - projects/jeff_mbuf2
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 04:38:38 -0000

Author: jeff
Date: Sun May 10 04:38:37 2009
New Revision: 191957
URL: http://svn.freebsd.org/changeset/base/191957

Log:
   - Create a new mbuf optimization branch since svn can't
     automatically merge the old one across the many removes
     and moves involved in usb2.

Added:
  projects/jeff_mbuf2/   (props changed)
     - copied from r191956, head/sys/

From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 05:17:52 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 90228106566C;
	Sun, 10 May 2009 05:17:52 +0000 (UTC)
	(envelope-from jeff@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 470428FC1C;
	Sun, 10 May 2009 05:17:52 +0000 (UTC)
	(envelope-from jeff@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4A5HqkW044402;
	Sun, 10 May 2009 05:17:52 GMT (envelope-from jeff@svn.freebsd.org)
Received: (from jeff@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4A5HpmY044395;
	Sun, 10 May 2009 05:17:51 GMT (envelope-from jeff@svn.freebsd.org)
Message-Id: <200905100517.n4A5HpmY044395@svn.freebsd.org>
From: Jeff Roberson <jeff@FreeBSD.org>
Date: Sun, 10 May 2009 05:17:51 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191958 - in projects/jeff_mbuf2: dev/cxgb dev/ti
	dev/vx dev/xen/netback kern net netgraph netinet nfsclient
	nfsserver sys vm
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 05:17:52 -0000

Author: jeff
Date: Sun May 10 05:17:51 2009
New Revision: 191958
URL: http://svn.freebsd.org/changeset/base/191958

Log:
   - Merge in changes from jeff_mbuf with one addition.
   - In m_refm() make all referenced data available in the ext area for
     compatibility with existing code that makes assumptions about
     referenced sizes.

Modified:
  projects/jeff_mbuf2/dev/cxgb/cxgb_sge.c
  projects/jeff_mbuf2/dev/ti/if_ti.c
  projects/jeff_mbuf2/dev/vx/if_vx.c
  projects/jeff_mbuf2/dev/xen/netback/netback.c
  projects/jeff_mbuf2/kern/kern_mbuf.c
  projects/jeff_mbuf2/kern/uipc_mbuf.c
  projects/jeff_mbuf2/kern/uipc_mbuf2.c
  projects/jeff_mbuf2/kern/uipc_sockbuf.c
  projects/jeff_mbuf2/net/if_gre.c
  projects/jeff_mbuf2/netgraph/ng_tty.c
  projects/jeff_mbuf2/netinet/ip_options.c
  projects/jeff_mbuf2/netinet/sctp_os_bsd.h
  projects/jeff_mbuf2/nfsclient/nfsm_subs.h
  projects/jeff_mbuf2/nfsserver/nfsm_subs.h
  projects/jeff_mbuf2/sys/mbuf.h
  projects/jeff_mbuf2/sys/sockbuf.h
  projects/jeff_mbuf2/vm/uma.h
  projects/jeff_mbuf2/vm/uma_core.c
  projects/jeff_mbuf2/vm/uma_dbg.c
  projects/jeff_mbuf2/vm/uma_int.h

Modified: projects/jeff_mbuf2/dev/cxgb/cxgb_sge.c
==============================================================================
--- projects/jeff_mbuf2/dev/cxgb/cxgb_sge.c	Sun May 10 04:38:37 2009	(r191957)
+++ projects/jeff_mbuf2/dev/cxgb/cxgb_sge.c	Sun May 10 05:17:51 2009	(r191958)
@@ -515,7 +515,7 @@ refill_fl(adapter_t *sc, struct sge_fl *
 	struct refill_fl_cb_arg cb_arg;
 	caddr_t cl;
 	int err, count = 0;
-	int header_size = sizeof(struct m_hdr) + sizeof(struct pkthdr) + sizeof(struct m_ext_) + sizeof(uint32_t);
+	int header_size = sizeof(struct mbuf) + sizeof(uint32_t);
 	
 	cb_arg.error = 0;
 	while (n--) {
@@ -2360,7 +2360,7 @@ t3_sge_alloc_qset(adapter_t *sc, u_int i
 	q->rspq.size = p->rspq_size;
 
 
-	header_size = sizeof(struct m_hdr) + sizeof(struct pkthdr) + sizeof(struct m_ext_) + sizeof(uint32_t);
+	header_size = sizeof(struct mbuf) + sizeof(uint32_t);
 	q->txq[TXQ_ETH].stop_thres = nports *
 	    flits_to_desc(sgl_len(TX_MAX_SEGS + 1) + 3);
 
@@ -2535,8 +2535,7 @@ init_cluster_mbuf(caddr_t cl, int flags,
 	struct mbuf *m;
 	int header_size;
 	
-	header_size = sizeof(struct m_hdr) + sizeof(struct pkthdr) +
-	    sizeof(struct m_ext_) + sizeof(uint32_t);
+	header_size = sizeof(struct mbuf) + sizeof(uint32_t);
 	
 	bzero(cl, header_size);
 	m = (struct mbuf *)cl;

Modified: projects/jeff_mbuf2/dev/ti/if_ti.c
==============================================================================
--- projects/jeff_mbuf2/dev/ti/if_ti.c	Sun May 10 04:38:37 2009	(r191957)
+++ projects/jeff_mbuf2/dev/ti/if_ti.c	Sun May 10 05:17:51 2009	(r191958)
@@ -1308,12 +1308,11 @@ ti_newbuf_mini(sc, i, m)
 		if (m_new == NULL) {
 			return (ENOBUFS);
 		}
-		m_new->m_len = m_new->m_pkthdr.len = MHLEN;
 	} else {
 		m_new = m;
-		m_new->m_data = m_new->m_pktdat;
-		m_new->m_len = m_new->m_pkthdr.len = MHLEN;
+		m_new->m_data = M_START(m);
 	}
+	m_new->m_len = m_new->m_pkthdr.len = m_new->m_size;
 
 	m_adj(m_new, ETHER_ALIGN);
 	r = &sc->ti_rdata->ti_rx_mini_ring[i];

Modified: projects/jeff_mbuf2/dev/vx/if_vx.c
==============================================================================
--- projects/jeff_mbuf2/dev/vx/if_vx.c	Sun May 10 04:38:37 2009	(r191957)
+++ projects/jeff_mbuf2/dev/vx/if_vx.c	Sun May 10 05:17:51 2009	(r191958)
@@ -825,8 +825,11 @@ vx_get(struct vx_softc *sc, u_int totlen
 		/* Convert one of our saved mbuf's. */
 		sc->vx_next_mb = (sc->vx_next_mb + 1) % MAX_MBS;
 		m->m_data = m->m_pktdat;
-		m->m_flags = M_PKTHDR;
-		bzero(&m->m_pkthdr, sizeof(m->m_pkthdr));
+		m->m_flags |= M_PKTHDR;
+		if (m_pkthdr_init(m, M_NOWAIT)) {
+			m_free(m);
+			return NULL;
+		}
 	}
 	m->m_pkthdr.rcvif = ifp;
 	m->m_pkthdr.len = totlen;

Modified: projects/jeff_mbuf2/dev/xen/netback/netback.c
==============================================================================
--- projects/jeff_mbuf2/dev/xen/netback/netback.c	Sun May 10 04:38:37 2009	(r191957)
+++ projects/jeff_mbuf2/dev/xen/netback/netback.c	Sun May 10 05:17:51 2009	(r191958)
@@ -873,8 +873,7 @@ netif_rx(netif_t *netif)
 		pkts_dequeued++;
 
 		/* Check if we need to copy the data */
-		if (((m->m_flags & (M_RDONLY|M_EXT)) != M_EXT) ||
-			(*m->m_ext.ref_cnt > 1) || m->m_next != NULL) {
+		if (M_WRITABLE(m) == 0 || m->m_next != NULL) {
 			struct mbuf *n;
 				
 			DDPRINTF("copying mbuf (fl=%x ext=%x rc=%d n=%x)\n",

Modified: projects/jeff_mbuf2/kern/kern_mbuf.c
==============================================================================
--- projects/jeff_mbuf2/kern/kern_mbuf.c	Sun May 10 04:38:37 2009	(r191957)
+++ projects/jeff_mbuf2/kern/kern_mbuf.c	Sun May 10 05:17:51 2009	(r191958)
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/domain.h>
 #include <sys/eventhandler.h>
 #include <sys/kernel.h>
+#include <sys/ktr.h>
 #include <sys/protosw.h>
 #include <sys/smp.h>
 #include <sys/sysctl.h>
@@ -210,27 +211,24 @@ SYSCTL_STRUCT(_kern_ipc, OID_AUTO, mbsta
 /*
  * Zones from which we allocate.
  */
-uma_zone_t	zone_mbuf;
 uma_zone_t	zone_clust;
-uma_zone_t	zone_pack;
 uma_zone_t	zone_jumbop;
 uma_zone_t	zone_jumbo9;
 uma_zone_t	zone_jumbo16;
-uma_zone_t	zone_ext_refcnt;
+uma_zone_t	zone_mbuf;
+uma_zone_t	zone_pack;
 
 /*
  * Local prototypes.
  */
-static int	mb_ctor_mbuf(void *, int, void *, int);
-static int	mb_ctor_clust(void *, int, void *, int);
-static int	mb_ctor_pack(void *, int, void *, int);
-static void	mb_dtor_mbuf(void *, int, void *);
-static void	mb_dtor_clust(void *, int, void *);
-static void	mb_dtor_pack(void *, int, void *);
-static int	mb_zinit_pack(void *, int, int);
-static void	mb_zfini_pack(void *, int);
-
+#ifdef INVARIANTS 
+static int	mb_ctor_pack(void *mem, int size, void *arg, int how);
+#endif
+static void	mb_dtor_pack(void *mem, int size, void *arg);
 static void	mb_reclaim(void *);
+static int	mb_zinit_pack(void *mem, int size, int how);
+static void	mb_zfini_pack(void *mem, int size);
+
 static void	mbuf_init(void *);
 static void    *mbuf_jumbo_alloc(uma_zone_t, int, u_int8_t *, int);
 static void	mbuf_jumbo_free(void *, int, u_int8_t);
@@ -252,73 +250,66 @@ mbuf_init(void *dummy)
 	 * Configure UMA zones for Mbufs, Clusters, and Packets.
 	 */
 	zone_mbuf = uma_zcreate(MBUF_MEM_NAME, MSIZE,
-	    mb_ctor_mbuf, mb_dtor_mbuf,
 #ifdef INVARIANTS
-	    trash_init, trash_fini,
+	    trash_ctor, trash_dtor, trash_init, trash_fini,
 #else
-	    NULL, NULL,
+	    NULL, NULL, NULL, NULL,
 #endif
 	    MSIZE - 1, UMA_ZONE_MAXBUCKET);
 
 	zone_clust = uma_zcreate(MBUF_CLUSTER_MEM_NAME, MCLBYTES,
-	    mb_ctor_clust, mb_dtor_clust,
 #ifdef INVARIANTS
-	    trash_init, trash_fini,
+	    trash_ctor, trash_dtor, trash_init, trash_fini,
 #else
-	    NULL, NULL,
+	    NULL, NULL, NULL, NULL,
 #endif
-	    UMA_ALIGN_PTR, UMA_ZONE_REFCNT);
+	    UMA_ALIGN_PTR, UMA_ZONE_MAXBUCKET);
 	if (nmbclusters > 0)
 		uma_zone_set_max(zone_clust, nmbclusters);
 
-	zone_pack = uma_zsecond_create(MBUF_PACKET_MEM_NAME, mb_ctor_pack,
+	zone_pack = uma_zsecond_create(MBUF_PACKET_MEM_NAME,
+#ifdef INVARIANTS
+	    mb_ctor_pack,
+#else
+	    NULL,
+#endif
 	    mb_dtor_pack, mb_zinit_pack, mb_zfini_pack, zone_mbuf);
 
 	/* Make jumbo frame zone too. Page size, 9k and 16k. */
 	zone_jumbop = uma_zcreate(MBUF_JUMBOP_MEM_NAME, MJUMPAGESIZE,
-	    mb_ctor_clust, mb_dtor_clust,
 #ifdef INVARIANTS
-	    trash_init, trash_fini,
+	    trash_ctor, trash_dtor, trash_init, trash_fini,
 #else
-	    NULL, NULL,
+	    NULL, NULL, NULL, NULL,
 #endif
-	    UMA_ALIGN_PTR, UMA_ZONE_REFCNT);
+	    UMA_ALIGN_PTR, 0);
 	if (nmbjumbop > 0)
 		uma_zone_set_max(zone_jumbop, nmbjumbop);
 
 	zone_jumbo9 = uma_zcreate(MBUF_JUMBO9_MEM_NAME, MJUM9BYTES,
-	    mb_ctor_clust, mb_dtor_clust,
 #ifdef INVARIANTS
-	    trash_init, trash_fini,
+	    trash_ctor, trash_dtor, trash_init, trash_fini,
 #else
-	    NULL, NULL,
+	    NULL, NULL, NULL, NULL,
 #endif
-	    UMA_ALIGN_PTR, UMA_ZONE_REFCNT);
+	    UMA_ALIGN_PTR, 0);
 	if (nmbjumbo9 > 0)
 		uma_zone_set_max(zone_jumbo9, nmbjumbo9);
 	uma_zone_set_allocf(zone_jumbo9, mbuf_jumbo_alloc);
 	uma_zone_set_freef(zone_jumbo9, mbuf_jumbo_free);
 
 	zone_jumbo16 = uma_zcreate(MBUF_JUMBO16_MEM_NAME, MJUM16BYTES,
-	    mb_ctor_clust, mb_dtor_clust,
 #ifdef INVARIANTS
-	    trash_init, trash_fini,
+	    trash_ctor, trash_dtor, trash_init, trash_fini,
 #else
-	    NULL, NULL,
+	    NULL, NULL, NULL, NULL,
 #endif
-	    UMA_ALIGN_PTR, UMA_ZONE_REFCNT);
+	    UMA_ALIGN_PTR, 0);
 	if (nmbjumbo16 > 0)
 		uma_zone_set_max(zone_jumbo16, nmbjumbo16);
 	uma_zone_set_allocf(zone_jumbo16, mbuf_jumbo_alloc);
 	uma_zone_set_freef(zone_jumbo16, mbuf_jumbo_free);
 
-	zone_ext_refcnt = uma_zcreate(MBUF_EXTREFCNT_MEM_NAME, sizeof(u_int),
-	    NULL, NULL,
-	    NULL, NULL,
-	    UMA_ALIGN_PTR, UMA_ZONE_ZINIT);
-
-	/* uma_prealloc() goes here... */
-
 	/*
 	 * Hook event handler for low-memory situation, used to
 	 * drain protocols and push data back to the caches (UMA
@@ -373,86 +364,18 @@ mbuf_jumbo_free(void *mem, int size, u_i
 	contigfree(mem, size, M_JUMBOFRAME);
 }
 
-/*
- * Constructor for Mbuf master zone.
- *
- * The 'arg' pointer points to a mb_args structure which
- * contains call-specific information required to support the
- * mbuf allocation API.  See mbuf.h.
- */
+#ifdef INVARIANTS
 static int
-mb_ctor_mbuf(void *mem, int size, void *arg, int how)
+mb_ctor_pack(void *mem, int size, void *arg, int how)
 {
 	struct mbuf *m;
-	struct mb_args *args;
-#ifdef MAC
-	int error;
-#endif
-	int flags;
-	short type;
 
-#ifdef INVARIANTS
-	trash_ctor(mem, size, arg, how);
-#endif
 	m = (struct mbuf *)mem;
-	args = (struct mb_args *)arg;
-	flags = args->flags;
-	type = args->type;
-
-	/*
-	 * The mbuf is initialized later.  The caller has the
-	 * responsibility to set up any MAC labels too.
-	 */
-	if (type == MT_NOINIT)
-		return (0);
+	trash_ctor(m->m_ext.ext_buf, MCLBYTES, arg, how);
 
-	m->m_next = NULL;
-	m->m_nextpkt = NULL;
-	m->m_len = 0;
-	m->m_flags = flags;
-	m->m_type = type;
-	if (flags & M_PKTHDR) {
-		m->m_data = m->m_pktdat;
-		m->m_pkthdr.rcvif = NULL;
-		m->m_pkthdr.header = NULL;
-		m->m_pkthdr.len = 0;
-		m->m_pkthdr.csum_flags = 0;
-		m->m_pkthdr.csum_data = 0;
-		m->m_pkthdr.tso_segsz = 0;
-		m->m_pkthdr.ether_vtag = 0;
-		m->m_pkthdr.flowid = 0;
-		SLIST_INIT(&m->m_pkthdr.tags);
-#ifdef MAC
-		/* If the label init fails, fail the alloc */
-		error = mac_mbuf_init(m, how);
-		if (error)
-			return (error);
-#endif
-	} else
-		m->m_data = m->m_dat;
 	return (0);
 }
-
-/*
- * The Mbuf master zone destructor.
- */
-static void
-mb_dtor_mbuf(void *mem, int size, void *arg)
-{
-	struct mbuf *m;
-	unsigned long flags; 
-
-	m = (struct mbuf *)mem;
-	flags = (unsigned long)arg;
-
-	if ((flags & MB_NOTAGS) == 0 && (m->m_flags & M_PKTHDR) != 0)
-		m_tag_delete_chain(m, NULL);
-	KASSERT((m->m_flags & M_EXT) == 0, ("%s: M_EXT set", __func__));
-	KASSERT((m->m_flags & M_NOFREE) == 0, ("%s: M_NOFREE set", __func__));
-#ifdef INVARIANTS
-	trash_dtor(mem, size, arg);
 #endif
-}
 
 /*
  * The Mbuf Packet zone destructor.
@@ -463,21 +386,21 @@ mb_dtor_pack(void *mem, int size, void *
 	struct mbuf *m;
 
 	m = (struct mbuf *)mem;
-	if ((m->m_flags & M_PKTHDR) != 0)
-		m_tag_delete_chain(m, NULL);
-
 	/* Make sure we've got a clean cluster back. */
 	KASSERT((m->m_flags & M_EXT) == M_EXT, ("%s: M_EXT not set", __func__));
 	KASSERT(m->m_ext.ext_buf != NULL, ("%s: ext_buf == NULL", __func__));
-	KASSERT(m->m_ext.ext_free == NULL, ("%s: ext_free != NULL", __func__));
+	KASSERT(m->m_ext.ext_free == m_ext_free_nop,
+	    ("%s: ext_free != m_ext_free_nop", __func__));
 	KASSERT(m->m_ext.ext_arg1 == NULL, ("%s: ext_arg1 != NULL", __func__));
 	KASSERT(m->m_ext.ext_arg2 == NULL, ("%s: ext_arg2 != NULL", __func__));
-	KASSERT(m->m_ext.ext_size == MCLBYTES, ("%s: ext_size != MCLBYTES", __func__));
-	KASSERT(m->m_ext.ext_type == EXT_PACKET, ("%s: ext_type != EXT_PACKET", __func__));
-	KASSERT(*m->m_ext.ref_cnt == 1, ("%s: ref_cnt != 1", __func__));
-#ifdef INVARIANTS
+	KASSERT(m->m_ext.ext_size == MCLBYTES, ("%s: ext_size != MCLBYTES",
+	    __func__));
+	KASSERT(m->m_ext.ext_type == EXT_PACKET, ("%s: ext_type != EXT_PACKET",
+	    __func__));
+#ifdef INVARIANTS 
 	trash_dtor(m->m_ext.ext_buf, MCLBYTES, arg);
 #endif
+
 	/*
 	 * If there are processes blocked on zone_clust, waiting for pages
 	 * to be freed up, * cause them to be woken up by draining the
@@ -491,85 +414,6 @@ mb_dtor_pack(void *mem, int size, void *
 }
 
 /*
- * The Cluster and Jumbo[PAGESIZE|9|16] zone constructor.
- *
- * Here the 'arg' pointer points to the Mbuf which we
- * are configuring cluster storage for.  If 'arg' is
- * empty we allocate just the cluster without setting
- * the mbuf to it.  See mbuf.h.
- */
-static int
-mb_ctor_clust(void *mem, int size, void *arg, int how)
-{
-	struct mbuf *m;
-	u_int *refcnt;
-	int type;
-	uma_zone_t zone;
-
-#ifdef INVARIANTS
-	trash_ctor(mem, size, arg, how);
-#endif
-	switch (size) {
-	case MCLBYTES:
-		type = EXT_CLUSTER;
-		zone = zone_clust;
-		break;
-#if MJUMPAGESIZE != MCLBYTES
-	case MJUMPAGESIZE:
-		type = EXT_JUMBOP;
-		zone = zone_jumbop;
-		break;
-#endif
-	case MJUM9BYTES:
-		type = EXT_JUMBO9;
-		zone = zone_jumbo9;
-		break;
-	case MJUM16BYTES:
-		type = EXT_JUMBO16;
-		zone = zone_jumbo16;
-		break;
-	default:
-		panic("unknown cluster size");
-		break;
-	}
-
-	m = (struct mbuf *)arg;
-	refcnt = uma_find_refcnt(zone, mem);
-	*refcnt = 1;
-	if (m != NULL) {
-		m->m_ext.ext_buf = (caddr_t)mem;
-		m->m_data = m->m_ext.ext_buf;
-		m->m_flags |= M_EXT;
-		m->m_ext.ext_free = NULL;
-		m->m_ext.ext_arg1 = NULL;
-		m->m_ext.ext_arg2 = NULL;
-		m->m_ext.ext_size = size;
-		m->m_ext.ext_type = type;
-		m->m_ext.ref_cnt = refcnt;
-	}
-
-	return (0);
-}
-
-/*
- * The Mbuf Cluster zone destructor.
- */
-static void
-mb_dtor_clust(void *mem, int size, void *arg)
-{
-#ifdef INVARIANTS
-	uma_zone_t zone;
-
-	zone = m_getzone(size);
-	KASSERT(*(uma_find_refcnt(zone, mem)) <= 1,
-		("%s: refcnt incorrect %u", __func__,
-		 *(uma_find_refcnt(zone, mem))) );
-
-	trash_dtor(mem, size, arg);
-#endif
-}
-
-/*
  * The Packet secondary zone's init routine, executed on the
  * object's transition from mbuf keg slab to zone cache.
  */
@@ -579,13 +423,16 @@ mb_zinit_pack(void *mem, int size, int h
 	struct mbuf *m;
 
 	m = (struct mbuf *)mem;		/* m is virgin. */
-	if (uma_zalloc_arg(zone_clust, m, how) == NULL ||
-	    m->m_ext.ext_buf == NULL)
+	/*
+	 * Allocate and attach the cluster to the ext.
+	 */
+	if ((mem = uma_zalloc(zone_clust, how)) == NULL)
 		return (ENOMEM);
-	m->m_ext.ext_type = EXT_PACKET;	/* Override. */
+	m_extadd(m, mem, MCLBYTES, m_ext_free_nop, NULL, NULL, 0, EXT_PACKET);
 #ifdef INVARIANTS
-	trash_init(m->m_ext.ext_buf, MCLBYTES, how);
+	return trash_init(m->m_ext.ext_buf, MCLBYTES, how);
 #endif
+
 	return (0);
 }
 
@@ -608,57 +455,34 @@ mb_zfini_pack(void *mem, int size)
 #endif
 }
 
-/*
- * The "packet" keg constructor.
- */
-static int
-mb_ctor_pack(void *mem, int size, void *arg, int how)
+int
+m_pkthdr_init(struct mbuf *m, int how)
 {
-	struct mbuf *m;
-	struct mb_args *args;
 #ifdef MAC
 	int error;
 #endif
-	int flags;
-	short type;
-
-	m = (struct mbuf *)mem;
-	args = (struct mb_args *)arg;
-	flags = args->flags;
-	type = args->type;
 
-#ifdef INVARIANTS
-	trash_ctor(m->m_ext.ext_buf, MCLBYTES, arg, how);
-#endif
-	m->m_next = NULL;
-	m->m_nextpkt = NULL;
-	m->m_data = m->m_ext.ext_buf;
-	m->m_len = 0;
-	m->m_flags = (flags | M_EXT);
-	m->m_type = type;
-
-	if (flags & M_PKTHDR) {
-		m->m_pkthdr.rcvif = NULL;
-		m->m_pkthdr.len = 0;
-		m->m_pkthdr.header = NULL;
-		m->m_pkthdr.csum_flags = 0;
-		m->m_pkthdr.csum_data = 0;
-		m->m_pkthdr.tso_segsz = 0;
-		m->m_pkthdr.ether_vtag = 0;
-		m->m_pkthdr.flowid = 0;
-		SLIST_INIT(&m->m_pkthdr.tags);
+	m->m_data = m->m_pktdat;
+	SLIST_INIT(&m->m_pkthdr.tags);
+	m->m_pkthdr.rcvif = NULL;
+	m->m_pkthdr.header = NULL;
+	m->m_pkthdr.len = 0;
+	m->m_pkthdr.flowid = 0;
+	m->m_pkthdr.csum_flags = 0;
+	m->m_pkthdr.csum_data = 0;
+	m->m_pkthdr.tso_segsz = 0;
+	m->m_pkthdr.ether_vtag = 0;
 #ifdef MAC
-		/* If the label init fails, fail the alloc */
-		error = mac_mbuf_init(m, how);
-		if (error)
-			return (error);
+	/* If the label init fails, fail the alloc */
+	error = mac_mbuf_init(m, how);
+	if (error)
+		return (error);
 #endif
-	}
-	/* m_ext is already initialized. */
 
 	return (0);
 }
 
+
 /*
  * This is the protocol drain routine.
  *
@@ -680,3 +504,45 @@ mb_reclaim(void *junk)
 			if (pr->pr_drain != NULL)
 				(*pr->pr_drain)();
 }
+
+struct mbuf *
+_m_getjcl(int how, short type, int flags, int size, uma_zone_t zone,
+    int exttype)
+{
+	struct mbuf *m;
+	void *mem;
+
+	if (size == MCLBYTES)
+		return m_getcl(how, type, flags);
+	/*
+	 * Allocate the memory and header seperate for these sizes.
+	 */
+	mem = uma_zalloc(zone, how);
+	if (mem == NULL)
+		return (NULL);
+	m = m_alloc(zone_mbuf, 0, how, type, flags);
+	if (m == NULL) {
+		uma_zfree(zone, mem);
+		return (NULL);
+	}
+	m_extadd(m, mem, size, m_ext_free_zone, zone, mem, flags, exttype);
+
+	return (m);
+}
+
+void *
+_m_cljget(struct mbuf *m, int how, int size, uma_zone_t zone, int exttype)
+{
+	void *mem;
+
+	if (m && m->m_flags & M_EXT)
+		printf("%s: %p mbuf already has cluster\n", __func__, m);
+	if (m != NULL)
+		m->m_ext.ext_buf = NULL;
+	mem = uma_zalloc(zone, how);
+	if (mem == NULL)
+		return (NULL);
+	if (m)
+		m_extadd(m, mem, size, m_ext_free_zone, zone, mem, 0, exttype);
+	return (mem);
+}

Modified: projects/jeff_mbuf2/kern/uipc_mbuf.c
==============================================================================
--- projects/jeff_mbuf2/kern/uipc_mbuf.c	Sun May 10 04:38:37 2009	(r191957)
+++ projects/jeff_mbuf2/kern/uipc_mbuf.c	Sun May 10 05:17:51 2009	(r191958)
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
+#include <sys/ktr.h>
 #include <sys/limits.h>
 #include <sys/lock.h>
 #include <sys/malloc.h>
@@ -87,6 +88,8 @@ SYSCTL_INT(_kern_ipc, OID_AUTO, m_defrag
 	   &m_defragrandomfailures, 0, "");
 #endif
 
+static void m_refm(struct mbuf *mb, struct mbuf *m);
+
 /*
  * Allocate a given length worth of mbufs and/or clusters (whatever fits
  * best) and return a pointer to the top of the allocated chain.  If an
@@ -128,8 +131,7 @@ m_getm2(struct mbuf *m, int len, int how
 		}
 
 		/* Book keeping. */
-		len -= (mb->m_flags & M_EXT) ? mb->m_ext.ext_size :
-			((mb->m_flags & M_PKTHDR) ? MHLEN : MLEN);
+		len -= mb->m_size;
 		if (mtail != NULL)
 			mtail->m_next = mb;
 		else
@@ -164,147 +166,63 @@ m_freem(struct mbuf *mb)
 		mb = m_free(mb);
 }
 
-/*-
- * Configure a provided mbuf to refer to the provided external storage
- * buffer and setup a reference count for said buffer.  If the setting
- * up of the reference count fails, the M_EXT bit will not be set.  If
- * successfull, the M_EXT bit is set in the mbuf's flags.
- *
- * Arguments:
- *    mb     The existing mbuf to which to attach the provided buffer.
- *    buf    The address of the provided external storage buffer.
- *    size   The size of the provided buffer.
- *    freef  A pointer to a routine that is responsible for freeing the
- *           provided external storage buffer.
- *    args   A pointer to an argument structure (of any type) to be passed
- *           to the provided freef routine (may be NULL).
- *    flags  Any other flags to be passed to the provided mbuf.
- *    type   The type that the external storage buffer should be
- *           labeled with.
- *
- * Returns:
- *    Nothing.
+/*
+ * Reference the existing storage area of an mbuf.  The reference is readonly
+ * and the referenced data can not be freed until the referencing mbuf is
+ * freed.
  */
-void
-m_extadd(struct mbuf *mb, caddr_t buf, u_int size,
-    void (*freef)(void *, void *), void *arg1, void *arg2, int flags, int type)
+static void
+m_refm(struct mbuf *mb, struct mbuf *m)
 {
-	KASSERT(type != EXT_CLUSTER, ("%s: EXT_CLUSTER not allowed", __func__));
 
-	if (type != EXT_EXTREF)
-		mb->m_ext.ref_cnt = (u_int *)uma_zalloc(zone_ext_refcnt, M_NOWAIT);
-	if (mb->m_ext.ref_cnt != NULL) {
-		*(mb->m_ext.ref_cnt) = 1;
-		mb->m_flags |= (M_EXT | flags);
-		mb->m_ext.ext_buf = buf;
-		mb->m_data = mb->m_ext.ext_buf;
-		mb->m_ext.ext_size = size;
-		mb->m_ext.ext_free = freef;
-		mb->m_ext.ext_arg1 = arg1;
-		mb->m_ext.ext_arg2 = arg2;
-		mb->m_ext.ext_type = type;
-        }
+	if (m->m_ref > 1)
+		atomic_add_int(&m->m_ref, 1);
+	else
+		m->m_ref++;
+	mb->m_flags |= M_EXT | M_RDONLY;
+	mb->m_data = m->m_data;
+	mb->m_size = m->m_size;
+	mb->m_ext.ext_buf = M_START(m);
+	mb->m_ext.ext_size = m->m_size;
+	mb->m_ext.ext_free = m_ext_free_mbuf;
+	mb->m_ext.ext_arg1 = m;
+	mb->m_ext.ext_arg2 = NULL;
+	mb->m_ext.ext_type = EXT_MBUF;
+
+	CTR3(KTR_NET, "m_refm: %p ref %d buf %p",
+	    mb, mb->m_ref, mb->m_ext.ext_buf);
 }
 
 /*
- * Non-directly-exported function to clean up after mbufs with M_EXT
- * storage attached to them if the reference count hits 1.
+ * Free the ext area of a mbuf assuming a uma zone and argument are
+ * presented.
  */
 void
-mb_free_ext(struct mbuf *m)
+m_ext_free_zone(void *arg1, void *arg2)
 {
-	int skipmbuf;
-	
-	KASSERT((m->m_flags & M_EXT) == M_EXT, ("%s: M_EXT not set", __func__));
-	KASSERT(m->m_ext.ref_cnt != NULL, ("%s: ref_cnt not set", __func__));
 
+	uma_zfree(arg1, arg2);
+}
+
+/*
+ * Free the ext area of a mbuf assuming it has been acquired with m_refm().
+ */
+void
+m_ext_free_mbuf(void *arg1, void *arg2)
+{
 
 	/*
-	 * check if the header is embedded in the cluster
-	 */     
-	skipmbuf = (m->m_flags & M_NOFREE);
-	
-	/* Free attached storage if this mbuf is the only reference to it. */
-	if (*(m->m_ext.ref_cnt) == 1 ||
-	    atomic_fetchadd_int(m->m_ext.ref_cnt, -1) == 1) {
-		switch (m->m_ext.ext_type) {
-		case EXT_PACKET:	/* The packet zone is special. */
-			if (*(m->m_ext.ref_cnt) == 0)
-				*(m->m_ext.ref_cnt) = 1;
-			uma_zfree(zone_pack, m);
-			return;		/* Job done. */
-		case EXT_CLUSTER:
-			uma_zfree(zone_clust, m->m_ext.ext_buf);
-			break;
-		case EXT_JUMBOP:
-			uma_zfree(zone_jumbop, m->m_ext.ext_buf);
-			break;
-		case EXT_JUMBO9:
-			uma_zfree(zone_jumbo9, m->m_ext.ext_buf);
-			break;
-		case EXT_JUMBO16:
-			uma_zfree(zone_jumbo16, m->m_ext.ext_buf);
-			break;
-		case EXT_SFBUF:
-		case EXT_NET_DRV:
-		case EXT_MOD_TYPE:
-		case EXT_DISPOSABLE:
-			*(m->m_ext.ref_cnt) = 0;
-			uma_zfree(zone_ext_refcnt, __DEVOLATILE(u_int *,
-				m->m_ext.ref_cnt));
-			/* FALLTHROUGH */
-		case EXT_EXTREF:
-			KASSERT(m->m_ext.ext_free != NULL,
-				("%s: ext_free not set", __func__));
-			(*(m->m_ext.ext_free))(m->m_ext.ext_arg1,
-			    m->m_ext.ext_arg2);
-			break;
-		default:
-			KASSERT(m->m_ext.ext_type == 0,
-				("%s: unknown ext_type", __func__));
-		}
-	}
-	if (skipmbuf)
-		return;
-	
-	/*
-	 * Free this mbuf back to the mbuf zone with all m_ext
-	 * information purged.
+	 * Release one more reference to this mbuf.  If it is the last it
+	 * will be freed.
 	 */
-	m->m_ext.ext_buf = NULL;
-	m->m_ext.ext_free = NULL;
-	m->m_ext.ext_arg1 = NULL;
-	m->m_ext.ext_arg2 = NULL;
-	m->m_ext.ref_cnt = NULL;
-	m->m_ext.ext_size = 0;
-	m->m_ext.ext_type = 0;
-	m->m_flags &= ~M_EXT;
-	uma_zfree(zone_mbuf, m);
+	m_free(arg1);
 }
 
-/*
- * Attach the the cluster from *m to *n, set up m_ext in *n
- * and bump the refcount of the cluster.
- */
-static void
-mb_dupcl(struct mbuf *n, struct mbuf *m)
+void
+m_ext_free_nop(void *arg1, void *arg2)
 {
-	KASSERT((m->m_flags & M_EXT) == M_EXT, ("%s: M_EXT not set", __func__));
-	KASSERT(m->m_ext.ref_cnt != NULL, ("%s: ref_cnt not set", __func__));
-	KASSERT((n->m_flags & M_EXT) == 0, ("%s: M_EXT set", __func__));
 
-	if (*(m->m_ext.ref_cnt) == 1)
-		*(m->m_ext.ref_cnt) += 1;
-	else
-		atomic_add_int(m->m_ext.ref_cnt, 1);
-	n->m_ext.ext_buf = m->m_ext.ext_buf;
-	n->m_ext.ext_free = m->m_ext.ext_free;
-	n->m_ext.ext_arg1 = m->m_ext.ext_arg1;
-	n->m_ext.ext_arg2 = m->m_ext.ext_arg2;
-	n->m_ext.ext_size = m->m_ext.ext_size;
-	n->m_ext.ref_cnt = m->m_ext.ref_cnt;
-	n->m_ext.ext_type = m->m_ext.ext_type;
-	n->m_flags |= M_EXT;
+	/* Nothing to do. */
 }
 
 /*
@@ -357,11 +275,8 @@ m_sanity(struct mbuf *m0, int sanitize)
 		 * unrelated kernel memory before or after us is trashed.
 		 * No way to recover from that.
 		 */
-		a = ((m->m_flags & M_EXT) ? m->m_ext.ext_buf :
-			((m->m_flags & M_PKTHDR) ? (caddr_t)(&m->m_pktdat) :
-			 (caddr_t)(&m->m_dat)) );
-		b = (caddr_t)(a + (m->m_flags & M_EXT ? m->m_ext.ext_size :
-			((m->m_flags & M_PKTHDR) ? MHLEN : MLEN)));
+		a = M_START(m);
+		b = (caddr_t)(a + m->m_size);
 		if ((caddr_t)m->m_data < a)
 			M_SANITY_ACTION("m_data outside mbuf data range left");
 		if ((caddr_t)m->m_data > b)
@@ -532,6 +447,7 @@ m_copym(struct mbuf *m, int off0, int le
 	struct mbuf *top;
 	int copyhdr = 0;
 
+	CTR3(KTR_NET, "m_copym(%p, %d, %d)", m, off0, len);
 	KASSERT(off >= 0, ("m_copym, negative off %d", off));
 	KASSERT(len >= 0, ("m_copym, negative len %d", len));
 	MBUF_CHECKSLEEP(wait);
@@ -568,13 +484,16 @@ m_copym(struct mbuf *m, int off0, int le
 				n->m_pkthdr.len = len;
 			copyhdr = 0;
 		}
+		/*
+		 * If the copied data will fit in the space of standard
+		 * mbuf prefer to copy rather than reference.
+		 */
 		n->m_len = min(len, m->m_len - off);
-		if (m->m_flags & M_EXT) {
-			n->m_data = m->m_data + off;
-			mb_dupcl(n, m);
+		if (n->m_len > n->m_size) {
+			m_refm(n, m);
+			n->m_data += off;
 		} else
-			bcopy(mtod(m, caddr_t)+off, mtod(n, caddr_t),
-			    (u_int)n->m_len);
+			bcopy(mtod(m, caddr_t)+off, mtod(n, caddr_t), n->m_len);
 		if (len != M_COPYALL)
 			len -= n->m_len;
 		off = 0;
@@ -752,7 +671,9 @@ struct mbuf *
 m_copypacket(struct mbuf *m, int how)
 {
 	struct mbuf *top, *n, *o;
+	int leading;
 
+	CTR1(KTR_NET, "m_copypacket(%p)", m);
 	MBUF_CHECKSLEEP(how);
 	MGET(n, how, m->m_type);
 	top = n;
@@ -762,13 +683,10 @@ m_copypacket(struct mbuf *m, int how)
 	if (!m_dup_pkthdr(n, m, how))
 		goto nospace;
 	n->m_len = m->m_len;
-	if (m->m_flags & M_EXT) {
-		n->m_data = m->m_data;
-		mb_dupcl(n, m);
-	} else {
-		n->m_data = n->m_pktdat + (m->m_data - m->m_pktdat );
-		bcopy(mtod(m, char *), mtod(n, char *), n->m_len);
-	}
+	if (n->m_len > n->m_size)
+		m_refm(n, m);
+	else
+		bcopy(mtod(m, caddr_t), mtod(n, caddr_t), m->m_len);
 
 	m = m->m_next;
 	while (m) {
@@ -780,13 +698,13 @@ m_copypacket(struct mbuf *m, int how)
 		n = n->m_next;
 
 		n->m_len = m->m_len;
-		if (m->m_flags & M_EXT) {
-			n->m_data = m->m_data;
-			mb_dupcl(n, m);
+		leading = M_LEADINGSPACE(m);
+		if (n->m_len + leading > n->m_size) {
+			m_refm(n, m);
 		} else {
-			bcopy(mtod(m, char *), mtod(n, char *), n->m_len);
+			n->m_data = M_START(n) + leading;
+			bcopy(mtod(m, caddr_t), mtod(n, caddr_t), n->m_len);
 		}
-
 		m = m->m_next;
 	}
 	return top;
@@ -805,6 +723,7 @@ m_copydata(const struct mbuf *m, int off
 {
 	u_int count;
 
+	CTR3(KTR_NET, "m_copydata(%p, %d, %d)", m, off, len);
 	KASSERT(off >= 0, ("m_copydata, negative off %d", off));
 	KASSERT(len >= 0, ("m_copydata, negative len %d", len));
 	while (off > 0) {
@@ -834,8 +753,9 @@ struct mbuf *
 m_dup(struct mbuf *m, int how)
 {
 	struct mbuf **p, *top = NULL;
-	int remain, moff, nsize;
+	int remain, moff;
 
+	CTR1(KTR_NET, "m_dup(%p)", m);
 	MBUF_CHECKSLEEP(how);
 	/* Sanity check */
 	if (m == NULL)
@@ -850,13 +770,10 @@ m_dup(struct mbuf *m, int how)
 		struct mbuf *n;
 
 		/* Get the next new mbuf */
-		if (remain >= MINCLSIZE) {
+		if (remain >= MINCLSIZE)
 			n = m_getcl(how, m->m_type, 0);
-			nsize = MCLBYTES;
-		} else {
+		else 
 			n = m_get(how, m->m_type);
-			nsize = MLEN;
-		}
 		if (n == NULL)
 			goto nospace;
 
@@ -865,8 +782,6 @@ m_dup(struct mbuf *m, int how)
 				m_free(n);
 				goto nospace;
 			}
-			if ((n->m_flags & M_EXT) == 0)
-				nsize = MHLEN;
 		}
 		n->m_len = 0;
 
@@ -875,8 +790,8 @@ m_dup(struct mbuf *m, int how)
 		p = &n->m_next;
 
 		/* Copy data from original mbuf(s) into new mbuf */
-		while (n->m_len < nsize && m != NULL) {
-			int chunk = min(nsize - n->m_len, m->m_len - moff);
+		while (n->m_len < n->m_size && m != NULL) {
+			int chunk = min(n->m_size - n->m_len, m->m_len - moff);
 
 			bcopy(m->m_data + moff, n->m_data + n->m_len, chunk);
 			moff += chunk;
@@ -908,11 +823,13 @@ nospace:
 void
 m_cat(struct mbuf *m, struct mbuf *n)
 {
+	CTR2(KTR_NET, "m_cat(%p, %p)", m, n);
+
 	while (m->m_next)
 		m = m->m_next;
 	while (n) {
 		if (m->m_flags & M_EXT ||
-		    m->m_data + m->m_len + n->m_len >= &m->m_dat[MLEN]) {
+		    m->m_len + n->m_len > m->m_size) {
 			/* just join the two chains */
 			m->m_next = n;
 			return;
@@ -932,6 +849,7 @@ m_adj(struct mbuf *mp, int req_len)
 	struct mbuf *m;
 	int count;
 
+	CTR2(KTR_NET, "m_adj(%p, %d)", mp, req_len);
 	if ((m = mp) == NULL)
 		return;
 	if (len >= 0) {
@@ -1014,13 +932,13 @@ m_pullup(struct mbuf *n, int len)
 	int count;
 	int space;
 
+	CTR2(KTR_NET, "m_pullup(%p, %d)", n, len);
 	/*
 	 * If first mbuf has no cluster, and has room for len bytes
 	 * without shifting current data, pullup into it,
 	 * otherwise allocate a new mbuf to prepend to the chain.
 	 */
-	if ((n->m_flags & M_EXT) == 0 &&
-	    n->m_data + len < &n->m_dat[MLEN] && n->m_next) {
+	if ((n->m_flags & M_EXT) == 0 && len < n->m_size && n->m_next) {
 		if (n->m_len >= len)
 			return (n);
 		m = n;
@@ -1036,7 +954,8 @@ m_pullup(struct mbuf *n, int len)
 		if (n->m_flags & M_PKTHDR)
 			M_MOVE_PKTHDR(m, n);
 	}
-	space = &m->m_dat[MLEN] - (m->m_data + m->m_len);
+	/* XXX M_TRAILINGSPACE without M_WRITABLE */
+	space = (M_START(m) + m->m_size) - (m->m_data + (m)->m_len);
 	do {
 		count = min(min(max(len, max_protohdr), space), n->m_len);
 		bcopy(mtod(n, caddr_t), mtod(m, caddr_t) + m->m_len,
@@ -1075,6 +994,7 @@ m_copyup(struct mbuf *n, int len, int ds
 	struct mbuf *m;
 	int count, space;
 
+	CTR2(KTR_NET, "m_copyup(%p, %d)", n, len);
 	if (len > (MHLEN - dstoff))
 		goto bad;
 	MGET(m, M_DONTWAIT, n->m_type);
@@ -1084,7 +1004,8 @@ m_copyup(struct mbuf *n, int len, int ds
 	if (n->m_flags & M_PKTHDR)
 		M_MOVE_PKTHDR(m, n);
 	m->m_data += dstoff;
-	space = &m->m_dat[MLEN] - (m->m_data + m->m_len);
+	/* XXX M_TRAILINGSPACE without M_WRITABLE */
+	space = (M_START(m) + m->m_size) - (m->m_data + (m)->m_len);
 	do {
 		count = min(min(max(len, max_protohdr), space), n->m_len);
 		memcpy(mtod(m, caddr_t) + m->m_len, mtod(n, caddr_t),
@@ -1126,6 +1047,7 @@ m_split(struct mbuf *m0, int len0, int w
 	struct mbuf *m, *n;
 	u_int len = len0, remain;
 
+	CTR2(KTR_NET, "m_split(%p, %d)", m0, len0);
 	MBUF_CHECKSLEEP(wait);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***

From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 15:37:50 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 2B892106566B;
	Sun, 10 May 2009 15:37:50 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 154EC8FC0C;
	Sun, 10 May 2009 15:37:50 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AFbnlS061332;
	Sun, 10 May 2009 15:37:49 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AFbnlv061315;
	Sun, 10 May 2009 15:37:49 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905101537.n4AFbnlv061315@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Sun, 10 May 2009 15:37:49 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191962 - in projects/mesh11s: .
	cddl/contrib/opensolaris/lib/libzpool/common/sys
	cddl/lib/libzpool contrib/bind9 contrib/cpio contrib/csup
	contrib/file contrib/file/Magdir contrib/file...
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 15:37:50 -0000

Author: rpaulo
Date: Sun May 10 15:37:48 2009
New Revision: 191962
URL: http://svn.freebsd.org/changeset/base/191962

Log:
  MFC 191746:191961

Added:
  projects/mesh11s/contrib/file/Magdir/wireless
     - copied unchanged from r191961, head/contrib/file/Magdir/wireless
  projects/mesh11s/contrib/file/Makefile.am-src
     - copied unchanged from r191961, head/contrib/file/Makefile.am-src
  projects/mesh11s/contrib/file/cdf.c
     - copied unchanged from r191961, head/contrib/file/cdf.c
  projects/mesh11s/contrib/file/cdf.h
     - copied unchanged from r191961, head/contrib/file/cdf.h
  projects/mesh11s/contrib/file/cdf_time.c
     - copied unchanged from r191961, head/contrib/file/cdf_time.c
  projects/mesh11s/contrib/file/encoding.c
     - copied unchanged from r191961, head/contrib/file/encoding.c
  projects/mesh11s/contrib/file/readcdf.c
     - copied unchanged from r191961, head/contrib/file/readcdf.c
  projects/mesh11s/lib/libc/gen/tcsetsid.3
     - copied unchanged from r191961, head/lib/libc/gen/tcsetsid.3
  projects/mesh11s/share/man/man4/iwnfw.4
     - copied unchanged from r191961, head/share/man/man4/iwnfw.4
  projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/amd64/opensolaris_atomic.S
     - copied unchanged from r191961, head/sys/cddl/contrib/opensolaris/common/atomic/amd64/opensolaris_atomic.S
  projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S
     - copied unchanged from r191961, head/sys/cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S
  projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/ia64/opensolaris_atomic.S
     - copied unchanged from r191961, head/sys/cddl/contrib/opensolaris/common/atomic/ia64/opensolaris_atomic.S
  projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/sparc64/opensolaris_atomic.S
     - copied unchanged from r191961, head/sys/cddl/contrib/opensolaris/common/atomic/sparc64/opensolaris_atomic.S
  projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/zmod/opensolaris_crc32.c
     - copied unchanged from r191961, head/sys/cddl/contrib/opensolaris/uts/common/zmod/opensolaris_crc32.c
  projects/mesh11s/sys/contrib/dev/iwi/Makefile
     - copied unchanged from r191961, head/sys/contrib/dev/iwi/Makefile
  projects/mesh11s/sys/dev/bwi/
     - copied from r191961, head/sys/dev/bwi/
  projects/mesh11s/sys/fs/nfs/
     - copied from r191961, head/sys/fs/nfs/
  projects/mesh11s/sys/fs/nfsclient/
     - copied from r191961, head/sys/fs/nfsclient/
  projects/mesh11s/sys/fs/nfsserver/
     - copied from r191961, head/sys/fs/nfsserver/
  projects/mesh11s/sys/modules/bwi/
     - copied from r191961, head/sys/modules/bwi/
Deleted:
  projects/mesh11s/contrib/file/.cvsignore
  projects/mesh11s/contrib/file/FREEBSD-upgrade
  projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/amd64/atomic.S
  projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/i386/atomic.S
  projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/ia64/atomic.S
  projects/mesh11s/sys/cddl/contrib/opensolaris/common/atomic/sparc64/atomic.S
  projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/zmod/crc32.c
  projects/mesh11s/sys/compat/svr4/svr4_ttold.c
  projects/mesh11s/sys/compat/svr4/svr4_ttold.h
  projects/mesh11s/usr.bin/file/config.h
Modified:
  projects/mesh11s/   (props changed)
  projects/mesh11s/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h
  projects/mesh11s/cddl/lib/libzpool/Makefile
  projects/mesh11s/contrib/bind9/   (props changed)
  projects/mesh11s/contrib/cpio/   (props changed)
  projects/mesh11s/contrib/csup/   (props changed)
  projects/mesh11s/contrib/file/   (props changed)
  projects/mesh11s/contrib/file/ChangeLog
  projects/mesh11s/contrib/file/Magdir/animation
  projects/mesh11s/contrib/file/Magdir/audio
  projects/mesh11s/contrib/file/Magdir/cafebabe
  projects/mesh11s/contrib/file/Magdir/compress
  projects/mesh11s/contrib/file/Magdir/elf
  projects/mesh11s/contrib/file/Magdir/epoc
  projects/mesh11s/contrib/file/Magdir/filesystems
  projects/mesh11s/contrib/file/Magdir/graphviz
  projects/mesh11s/contrib/file/Magdir/images
  projects/mesh11s/contrib/file/Magdir/jpeg
  projects/mesh11s/contrib/file/Magdir/mach
  projects/mesh11s/contrib/file/Magdir/macintosh
  projects/mesh11s/contrib/file/Magdir/msdos
  projects/mesh11s/contrib/file/Magdir/perl
  projects/mesh11s/contrib/file/Magdir/printer
  projects/mesh11s/contrib/file/Magdir/timezone
  projects/mesh11s/contrib/file/Magdir/xwindows
  projects/mesh11s/contrib/file/Makefile.am
  projects/mesh11s/contrib/file/Makefile.in
  projects/mesh11s/contrib/file/README
  projects/mesh11s/contrib/file/TODO
  projects/mesh11s/contrib/file/apprentice.c
  projects/mesh11s/contrib/file/apptype.c
  projects/mesh11s/contrib/file/ascmagic.c
  projects/mesh11s/contrib/file/asprintf.c   (contents, props changed)
  projects/mesh11s/contrib/file/compress.c
  projects/mesh11s/contrib/file/config.h.in
  projects/mesh11s/contrib/file/configure
  projects/mesh11s/contrib/file/configure.ac
  projects/mesh11s/contrib/file/elfclass.h   (props changed)
  projects/mesh11s/contrib/file/file.c
  projects/mesh11s/contrib/file/file.h
  projects/mesh11s/contrib/file/file.man
  projects/mesh11s/contrib/file/file_opts.h
  projects/mesh11s/contrib/file/fsmagic.c
  projects/mesh11s/contrib/file/funcs.c
  projects/mesh11s/contrib/file/getopt_long.c   (contents, props changed)
  projects/mesh11s/contrib/file/is_tar.c
  projects/mesh11s/contrib/file/libmagic.man
  projects/mesh11s/contrib/file/magic.c
  projects/mesh11s/contrib/file/magic.h
  projects/mesh11s/contrib/file/magic.man
  projects/mesh11s/contrib/file/mygetopt.h   (props changed)
  projects/mesh11s/contrib/file/patchlevel.h
  projects/mesh11s/contrib/file/print.c
  projects/mesh11s/contrib/file/readelf.c
  projects/mesh11s/contrib/file/softmagic.c
  projects/mesh11s/contrib/file/tests/Makefile.am   (props changed)
  projects/mesh11s/contrib/file/tests/Makefile.in   (props changed)
  projects/mesh11s/contrib/file/tests/test.c   (props changed)
  projects/mesh11s/contrib/file/vasprintf.c   (contents, props changed)
  projects/mesh11s/contrib/gdb/   (props changed)
  projects/mesh11s/contrib/gdtoa/   (props changed)
  projects/mesh11s/contrib/less/   (props changed)
  projects/mesh11s/contrib/less/COPYING
  projects/mesh11s/contrib/less/FREEBSD-upgrade
  projects/mesh11s/contrib/less/LICENSE
  projects/mesh11s/contrib/less/Makefile.in
  projects/mesh11s/contrib/less/NEWS
  projects/mesh11s/contrib/less/README
  projects/mesh11s/contrib/less/brac.c
  projects/mesh11s/contrib/less/ch.c
  projects/mesh11s/contrib/less/charset.c
  projects/mesh11s/contrib/less/charset.h
  projects/mesh11s/contrib/less/cmd.h
  projects/mesh11s/contrib/less/cmdbuf.c
  projects/mesh11s/contrib/less/command.c
  projects/mesh11s/contrib/less/configure
  projects/mesh11s/contrib/less/configure.ac
  projects/mesh11s/contrib/less/decode.c
  projects/mesh11s/contrib/less/defines.ds
  projects/mesh11s/contrib/less/defines.o2
  projects/mesh11s/contrib/less/defines.o9
  projects/mesh11s/contrib/less/defines.wn
  projects/mesh11s/contrib/less/edit.c
  projects/mesh11s/contrib/less/filename.c
  projects/mesh11s/contrib/less/forwback.c
  projects/mesh11s/contrib/less/funcs.h
  projects/mesh11s/contrib/less/help.c
  projects/mesh11s/contrib/less/ifile.c
  projects/mesh11s/contrib/less/input.c
  projects/mesh11s/contrib/less/install.sh
  projects/mesh11s/contrib/less/jump.c
  projects/mesh11s/contrib/less/less.h
  projects/mesh11s/contrib/less/less.hlp
  projects/mesh11s/contrib/less/less.man
  projects/mesh11s/contrib/less/less.nro
  projects/mesh11s/contrib/less/lessecho.c
  projects/mesh11s/contrib/less/lessecho.man
  projects/mesh11s/contrib/less/lessecho.nro
  projects/mesh11s/contrib/less/lesskey.c
  projects/mesh11s/contrib/less/lesskey.h
  projects/mesh11s/contrib/less/lesskey.man
  projects/mesh11s/contrib/less/lesskey.nro
  projects/mesh11s/contrib/less/lglob.h
  projects/mesh11s/contrib/less/line.c
  projects/mesh11s/contrib/less/linenum.c
  projects/mesh11s/contrib/less/lsystem.c
  projects/mesh11s/contrib/less/main.c
  projects/mesh11s/contrib/less/mark.c
  projects/mesh11s/contrib/less/mkhelp.c
  projects/mesh11s/contrib/less/optfunc.c
  projects/mesh11s/contrib/less/option.c
  projects/mesh11s/contrib/less/option.h
  projects/mesh11s/contrib/less/opttbl.c
  projects/mesh11s/contrib/less/os.c
  projects/mesh11s/contrib/less/output.c
  projects/mesh11s/contrib/less/pckeys.h
  projects/mesh11s/contrib/less/position.c
  projects/mesh11s/contrib/less/position.h
  projects/mesh11s/contrib/less/prompt.c
  projects/mesh11s/contrib/less/screen.c
  projects/mesh11s/contrib/less/scrsize.c
  projects/mesh11s/contrib/less/search.c
  projects/mesh11s/contrib/less/signal.c
  projects/mesh11s/contrib/less/tags.c
  projects/mesh11s/contrib/less/ttyin.c
  projects/mesh11s/contrib/less/version.c
  projects/mesh11s/contrib/libpcap/   (props changed)
  projects/mesh11s/contrib/ncurses/   (props changed)
  projects/mesh11s/contrib/netcat/   (props changed)
  projects/mesh11s/contrib/ntp/   (props changed)
  projects/mesh11s/contrib/openbsm/   (props changed)
  projects/mesh11s/contrib/openpam/   (props changed)
  projects/mesh11s/contrib/pf/   (props changed)
  projects/mesh11s/contrib/sendmail/   (props changed)
  projects/mesh11s/contrib/tcpdump/   (props changed)
  projects/mesh11s/contrib/top/   (props changed)
  projects/mesh11s/contrib/top/install-sh   (props changed)
  projects/mesh11s/contrib/wpa/   (props changed)
  projects/mesh11s/crypto/openssh/   (props changed)
  projects/mesh11s/crypto/openssl/   (props changed)
  projects/mesh11s/gnu/usr.bin/patch/common.h
  projects/mesh11s/gnu/usr.bin/patch/inp.c
  projects/mesh11s/gnu/usr.bin/patch/patch.c
  projects/mesh11s/gnu/usr.bin/patch/pch.c
  projects/mesh11s/gnu/usr.bin/patch/pch.h
  projects/mesh11s/gnu/usr.bin/patch/util.c
  projects/mesh11s/lib/libarchive/archive_read_open_filename.c
  projects/mesh11s/lib/libc/   (props changed)
  projects/mesh11s/lib/libc/gen/Makefile.inc
  projects/mesh11s/lib/libc/gen/Symbol.map
  projects/mesh11s/lib/libc/gen/tcgetsid.3
  projects/mesh11s/lib/libc/gen/termios.c
  projects/mesh11s/lib/libc/gen/ttyname.3
  projects/mesh11s/lib/libc/stdio/asprintf.c   (props changed)
  projects/mesh11s/lib/libc/stdlib/ptsname.3
  projects/mesh11s/lib/libc/stdtime/   (props changed)
  projects/mesh11s/lib/libc/string/ffsll.c   (props changed)
  projects/mesh11s/lib/libc/string/flsll.c   (props changed)
  projects/mesh11s/lib/libc/string/wcpcpy.c   (props changed)
  projects/mesh11s/lib/libc/string/wcpncpy.c   (props changed)
  projects/mesh11s/lib/libmagic/Makefile
  projects/mesh11s/lib/libmagic/config.h
  projects/mesh11s/lib/libusb/   (props changed)
  projects/mesh11s/lib/libusb/libusb.3   (props changed)
  projects/mesh11s/lib/libusb/usb.h   (props changed)
  projects/mesh11s/lib/libutil/   (props changed)
  projects/mesh11s/lib/libutil/login_tty.c
  projects/mesh11s/sbin/   (props changed)
  projects/mesh11s/sbin/ipfw/   (props changed)
  projects/mesh11s/share/man/man4/Makefile
  projects/mesh11s/share/man/man4/geom_fox.4
  projects/mesh11s/share/man/man4/if_bridge.4
  projects/mesh11s/share/man/man4/isp.4
  projects/mesh11s/share/man/man4/mpt.4
  projects/mesh11s/share/man/man4/smp.4
  projects/mesh11s/share/man/man4/ubsec.4
  projects/mesh11s/share/misc/bsd-family-tree
  projects/mesh11s/share/misc/committers-ports.dot
  projects/mesh11s/share/misc/committers-src.dot
  projects/mesh11s/share/zoneinfo/   (props changed)
  projects/mesh11s/sys/   (props changed)
  projects/mesh11s/sys/amd64/amd64/identcpu.c
  projects/mesh11s/sys/amd64/amd64/local_apic.c
  projects/mesh11s/sys/amd64/conf/DEFAULTS
  projects/mesh11s/sys/amd64/conf/GENERIC
  projects/mesh11s/sys/amd64/conf/NOTES
  projects/mesh11s/sys/amd64/conf/XENHVM
  projects/mesh11s/sys/amd64/include/clock.h
  projects/mesh11s/sys/amd64/include/pcpu.h
  projects/mesh11s/sys/amd64/include/xen/   (props changed)
  projects/mesh11s/sys/amd64/isa/clock.c
  projects/mesh11s/sys/amd64/linux32/linux.h
  projects/mesh11s/sys/amd64/linux32/linux32_sysvec.c
  projects/mesh11s/sys/arm/arm/cpufunc.c
  projects/mesh11s/sys/arm/arm/pmap.c
  projects/mesh11s/sys/arm/at91/at91_cfata.c
  projects/mesh11s/sys/arm/at91/if_ate.c
  projects/mesh11s/sys/arm/conf/AVILA
  projects/mesh11s/sys/arm/conf/BWCT
  projects/mesh11s/sys/arm/conf/CAMBRIA
  projects/mesh11s/sys/arm/conf/CRB
  projects/mesh11s/sys/arm/conf/DB-78XXX
  projects/mesh11s/sys/arm/conf/DB-88F5XXX
  projects/mesh11s/sys/arm/conf/DB-88F6XXX
  projects/mesh11s/sys/arm/conf/EP80219
  projects/mesh11s/sys/arm/conf/GUMSTIX
  projects/mesh11s/sys/arm/conf/HL200
  projects/mesh11s/sys/arm/conf/IQ31244
  projects/mesh11s/sys/arm/conf/KB920X
  projects/mesh11s/sys/arm/conf/NSLU
  projects/mesh11s/sys/arm/conf/NSLU.hints
  projects/mesh11s/sys/arm/conf/SIMICS
  projects/mesh11s/sys/arm/conf/SKYEYE
  projects/mesh11s/sys/arm/include/pmap.h
  projects/mesh11s/sys/boot/uboot/lib/devicename.c
  projects/mesh11s/sys/boot/uboot/lib/disk.c
  projects/mesh11s/sys/boot/uboot/lib/libuboot.h
  projects/mesh11s/sys/cddl/compat/opensolaris/kern/opensolaris.c
  projects/mesh11s/sys/cddl/compat/opensolaris/kern/opensolaris_misc.c
  projects/mesh11s/sys/cddl/compat/opensolaris/sys/vnode.h
  projects/mesh11s/sys/cddl/contrib/opensolaris/common/acl/acl_common.c
  projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/fs/vnode.c
  projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
  projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
  projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
  projects/mesh11s/sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h
  projects/mesh11s/sys/compat/linux/linux_futex.c
  projects/mesh11s/sys/compat/linux/linux_ioctl.c
  projects/mesh11s/sys/compat/linux/linux_mib.c
  projects/mesh11s/sys/compat/linux/linux_mib.h
  projects/mesh11s/sys/compat/linux/linux_misc.c
  projects/mesh11s/sys/compat/linux/linux_socket.c
  projects/mesh11s/sys/compat/linux/linux_socket.h
  projects/mesh11s/sys/compat/linux/linux_stats.c
  projects/mesh11s/sys/compat/linux/linux_util.h
  projects/mesh11s/sys/compat/svr4/svr4_ioctl.c
  projects/mesh11s/sys/compat/svr4/svr4_ioctl.h
  projects/mesh11s/sys/compat/svr4/svr4_proto.h
  projects/mesh11s/sys/compat/svr4/svr4_stat.c
  projects/mesh11s/sys/compat/svr4/svr4_syscall.h
  projects/mesh11s/sys/compat/svr4/svr4_syscallnames.c
  projects/mesh11s/sys/compat/svr4/svr4_sysent.c
  projects/mesh11s/sys/conf/NOTES
  projects/mesh11s/sys/conf/files
  projects/mesh11s/sys/conf/files.i386
  projects/mesh11s/sys/conf/files.pc98
  projects/mesh11s/sys/conf/kern.post.mk
  projects/mesh11s/sys/conf/newvers.sh
  projects/mesh11s/sys/conf/options
  projects/mesh11s/sys/contrib/dev/iwi/ipw2200-bss.fw.uu
  projects/mesh11s/sys/contrib/dev/iwi/ipw2200-ibss.fw.uu
  projects/mesh11s/sys/contrib/dev/iwi/ipw2200-sniffer.fw.uu
  projects/mesh11s/sys/contrib/pf/   (props changed)
  projects/mesh11s/sys/dev/acpica/acpi_cpu.c
  projects/mesh11s/sys/dev/asr/asr.c
  projects/mesh11s/sys/dev/ata/ata-pci.h
  projects/mesh11s/sys/dev/ata/ata-usb.c   (props changed)
  projects/mesh11s/sys/dev/ata/chipsets/ata-siliconimage.c
  projects/mesh11s/sys/dev/ath/ah_osdep.c
  projects/mesh11s/sys/dev/ath/ah_osdep.h
  projects/mesh11s/sys/dev/ath/ath_hal/ar5211/ar5211_interrupts.c
  projects/mesh11s/sys/dev/ath/ath_hal/ar5212/ar5212_interrupts.c
  projects/mesh11s/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c
  projects/mesh11s/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c
  projects/mesh11s/sys/dev/ath/if_ath.c
  projects/mesh11s/sys/dev/bce/if_bce.c
  projects/mesh11s/sys/dev/bce/if_bcereg.h
  projects/mesh11s/sys/dev/cxgb/   (props changed)
  projects/mesh11s/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c
  projects/mesh11s/sys/dev/ipw/if_ipw.c
  projects/mesh11s/sys/dev/iwi/if_iwi.c
  projects/mesh11s/sys/dev/iwi/if_iwivar.h
  projects/mesh11s/sys/dev/iwn/if_iwn.c
  projects/mesh11s/sys/dev/sound/pci/ich.c
  projects/mesh11s/sys/dev/sound/usb/uaudio.c   (props changed)
  projects/mesh11s/sys/dev/sound/usb/uaudio.h   (props changed)
  projects/mesh11s/sys/dev/sound/usb/uaudio_pcm.c   (props changed)
  projects/mesh11s/sys/dev/sound/usb/uaudioreg.h   (props changed)
  projects/mesh11s/sys/dev/ubsec/ubsec.c
  projects/mesh11s/sys/dev/ubsec/ubsecreg.h
  projects/mesh11s/sys/dev/usb/README.TXT   (props changed)
  projects/mesh11s/sys/dev/usb/bluetooth/TODO.TXT   (props changed)
  projects/mesh11s/sys/dev/usb/bluetooth/ng_ubt.c   (props changed)
  projects/mesh11s/sys/dev/usb/bluetooth/ng_ubt_var.h   (props changed)
  projects/mesh11s/sys/dev/usb/bluetooth/ubtbcmfw.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/at91dci.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/at91dci.h   (props changed)
  projects/mesh11s/sys/dev/usb/controller/at91dci_atmelarm.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/atmegadci.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/atmegadci.h   (props changed)
  projects/mesh11s/sys/dev/usb/controller/atmegadci_atmelarm.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/ehci.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/controller/ehci.h   (props changed)
  projects/mesh11s/sys/dev/usb/controller/ehci_ixp4xx.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/ehci_mbus.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/ehci_pci.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/musb_otg.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/musb_otg.h   (props changed)
  projects/mesh11s/sys/dev/usb/controller/musb_otg_atmelarm.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/ohci.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/controller/ohci.h   (props changed)
  projects/mesh11s/sys/dev/usb/controller/ohci_atmelarm.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/ohci_pci.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/uhci.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/controller/uhci.h   (props changed)
  projects/mesh11s/sys/dev/usb/controller/uhci_pci.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/usb_controller.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/uss820dci.c   (props changed)
  projects/mesh11s/sys/dev/usb/controller/uss820dci.h   (props changed)
  projects/mesh11s/sys/dev/usb/controller/uss820dci_atmelarm.c   (props changed)
  projects/mesh11s/sys/dev/usb/input/uhid.c   (props changed)
  projects/mesh11s/sys/dev/usb/input/ukbd.c   (props changed)
  projects/mesh11s/sys/dev/usb/input/ums.c   (props changed)
  projects/mesh11s/sys/dev/usb/input/usb_rdesc.h   (props changed)
  projects/mesh11s/sys/dev/usb/misc/udbp.c   (props changed)
  projects/mesh11s/sys/dev/usb/misc/udbp.h   (props changed)
  projects/mesh11s/sys/dev/usb/misc/ufm.c   (props changed)
  projects/mesh11s/sys/dev/usb/net/if_aue.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/net/if_auereg.h   (props changed)
  projects/mesh11s/sys/dev/usb/net/if_axe.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/net/if_axereg.h   (props changed)
  projects/mesh11s/sys/dev/usb/net/if_cdce.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/net/if_cdcereg.h   (props changed)
  projects/mesh11s/sys/dev/usb/net/if_cue.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/net/if_cuereg.h   (props changed)
  projects/mesh11s/sys/dev/usb/net/if_kue.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/net/if_kuefw.h   (props changed)
  projects/mesh11s/sys/dev/usb/net/if_kuereg.h   (props changed)
  projects/mesh11s/sys/dev/usb/net/if_rue.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/net/if_ruereg.h   (props changed)
  projects/mesh11s/sys/dev/usb/net/if_udav.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/net/if_udavreg.h   (props changed)
  projects/mesh11s/sys/dev/usb/net/usb_ethernet.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/net/usb_ethernet.h   (contents, props changed)
  projects/mesh11s/sys/dev/usb/quirk/usb_quirk.c   (props changed)
  projects/mesh11s/sys/dev/usb/quirk/usb_quirk.h   (props changed)
  projects/mesh11s/sys/dev/usb/serial/u3g.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/serial/uark.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/ubsa.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/ubser.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/uchcom.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/ucycom.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/ufoma.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/uftdi.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/uftdi_reg.h   (props changed)
  projects/mesh11s/sys/dev/usb/serial/ugensa.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/uipaq.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/ulpt.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/umct.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/umodem.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/umoscom.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/uplcom.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/usb_serial.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/usb_serial.h   (props changed)
  projects/mesh11s/sys/dev/usb/serial/uslcom.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/uvisor.c   (props changed)
  projects/mesh11s/sys/dev/usb/serial/uvscom.c   (props changed)
  projects/mesh11s/sys/dev/usb/storage/rio500_usb.h   (props changed)
  projects/mesh11s/sys/dev/usb/storage/umass.c   (props changed)
  projects/mesh11s/sys/dev/usb/storage/urio.c   (props changed)
  projects/mesh11s/sys/dev/usb/storage/ustorage_fs.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/template/usb_template.c   (props changed)
  projects/mesh11s/sys/dev/usb/template/usb_template.h   (props changed)
  projects/mesh11s/sys/dev/usb/template/usb_template_cdce.c   (props changed)
  projects/mesh11s/sys/dev/usb/template/usb_template_msc.c   (props changed)
  projects/mesh11s/sys/dev/usb/template/usb_template_mtp.c   (props changed)
  projects/mesh11s/sys/dev/usb/ufm_ioctl.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_bus.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_busdma.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_busdma.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_cdc.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_compat_linux.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/usb_compat_linux.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_controller.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_core.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_core.h   (contents, props changed)
  projects/mesh11s/sys/dev/usb/usb_debug.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_debug.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_defs.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_dev.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_dev.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_device.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/usb_device.h   (contents, props changed)
  projects/mesh11s/sys/dev/usb/usb_dynamic.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_dynamic.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_endian.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_error.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_error.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_generic.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/usb_generic.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_handle_request.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_handle_request.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_hid.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_hid.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_hub.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/usb_hub.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_if.m   (props changed)
  projects/mesh11s/sys/dev/usb/usb_ioctl.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_lookup.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_lookup.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_mbuf.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_mbuf.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_mfunc.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_msctest.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_msctest.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_parse.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_parse.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_pci.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_process.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_process.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_request.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_request.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_revision.h   (contents, props changed)
  projects/mesh11s/sys/dev/usb/usb_transfer.c   (contents, props changed)
  projects/mesh11s/sys/dev/usb/usb_transfer.h   (props changed)
  projects/mesh11s/sys/dev/usb/usb_util.c   (props changed)
  projects/mesh11s/sys/dev/usb/usb_util.h   (props changed)
  projects/mesh11s/sys/dev/usb/usbdevs   (props changed)
  projects/mesh11s/sys/dev/usb/usbhid.h   (props changed)
  projects/mesh11s/sys/dev/usb/wlan/if_rum.c   (props changed)
  projects/mesh11s/sys/dev/usb/wlan/if_rumfw.h   (props changed)
  projects/mesh11s/sys/dev/usb/wlan/if_rumreg.h   (props changed)
  projects/mesh11s/sys/dev/usb/wlan/if_rumvar.h   (props changed)
  projects/mesh11s/sys/dev/usb/wlan/if_ural.c   (props changed)
  projects/mesh11s/sys/dev/usb/wlan/if_uralreg.h   (props changed)
  projects/mesh11s/sys/dev/usb/wlan/if_uralvar.h   (props changed)
  projects/mesh11s/sys/dev/usb/wlan/if_zyd.c   (props changed)
  projects/mesh11s/sys/dev/usb/wlan/if_zydfw.h   (props changed)
  projects/mesh11s/sys/dev/usb/wlan/if_zydreg.h   (props changed)
  projects/mesh11s/sys/dev/wpi/if_wpi.c
  projects/mesh11s/sys/dev/xen/netfront/   (props changed)
  projects/mesh11s/sys/dev/xen/xenpci/   (props changed)
  projects/mesh11s/sys/geom/vinum/geom_vinum.c
  projects/mesh11s/sys/geom/vinum/geom_vinum.h
  projects/mesh11s/sys/geom/vinum/geom_vinum_events.c
  projects/mesh11s/sys/geom/vinum/geom_vinum_plex.c
  projects/mesh11s/sys/geom/vinum/geom_vinum_raid5.c
  projects/mesh11s/sys/geom/vinum/geom_vinum_rm.c
  projects/mesh11s/sys/geom/vinum/geom_vinum_subr.c
  projects/mesh11s/sys/geom/vinum/geom_vinum_var.h
  projects/mesh11s/sys/i386/bios/apm.c
  projects/mesh11s/sys/i386/conf/DEFAULTS
  projects/mesh11s/sys/i386/conf/GENERIC
  projects/mesh11s/sys/i386/conf/NOTES
  projects/mesh11s/sys/i386/conf/PAE
  projects/mesh11s/sys/i386/conf/XBOX
  projects/mesh11s/sys/i386/conf/XEN
  projects/mesh11s/sys/i386/i386/identcpu.c
  projects/mesh11s/sys/i386/i386/local_apic.c
  projects/mesh11s/sys/i386/ibcs2/ibcs2_ioctl.c
  projects/mesh11s/sys/i386/ibcs2/ibcs2_isc_syscall.h
  projects/mesh11s/sys/i386/ibcs2/ibcs2_isc_sysent.c
  projects/mesh11s/sys/i386/ibcs2/ibcs2_proto.h
  projects/mesh11s/sys/i386/ibcs2/ibcs2_socksys.c
  projects/mesh11s/sys/i386/ibcs2/ibcs2_syscall.h
  projects/mesh11s/sys/i386/ibcs2/ibcs2_sysent.c
  projects/mesh11s/sys/i386/ibcs2/ibcs2_xenix.h
  projects/mesh11s/sys/i386/ibcs2/ibcs2_xenix_syscall.h
  projects/mesh11s/sys/i386/ibcs2/ibcs2_xenix_sysent.c
  projects/mesh11s/sys/i386/ibcs2/syscalls.master
  projects/mesh11s/sys/i386/include/clock.h
  projects/mesh11s/sys/i386/isa/clock.c
  projects/mesh11s/sys/i386/linux/linux.h
  projects/mesh11s/sys/i386/linux/linux_sysvec.c
  projects/mesh11s/sys/i386/xen/clock.c
  projects/mesh11s/sys/i386/xen/mp_machdep.c
  projects/mesh11s/sys/ia64/conf/DEFAULTS
  projects/mesh11s/sys/ia64/conf/NOTES
  projects/mesh11s/sys/isa/atrtc.c
  projects/mesh11s/sys/isa/rtc.h
  projects/mesh11s/sys/kern/init_main.c
  projects/mesh11s/sys/kern/kern_exit.c
  projects/mesh11s/sys/kern/kern_fork.c
  projects/mesh11s/sys/kern/kern_jail.c
  projects/mesh11s/sys/kern/kern_linker.c
  projects/mesh11s/sys/kern/kern_malloc.c
  projects/mesh11s/sys/kern/kern_mib.c
  projects/mesh11s/sys/kern/kern_osd.c
  projects/mesh11s/sys/kern/kern_prot.c
  projects/mesh11s/sys/kern/kern_vimage.c
  projects/mesh11s/sys/kern/subr_kdb.c
  projects/mesh11s/sys/kern/subr_pcpu.c
  projects/mesh11s/sys/kern/sys_socket.c
  projects/mesh11s/sys/kern/tty.c
  projects/mesh11s/sys/kern/tty_ttydisc.c
  projects/mesh11s/sys/kern/uipc_socket.c
  projects/mesh11s/sys/kern/uipc_syscalls.c
  projects/mesh11s/sys/kern/uipc_usrreq.c
  projects/mesh11s/sys/kern/vfs_export.c
  projects/mesh11s/sys/kern/vfs_vnops.c
  projects/mesh11s/sys/legacy/dev/ata/ata-usb.c   (props changed)
  projects/mesh11s/sys/legacy/dev/sound/usb/uaudio.c   (props changed)
  projects/mesh11s/sys/legacy/dev/sound/usb/uaudio.h   (props changed)
  projects/mesh11s/sys/legacy/dev/sound/usb/uaudio_pcm.c   (props changed)
  projects/mesh11s/sys/legacy/dev/sound/usb/uaudioreg.h   (props changed)
  projects/mesh11s/sys/legacy/dev/usb/   (props changed)
  projects/mesh11s/sys/legacy/dev/usb/ehci_ixp4xx.c   (props changed)
  projects/mesh11s/sys/mips/conf/ADM5120
  projects/mesh11s/sys/mips/conf/IDT
  projects/mesh11s/sys/mips/conf/MALTA
  projects/mesh11s/sys/mips/conf/QEMU
  projects/mesh11s/sys/mips/conf/SENTRY5
  projects/mesh11s/sys/modules/dtrace/dtnfsclient/   (props changed)
  projects/mesh11s/sys/modules/ip6_mroute_mod/   (props changed)
  projects/mesh11s/sys/modules/ipmi/ipmi_linux/   (props changed)
  projects/mesh11s/sys/modules/linux/Makefile
  projects/mesh11s/sys/modules/opensolaris/Makefile
  projects/mesh11s/sys/modules/svr4/Makefile
  projects/mesh11s/sys/modules/zfs/Makefile
  projects/mesh11s/sys/net/bpf.c
  projects/mesh11s/sys/net/if.c
  projects/mesh11s/sys/net/if_clone.c
  projects/mesh11s/sys/net/if_ethersubr.c
  projects/mesh11s/sys/net/if_var.h
  projects/mesh11s/sys/net/netisr.c
  projects/mesh11s/sys/net/rtsock.c
  projects/mesh11s/sys/net80211/ieee80211.h
  projects/mesh11s/sys/net80211/ieee80211_adhoc.c
  projects/mesh11s/sys/net80211/ieee80211_ddb.c
  projects/mesh11s/sys/net80211/ieee80211_freebsd.c
  projects/mesh11s/sys/net80211/ieee80211_ht.h
  projects/mesh11s/sys/net80211/ieee80211_node.h
  projects/mesh11s/sys/net80211/ieee80211_proto.c
  projects/mesh11s/sys/net80211/ieee80211_superg.c
  projects/mesh11s/sys/net80211/ieee80211_superg.h
  projects/mesh11s/sys/net80211/ieee80211_var.h
  projects/mesh11s/sys/netgraph/netgraph.h
  projects/mesh11s/sys/netgraph/ng_base.c
  projects/mesh11s/sys/netinet/if_ether.c
  projects/mesh11s/sys/netinet/igmp.c
  projects/mesh11s/sys/netinet/in_rmx.c
  projects/mesh11s/sys/netinet/in_var.h
  projects/mesh11s/sys/netinet/ip_fw2.c
  projects/mesh11s/sys/netinet/ip_input.c
  projects/mesh11s/sys/netinet/sctp_crc32.c
  projects/mesh11s/sys/netinet/sctp_os_bsd.h
  projects/mesh11s/sys/netinet/sctp_uio.h
  projects/mesh11s/sys/netinet/tcp_hostcache.c
  projects/mesh11s/sys/netinet6/in6_mcast.c
  projects/mesh11s/sys/netinet6/in6_rmx.c
  projects/mesh11s/sys/netinet6/ip6_mroute.c
  projects/mesh11s/sys/netinet6/ip6_output.c
  projects/mesh11s/sys/netinet6/mld6.c
  projects/mesh11s/sys/netinet6/nd6.c
  projects/mesh11s/sys/netinet6/nd6_nbr.c
  projects/mesh11s/sys/netinet6/route6.c
  projects/mesh11s/sys/netipsec/xform_tcp.c
  projects/mesh11s/sys/nfsclient/nfs_kdtrace.c
  projects/mesh11s/sys/nfsclient/nfs_krpc.c
  projects/mesh11s/sys/nfsclient/nfs_vnops.c
  projects/mesh11s/sys/nfsserver/nfs_srvsubs.c
  projects/mesh11s/sys/nlm/nlm_advlock.c
  projects/mesh11s/sys/nlm/nlm_prot_impl.c
  projects/mesh11s/sys/pc98/cbus/clock.c
  projects/mesh11s/sys/pc98/conf/DEFAULTS
  projects/mesh11s/sys/pc98/conf/NOTES
  projects/mesh11s/sys/powerpc/conf/GENERIC
  projects/mesh11s/sys/powerpc/conf/MPC85XX
  projects/mesh11s/sys/powerpc/conf/NOTES
  projects/mesh11s/sys/sparc64/conf/GENERIC
  projects/mesh11s/sys/sys/buf_ring.h
  projects/mesh11s/sys/sys/ioctl.h
  projects/mesh11s/sys/sys/ioctl_compat.h
  projects/mesh11s/sys/sys/jail.h
  projects/mesh11s/sys/sys/kernel.h
  projects/mesh11s/sys/sys/param.h
  projects/mesh11s/sys/sys/proc.h
  projects/mesh11s/sys/sys/sysctl.h
  projects/mesh11s/sys/sys/termios.h
  projects/mesh11s/sys/sys/ucred.h
  projects/mesh11s/sys/sys/vimage.h
  projects/mesh11s/sys/ufs/ufs/ufs_extern.h
  projects/mesh11s/sys/vm/vm_fault.c
  projects/mesh11s/sys/vm/vnode_pager.c
  projects/mesh11s/sys/xen/evtchn.h   (props changed)
  projects/mesh11s/sys/xen/hypervisor.h   (props changed)
  projects/mesh11s/sys/xen/xen_intr.h   (props changed)
  projects/mesh11s/tools/regression/lib/msun/test-conj.t   (props changed)
  projects/mesh11s/tools/regression/usr.bin/pkill/pgrep-_g.t   (props changed)
  projects/mesh11s/tools/regression/usr.bin/pkill/pgrep-_s.t   (props changed)
  projects/mesh11s/tools/regression/usr.bin/pkill/pkill-_g.t   (props changed)
  projects/mesh11s/tools/tools/ath/common/dumpregs.h   (props changed)
  projects/mesh11s/tools/tools/ath/common/dumpregs_5210.c   (props changed)
  projects/mesh11s/tools/tools/ath/common/dumpregs_5211.c   (props changed)
  projects/mesh11s/tools/tools/ath/common/dumpregs_5212.c   (props changed)
  projects/mesh11s/tools/tools/ath/common/dumpregs_5416.c   (props changed)
  projects/mesh11s/usr.bin/calendar/calendars/calendar.freebsd
  projects/mesh11s/usr.bin/csup/   (props changed)
  projects/mesh11s/usr.bin/file/Makefile
  projects/mesh11s/usr.bin/kdump/mkioctls
  projects/mesh11s/usr.bin/procstat/   (props changed)
  projects/mesh11s/usr.sbin/dumpcis/cardinfo.h   (props changed)
  projects/mesh11s/usr.sbin/dumpcis/cis.h   (props changed)
  projects/mesh11s/usr.sbin/freebsd-update/freebsd-update.8
  projects/mesh11s/usr.sbin/makefs/ffs/ffs_bswap.c   (props changed)
  projects/mesh11s/usr.sbin/makefs/ffs/ffs_subr.c   (props changed)
  projects/mesh11s/usr.sbin/makefs/ffs/ufs_bswap.h   (props changed)
  projects/mesh11s/usr.sbin/makefs/getid.c   (props changed)
  projects/mesh11s/usr.sbin/zic/   (props changed)

Modified: projects/mesh11s/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h
==============================================================================
--- projects/mesh11s/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h	Sun May 10 15:37:48 2009	(r191962)
@@ -418,6 +418,7 @@ typedef struct vsecattr {
 #define	VOP_FSYNC(vp, f, cr, ct)	fsync((vp)->v_fd)
 
 #define	VN_RELE(vp)	vn_close(vp, 0, NULL, NULL)
+#define	VN_RELE_ASYNC(vp, taskq)	vn_close(vp, 0, NULL, NULL)
 
 #define	vn_lock(vp, type)
 #define	VOP_UNLOCK(vp, type)

Modified: projects/mesh11s/cddl/lib/libzpool/Makefile
==============================================================================
--- projects/mesh11s/cddl/lib/libzpool/Makefile	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/cddl/lib/libzpool/Makefile	Sun May 10 15:37:48 2009	(r191962)
@@ -13,7 +13,7 @@
 # ATOMIC_SRCS
 .if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "ia64"
 .PATH: ${.CURDIR}/../../../sys/cddl/contrib/opensolaris/common/atomic/${MACHINE_ARCH}
-ATOMIC_SRCS=	atomic.S
+ATOMIC_SRCS=	opensolaris_atomic.S
 .else
 .PATH: ${.CURDIR}/../../../sys/cddl/compat/opensolaris/kern
 ATOMIC_SRCS=	opensolaris_atomic.c

Modified: projects/mesh11s/contrib/file/ChangeLog
==============================================================================
--- projects/mesh11s/contrib/file/ChangeLog	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/ChangeLog	Sun May 10 15:37:48 2009	(r191962)
@@ -1,9 +1,105 @@
+2008-12-12 15:50  Christos Zoulas <christos@zoulas.com>
+
+	* fix initial offset calculation for non 4K sector files
+
+	* add loop limits to avoid DoS attacks by constructing
+	  looping sector references.
+
+2008-12-03 13:05  Christos Zoulas <christos@zoulas.com>
+
+	* fix memory botches on cdf file parsing.
+
+	* exit with non-zero value for any error, not just for the last
+	  file processed.
+
+2008-11-09 20:42  Charles Longeau <chl@tuxfamily.org>
+
+	* Replace all str{cpy,cat} functions with strl{cpy,cat}
+	* Ensure that strl{cpy,cat} are included in libmagic,
+	  as needed.
+
+2008-11-06 18:18  Christos Zoulas <christos@zoulas.com>
+
+	* Handle ID3 format files.
+
+2008-11-06 23:00  Reuben Thomas <rrt@sc3d.org>
+
+	* Fix --mime, --mime-type and --mime-encoding under new scheme.
+
+	* Rename "ascii" to "text" and add "encoding" test.
+
+	* Return a precise ("utf-16le" or "utf-16be") MIME charset for
+	  UTF-16.
+
+	* Fix error in comment caused by automatic indentation adding
+	  words!
+
+2008-11-06 10:35  Christos Zoulas <christos@astron.com>
+
+	* use memchr instead of strchr because the string
+	  might not be NUL terminated (Scott MacVicar)
+
+2008-11-03 07:31  Reuben Thomas <rrt@sc3d.org>
+
+	* Fix a printf with a non-literal format string.
+
+	* Fix formatting and punctuation of help for "--apple".
+
+2008-10-30 11:00  Reuben Thomas <rrt@sc3d.org>
+
+	* Correct words counts in comments of struct magic.
+
+	* Fix handle_annotation to allow both Apple and MIME types to be
+	  printed, and to return correct code if MIME type is
+	  printed (1, not 0) or if there's an error (-1 not 1).
+
+	* Fix output of charset for MIME type (precede with semi-colon;
+	  fixes Debian bug #501460).
+
+	* Fix potential attacks via conversion specifications in magic
+	  strings.
+
+	* Add a FIXME for Debian bug #488562 (magic files should be
+	  read in a defined order, by sorting the names).
+
+2008-10-18 16:45  Christos Zoulas <christos@astron.com>
+
+	* Added APPLE file creator/type
+
+2008-10-12 10:20  Christos Zoulas <christos@astron.com>
+
+	* Added CDF parsing
+
+2008-10-09 16:40  Christos Zoulas <christos@astron.com>
+
+	* filesystem and msdos patches (Joerg Jenderek)
+
+2008-10-09 13:20  Christos Zoulas <christos@astron.com>
+
+	* correct --exclude documentation issues: remove troff and fortran
+	  and rename "token" to "tokens". (Randy McMurchy)
+
+2008-10-01 10:30  Christos Zoulas <christos@astron.com>
+
+	* Read ~/.magic in addition to the default magic file not instead
+	  of, as documented in the man page.
+
+2008-09-10 21:30  Reuben Thomas  <rrt@sc3d.org>
+
+	* Comment out graphviz patterns, as they match too many files.
+
 2008-08-30 12:54  Christos Zoulas <christos@astron.com>
 
 	* Don't eat trailing \n in magic enties.
 
 	* Cast defines to allow compilation using a c++ compiler.
 
+2008-08-25 23:56  Reuben Thomas  <rrt@sc3d.org>
+
+	* Add text/x-lua MIME type for Lua scripts.
+
+	* Escape { in regex in graphviz patterns.
+
 2008-07-26 00:59  Reuben Thomas  <rrt@sc3d.org>
 
 	* Add MIME types for special files.
@@ -55,22 +151,22 @@
 
 2008-05-06 00:13  Robert Byrnes  <byrnes@wildpumpkin.net>
 
-        * src/Makefile.am:
+	* src/Makefile.am:
 	  Ensure that getopt_long and [v]asprintf are included in libmagic,
 	  as needed.
 
 	  Remove unnecessary EXTRA_DIST.
 
-        * src/Makefile.in:
+	* src/Makefile.in:
 	  Rerun automake.
 
-        * src/vasprintf.c (dispatch):
+	* src/vasprintf.c (dispatch):
 	  Fix variable precision bug: be sure to step past '*'.
 
-        * src/vasprintf.c (core):
+	* src/vasprintf.c (core):
 	  Remove unreachable code.
 
-        * src/apprentice.c (set_test_type):
+	* src/apprentice.c (set_test_type):
 	  Add cast to avoid compiler warning.
 
 2008-04-22 23:45  Christos Zoulas  <christos@astron.com>
@@ -81,12 +177,12 @@
 
 2008-04-04 11:00  Christos Zoulas  <christos@astron.com>
 
-        * >= <= is not supported, so fix the magic and warn about it.
+	* >= <= is not supported, so fix the magic and warn about it.
 	  reported by: Thien-Thi Nguyen <ttn@gnuvola.org>
 
 2008-03-27 16:16  Robert Byrnes  <byrnes@wildpumpkin.net>
 
-        * src/readelf.c (donote):
+	* src/readelf.c (donote):
 	  ELF core file command name/line bug fixes and enhancements:
 
 	  Try larger offsets first to avoid false matches
@@ -112,7 +208,7 @@
 	* Clarify UTF-8 BOM message (Reuben Thomas)
 
 	* Add HTML comment to token list in names.h
-	
+
 2007-02-04 15:50 Christos Zoulas <christos@astron.com>
 
 	* Debian fixes (Reuben Thomas)
@@ -152,7 +248,7 @@
 
 2007-10-28 20:48 Christos Zoulas <christos@astron.com>
 
- 	* float and double magic support (Behan Webster) 
+ 	* float and double magic support (Behan Webster)
 
 2007-10-28 20:48 Christos Zoulas <christos@astron.com>
 
@@ -199,7 +295,7 @@
 	  be easily parsed:
 	      mimetype [charset=character-set] [encoding=encoding-mime-type]
 
-	  Remove spurious extra text from some MIME type printouts 
+	  Remove spurious extra text from some MIME type printouts
 	  (mostly in is_tar).
 
 	  Fix one case where -i produced nothing at all (for a 1-byte file,
@@ -229,7 +325,7 @@
 2007-03-15 10:51 Christos Zoulas <christos@astron.com>
 
 	* fix fortran and nroff reversed tests (Dmitry V. Levin)
-	
+
 	* fix exclude option (Dmitry V. Levin)
 
 2007-02-08 17:30 Christos Zoulas <christos@astron.com>
@@ -248,7 +344,7 @@
 	* Add exclude flag.
 
 2007-01-18 05:29 Anon Ymous <do@not.spam.me>
-	
+
 	* Move the "type" detection code from parse() into its own table
 	  driven routine.  This avoids maintaining multiple lists in
 	  file.h.
@@ -256,7 +352,7 @@
 	* Add an optional conditional field (ust before the type field).
 	  This code is wrapped in "#ifdef ENABLE_CONDITIONALS" as it is
 	  likely to go away.
-	
+
 2007-01-16 23:24 Anon Ymous <do@not.spam.me>
 
 	* Fix an initialization bug in check_mem().
@@ -327,7 +423,7 @@
 2006-12-08 16:32 Christos Zoulas <christos@astron.com>
 
 	* store and print the line number of the magic
-	  entry for debugging.         
+	  entry for debugging.
 
 	* if the magic entry did not print anything,
 	  don't treat it as a match
@@ -342,7 +438,7 @@
 	  file_softmagic.
 
 2006-11-25 13:35 Christos Zoulas <christos@astron.com>
-	
+
 	* Don't store the current offset in the magic
 	  struct, because it needs to be restored and
 	  it was not done properly all the time. Bug
@@ -432,7 +528,7 @@
 	* Look for note sections in non executables.
 
 2005-09-20 13:33 Christos Zoulas <christos@astron.com>
-	
+
 	* Don't print SVR4 Style in core files multiple times
 	    (Radek Vokál)
 
@@ -443,9 +539,9 @@
 2005-08-18 09:53 Christos Zoulas <christos@astron.com>
 
 	* Remove erroreous mention of /etc/magic in the file man page
-	  This is gentoo bug 101639. (Mike Frysinger) 
+	  This is gentoo bug 101639. (Mike Frysinger)
 
-	* Cross-compile support and detection (Mike Frysinger) 
+	* Cross-compile support and detection (Mike Frysinger)
 
 2005-08-12 10:17 Christos Zoulas <christos@astron.com>
 
@@ -477,20 +573,20 @@
 	* Avoid NULL pointer dereference in time conversion.
 
 2005-03-06 00:00  Joerg Walter <jwalt@mail.garni.ch>
-	
+
 	* Add indirect magic offset support, and search mode.
 
 2005-01-12 00:00  Stepan Kasal  <kasal@ucw.cz>
 
-        * src/ascmagic.c (file_ascmagic): Fix three bugs about text files:
-          If a CRLF text file happens to have CR at offset HOWMANY - 1
-          (currently 0xffff), it should not be counted as CR line
-          terminator.
-          If a line has length exactly MAXLINELEN, it should not yet be
-          treated as a ``very long line'', as MAXLINELEN is ``longest sane
-          line length''.
-          With CRLF, the line length was not computed correctly, and even
-          lines of length MAXLINELEN - 1 were treated as ``very long''.
+	* src/ascmagic.c (file_ascmagic): Fix three bugs about text files:
+	  If a CRLF text file happens to have CR at offset HOWMANY - 1
+	  (currently 0xffff), it should not be counted as CR line
+	  terminator.
+	  If a line has length exactly MAXLINELEN, it should not yet be
+	  treated as a ``very long line'', as MAXLINELEN is ``longest sane
+	  line length''.
+	  With CRLF, the line length was not computed correctly, and even
+	  lines of length MAXLINELEN - 1 were treated as ``very long''.
 
 2004-12-07 14:15  Christos Zoulas  <christos@astron.com>
 
@@ -525,12 +621,12 @@
 
 	* Remove 3rd and 4th copyright clause; approved by Ian Darwin.
 
-	* Fix small memory leaks; caught by: Tamas Sarlos 
+	* Fix small memory leaks; caught by: Tamas Sarlos
 	    <stamas@csillag.ilab.sztaki.hu>
 
 2004-07-24 16:33  Christos Zoulas  <christos@astron.com>
 
-	* magic.mime update Danny Milosavljevic <danny.milo@gmx.net> 
+	* magic.mime update Danny Milosavljevic <danny.milo@gmx.net>
 
 	* FreeBSD version update Oliver Eikemeier <eikemeier@fillmore-labs.com>
 

Modified: projects/mesh11s/contrib/file/Magdir/animation
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/animation	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/animation	Sun May 10 15:37:48 2009	(r191962)
@@ -325,6 +325,7 @@
 
 # MP2, M1A
 0       beshort&0xFFFE  0xFFFC         MPEG ADTS, layer II, v1
+!:mime	audio/mpeg
 # rates
 >2      byte&0xF0       0x10           \b,  32 kbps
 >2      byte&0xF0       0x20           \b,  48 kbps
@@ -399,6 +400,7 @@
 
 # MP3, M2A
 0       beshort&0xFFFE  0xFFF2         MPEG ADTS, layer III, v2
+!:mime	audio/mpeg
 # rate
 >2      byte&0xF0       0x10           \b,   8 kbps
 >2      byte&0xF0       0x20           \b,  16 kbps
@@ -790,3 +792,24 @@
 0       belong             0x00000001
 >4      byte&0x1F	   0x07
 !:mime	video/h264
+
+# Type: Bink Video
+# URL:  http://wiki.multimedia.cx/index.php?title=3DBink_Container
+# From: <hoehle@users.sourceforge.net>  2008-07-18
+0	string		BIK	Bink Video
+>3	regex		=[a-z]	rev.%s
+#>4	ulelong		x	size %d
+>20	ulelong		x	\b, %d
+>24	ulelong		x	\bx%d
+>8	ulelong		x	\b, %d frames
+>32	ulelong		x	at rate %d/
+>28	ulelong		>1	\b%d
+>40	ulelong		=0	\b, no audio
+>40	ulelong		!0	\b, %d audio track
+>>40	ulelong		!1	\bs
+# follow properties of the first audio track only
+>>48	uleshort	x	%dHz
+>>51	byte&0x20	0	mono
+>>51	byte&0x20	!0	stereo
+#>>51	byte&0x10	0	FFT
+#>>51	byte&0x10	!0	DCT

Modified: projects/mesh11s/contrib/file/Magdir/audio
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/audio	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/audio	Sun May 10 15:37:48 2009	(r191962)
@@ -286,43 +286,14 @@
 # SGI SoundTrack <mpruett@sgi.com>
 0	string		_SGI_SoundTrack		SGI SoundTrack project file
 # ID3 version 2 tags <waschk@informatik.uni-rostock.de>
-0	string		ID3	Audio file with ID3 version 2.
-# ??? Normally such a file is an MP3 file, but this will give false positives
-!:mime	audio/mpeg
->3	ubyte	<0xff	\b%d
-#>4	ubyte	<0xff	\b%d tag
->2584	string	fLaC		\b, FLAC encoding
->>2588	byte&0x7f		>0		\b, unknown version
->>2588	byte&0x7f		0		\b
-# some common bits/sample values
->>>2600	beshort&0x1f0		0x030		\b, 4 bit
->>>2600	beshort&0x1f0		0x050		\b, 6 bit
->>>2600	beshort&0x1f0		0x070		\b, 8 bit
->>>2600	beshort&0x1f0		0x0b0		\b, 12 bit
->>>2600	beshort&0x1f0		0x0f0		\b, 16 bit
->>>2600	beshort&0x1f0		0x170		\b, 24 bit
->>>2600	byte&0xe		0x0		\b, mono
->>>2600	byte&0xe		0x2		\b, stereo
->>>2600	byte&0xe		0x4		\b, 3 channels
->>>2600	byte&0xe		0x6		\b, 4 channels
->>>2600	byte&0xe		0x8		\b, 5 channels
->>>2600	byte&0xe		0xa		\b, 6 channels
->>>2600	byte&0xe		0xc		\b, 7 channels
->>>2600	byte&0xe		0xe		\b, 8 channels
-# some common sample rates
->>>2597	belong&0xfffff0		0x0ac440	\b, 44.1 kHz
->>>2597	belong&0xfffff0		0x0bb800	\b, 48 kHz
->>>2597	belong&0xfffff0		0x07d000	\b, 32 kHz
->>>2597	belong&0xfffff0		0x056220	\b, 22.05 kHz
->>>2597	belong&0xfffff0		0x05dc00	\b, 24 kHz
->>>2597	belong&0xfffff0		0x03e800	\b, 16 kHz
->>>2597	belong&0xfffff0		0x02b110	\b, 11.025 kHz
->>>2597	belong&0xfffff0		0x02ee00	\b, 12 kHz
->>>2597	belong&0xfffff0		0x01f400	\b, 8 kHz
->>>2597	belong&0xfffff0		0x177000	\b, 96 kHz
->>>2597	belong&0xfffff0		0x0fa000	\b, 64 kHz
->>>2601	byte&0xf		>0		\b, >4G samples
->2584	string	!fLaC		\b, MP3 encoding
+0	string		ID3	Audio file with ID3 version 2
+>3	byte		x	\b.%d
+>4	byte		x	\b.%d
+>>5	byte		&0x80	\b, unsynchronized frames
+>>5	byte		&0x40	\b, extended header
+>>5	byte		&0x20	\b, experimental
+>>5	byte		&0x10	\b, footer present
+>(6.I)	indirect	x	\b, contains: 
 
 # NSF (NES sound file) magic
 0	string		NESM\x1a	NES Sound File

Modified: projects/mesh11s/contrib/file/Magdir/cafebabe
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/cafebabe	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/cafebabe	Sun May 10 15:37:48 2009	(r191962)
@@ -12,16 +12,18 @@
 # (and use as a hack). Let's not use 18, because the Mach-O people
 # might add another one or two as time goes by...
 #
-0	beshort		0xcafe
->2	beshort         0xbabe
+0	belong		0xcafebabe
 !:mime	application/x-java-applet
->>2	belong		>30		compiled Java class data,
->>>6	beshort		x	        version %d.
->>>4	beshort		x       	\b%d
->>4	belong		1		Mach-O fat file with 1 architecture
->>4	belong		>1
->>>4	belong		<20		Mach-O fat file with %ld architectures
->2	beshort		0xd00d		JAR compressed with pack200,
+>4	belong		>30		compiled Java class data,
+>>6	beshort		x	        version %d.
+>>4	beshort		x       	\b%d
+
+0	belong		0xcafebabe
+>4	belong		1		Mach-O fat file with 1 architecture
+>4	belong		>1
+>>4	belong		<20		Mach-O fat file with %ld architectures
+
+0	belong		0xcafed00d	JAR compressed with pack200,
 >>5	byte		x		version %d.
 >>4	byte		x		\b%d
 !:mime	application/x-java-pack200

Modified: projects/mesh11s/contrib/file/Magdir/compress
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/compress	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/compress	Sun May 10 15:37:48 2009	(r191962)
@@ -11,6 +11,7 @@
 # standard unix compress
 0	string		\037\235	compress'd data
 !:mime	application/x-compress
+!:apple	LZIVZIVU
 >2	byte&0x80	>0		block compressed
 >2	byte&0x1f	x		%d bits
 
@@ -76,6 +77,11 @@
 !:mime	application/x-bzip2
 >3	byte		>47		\b, block size = %c00k
 
+# lzip
+0	string		LZIP		lzip compressed data
+!:mime application/x-lzip
+>4	byte		x		\b, version: %d
+
 # squeeze and crunch
 # Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
 0	beshort		0x76FF		squeezed data,

Modified: projects/mesh11s/contrib/file/Magdir/elf
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/elf	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/elf	Sun May 10 15:37:48 2009	(r191962)
@@ -143,11 +143,13 @@
 >>18	leshort		91		picoJava,
 >>18	leshort		92		OpenRISC,
 >>18	leshort		93		ARC Cores Tangent-A5,
->>18	leshort		0x3426		OpenRISC (obsolete),
->>18	leshort		0x8472		OpenRISC (obsolete),
 >>18	leshort		94		Tensilica Xtensa,
 >>18	leshort		97		NatSemi 32k,
 >>18	leshort		106		Analog Devices Blackfin,
+>>18	leshort		113		Altera Nios II,
+>>18	leshort		0xae		META,
+>>18	leshort		0x3426		OpenRISC (obsolete),
+>>18	leshort		0x8472		OpenRISC (obsolete),
 >>18	leshort		0x9026		Alpha (unofficial),
 >>20	lelong		0		invalid version
 >>20	lelong		1		version 1

Modified: projects/mesh11s/contrib/file/Magdir/epoc
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/epoc	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/epoc	Sun May 10 15:37:48 2009	(r191962)
@@ -1,10 +1,11 @@
-
 #------------------------------------------------------------------------------
-# Epoc 32 : file(1) magic for Epoc Documents [psion/osaris
+# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1]
 # Stefan Praszalowicz (hpicollo@worldnet.fr)
-#0	lelong		0x10000037	Epoc32
+# Useful information for improving this file can be found at:
+# http://software.frodo.looijaard.name/psiconv/formats/Index.html
+0	lelong		0x10000037
 >4	lelong		0x1000006D
->>8	lelong		0x1000007F	Word
->>8	lelong		0x10000088	Sheet
->>8	lelong		0x1000007D	Sketch
->>8	lelong		0x10000085	TextEd
+>>8	lelong		0x1000007F	Psion Word
+>>8	lelong		0x10000088	Psion Sheet
+>>8	lelong		0x1000007D	Psion Sketch
+>>8	lelong		0x10000085	Psion TextEd

Modified: projects/mesh11s/contrib/file/Magdir/filesystems
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/filesystems	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/filesystems	Sun May 10 15:37:48 2009	(r191962)
@@ -104,9 +104,32 @@
 >>>346	string	des\ Betriebssystems	
 >>>>366	string	Betriebssystem\ nicht\ vorhanden	\b, Microsoft Windows XP MBR (german)
 >>>>>0x1B8	ulelong	>0				\b, Serial 0x%-.4x
->0x145	string	Default:\ F				\b, FREE-DOS MBR
+#>0x145	string	Default:\ F				\b, FREE-DOS MBR
+#>0x14B	string	Default:\ F				\b, FREE-DOS 1.0 MBR
+>0x145	search/7	Default:\ F			\b, FREE-DOS MBR
+#>>313		string	F0\ .\ .\ .			
+#>>>322		string	disk\ 1				
+#>>>>382	string	FAT3				
 >64	string	no\ active\ partition\ found	
 >>96	string	read\ error\ while\ reading\ drive	\b, FREE-DOS Beta 0.9 MBR
+# Ranish Partition Manager http://www.ranish.com/part/
+>387	search/4	\0\ Error!\r			
+>>378	search/7	Virus! 				
+>>>397	search/4	Booting\ 			
+>>>>408	search/4	HD1/\0	 			\b, Ranish MBR (
+>>>>>416	string	Writing\ changes...		\b2.37
+>>>>>>438	ubyte		x			\b,0x%x dots
+>>>>>>440	ubyte		>0			\b,virus check
+>>>>>>441	ubyte		>0			\b,partition %c
+#2.38,2.42,2.44
+>>>>>416	string	!Writing\ changes...		\b
+>>>>>>418	ubyte	1				\bvirus check,
+>>>>>>419	ubyte	x				\b0x%x seconds
+>>>>>>420	ubyte&0x0F	>0			\b,partition
+>>>>>>>420	ubyte&0x0F	<5			\b %x
+>>>>>>>420	ubyte&0x0F	0Xf			\b ask
+>>>>>420	ubyte		x			\b)
+#
 >271	string	Operating\ system\ loading 		
 >>296	string	error\r					\b, SYSLINUX MBR (2.10)
 # http://www.acronis.de/
@@ -124,18 +147,20 @@
 >0x40	string	SBML				
 # label with 11 characters of FAT 12 bit filesystem
 >>43	string	SMART\ BTMGR			
->>>430	string	SBMK\ Bad!\r			
->>>>3	string	SBM				\b, Smart Boot Manager
->>>>>6	string	>\0                             \b, version %s
+>>>430	string	SBMK\ Bad!\r			\b, Smart Boot Manager
+# OEM-ID not always "SBM"
+#>>>>3	strings	SBM				
+>>>>6	string	>\0                             \b, version %s
 >382	string	XOSLLOADXCF			\b, eXtended Operating System Loader
 >6	string	LILO				\b, LInux i386 boot LOader
 >>120	string	LILO				\b, version 22.3.4 SuSe
 >>172	string	LILO				\b, version 22.5.8 Debian
-# updated by Joerg Jenderek
+# updated by Joerg Jenderek at Oct 2008
 # variables according to grub-0.97/stage1/stage1.S or
 # http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
 # usual values are marked with comments to get only informations of strange GRUB loaders
->0		ulelong		0x009048EB	
+>342		search/60	\0Geom\0	
+#>0		ulelong		x		%x=0x009048EB ,	0x2a9048EB  0
 >>0x41		ubyte		<2		
 >>>0x3E		ubyte		>2		\b; GRand Unified Bootloader
 # 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90 
@@ -178,15 +203,14 @@
 >3	string	BCDL				
 >>498	string	BCDL\ \ \ \ BIN			\b, Bootable CD Loader (1.50Z)
 # mbr partion table entries
-# OEM-ID not Microsoft,SYSLINUX,or MTOOLs
+# OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs
 >3			string		!MS
 >>3			string		!SYSLINUX
 >>>3			string		!MTOOL
+>>>>3			string		!NEWLDR
+>>>>>5			string		!DOS
 # not FAT (32 bit)
->>>>82			string		!FAT32	
-#not IO.SYS
->>>>>472		string		!IO\ \ \ \ \ \ SYS
->>>>>>480		string		!IO\ \ \ \ \ \ SYS
+>>>>>>82		string		!FAT32
 #not Linux kernel
 >>>>>>>514		string		!HdrS
 #not BeOS
@@ -272,6 +296,11 @@
 >>>>>>>>>(1.b+11)	ubyte	0xb			
 >>>>>>>>>>(1.b+12)	ubyte	0x56			
 >>>>>>>>>>(1.b+13)	ubyte	0xb4			\b, mkdosfs boot message display
+>214	string	Please\ try\ to\ install\ FreeDOS\ 	\b, DOS Emulator boot message display
+#>>244	string	from\ dosemu-freedos-*-bin.tgz\r	
+#>>>170	string	Sorry,\ could\ not\ load\ an\ 		
+#>>>>195	string	operating\ system.\r\n		
+#
 >103	string	This\ is\ not\ a\ bootable\ disk.\ 	
 >>132	string	Please\ insert\ a\ bootable\ 		
 >>>157	string	floppy\ and\r\n				
@@ -374,12 +403,22 @@
 >430	string	Datentr\204ger\ entfernen\xFF\r\n	
 >>454	string	Medienfehler\xFF\r\n			
 >>>469	string	Neustart:\ Taste\ dr\201cken\r		\b, Microsoft Windows XP Bootloader (4.german)
->>>>368		ubyte&0xDF	>0			
->>>>>368	string		x 			%-.5s
->>>>>>373	ubyte&0xDF	>0			
->>>>>>>373	string		x 			\b%-.3s
->>>>>376	ubyte&0xDF	>0			
->>>>>>376	string		x 			\b.%-.3s
+>>>>379		string		\0			
+>>>>>368	ubyte&0xDF	>0			
+>>>>>>368	string		x 			%-.5s
+>>>>>>>373	ubyte&0xDF	>0			
+>>>>>>>>373	string		x 			\b%-.3s
+>>>>>>376	ubyte&0xDF	>0			
+>>>>>>>376	string		x 			\b.%-.3s
+# variant
+>>>>417		ubyte&0xDF	>0			
+>>>>>417	string		x			%-.5s
+>>>>>>422	ubyte&0xDF	>0			
+>>>>>>>422	string		x 			\b%-.3s
+>>>>>425	ubyte&0xDF	>0			
+>>>>>>425	string		>\ 			\b.%-.3s
+#
+
 #>3	string	NTFS\ \ \ \ 				
 >389	string	Fehler\ beim\ Lesen\ 
 >>407	string	des\ Datentr\204gers
@@ -567,12 +606,27 @@
 >>>489	string	Any\ key\ to\ retry			\b, DR-DOS Bootloader
 >>471	string	Cannot\ load\ DOS\ 			
 >>487	string	press\ key\ to\ retry			\b, Open-DOS Bootloader
+#??
 >444	string	KERNEL\ \ SYS					
 >>314	string	BOOT\ error!				\b, FREE-DOS Bootloader
 >499	string	KERNEL\ \ SYS				
 >>305	string	BOOT\ err!\0				\b, Free-DOS Bootloader
 >449	string	KERNEL\ \ SYS				
 >>319	string	BOOT\ error!				\b, FREE-DOS 0.5 Bootloader
+#
+>449	string	Loading\ FreeDOS			
+>>0x1AF		ulelong		>0			\b, FREE-DOS 0.95,1.0 Bootloader
+>>>497		ubyte&0xDF	>0			
+>>>>497		string		x 			\b %-.6s
+>>>>>503	ubyte&0xDF	>0			
+>>>>>>503	string		x 			\b%-.1s
+>>>>>>>504	ubyte&0xDF	>0			
+>>>>>>>>504	string		x 			\b%-.1s
+>>>>505		ubyte&0xDF	>0			
+>>>>>505	string		x 			\b.%-.3s
+#
+>331	string	Error!.0				\b, FREE-DOS 1.0 bootloader
+#
 >125	string	Loading\ FreeDOS...\r			
 >>311	string	BOOT\ error!\r				\b, FREE-DOS bootloader
 >>>441		ubyte&0xDF	>0			
@@ -706,13 +760,7 @@
 #it also hangs with another message ("NF").
 >>>>>492		string		RENF		\b, FAT (12 bit)
 >>>>>495		string		RENF		\b, FAT (16 bit)
-# added by Joerg Jenderek
-# http://syslinux.zytor.com/iso.php
-0	ulelong	0x7c40eafa		isolinux Loader
-# http://syslinux.zytor.com/pxe.php
-0	ulelong	0x007c05ea		pxelinux Loader
-0	ulelong	0x60669c66		pxelinux Loader
-# loader end
+# x86 bootloader end
 # updated by Joerg Jenderek at Sep 2007
 >3	ubyte	0			
 #no active flag
@@ -732,6 +780,7 @@
 # older drives may use Near JuMP instruction E9 xx xx
 >0		lelong&0x009000EB	0x009000EB 
 >0		lelong&0x000000E9	0x000000E9 
+# minimal short forward jump found 03cx??
 # maximal short forward jump is 07fx
 >1		ubyte			<0xff	\b, code offset 0x%x
 # mtools-3.9.8/msdos.h
@@ -740,91 +789,92 @@
 >>11		uleshort&0x000f	x		
 >>>11		uleshort	<32769		
 >>>>11		uleshort	>31		
->>>>>3		string		>\0		\b, OEM-ID "%8.8s"
+>>>>>21		ubyte&0xf0	0xF0		
+>>>>>>3		string		>\0		\b, OEM-ID "%8.8s"
 #http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC
->>>>>>8		string		IHC		\b cached by Windows 9M
->>>>>11		uleshort	>512		\b, Bytes/sector %u
-#>>>>>11	uleshort	=512		\b, Bytes/sector %u=512 (usual)
->>>>>11		uleshort	<512		\b, Bytes/sector %u
->>>>>13		ubyte		>1		\b, sectors/cluster %u
-#>>>>>13	ubyte		=1		\b, sectors/cluster %u (usual on Floppies)
->>>>>14		uleshort	>32		\b, reserved sectors %u
-#>>>>>14	uleshort	=32		\b, reserved sectors %u (usual Fat32)
-#>>>>>14	uleshort	>1		\b, reserved sectors %u
-#>>>>>14	uleshort	=1		\b, reserved sectors %u (usual FAT12,FAT16)
->>>>>14		uleshort	<1		\b, reserved sectors %u
->>>>>16		ubyte		>2		\b, FATs %u
-#>>>>>16	ubyte		=2		\b, FATs %u (usual)
->>>>>16		ubyte		=1		\b, FAT  %u
->>>>>16		ubyte		>0
->>>>>17		uleshort	>0		\b, root entries %u
-#>>>>>17	uleshort	=0		\b, root entries %u=0 (usual Fat32)
->>>>>19		uleshort	>0		\b, sectors %u (volumes <=32 MB) 
-#>>>>>19	uleshort	=0		\b, sectors %u=0 (usual Fat32)
->>>>>21		ubyte		>0xF0		\b, Media descriptor 0x%x
-#>>>>>21	ubyte		=0xF0		\b, Media descriptor 0x%x (usual floppy)
->>>>>21		ubyte		<0xF0		\b, Media descriptor 0x%x
->>>>>22		uleshort	>0		\b, sectors/FAT %u
-#>>>>>22	uleshort	=0		\b, sectors/FAT %u=0 (usual Fat32)
->>>>>26		ubyte		>2		\b, heads %u
-#>>>>>26	ubyte		=2		\b, heads %u (usual floppy)
->>>>>26		ubyte		=1		\b, heads %u
+>>>>>>>8	string		IHC		\b cached by Windows 9M
+>>>>>>11	uleshort	>512		\b, Bytes/sector %u
+#>>>>>>11	uleshort	=512		\b, Bytes/sector %u=512 (usual)
+>>>>>>11	uleshort	<512		\b, Bytes/sector %u
+>>>>>>13	ubyte		>1		\b, sectors/cluster %u
+#>>>>>>13	ubyte		=1		\b, sectors/cluster %u (usual on Floppies)
+>>>>>>14	uleshort	>32		\b, reserved sectors %u
+#>>>>>>14	uleshort	=32		\b, reserved sectors %u (usual Fat32)
+#>>>>>>14	uleshort	>1		\b, reserved sectors %u
+#>>>>>>14	uleshort	=1		\b, reserved sectors %u (usual FAT12,FAT16)
+>>>>>>14	uleshort	<1		\b, reserved sectors %u
+>>>>>>16	ubyte		>2		\b, FATs %u
+#>>>>>>16	ubyte		=2		\b, FATs %u (usual)
+>>>>>>16	ubyte		=1		\b, FAT  %u
+>>>>>>16	ubyte		>0
+>>>>>>17	uleshort	>0		\b, root entries %u
+#>>>>>>17	uleshort	=0		\b, root entries %u=0 (usual Fat32)
+>>>>>>19	uleshort	>0		\b, sectors %u (volumes <=32 MB) 
+#>>>>>>19	uleshort	=0		\b, sectors %u=0 (usual Fat32)
+>>>>>>21	ubyte		>0xF0		\b, Media descriptor 0x%x
+#>>>>>>21	ubyte		=0xF0		\b, Media descriptor 0x%x (usual floppy)
+>>>>>>21	ubyte		<0xF0		\b, Media descriptor 0x%x
+>>>>>>22	uleshort	>0		\b, sectors/FAT %u
+#>>>>>>22	uleshort	=0		\b, sectors/FAT %u=0 (usual Fat32)
+>>>>>>26	ubyte		>2		\b, heads %u
+#>>>>>>26	ubyte		=2		\b, heads %u (usual floppy)
+>>>>>>26	ubyte		=1		\b, heads %u
 #skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk
->>>>>38		ubyte		!0x70		
->>>>>>28	ulelong		>0		\b, hidden sectors %u
-#>>>>>>28	ulelong		=0		\b, hidden sectors %u (usual floppy)
->>>>>>32	ulelong		>0		\b, sectors %u (volumes > 32 MB) 
-#>>>>>>32	ulelong		=0		\b, sectors %u (volumes > 32 MB)
+>>>>>>38	ubyte		!0x70		
+>>>>>>>28	ulelong		>0		\b, hidden sectors %u
+#>>>>>>>28	ulelong		=0		\b, hidden sectors %u (usual floppy)
+>>>>>>>32	ulelong		>0		\b, sectors %u (volumes > 32 MB) 
+#>>>>>>>32	ulelong		=0		\b, sectors %u (volumes > 32 MB)
 # FAT<32 specific 
->>>>>82		string		!FAT32
-#>>>>>>36	ubyte		0x80		\b, physical drive 0x%x=0x80 (usual harddisk)
-#>>>>>>36	ubyte		0		\b, physical drive 0x%x=0 (usual floppy)
->>>>>>36	ubyte		!0x80		
->>>>>>>36	ubyte		!0		\b, physical drive 0x%x
->>>>>>37	ubyte		>0		\b, reserved 0x%x
-#>>>>>>37	ubyte		=0		\b, reserved 0x%x
->>>>>>38	ubyte		>0x29		\b, dos < 4.0 BootSector (0x%x)
->>>>>>38	ubyte		<0x29		\b, dos < 4.0 BootSector (0x%x)
->>>>>>38	ubyte		=0x29
->>>>>>>39	ulelong		x		\b, serial number 0x%x
->>>>>>>43	string		<NO\ NAME	\b, label: "%11.11s"
->>>>>>>43	string		>NO\ NAME	\b, label: "%11.11s"
->>>>>>>43	string		=NO\ NAME	\b, unlabeled
->>>>>>54	string		FAT		\b, FAT
->>>>>>>54	string		FAT12		\b (12 bit)
->>>>>>>54	string		FAT16		\b (16 bit)
+>>>>>>82	string		!FAT32
+#>>>>>>>36	ubyte		0x80		\b, physical drive 0x%x=0x80 (usual harddisk)
+#>>>>>>>36	ubyte		0		\b, physical drive 0x%x=0 (usual floppy)
+>>>>>>>36	ubyte		!0x80		
+>>>>>>>>36	ubyte		!0		\b, physical drive 0x%x
+>>>>>>>37	ubyte		>0		\b, reserved 0x%x
+#>>>>>>>37	ubyte		=0		\b, reserved 0x%x
+>>>>>>>38	ubyte		>0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>38	ubyte		<0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>38	ubyte		=0x29
+>>>>>>>>39	ulelong		x		\b, serial number 0x%x
+>>>>>>>>43	string		<NO\ NAME	\b, label: "%11.11s"
+>>>>>>>>43	string		>NO\ NAME	\b, label: "%11.11s"
+>>>>>>>>43	string		=NO\ NAME	\b, unlabeled
+>>>>>>>54	string		FAT		\b, FAT
+>>>>>>>>54	string		FAT12		\b (12 bit)
+>>>>>>>>54	string		FAT16		\b (16 bit)
 # FAT32 specific
->>>>>82		string		FAT32		\b, FAT (32 bit)
->>>>>>36	ulelong		x		\b, sectors/FAT %u
->>>>>>40	uleshort	>0		\b, extension flags %u
-#>>>>>>40	uleshort	=0		\b, extension flags %u
->>>>>>42	uleshort	>0		\b, fsVersion %u
-#>>>>>>42	uleshort	=0		\b, fsVersion %u (usual)
->>>>>>44	ulelong		>2		\b, rootdir cluster %u
-#>>>>>>44	ulelong		=2		\b, rootdir cluster %u
-#>>>>>>44	ulelong		=1		\b, rootdir cluster %u
->>>>>>48	uleshort	>1		\b, infoSector %u
-#>>>>>>48	uleshort	=1		\b, infoSector %u (usual)
->>>>>>48	uleshort	<1		\b, infoSector %u
->>>>>>50	uleshort	>6		\b, Backup boot sector %u
-#>>>>>>50	uleshort	=6		\b, Backup boot sector %u (usual) 
->>>>>>50	uleshort	<6		\b, Backup boot sector %u
->>>>>>54	ulelong		>0		\b, reserved1 0x%x
->>>>>>58	ulelong		>0		\b, reserved2 0x%x
->>>>>>62	ulelong		>0		\b, reserved3 0x%x
+>>>>>>82	string		FAT32		\b, FAT (32 bit)
+>>>>>>>36	ulelong		x		\b, sectors/FAT %u
+>>>>>>>40	uleshort	>0		\b, extension flags %u
+#>>>>>>>40	uleshort	=0		\b, extension flags %u
+>>>>>>>42	uleshort	>0		\b, fsVersion %u
+#>>>>>>>42	uleshort	=0		\b, fsVersion %u (usual)
+>>>>>>>44	ulelong		>2		\b, rootdir cluster %u
+#>>>>>>>44	ulelong		=2		\b, rootdir cluster %u
+#>>>>>>>44	ulelong		=1		\b, rootdir cluster %u
+>>>>>>>48	uleshort	>1		\b, infoSector %u
+#>>>>>>>48	uleshort	=1		\b, infoSector %u (usual)
+>>>>>>>48	uleshort	<1		\b, infoSector %u
+>>>>>>>50	uleshort	>6		\b, Backup boot sector %u
+#>>>>>>>50	uleshort	=6		\b, Backup boot sector %u (usual) 
+>>>>>>>50	uleshort	<6		\b, Backup boot sector %u
+>>>>>>>54	ulelong		>0		\b, reserved1 0x%x
+>>>>>>>58	ulelong		>0		\b, reserved2 0x%x
+>>>>>>>62	ulelong		>0		\b, reserved3 0x%x
 # same structure as FAT1X 
->>>>>>64	ubyte		>0x80		\b, physical drive 0x%x
-#>>>>>>64	ubyte		=0x80		\b, physical drive 0x%x=80 (usual harddisk)
->>>>>>64	ubyte&0x7F	>0		\b, physical drive 0x%x
-#>>>>>>64	ubyte		=0		\b, physical drive 0x%x=0 (usual floppy)
->>>>>>65	ubyte		>0		\b, reserved 0x%x
->>>>>>66	ubyte		>0x29		\b, dos < 4.0 BootSector (0x%x)
->>>>>>66	ubyte		<0x29		\b, dos < 4.0 BootSector (0x%x)
->>>>>>66	ubyte		=0x29
->>>>>>>67	ulelong		x		\b, serial number 0x%x
->>>>>>>71	string		<NO\ NAME	\b, label: "%11.11s"
->>>>>>71	string		>NO\ NAME	\b, label: "%11.11s"
->>>>>>71	string		=NO\ NAME	\b, unlabeled
+>>>>>>>64	ubyte		>0x80		\b, physical drive 0x%x
+#>>>>>>>64	ubyte		=0x80		\b, physical drive 0x%x=80 (usual harddisk)
+>>>>>>>64	ubyte&0x7F	>0		\b, physical drive 0x%x
+#>>>>>>>64	ubyte		=0		\b, physical drive 0x%x=0 (usual floppy)
+>>>>>>>65	ubyte		>0		\b, reserved 0x%x
+>>>>>>>66	ubyte		>0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>66	ubyte		<0x29		\b, dos < 4.0 BootSector (0x%x)
+>>>>>>>66	ubyte		=0x29
+>>>>>>>>67	ulelong		x		\b, serial number 0x%x
+>>>>>>>>71	string		<NO\ NAME	\b, label: "%11.11s"
+>>>>>>>71	string		>NO\ NAME	\b, label: "%11.11s"
+>>>>>>>71	string		=NO\ NAME	\b, unlabeled
 ### FATs end
 >0x200	lelong	0x82564557		\b, BSD disklabel
 # FATX 
@@ -854,6 +904,13 @@
 
 0x18b	string	OS/2	OS/2 Boot Manager
 
+# updated by Joerg Jenderek at Oct 2008!!
+# http://syslinux.zytor.com/iso.php
+0	ulelong	0x7c40eafa		isolinux Loader
+# http://syslinux.zytor.com/pxe.php
+0	ulelong	0x007c05ea		pxelinux Loader
+0	ulelong	0x60669c66		pxelinux Loader
+
 # added by Joerg Jenderek
 # In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or
 # grub-1.94/kern/i386/pc/startup.S
@@ -1324,6 +1381,14 @@
 >0x10024        belong          x               (blocksize %d,
 >0x10060        string          >\0             lockproto %s)
 
+# BTRFS
+0x10040         string          _BHRfS_M        BTRFS Filesystem
+>0x1012b        string          >\0             (label "%s",
+>0x10090        lelong          x               sectorsize %d,
+>0x10094        lelong          x               nodesize %d,
+>0x10098        lelong          x               leafsize %d)
+
+
 # dvdisaster's .ecc
 # From: "Nelson A. de Oliveira" <naoliv@gmail.com>
 0	string	*dvdisaster*	dvdisaster error correction file

Modified: projects/mesh11s/contrib/file/Magdir/graphviz
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/graphviz	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/graphviz	Sun May 10 15:37:48 2009	(r191962)
@@ -1,7 +1,10 @@
-
 #------------------------------------------------------------------------------
 # graphviz:  file(1) magic for http://www.graphviz.org/
-0	regex/100	[\r\n\t\ ]*graph[\r\n\t\ ]*.*\\{	graphviz graph text
-!:mime	text/vnd.graphviz
-0	regex/100	[\r\n\t\ ]*digraph[\r\n\t\ ]*.*\\{	graphviz digraph text
-!:mime	text/vnd.graphviz
+
+# FIXME: These patterns match too generally. For example, the first
+# line matches a LaTeX file containing the word "graph" (with a {
+# following later) and the second line matches this file.
+#0	regex/100	[\r\n\t\ ]*graph[\r\n\t\ ]+.*\\{	graphviz graph text
+#!:mime	text/vnd.graphviz
+#0	regex/100	[\r\n\t\ ]*digraph[\r\n\t\ ]+.*\\{	graphviz digraph text
+#!:mime	text/vnd.graphviz

Modified: projects/mesh11s/contrib/file/Magdir/images
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/images	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/images	Sun May 10 15:37:48 2009	(r191962)
@@ -110,6 +110,7 @@
 # GIF
 0	string		GIF8		GIF image data
 !:mime	image/gif
+!:apple	8BIMGIFf
 >4	string		7a		\b, version 8%s,
 >4	string		9a		\b, version 8%s,
 >6	leshort		>0		%hd x
@@ -600,3 +601,7 @@
 # Wavelet Scalar Quantization format used in gray-scale fingerprint images
 # From Tano M Fotang <mfotang@quanteq.com>
 0	string	\xff\xa0\xff\xa8\x00	Wavelet Scalar Quantization image data
+
+# JPEG 2000 Code Stream Bitmap
+# From Petr Splichal <psplicha@redhat.com>
+0	string	\xFF\x4F\xFF\x51\x00	JPEG-2000 Code Stream Bitmap data

Modified: projects/mesh11s/contrib/file/Magdir/jpeg
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/jpeg	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/jpeg	Sun May 10 15:37:48 2009	(r191962)
@@ -10,6 +10,7 @@
 #
 0	beshort		0xffd8		JPEG image data
 !:mime	image/jpeg
+!:apple	8BIMJPEG
 !:strength +1
 >6	string		JFIF		\b, JFIF standard
 # The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06

Modified: projects/mesh11s/contrib/file/Magdir/mach
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/mach	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/mach	Sun May 10 15:37:48 2009	(r191962)
@@ -4,7 +4,7 @@
 # Java ByteCode, so they are both handled in the file "cafebabe".
 # The "feedface" ones are handled herein.
 #------------------------------------------------------------
-0	lelong&0xfeffffff	0xfeedface	Mach-O
+0	lelong&0xfffffffe	0xfeedface	Mach-O
 >0	byte		0xcf		64-bit
 >12	lelong		1		object
 >12	lelong		2		executable

Modified: projects/mesh11s/contrib/file/Magdir/macintosh
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/macintosh	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/macintosh	Sun May 10 15:37:48 2009	(r191962)
@@ -11,6 +11,8 @@
 # Stuffit archives are the de facto standard of compression for Macintosh
 # files obtained from most archives. (franklsm@tuns.ca)
 0	string		SIT!			StuffIt Archive (data)
+!:mime	application/x-stuffit
+!:apple	SIT!SIT!
 >2	string		x			: %s
 0	string		SITD			StuffIt Deluxe (data)
 >2	string		x			: %s
@@ -20,6 +22,7 @@
 # Newer StuffIt archives (grant@netbsd.org)
 0	string		StuffIt			StuffIt Archive
 !:mime	application/x-stuffit
+!:apple	SIT!SIT!
 #>162	string		>0			: %s
 
 # Macintosh Applications and Installation binaries (franklsm@tuns.ca)

Modified: projects/mesh11s/contrib/file/Magdir/msdos
==============================================================================
--- projects/mesh11s/contrib/file/Magdir/msdos	Sun May 10 11:05:22 2009	(r191961)
+++ projects/mesh11s/contrib/file/Magdir/msdos	Sun May 10 15:37:48 2009	(r191962)
@@ -4,15 +4,15 @@
 #
 
 # .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)
-# updated by Joerg Jenderek
+# updated by Joerg Jenderek at Oct 2008
 0	string	@			
->1	string/cB	\ echo\ off	MS-DOS batch file text
+>1	string/cB	\ echo\ off	DOS batch file text
 !:mime	text/x-msdos-batch
->1	string/cB	echo\ off	MS-DOS batch file text
+>1	string/cB	echo\ off	DOS batch file text
 !:mime	text/x-msdos-batch
->1	string/cB	rem\ 		MS-DOS batch file text
+>1	string/cB	rem\ 		DOS batch file text
 !:mime	text/x-msdos-batch
->1	string/cB	set\ 		MS-DOS batch file text
+>1	string/cB	set\ 		DOS batch file text
 !:mime	text/x-msdos-batch
 
 
@@ -285,8 +285,9 @@
 # Uncommenting only the first two lines will cover about 2/3 of COM files,
 # but it isn't feasible to match all COM files since there must be at least
 # two dozen different one-byte "magics".
-#0	byte		0xe9		DOS executable (COM)
-#>0x1FE leshort		0xAA55		\b, boot code
+# test too generic ?
+0	byte		0xe9		DOS executable (COM)
+>0x1FE leshort		0xAA55		\b, boot code
 >6	string		SFX\ of\ LHarc	(%s)
 0	belong	0xffffffff		DOS executable (device driver)
 #CMD640X2.SYS
@@ -309,25 +310,38 @@
 >>77	string	>\x40			
 >>>77	string	<\x5B			
 >>>>77	string	x			\b, name: %.8s
-#0	byte		0x8c		DOS executable (COM)
-# 0xeb conflicts with "sequent" magic
-#0	byte		0xeb		DOS executable (COM)
-#>0x1FE leshort		0xAA55		\b, boot code
-#>85	string		UPX		\b, UPX compressed
-#>4	string		\ $ARX		\b, ARX self-extracting archive
-#>4	string		\ $LHarc	\b, LHarc self-extracting archive
-#>0x20e string		SFX\ by\ LARC	\b, LARC self-extracting archive
+# test too generic ?
+0	byte		0x8c		DOS executable (COM)

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***

From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 18:11:14 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id DA689106566B;
	Sun, 10 May 2009 18:11:14 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id C91F18FC13;
	Sun, 10 May 2009 18:11:14 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIBELn064560;
	Sun, 10 May 2009 18:11:14 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIBE28064558;
	Sun, 10 May 2009 18:11:14 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <200905101811.n4AIBE28064558@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Sun, 10 May 2009 18:11:14 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191965 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 18:11:15 -0000

Author: pho
Date: Sun May 10 18:11:14 2009
New Revision: 191965
URL: http://svn.freebsd.org/changeset/base/191965

Log:
  Added two more nullfs test scenarios

Added:
  projects/stress2/misc/nullfs2.sh   (contents, props changed)
  projects/stress2/misc/nullfs3.sh   (contents, props changed)

Added: projects/stress2/misc/nullfs2.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/nullfs2.sh	Sun May 10 18:11:14 2009	(r191965)
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2009 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (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$
+#
+
+# Simple nullfs test scenario
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+[ -d mp1 ] || mkdir mp1
+
+mp=`pwd`/mp1
+mount | grep -q $mp && umount -f $mp
+
+mount -t nullfs `dirname $RUNDIR` $mp
+
+export RUNDIR=`pwd`/mp1/stressX
+export runRUNTIME=10m
+(cd ..; ./run.sh marcus.cfg) 
+
+umount $mp
+
+mount | grep -q $mp && umount -f $mp
+
+rm -rf mp1

Added: projects/stress2/misc/nullfs3.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/nullfs3.sh	Sun May 10 18:11:14 2009	(r191965)
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2009 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (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$
+#
+
+# Test scenario by "Paul B. Mahol" <onemda gmail com>
+
+# Caused: lock violation
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+[ -d mp1 ] || mkdir mp1
+[ -d $RUNDIR ] || mkdir $RUNDIR
+
+mp=`pwd`/mp1
+mount | grep -q $mp && umount -f $mp
+
+mount -t nullfs `dirname $RUNDIR` $mp
+
+cd $mp/stressX
+whereis something
+cd /
+
+umount $mp
+
+mount | grep -q $mp && umount -f $mp
+
+rm -rf $mp

From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 18:17:27 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 032441065675;
	Sun, 10 May 2009 18:17:27 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id E50008FC22;
	Sun, 10 May 2009 18:17:26 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIHQmU064783;
	Sun, 10 May 2009 18:17:26 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIHQ8v064781;
	Sun, 10 May 2009 18:17:26 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905101817.n4AIHQ8v064781@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Sun, 10 May 2009 18:17:26 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191967 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 18:17:27 -0000

Author: rpaulo
Date: Sun May 10 18:17:26 2009
New Revision: 191967
URL: http://svn.freebsd.org/changeset/base/191967

Log:
  Implement more peer link management. Peering now works more reliably.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_node.h

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Sun May 10 18:16:07 2009	(r191966)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Sun May 10 18:17:26 2009	(r191967)
@@ -69,26 +69,18 @@ static int	mesh_input(struct ieee80211_n
 static void	mesh_recv_mgmt(struct ieee80211_node *, struct mbuf *, int,
 		    int, int, uint32_t);
 static void	mesh_recv_action(struct ieee80211_node *, struct mbuf *);
-static void	mesh_peer_timeout(void *);
+static __inline void	mesh_peer_timeout_setup(struct ieee80211_node *);
+static void		mesh_peer_timeout_backoff(struct ieee80211_node *);
+static void		mesh_peer_timeout_cb(void *);
+static __inline void	mesh_peer_timeout_stop(struct ieee80211_node *);
+static int	mesh_verify_meshid(struct ieee80211vap *,
+		    struct ieee80211_meshid_ie *);
+static int	mesh_verify_meshconf(struct ieee80211vap *,
+		    struct ieee80211_meshconf_ie *);
 
 int	ieee80211_mesh_retrytimeout = 40;	/* 40 miliseconds */
 #define	RETRY_TIMEOUT	msecs_to_ticks(ieee80211_mesh_retrytimeout)
 int	ieee80211_mesh_maxretries = 60;
-#define MESH_SET_TIMEOUT(xni)							\
-do {										\
-	xni->ni_mtimerboff = RETRY_TIMEOUT;					\
-	callout_reset(&xni->ni_mtimer, RETRY_TIMEOUT, mesh_peer_timeout, xni);	\
-} while (0)
-/*
- * Same as above but backoffs timer statisically 50%.
- * XXX: wrong arc4random usage.
- */
-#define MESH_SET_TIMEOUT_BACKOFF(xni)						\
-do {										\
-	xni->ni_mtimerboff = xni->ni_mtimerboff +				\
-	    ((arc4random() & 0xff) % xni->ni_mtimerboff);			\
-	callout_reset(&xni->ni_mtimer, RETRY_TIMEOUT, mesh_peer_timeout, xni);	\
-} while (0)
 
 /* unalligned little endian access */     
 #define LE_READ_2(p)					\
@@ -96,6 +88,16 @@ do {										\
 	 ((((const uint8_t *)(p))[0]      ) |		\
 	  (((const uint8_t *)(p))[1] <<  8)))
 
+
+static const char *nodemeshstates[] = {
+	"IDLE",
+	"OPEN SENT",
+	"OPEN RECEIVED",
+	"CONFIRM RECEIVED",
+	"ESTABLISHED",
+	"HOLDING"
+};
+
 void
 ieee80211_mesh_attach(struct ieee80211com *ic)
 {
@@ -421,14 +423,14 @@ mesh_recv_mgmt(struct ieee80211_node *ni
 			ni->ni_peerstate = IEEE80211_NODE_MESH_OPENSNT;
 			IEEE80211_NOTE(vap,
 			    IEEE80211_MSG_MESH,
-			    ni, "peer link: switching to state %d",
-			    ni->ni_peerstate);
+			    ni, "peer link: switching to state %s",
+			    nodemeshstates[ni->ni_peerstate]);
 			args[0] = ni->ni_plid;
 			ieee80211_send_action(ni,
 			    IEEE80211_ACTION_CAT_MESHPEERING,
 			    IEEE80211_ACTION_MESHPEERING_OPEN, args);
 			ni->ni_mrcount = 0;
-			MESH_SET_TIMEOUT(ni);
+			mesh_peer_timeout_setup(ni);
 		}
 		if (ni != NULL) {
 			IEEE80211_RSSI_LPF(ni->ni_avgrssi, rssi);
@@ -590,7 +592,9 @@ mesh_recv_action(struct ieee80211_node *
 	 * Check if we agree on Mesh ID and Configuration.
 	 * XXX: TBD
 	 */
-	if (!meshid || !meshconf || !meshpeer) {
+	if (mesh_verify_meshid(vap, meshid) ||
+	    mesh_verify_meshconf(vap, meshconf) ||
+	    !meshpeer) {
 		IEEE80211_DISCARD(vap,
 		    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
 		    wh, NULL, "%s", "action frame not for our mesh");
@@ -598,10 +602,10 @@ mesh_recv_action(struct ieee80211_node *
 		return;
 	}
 
-	switch (ia->ia_category) {
 	/*
 	 * Mesh Peer Link Management Finite State Machine handling.
 	 */
+	switch (ia->ia_category) {
 	case IEEE80211_ACTION_CAT_MESHPEERING:
 		switch (ia->ia_action) {
 		case IEEE80211_ACTION_MESHPEERING_OPEN:
@@ -613,8 +617,8 @@ mesh_recv_action(struct ieee80211_node *
 				ni->ni_peerstate = IEEE80211_NODE_MESH_OPENRCV;
 				IEEE80211_NOTE(vap,
 				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %d",
-				    ni->ni_peerstate);
+				    ni, "peer link: switching to state %s",
+				    nodemeshstates[ni->ni_peerstate]);
 				ni->ni_llid = meshpeer->peer_llinkid;
 				get_random_bytes(&ni->ni_plid, 2);
 				args[0] = ni->ni_plid;
@@ -628,7 +632,7 @@ mesh_recv_action(struct ieee80211_node *
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
 				    IEEE80211_ACTION_MESHPEERING_CONFIRM, args);
-				/* XXX setup timeout1 */
+				mesh_peer_timeout_setup(ni);
 				break;
 			case IEEE80211_NODE_MESH_OPENRCV:
 				/* We received a duplicate open, confirm again. */
@@ -644,28 +648,28 @@ mesh_recv_action(struct ieee80211_node *
 				ni->ni_llid = meshpeer->peer_llinkid;
 				IEEE80211_NOTE(vap,
 				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %d",
-				    ni->ni_peerstate);
+				    ni, "peer link: switching to state %s",
+				    nodemeshstates[ni->ni_peerstate]);
 				args[0] = ni->ni_plid;
 				args[1] = ni->ni_llid;
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
 				    IEEE80211_ACTION_MESHPEERING_CONFIRM, args);
-				/* XXX setup timeout1 */
+				/* NB: don't setup/clear any timeout */
 				break;
 			case IEEE80211_NODE_MESH_CONFIRMRECV:
 				ni->ni_peerstate = IEEE80211_NODE_MESH_ESTABLISHED;
 				IEEE80211_NOTE(vap,
 				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %d",
-				    ni->ni_peerstate);
+				    ni, "peer link: switching to state %s",
+				    nodemeshstates[ni->ni_peerstate]);
 				ni->ni_llid = meshpeer->peer_llinkid;
 				args[0] = ni->ni_plid;
 				args[1] = ni->ni_llid;
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
 				    IEEE80211_ACTION_MESHPEERING_CONFIRM, args);
-				/* clear timeoutC */
+				mesh_peer_timeout_stop(ni);
 				break;
 			case IEEE80211_NODE_MESH_ESTABLISHED:
 				args[0] = ni->ni_plid;
@@ -694,15 +698,16 @@ mesh_recv_action(struct ieee80211_node *
 				ni->ni_peerstate = IEEE80211_NODE_MESH_ESTABLISHED;
 				IEEE80211_NOTE(vap,
 				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %d",
-				    ni->ni_peerstate);
+				    ni, "peer link: switching to state %s",
+				    nodemeshstates[ni->ni_peerstate]);
+				mesh_peer_timeout_stop(ni);
 				break;
 			case IEEE80211_NODE_MESH_OPENSNT:
 				ni->ni_peerstate = IEEE80211_NODE_MESH_CONFIRMRECV;
 				IEEE80211_NOTE(vap,
 				    IEEE80211_MSG_MESH,
-				    ni, "peer link: switching to state %d",
-				    ni->ni_peerstate);
+				    ni, "peer link: switching to state %s",
+				    nodemeshstates[ni->ni_peerstate]);
 				break;
 			case IEEE80211_NODE_MESH_HOLDING:
 				args[0] = ni->ni_llid;
@@ -727,7 +732,7 @@ mesh_recv_action(struct ieee80211_node *
 			switch (ni->ni_peerstate) {
 			case IEEE80211_NODE_MESH_OPENRCV:
 				ni->ni_peerstate = IEEE80211_NODE_MESH_HOLDING;
-				MESH_SET_TIMEOUT(ni);
+				mesh_peer_timeout_setup(ni);
 				break;
 			case IEEE80211_NODE_MESH_OPENSNT:
 				break;
@@ -744,11 +749,38 @@ mesh_recv_action(struct ieee80211_node *
 	}
 }
 
+static __inline void
+mesh_peer_timeout_setup(struct ieee80211_node *ni)
+{
+	ni->ni_mtimerval = RETRY_TIMEOUT;
+	callout_reset(&ni->ni_mtimer, RETRY_TIMEOUT, mesh_peer_timeout_cb, ni);
+}
+
+/*
+ * Same as above but backoffs timer statisically 50%.
+ */
+static void
+mesh_peer_timeout_backoff(struct ieee80211_node *ni)
+{
+	uint32_t r;
+	
+	r = arc4random();
+	ni->ni_mtimerval += r % ni->ni_mtimerval;
+	callout_reset(&ni->ni_mtimer, ni->ni_mtimerval, mesh_peer_timeout_cb,
+	    ni);
+}
+
+static __inline void
+mesh_peer_timeout_stop(struct ieee80211_node *ni)
+{
+	callout_stop(&ni->ni_mtimer);
+}
+
 /*
  * Mesh Peer Link Management FSM timeout handling.
  */
 static void
-mesh_peer_timeout(void *arg)
+mesh_peer_timeout_cb(void *arg)
 {
 	struct ieee80211_node *ni = (struct ieee80211_node *)arg;
 	struct ieee80211vap *vap = ni->ni_vap;
@@ -756,8 +788,8 @@ mesh_peer_timeout(void *arg)
 
 	IEEE80211_NOTE(vap,
 	    IEEE80211_MSG_MESH,
-	    ni, "mesh link timeout, state %d, retry counter %d",
-	    ni->ni_peerstate, ni->ni_mrcount);
+	    ni, "mesh link timeout, state %s, retry counter %d",
+	    nodemeshstates[ni->ni_peerstate], ni->ni_mrcount);
 	
 	switch (ni->ni_peerstate) {
 	case IEEE80211_NODE_MESH_OPENSNT:
@@ -770,24 +802,70 @@ mesh_peer_timeout(void *arg)
 			    IEEE80211_ACTION_MESHPEERING_CLOSE, args);
 			ni->ni_mrcount = 0;
 			ni->ni_peerstate = IEEE80211_NODE_MESH_HOLDING;
-			MESH_SET_TIMEOUT(ni);
+			IEEE80211_NOTE(vap,
+			    IEEE80211_MSG_MESH,
+			    ni, "peer link: switching to state %s",
+			    nodemeshstates[ni->ni_peerstate]);
+			mesh_peer_timeout_setup(ni);
 		} else {
 			args[0] = ni->ni_plid;
 			ieee80211_send_action(ni,
 			    IEEE80211_ACTION_CAT_MESHPEERING,
 			    IEEE80211_ACTION_MESHPEERING_OPEN, args);
 			ni->ni_mrcount++;
-			MESH_SET_TIMEOUT_BACKOFF(ni);
+			mesh_peer_timeout_backoff(ni);
 		}
 		break;
 	case IEEE80211_NODE_MESH_CONFIRMRECV:
-	
+		if (ni->ni_mrcount == ieee80211_mesh_maxretries) {
+			args[0] = ni->ni_plid;
+			args[2] = IEEE80211_REASON_MESH_CONFIRM_TIMEOUT;
+			ieee80211_send_action(ni,
+			    IEEE80211_ACTION_CAT_MESHPEERING,
+			    IEEE80211_ACTION_MESHPEERING_CLOSE, args);
+			ni->ni_mrcount = 0;
+			ni->ni_peerstate = IEEE80211_NODE_MESH_HOLDING;
+			IEEE80211_NOTE(vap,
+			    IEEE80211_MSG_MESH,
+			    ni, "peer link: switching to state %s",
+			    nodemeshstates[ni->ni_peerstate]);
+			mesh_peer_timeout_setup(ni);
+		} else {
+			ni->ni_mrcount++;
+			mesh_peer_timeout_setup(ni);
+		}
 		break;
 	case IEEE80211_NODE_MESH_HOLDING:
+		ni->ni_peerstate = IEEE80211_NODE_MESH_IDLE;
+		IEEE80211_NOTE(vap,
+		    IEEE80211_MSG_MESH,
+		    ni, "peer link: switching to state %s",
+		    nodemeshstates[ni->ni_peerstate]);
 		break;
 	}
 }
 
+static __inline int
+mesh_verify_meshid(struct ieee80211vap *vap,
+    struct ieee80211_meshid_ie *meshid)
+{
+	if (meshid == NULL)
+		return 1;
+
+	return memcmp(vap->iv_meshid, (uint8_t *)&meshid[1], vap->iv_meshidlen);
+}
+
+static __inline int
+mesh_verify_meshconf(struct ieee80211vap *vap,
+    struct ieee80211_meshconf_ie *meshconf)
+{
+	if (meshconf == NULL)
+		return 1;
+
+	/* XXX TBD */
+	return 0;
+}
+
 /*
  * Parse a MESH ID ie on station join.
  */
@@ -844,7 +922,7 @@ ieee80211_add_meshconf(uint8_t *frm, str
 		.conf_cap	= 1,	/* XXX */
 	};
 
-	KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a mbss vap"));
+	KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a MBSS vap"));
 	memcpy(frm, &ie, sizeof(ie));
 
 	return frm + sizeof(ie);
@@ -885,8 +963,10 @@ ieee80211_add_meshpeer(uint8_t *frm, uin
 		break;
 	}
 	return frm;
-#undef ADDSHORT	
+#undef ADDSHORT
 }
+
+
 void
 ieee80211_create_mbss(struct ieee80211vap *vap, struct ieee80211_channel *chan)
 {
@@ -894,7 +974,7 @@ ieee80211_create_mbss(struct ieee80211va
 	struct ieee80211_node *ni;
 
 	IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
-	    "%s: creating mbss on channel %u\n", __func__,
+	    "%s: creating MBSS on channel %u\n", __func__,
 	    ieee80211_chan2ieee(ic, chan));
 
 	ni = ieee80211_alloc_node(&ic->ic_sta, vap, vap->iv_myaddr);

Modified: projects/mesh11s/sys/net80211/ieee80211_node.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_node.h	Sun May 10 18:16:07 2009	(r191966)
+++ projects/mesh11s/sys/net80211/ieee80211_node.h	Sun May 10 18:17:26 2009	(r191967)
@@ -187,7 +187,7 @@ struct ieee80211_node {
 	uint16_t		ni_plid;	/* peer link ID */
 	struct callout		ni_mtimer;	/* mesh timer */
 	uint8_t			ni_mrcount;	/* mesh retry counter */
-	uint8_t			ni_mtimerboff;	/* mesh timer backoff value */
+	uint8_t			ni_mtimerval;	/* mesh timer value */
 
 	/* 11n state */
 	uint16_t		ni_htcap;	/* HT capabilities */

From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 18:19:10 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id BC22C1065670;
	Sun, 10 May 2009 18:19:10 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id AB14B8FC19;
	Sun, 10 May 2009 18:19:10 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIJAEL064857;
	Sun, 10 May 2009 18:19:10 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIJAAN064856;
	Sun, 10 May 2009 18:19:10 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905101819.n4AIJAAN064856@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Sun, 10 May 2009 18:19:10 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191968 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 18:19:11 -0000

Author: rpaulo
Date: Sun May 10 18:19:10 2009
New Revision: 191968
URL: http://svn.freebsd.org/changeset/base/191968

Log:
  Fix direction matching on input path.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Sun May 10 18:17:26 2009	(r191967)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Sun May 10 18:19:10 2009	(r191968)
@@ -267,7 +267,7 @@ mesh_input(struct ieee80211_node *ni, st
 	case IEEE80211_FC0_TYPE_MGT:
 		vap->iv_stats.is_rx_mgmt++;
 		IEEE80211_NODE_STAT(ni, rx_mgmt);
-		if (dir != IEEE80211_FC1_DIR_NODS) {
+		if (dir != IEEE80211_FC1_DIR_DSTODS) {
 			IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
 			    wh, "data", "incorrect dir 0x%x", dir);
 			vap->iv_stats.is_rx_wrongdir++;

From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 18:19:17 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 7F2E2106573A;
	Sun, 10 May 2009 18:19:16 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 4EB7D8FC1A;
	Sun, 10 May 2009 18:19:16 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIJGl5064896;
	Sun, 10 May 2009 18:19:16 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIJGWT064893;
	Sun, 10 May 2009 18:19:16 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <200905101819.n4AIJGWT064893@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Sun, 10 May 2009 18:19:16 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191969 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 18:19:18 -0000

Author: pho
Date: Sun May 10 18:19:16 2009
New Revision: 191969
URL: http://svn.freebsd.org/changeset/base/191969

Log:
  Added test scenarios for page faults while doing filesystem data move to
  or from userspace during read(2) and write(2)

Added:
  projects/stress2/misc/datamove.sh   (contents, props changed)
  projects/stress2/misc/datamove2.sh   (contents, props changed)
  projects/stress2/misc/datamove3.sh   (contents, props changed)

Added: projects/stress2/misc/datamove.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/datamove.sh	Sun May 10 18:19:16 2009	(r191969)
@@ -0,0 +1,213 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2009 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (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$
+#
+
+# There is a well-known problem in FreeBSD, caused by allowing page faults                                       
+# while doing filesystem data move to or from userspace during read(2) and                                       
+# write(2). The issue is that if the userspace address being read or write                                       
+# from/to is backed by the mapping of the same file we are doing i/o to,                                         
+# we deadlock.
+
+# Test scenario by ups
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+here=`pwd`
+cd /tmp
+sed '1,/^EOF/d' < $here/$0 > dl.c
+cc -o dl -Wall dl.c
+rm -f dl.c
+
+n=5
+old=`sysctl vm.old_msync | awk '{print $NF}'`
+sysctl vm.old_msync=1
+for i in `jot $n`; do
+	mkdir -p /tmp/dl.dir.$i
+	cd /tmp/dl.dir.$i
+       	/tmp/dl &
+done
+cd /tmp
+for i in `jot $n`; do
+	wait
+done
+for i in `jot $n`; do
+	rm -rf /tmp/dl.dir.$i
+done
+sysctl vm.old_msync=$old
+
+rm -rf /tmp/dl
+exit 0
+EOF
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+
+
+int prepareFile(char* filename,int* fdp);
+int mapBuffer(char** bufferp,int fd1,int fd2);
+int startIO(int fd,char *buffer);
+
+int pagesize;
+
+#define FILESIZE (32*1024)
+char wbuffer[FILESIZE];
+
+/* Create a FILESIZE sized file - then remove file data from the cache*/
+int prepareFile(char* filename,int* fdp)
+{
+  int fd;
+  int len;
+  int status;
+  void *addr;
+
+  fd = open(filename,O_CREAT | O_TRUNC | O_RDWR,S_IRWXU);
+  if (fd == -1)
+    {
+      perror("Creating file");
+      return fd;
+    }
+  
+  len = write(fd,wbuffer,FILESIZE);
+  if (len < 0)
+    {
+      perror("Write failed");
+      return 1;
+    }
+
+  status = fsync(fd);
+   if (status != 0)
+    {
+        perror("fsync failed");
+	return 1;
+    }
+
+  addr = mmap(NULL,FILESIZE, PROT_READ | PROT_WRITE , MAP_SHARED, fd, 0);
+  if (addr == MAP_FAILED)
+    {
+      perror("Mmap failed");
+      return 1;
+    }
+
+  status = msync(addr,FILESIZE,MS_INVALIDATE | MS_SYNC);
+  if (status != 0)
+    {
+        perror("Msync failed");
+	return 1;
+    }
+
+  munmap(addr,FILESIZE);
+
+  *fdp = fd;
+  return 0;
+}
+
+
+/* mmap a 2 page buffer - first page is from fd1, second page from fd2 */
+int mapBuffer(char** bufferp,int fd1,int fd2)
+{
+  void* addr;
+  char *buffer;
+
+  addr = mmap(NULL,pagesize*2, PROT_READ | PROT_WRITE , MAP_SHARED, fd1, 0);
+  if (addr == MAP_FAILED)
+    {
+      perror("Mmap failed");
+      return 1;
+    }
+ 
+  buffer = addr;
+  addr = mmap(buffer + pagesize,pagesize, PROT_READ | PROT_WRITE , MAP_FIXED | 
+MAP_SHARED, fd2, 0);
+ 
+  if (addr == MAP_FAILED)
+    {
+      perror("Mmap2 failed");
+      return 1;
+    }
+  *bufferp = buffer;
+  return 0;
+}
+
+
+int startIO(int fd,char *buffer)
+{
+  ssize_t len;
+  len = write(fd,buffer,2*pagesize);
+  if (len == -1) 
+    {
+      perror("write failed");
+      return 1;
+    }
+  return 0;
+}
+
+
+int main(int argc,char *argv[],char *envp[])
+{
+
+  int fdA,fdB,fdDelayA,fdDelayB;
+  int status;
+  char *bufferA,*bufferB;
+  pid_t pid;
+
+  pagesize = getpagesize();
+
+  if ((prepareFile("A",&fdA))
+      || (prepareFile("B",&fdB))
+      || (prepareFile("DelayA",&fdDelayA))
+      || (prepareFile("DelayB",&fdDelayB))
+      || (mapBuffer(&bufferA,fdDelayA,fdB))
+      || (mapBuffer(&bufferB,fdDelayB,fdA)))
+    exit(1);
+  
+  pid = fork();
+
+  if (pid == 0)
+    {
+      status = startIO(fdA,bufferA);
+      exit(status);
+    }
+
+  if (pid == -1)
+    {
+      exit(1);
+    }
+  status = startIO(fdB,bufferB);
+  exit(status);
+
+}
+
+
+
+
+

Added: projects/stress2/misc/datamove2.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/datamove2.sh	Sun May 10 18:19:16 2009	(r191969)
@@ -0,0 +1,210 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2009 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (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$
+#
+
+# Variation of the datamove.sh scenario by not using "sysctl vm.old_msync=1"
+
+# Deadlock seen
+
+# Test scenario by ups
+
+here=`pwd`
+cd /tmp
+sed '1,/^EOF/d' < $here/$0 > dl.c
+cc -o dl -Wall dl.c
+rm -f dl.c
+
+for i in `jot 3`; do
+	$here/../testcases/swap/swap -t 10m -i 200 -h &
+	/tmp/dl 
+	ps | grep swap | grep -v swap | awk '{print $1}' | xargs kill
+done
+rm -rf /tmp/dl
+exit 0
+EOF
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+
+int	prepareFile(char *filename, int *fdp);
+int	mapBuffer  (char **bufferp, int fd1, int fd2);
+int	startIO    (int fd, char *buffer);
+
+int	pagesize;
+
+#define FILESIZE (32*1024)
+char	wbuffer   [FILESIZE];
+
+/* Create a FILESIZE sized file - then remove file data from the cache */
+int 
+prepareFile(char *filename, int *fdp)
+{
+	int	fd;
+	int	len;
+	int	status;
+	void	*addr;
+
+	fd = open(filename, O_CREAT | O_TRUNC | O_RDWR, S_IRWXU);
+	if (fd == -1) {
+		perror("Creating file");
+		return fd;
+	}
+	len = write(fd, wbuffer, FILESIZE);
+	if (len < 0) {
+		perror("Write failed");
+		return 1;
+	}
+	status = fsync(fd);
+	if (status != 0) {
+		perror("fsync failed");
+		return 1;
+	}
+	addr = mmap(NULL, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+	if (addr == MAP_FAILED) {
+		perror("Mmap failed");
+		return 1;
+	}
+	status = msync(addr, FILESIZE, MS_INVALIDATE | MS_SYNC);
+	if (status != 0) {
+		perror("Msync failed");
+		return 1;
+	}
+	if (munmap(addr, FILESIZE) == -1) {
+		perror("munmap failed");
+		return 1;
+	}
+
+	*fdp = fd;
+	return 0;
+}
+
+
+/* mmap a 2 page buffer - first page is from fd1, second page from fd2 */
+int 
+mapBuffer(char **bufferp, int fd1, int fd2)
+{
+	void *addr;
+	char *buffer;
+
+	addr = mmap(NULL, pagesize * 2, PROT_READ | PROT_WRITE, MAP_SHARED, fd1, 0);
+	if (addr == MAP_FAILED) {
+		perror("Mmap failed");
+		return 1;
+	}
+	buffer = addr;
+	addr = mmap(buffer + pagesize, pagesize, PROT_READ | PROT_WRITE, MAP_FIXED |
+		    MAP_SHARED, fd2, 0);
+
+	if (addr == MAP_FAILED) {
+		perror("Mmap2 failed");
+		return 1;
+	}
+	*bufferp = buffer;
+	return 0;
+}
+
+void
+unmapBuffer(char *bufferp)
+{
+	if (munmap(bufferp, pagesize * 2) == -1)
+		err(1, "unmap 1. buffer");
+	if (munmap(bufferp + pagesize * 2, pagesize * 2) == -1)
+		err(1, "unmap 2. buffer");
+}
+
+int 
+startIO(int fd, char *buffer)
+{
+	ssize_t	len;
+
+	len = write(fd, buffer, 2 * pagesize);
+	if (len == -1) {
+		perror("write failed");
+		return 1;
+	}
+	return 0;
+}
+
+
+int 
+main(int argc, char *argv[], char *envp[])
+{
+
+	int	fdA, fdB, fdDelayA, fdDelayB;
+	int	status;
+	int	i;
+	char	*bufferA, *bufferB;
+	pid_t	pid;
+
+	pagesize = getpagesize();
+
+	for (i = 0; i < 1000; i++) {
+		if ((prepareFile("A", &fdA))
+		    || (prepareFile("B", &fdB))
+		    || (prepareFile("DelayA", &fdDelayA))
+		    || (prepareFile("DelayB", &fdDelayB))
+		    || (mapBuffer(&bufferA, fdDelayA, fdB))
+		    || (mapBuffer(&bufferB, fdDelayB, fdA)))
+			exit(1);
+
+		pid = fork();
+
+		if (pid == 0) {
+			status = startIO(fdA, bufferA);
+			exit(status);
+		}
+		if (pid == -1) {
+			perror("fork");
+			exit(1);
+		}
+		status = startIO(fdB, bufferB);
+		if (wait(&status) == -1)
+			err(1, "wait");
+
+		close(fdA);
+		close(fdB);
+		close(fdDelayA);
+		close(fdDelayB);
+		unmapBuffer(bufferA);
+		unmapBuffer(bufferB);
+		unlink("A");
+		unlink("B");
+		unlink("DelayA");
+		unlink("DelayB");
+	}
+	exit(status);
+
+}

Added: projects/stress2/misc/datamove3.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/datamove3.sh	Sun May 10 18:19:16 2009	(r191969)
@@ -0,0 +1,219 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2009 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (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$
+#
+
+# Threaded variation of datamove.sh
+
+# Based on a test scenario by ups and suggestions by kib
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+here=`pwd`
+cd /tmp
+sed '1,/^EOF/d' < $here/$0 > dl.c
+cc -o dl -Wall dl.c -lpthread
+rm -f dl.c
+
+n=5
+old=`sysctl vm.old_msync | awk '{print $NF}'`
+sysctl vm.old_msync=1
+for i in `jot $n`; do
+	mkdir -p /tmp/dl.dir.$i
+	cd /tmp/dl.dir.$i
+       	/tmp/dl &
+done
+cd /tmp
+for i in `jot $n`; do
+	wait
+done
+for i in `jot $n`; do
+	rm -rf /tmp/dl.dir.$i
+done
+sysctl vm.old_msync=$old
+
+rm -rf /tmp/dl
+exit 0
+EOF
+#include <err.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+struct args {
+	char *bp;
+	int fd1;
+	int fd2;
+} a[2];
+
+int prepareFile(char *, int *);
+void * mapBuffer(void *);
+int startIO(int, char *);
+
+int pagesize;
+
+#define FILESIZE (32*1024)
+char wbuffer   [FILESIZE];
+
+/* Create a FILESIZE sized file - then remove file data from the cache */
+int 
+prepareFile(char *filename, int *fdp)
+{
+	int fd;
+	int len;
+	int status;
+	void *addr;
+
+	fd = open(filename, O_CREAT | O_TRUNC | O_RDWR, S_IRWXU);
+	if (fd == -1) {
+		perror("Creating file");
+		return fd;
+	}
+	len = write(fd, wbuffer, FILESIZE);
+	if (len < 0) {
+		perror("Write failed");
+		return 1;
+	}
+	status = fsync(fd);
+	if (status != 0) {
+		perror("fsync failed");
+		return 1;
+	}
+	addr = mmap(NULL, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+	if (addr == MAP_FAILED) {
+		perror("Mmap failed");
+		return 1;
+	}
+	status = msync(addr, FILESIZE, MS_INVALIDATE | MS_SYNC);
+	if (status != 0) {
+		perror("Msync failed");
+		return 1;
+	}
+	munmap(addr, FILESIZE);
+
+	*fdp = fd;
+	return 0;
+}
+
+
+/* mmap a 2 page buffer - first page is from fd1, second page from fd2 */
+void *
+mapBuffer(void *ar)
+{
+	void *addr;
+	char *buffer;
+	int i;
+
+	i = (int )ar;
+	addr = mmap(NULL, pagesize * 2, PROT_READ | PROT_WRITE, MAP_SHARED, a[i].fd1, 0);
+	if (addr == MAP_FAILED) {
+		err(1, "Mmap failed");
+	}
+	buffer = addr;
+	addr = mmap(buffer + pagesize, pagesize, PROT_READ | PROT_WRITE, MAP_FIXED |
+		    MAP_SHARED, a[i].fd2, 0);
+
+	if (addr == MAP_FAILED) {
+		err(1, "Mmap2 failed");
+	}
+	a[i].bp = buffer;
+	sleep(1);
+	return (NULL);
+}
+
+
+int 
+startIO(int fd, char *buffer)
+{
+	ssize_t len;
+
+	len = write(fd, buffer, 2 * pagesize);
+	if (len == -1) {
+		warn("startIO(%d, %p): write failed", fd, buffer);
+		return 1;
+	}
+	return 0;
+}
+
+
+
+int 
+main(int argc, char *argv[], char *envp[])
+{
+
+	int fdA, fdB, fdDelayA, fdDelayB;
+	int r, status;
+	char *bufferA, *bufferB;
+	pid_t pid;
+	pthread_t threads[2];
+
+	pagesize = getpagesize();
+
+	if ((prepareFile("A", &fdA))
+	    || (prepareFile("B", &fdB))
+	    || (prepareFile("DelayA", &fdDelayA))
+	    || (prepareFile("DelayB", &fdDelayB)))
+		exit(1);
+
+	a[0].fd1 = fdDelayA;
+	a[0].fd2 = fdB;
+
+	a[1].fd1 = fdDelayB;
+	a[1].fd2 = fdA;
+
+	if ((r = pthread_create(&threads[0], NULL, mapBuffer, (void *)0)) != 0)
+		err(1, "pthread_create(): %s\n", strerror(r));
+	if ((r = pthread_create(&threads[1], NULL, mapBuffer, (void *)1)) != 0)
+		err(1, "pthread_create(): %s\n", strerror(r));
+
+	while (a[0].bp == NULL || a[1].bp == NULL)
+		pthread_yield();
+
+	bufferA = a[0].bp;
+	bufferB = a[1].bp;
+
+	pid = fork();
+
+	if (pid == 0) {
+		status = startIO(fdA, bufferA);
+		exit(status);
+	}
+	if (pid == -1) {
+		exit(1);
+	}
+	status = startIO(fdB, bufferB);
+	exit(status);
+
+}

From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 18:23:17 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 98494106564A;
	Sun, 10 May 2009 18:23:17 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 6D01D8FC15;
	Sun, 10 May 2009 18:23:17 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AINHaK065039;
	Sun, 10 May 2009 18:23:17 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AINHeb065038;
	Sun, 10 May 2009 18:23:17 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <200905101823.n4AINHeb065038@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Sun, 10 May 2009 18:23:17 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191970 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 18:23:17 -0000

Author: pho
Date: Sun May 10 18:23:17 2009
New Revision: 191970
URL: http://svn.freebsd.org/changeset/base/191970

Log:
  Added test scenario variation of tmpfs.sh

Added:
  projects/stress2/misc/tmpfs3.sh   (contents, props changed)

Added: projects/stress2/misc/tmpfs3.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/tmpfs3.sh	Sun May 10 18:23:17 2009	(r191970)
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2009 Peter Holm <pho@FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $Id: nfs.sh,v 1.2 2008/02/25 16:31:43 pho Exp $
+#
+
+# panic: tmpfs_alloc_vp: type 0xc866ce58 0, seen.
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+mount | grep "$mntpoint" | grep -q tmpfs && umount $mntpoint
+mount -t tmpfs tmpfs  $mntpoint
+
+export RUNDIR=$mntpoint/stressX
+export runRUNTIME=10m            # Run tests for 10 minutes
+
+(cd /home/pho/stress2; ./run.sh vfs.cfg) 
+
+umount $mntpoint
+mount | grep "$mntpoint" | grep -q tmpfs && umount -f $mntpoint

From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 18:25:15 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 23FA91065672;
	Sun, 10 May 2009 18:25:15 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id EC83D8FC1D;
	Sun, 10 May 2009 18:25:14 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIPETL065115;
	Sun, 10 May 2009 18:25:14 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIPE22065114;
	Sun, 10 May 2009 18:25:14 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <200905101825.n4AIPE22065114@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Sun, 10 May 2009 18:25:14 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191971 - projects/stress2/misc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 18:25:15 -0000

Author: pho
Date: Sun May 10 18:25:14 2009
New Revision: 191971
URL: http://svn.freebsd.org/changeset/base/191971

Log:
  Added simple test scenario for PMC(3)

Added:
  projects/stress2/misc/pmc.sh   (contents, props changed)

Added: projects/stress2/misc/pmc.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/stress2/misc/pmc.sh	Sun May 10 18:25:14 2009	(r191971)
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2008-2009 Peter Holm
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (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$
+#
+
+# Simple pmc test
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+kldstat -v | grep -q hwpmc  || kldload hwpmc
+
+for i in `jot 2`; do
+	pmcstat -P instructions  -O /tmp/sample.out.$i find /var -name not.there &
+done
+
+export runRUNTIME=5m
+(cd /home/pho/stress2; ./run.sh vfs.cfg)
+
+for i in `jot 2`; do
+	wait
+done

From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 18:58:30 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id AB821106564A;
	Sun, 10 May 2009 18:58:30 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 9A7D28FC16;
	Sun, 10 May 2009 18:58:30 +0000 (UTC) (envelope-from pho@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AIwUOm065898;
	Sun, 10 May 2009 18:58:30 GMT (envelope-from pho@svn.freebsd.org)
Received: (from pho@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AIwUUg065897;
	Sun, 10 May 2009 18:58:30 GMT (envelope-from pho@svn.freebsd.org)
Message-Id: <200905101858.n4AIwUUg065897@svn.freebsd.org>
From: Peter Holm <pho@FreeBSD.org>
Date: Sun, 10 May 2009 18:58:30 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191974 - projects/stress2/testcases/swap
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 18:58:30 -0000

Author: pho
Date: Sun May 10 18:58:30 2009
New Revision: 191974
URL: http://svn.freebsd.org/changeset/base/191974

Log:
  Handle the noswap scenario. While here, remove unused variable and fix
  spacing

Modified:
  projects/stress2/testcases/swap/swap.c

Modified: projects/stress2/testcases/swap/swap.c
==============================================================================
--- projects/stress2/testcases/swap/swap.c	Sun May 10 18:43:43 2009	(r191973)
+++ projects/stress2/testcases/swap/swap.c	Sun May 10 18:58:30 2009	(r191974)
@@ -48,7 +48,6 @@ setup(int nb)
 	int pct;
 	unsigned long mem;
 	int64_t  swapinfo = 0;
-	unsigned long s;
 	struct rlimit rlp;
 
 	if (nb == 0) {
@@ -69,7 +68,10 @@ setup(int nb)
 		if (op->hog >= 3)
 			pct = random_int(100, 110);
 
-		s = size = swapinfo / 100 * pct + mem;
+		if (swapinfo == 0)
+			size = mem / 100 * pct;
+		else
+			size = swapinfo / 100 * pct + mem;
 
 		size = size / op->incarnations;
 
@@ -84,7 +86,7 @@ setup(int nb)
 
 		if (op->verbose > 1 && nb == 0)
 			printf("setup: pid %d, %d%%. Total %luMb\n",
-				getpid(), pct, size / 1024 / 1024 *  op->incarnations);
+				getpid(), pct, size / 1024 / 1024 * op->incarnations);
 	} else
 		size = getval();
 	return (0);

From owner-svn-src-projects@FreeBSD.ORG  Sun May 10 21:01:33 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id C3536106566C;
	Sun, 10 May 2009 21:01:33 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id B1C1D8FC15;
	Sun, 10 May 2009 21:01:33 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4AL1X54068887;
	Sun, 10 May 2009 21:01:33 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4AL1XZb068885;
	Sun, 10 May 2009 21:01:33 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905102101.n4AL1XZb068885@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Sun, 10 May 2009 21:01:33 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191982 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 10 May 2009 21:01:34 -0000

Author: rpaulo
Date: Sun May 10 21:01:33 2009
New Revision: 191982
URL: http://svn.freebsd.org/changeset/base/191982

Log:
  Initial take on handling data frames.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_output.c

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Sun May 10 20:41:52 2009	(r191981)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Sun May 10 21:01:33 2009	(r191982)
@@ -224,8 +224,8 @@ mesh_input(struct ieee80211_node *ni, st
 	struct ieee80211com *ic = ni->ni_ic;
 	struct ifnet *ifp = vap->iv_ifp;
 	struct ieee80211_frame *wh;
-	int need_tap;
-	uint8_t dir, type, subtype;
+	int hdrspace, need_tap;
+	uint8_t dir, type, subtype, qos;
 
 	KASSERT(ni != NULL, ("null node"));
 	ni->ni_inact = ni->ni_inact_reload;
@@ -264,12 +264,71 @@ mesh_input(struct ieee80211_node *ni, st
 
 	switch (type) {
 	case IEEE80211_FC0_TYPE_DATA:
+		hdrspace = ieee80211_hdrspace(ic, wh);
+		if (m->m_len < hdrspace &&
+		    (m = m_pullup(m, hdrspace)) == NULL) {
+			IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
+			    ni->ni_macaddr, NULL,
+			    "data too short: expecting %u", hdrspace);
+			vap->iv_stats.is_rx_tooshort++;
+			goto out;		/* XXX */
+		}
+		if (dir != IEEE80211_FC1_DIR_DSTODS) {
+			IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
+			    wh, "data", "incorrect dir 0x%x", dir);
+			vap->iv_stats.is_rx_wrongdir++;
+			goto err;
+		}
+		/*
+		 * Save QoS bits for use below--before we strip the header.
+		 */
+		if (subtype == IEEE80211_FC0_SUBTYPE_QOS) {
+			qos = (dir == IEEE80211_FC1_DIR_DSTODS) ?
+			    ((struct ieee80211_qosframe_addr4 *)wh)->i_qos[0] :
+			    ((struct ieee80211_qosframe *)wh)->i_qos[0];
+		} else
+			qos = 0;
+		/*
+		 * Next up, any fragmentation.
+		 */
+#if 0
+		if (!IEEE80211_IS_MULTICAST(wh->i_addr3)) {
+			m = ieee80211_defrag(ni, m, hdrspace);
+			if (m == NULL) {
+				/* Fragment dropped or frame not complete yet */
+				goto out;
+			}
+		}
+#endif
+		wh = NULL;		/* no longer valid, catch any uses */
+		if (bpf_peers_present(vap->iv_rawbpf))
+			bpf_mtap(vap->iv_rawbpf, m);
+		need_tap = 0;
+		/*
+		 * Finally, strip the 802.11 header.
+		 */
+		m = ieee80211_decap(vap, m, hdrspace);
+		if (m == NULL) {
+			/* XXX mask bit to check for both */
+			/* don't count Null data frames as errors */
+			if (subtype == IEEE80211_FC0_SUBTYPE_NODATA ||
+			    subtype == IEEE80211_FC0_SUBTYPE_QOS_NULL)
+				goto out;
+			IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
+			    ni->ni_macaddr, "data", "%s", "decap error");
+			vap->iv_stats.is_rx_decap++;
+			IEEE80211_NODE_STAT(ni, rx_decap);
+			goto err;
+		}
+		/* XXX SuperG/HT */
+		ieee80211_deliver_data(vap, ni, m);
+		return type;
 	case IEEE80211_FC0_TYPE_MGT:
 		vap->iv_stats.is_rx_mgmt++;
 		IEEE80211_NODE_STAT(ni, rx_mgmt);
-		if (dir != IEEE80211_FC1_DIR_DSTODS) {
+		if (dir != IEEE80211_FC1_DIR_NODS) {
 			IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
-			    wh, "data", "incorrect dir 0x%x", dir);
+			    wh, "mgt", "incorrect dir 0x%x", dir);
 			vap->iv_stats.is_rx_wrongdir++;
 			goto err;
 		}
@@ -298,9 +357,7 @@ mesh_input(struct ieee80211_node *ni, st
 		if (bpf_peers_present(vap->iv_rawbpf))
 			bpf_mtap(vap->iv_rawbpf, m);
 		vap->iv_recv_mgmt(ni, m, subtype, rssi, noise, rstamp);
-		m_freem(m);
-		return IEEE80211_FC0_TYPE_MGT;
-
+		goto out;
 	case IEEE80211_FC0_TYPE_CTL:
 		vap->iv_stats.is_rx_ctl++;
 		IEEE80211_NODE_STAT(ni, rx_ctrl);

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Sun May 10 20:41:52 2009	(r191981)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Sun May 10 21:01:33 2009	(r191982)
@@ -202,6 +202,8 @@ ieee80211_start(struct ifnet *ifp)
 				 */
 				/* XXX only if dwds in use? */
 				ieee80211_dwds_mcast(vap, m);
+			} else if (vap->iv_opmode == IEEE80211_M_MBSS) {
+				
 			}
 		}
 		ni = ieee80211_find_txnode(vap, eh->ether_dhost);
@@ -499,6 +501,7 @@ ieee80211_send_setup(
 			IEEE80211_ADDR_COPY(wh->i_addr3, sa);
 			break;
 		case IEEE80211_M_WDS:
+		case IEEE80211_M_MBSS:	/* XXX confirm */
 			wh->i_fc[1] = IEEE80211_FC1_DIR_DSTODS;
 			IEEE80211_ADDR_COPY(wh->i_addr1, da);
 			IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr);
@@ -507,9 +510,6 @@ ieee80211_send_setup(
 			break;
 		case IEEE80211_M_MONITOR:	/* NB: to quiet compiler */
 			break;
-		case IEEE80211_M_MBSS:
-			/* XXXRP TBD */
-			break;
 		}
 	} else {
 		wh->i_fc[1] = IEEE80211_FC1_DIR_NODS;

From owner-svn-src-projects@FreeBSD.ORG  Mon May 11 18:20:35 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 3BDAB1065674;
	Mon, 11 May 2009 18:20:35 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 104118FC14;
	Mon, 11 May 2009 18:20:35 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4BIKY8w098598;
	Mon, 11 May 2009 18:20:34 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4BIKYv6098596;
	Mon, 11 May 2009 18:20:34 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905111820.n4BIKYv6098596@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Mon, 11 May 2009 18:20:34 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r191997 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 11 May 2009 18:20:35 -0000

Author: rpaulo
Date: Mon May 11 18:20:34 2009
New Revision: 191997
URL: http://svn.freebsd.org/changeset/base/191997

Log:
  Checkpoint input data processing.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_mesh.h

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Mon May 11 17:29:11 2009	(r191996)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Mon May 11 18:20:34 2009	(r191997)
@@ -264,7 +264,10 @@ mesh_input(struct ieee80211_node *ni, st
 
 	switch (type) {
 	case IEEE80211_FC0_TYPE_DATA:
-		hdrspace = ieee80211_hdrspace(ic, wh);
+		IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, ni,
+		    "%s", "received data frame");
+		hdrspace = ieee80211_hdrspace(ic, wh)
+		    + sizeof(struct ieee80211_meshcontrol);
 		if (m->m_len < hdrspace &&
 		    (m = m_pullup(m, hdrspace)) == NULL) {
 			IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
@@ -291,7 +294,6 @@ mesh_input(struct ieee80211_node *ni, st
 		/*
 		 * Next up, any fragmentation.
 		 */
-#if 0
 		if (!IEEE80211_IS_MULTICAST(wh->i_addr3)) {
 			m = ieee80211_defrag(ni, m, hdrspace);
 			if (m == NULL) {
@@ -299,7 +301,6 @@ mesh_input(struct ieee80211_node *ni, st
 				goto out;
 			}
 		}
-#endif
 		wh = NULL;		/* no longer valid, catch any uses */
 		if (bpf_peers_present(vap->iv_rawbpf))
 			bpf_mtap(vap->iv_rawbpf, m);
@@ -320,6 +321,7 @@ mesh_input(struct ieee80211_node *ni, st
 			IEEE80211_NODE_STAT(ni, rx_decap);
 			goto err;
 		}
+		
 		/* XXX SuperG/HT */
 		ieee80211_deliver_data(vap, ni, m);
 		return type;

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.h	Mon May 11 17:29:11 2009	(r191996)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.h	Mon May 11 18:20:34 2009	(r191997)
@@ -264,6 +264,13 @@ struct ieee80211_meshpuc_ie {
 #define	IEEE80211_ACTION_MESHPEERING_CONFIRM	1
 #define	IEEE80211_ACTION_MESHPEERING_CLOSE	2
 
+struct ieee80211_meshcontrol {
+	uint8_t		mc_flags;
+	uint8_t		mc_ttl;
+	uint32_t	mc_seq;
+	/* more mesh addresses follow */
+} __packed;
+
 void		ieee80211_mesh_attach(struct ieee80211com *);
 void		ieee80211_mesh_detach(struct ieee80211com *);
 void		ieee80211_parse_meshid(struct ieee80211_node *, const uint8_t *);

From owner-svn-src-projects@FreeBSD.ORG  Tue May 12 01:00:30 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 9D98B106566B;
	Tue, 12 May 2009 01:00:30 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 80D248FC0A;
	Tue, 12 May 2009 01:00:30 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4C10U8V006765;
	Tue, 12 May 2009 01:00:30 GMT (envelope-from kmacy@svn.freebsd.org)
Received: (from kmacy@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4C10UwR006762;
	Tue, 12 May 2009 01:00:30 GMT (envelope-from kmacy@svn.freebsd.org)
Message-Id: <200905120100.n4C10UwR006762@svn.freebsd.org>
From: Kip Macy <kmacy@FreeBSD.org>
Date: Tue, 12 May 2009 01:00:30 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192005 - projects/releng_7_xen/sys/dev/xen/console
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 May 2009 01:00:30 -0000

Author: kmacy
Date: Tue May 12 01:00:30 2009
New Revision: 192005
URL: http://svn.freebsd.org/changeset/base/192005

Log:
  convert xen console lock to a spin lock to handle case of being called from interrupt context

Modified:
  projects/releng_7_xen/sys/dev/xen/console/console.c
  projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c
  projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h

Modified: projects/releng_7_xen/sys/dev/xen/console/console.c
==============================================================================
--- projects/releng_7_xen/sys/dev/xen/console/console.c	Mon May 11 23:03:15 2009	(r192004)
+++ projects/releng_7_xen/sys/dev/xen/console/console.c	Tue May 12 01:00:30 2009	(r192005)
@@ -77,18 +77,8 @@ static unsigned int wc, wp; /* write_con
 #define	XCUNIT(x)	(minor(x))
 #define ISTTYOPEN(tp)	((tp) && ((tp)->t_state & TS_ISOPEN))
 #define CN_LOCK_INIT(x, _name) \
-        mtx_init(&x, _name, NULL, MTX_DEF|MTX_RECURSE)
+        mtx_init(&x, _name, NULL, MTX_SPIN|MTX_RECURSE)
 
-#define CN_LOCK(l)        								\
-		do {											\
-				if (panicstr == NULL)					\
-                        mtx_lock(&(l));			\
-		} while (0)
-#define CN_UNLOCK(l)        							\
-		do {											\
-				if (panicstr == NULL)					\
-                        mtx_unlock(&(l));			\
-		} while (0)
 #define CN_LOCK_ASSERT(x)    mtx_assert(&x, MA_OWNED)
 #define CN_LOCK_DESTROY(x)   mtx_destroy(&x)
 

Modified: projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c
==============================================================================
--- projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c	Mon May 11 23:03:15 2009	(r192004)
+++ projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c	Tue May 12 01:00:30 2009	(r192005)
@@ -83,25 +83,27 @@ xencons_handle_input(void *unused)
 	struct xencons_interface *intf;
 	XENCONS_RING_IDX cons, prod;
 
-	mtx_lock(&cn_mtx);
+	CN_LOCK(cn_mtx);
 	intf = xencons_interface();
 
 	cons = intf->in_cons;
 	prod = intf->in_prod;
-
+	CN_UNLOCK(cn_mtx);
+	
 	/* XXX needs locking */
 	while (cons != prod) {
 		xencons_rx(intf->in + MASK_XENCONS_IDX(cons, intf->in), 1);
 		cons++;
 	}
 
+	CN_LOCK(cn_mtx);
 	mb();
 	intf->in_cons = cons;
 
 	notify_remote_via_evtchn(xen_start_info->console_evtchn);
 
 	xencons_tx();
-	mtx_unlock(&cn_mtx);
+	CN_UNLOCK(cn_mtx);
 }
 
 void 

Modified: projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h
==============================================================================
--- projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h	Mon May 11 23:03:15 2009	(r192004)
+++ projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h	Tue May 12 01:00:30 2009	(r192005)
@@ -5,6 +5,18 @@
 #ifndef _XENCONS_RING_H
 #define _XENCONS_RING_H
 
+#define CN_LOCK(l)        								\
+		do {											\
+				if (panicstr == NULL)					\
+                        mtx_lock_spin(&(l));			\
+		} while (0)
+#define CN_UNLOCK(l)        							\
+		do {											\
+				if (panicstr == NULL)					\
+                        mtx_unlock_spin(&(l));			\
+		} while (0)
+
+
 int xencons_ring_init(void);
 int xencons_ring_send(const char *data, unsigned len);
 void xencons_rx(char *buf, unsigned len);

From owner-svn-src-projects@FreeBSD.ORG  Tue May 12 09:38:51 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id D68C01065673;
	Tue, 12 May 2009 09:38:51 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id AA1338FC1B;
	Tue, 12 May 2009 09:38:51 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4C9cpTB017164;
	Tue, 12 May 2009 09:38:51 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4C9cpJJ017162;
	Tue, 12 May 2009 09:38:51 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905120938.n4C9cpJJ017162@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Tue, 12 May 2009 09:38:51 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192014 - projects/mesh11s/sys/dev/ral
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 May 2009 09:38:52 -0000

Author: rpaulo
Date: Tue May 12 09:38:51 2009
New Revision: 192014
URL: http://svn.freebsd.org/changeset/base/192014

Log:
  Program the rx filter to handle MBSS.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/dev/ral/rt2560.c
  projects/mesh11s/sys/dev/ral/rt2661.c

Modified: projects/mesh11s/sys/dev/ral/rt2560.c
==============================================================================
--- projects/mesh11s/sys/dev/ral/rt2560.c	Tue May 12 09:28:45 2009	(r192013)
+++ projects/mesh11s/sys/dev/ral/rt2560.c	Tue May 12 09:38:51 2009	(r192014)
@@ -1350,7 +1350,8 @@ rt2560_beacon_expire(struct rt2560_softc
 	struct rt2560_tx_data *data;
 
 	if (ic->ic_opmode != IEEE80211_M_IBSS &&
-	    ic->ic_opmode != IEEE80211_M_HOSTAP)
+	    ic->ic_opmode != IEEE80211_M_HOSTAP &&
+	    ic->ic_opmode != IEEE80211_M_MBSS)
 		return;	
 
 	data = &sc->bcnq.data[sc->bcnq.next];
@@ -2705,7 +2706,8 @@ rt2560_init_locked(struct rt2560_softc *
 	tmp = RT2560_DROP_PHY_ERROR | RT2560_DROP_CRC_ERROR;
 	if (ic->ic_opmode != IEEE80211_M_MONITOR) {
 		tmp |= RT2560_DROP_CTL | RT2560_DROP_VERSION_ERROR;
-		if (ic->ic_opmode != IEEE80211_M_HOSTAP)
+		if (ic->ic_opmode != IEEE80211_M_HOSTAP &&
+		    ic->ic_opmode != IEEE80211_M_MBSS)
 			tmp |= RT2560_DROP_TODS;
 		if (!(ifp->if_flags & IFF_PROMISC))
 			tmp |= RT2560_DROP_NOT_TO_ME;

Modified: projects/mesh11s/sys/dev/ral/rt2661.c
==============================================================================
--- projects/mesh11s/sys/dev/ral/rt2661.c	Tue May 12 09:28:45 2009	(r192013)
+++ projects/mesh11s/sys/dev/ral/rt2661.c	Tue May 12 09:38:51 2009	(r192014)
@@ -2441,7 +2441,8 @@ rt2661_init_locked(struct rt2661_softc *
 	if (ic->ic_opmode != IEEE80211_M_MONITOR) {
 		tmp |= RT2661_DROP_CTL | RT2661_DROP_VER_ERROR |
 		       RT2661_DROP_ACKCTS;
-		if (ic->ic_opmode != IEEE80211_M_HOSTAP)
+		if (ic->ic_opmode != IEEE80211_M_HOSTAP &&
+		    ic->ic_opmode != IEEE80211_M_MBSS)
 			tmp |= RT2661_DROP_TODS;
 		if (!(ifp->if_flags & IFF_PROMISC))
 			tmp |= RT2661_DROP_NOT_TO_ME;

From owner-svn-src-projects@FreeBSD.ORG  Wed May 13 09:03:55 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 43115106564A;
	Wed, 13 May 2009 09:03:55 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 31B438FC0C;
	Wed, 13 May 2009 09:03:55 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4D93tsE047276;
	Wed, 13 May 2009 09:03:55 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4D93tHM047274;
	Wed, 13 May 2009 09:03:55 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905130903.n4D93tHM047274@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Wed, 13 May 2009 09:03:55 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192037 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 May 2009 09:03:55 -0000

Author: rpaulo
Date: Wed May 13 09:03:54 2009
New Revision: 192037
URL: http://svn.freebsd.org/changeset/base/192037

Log:
  Add a meshqosframe_addr struct for storing mesh data packets.
  This fixes a stack corruption problem the previous commit introduced.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211.h
  projects/mesh11s/sys/net80211/ieee80211_input.c

Modified: projects/mesh11s/sys/net80211/ieee80211.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211.h	Wed May 13 08:50:13 2009	(r192036)
+++ projects/mesh11s/sys/net80211/ieee80211.h	Wed May 13 09:03:54 2009	(r192037)
@@ -107,6 +107,20 @@ struct ieee80211_qosframe_addr4 {
 	uint8_t		i_qos[2];
 } __packed;
 
+struct ieee80211_meshqosframe_addr4 {
+	uint8_t		i_fc[2];
+	uint8_t		i_dur[2];
+	uint8_t		i_addr1[IEEE80211_ADDR_LEN];
+	uint8_t		i_addr2[IEEE80211_ADDR_LEN];
+	uint8_t		i_addr3[IEEE80211_ADDR_LEN];
+	uint8_t		i_seq[2];
+	uint8_t		i_addr4[IEEE80211_ADDR_LEN];
+	uint8_t		i_qos[2];
+	uint8_t		i_mflags;	/* address extension flags */
+	uint8_t		i_mttl;		/* mesh ttl */
+	uint8_t		i_mseq[4];	/* mesh sequence no */
+} __packed;
+
 #define	IEEE80211_FC0_VERSION_MASK		0x03
 #define	IEEE80211_FC0_VERSION_SHIFT		0
 #define	IEEE80211_FC0_VERSION_0			0x00

Modified: projects/mesh11s/sys/net80211/ieee80211_input.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_input.c	Wed May 13 08:50:13 2009	(r192036)
+++ projects/mesh11s/sys/net80211/ieee80211_input.c	Wed May 13 09:03:54 2009	(r192037)
@@ -226,7 +226,7 @@ ieee80211_deliver_data(struct ieee80211v
 struct mbuf *
 ieee80211_decap(struct ieee80211vap *vap, struct mbuf *m, int hdrlen)
 {
-	struct ieee80211_qosframe_addr4 wh;	/* Max size address frames */
+	struct ieee80211_meshqosframe_addr4 wh;	/* Max size address frames */
 	struct ether_header *eh;
 	struct llc *llc;
 

From owner-svn-src-projects@FreeBSD.ORG  Wed May 13 10:16:31 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id B6FFA106566B;
	Wed, 13 May 2009 10:16:31 +0000 (UTC)
	(envelope-from rwatson@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id A41EA8FC1E;
	Wed, 13 May 2009 10:16:31 +0000 (UTC)
	(envelope-from rwatson@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4DAGVQi048772;
	Wed, 13 May 2009 10:16:31 GMT (envelope-from rwatson@svn.freebsd.org)
Received: (from rwatson@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4DAGVLR048770;
	Wed, 13 May 2009 10:16:31 GMT (envelope-from rwatson@svn.freebsd.org)
Message-Id: <200905131016.n4DAGVLR048770@svn.freebsd.org>
From: Robert Watson <rwatson@FreeBSD.org>
Date: Wed, 13 May 2009 10:16:31 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192038 - in projects/pnet/sys: net sys
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 May 2009 10:16:32 -0000

Author: rwatson
Date: Wed May 13 10:16:31 2009
New Revision: 192038
URL: http://svn.freebsd.org/changeset/base/192038

Log:
  Use SWIs for netisr2 rather than kthreads -- SWIs have a slightly
  more efficient wakeup routine (since they don't need to look up
  sleep queues).
  
  Suggested by:	jhb

Modified:
  projects/pnet/sys/net/netisr2.c
  projects/pnet/sys/sys/pcpu.h

Modified: projects/pnet/sys/net/netisr2.c
==============================================================================
--- projects/pnet/sys/net/netisr2.c	Wed May 13 09:03:54 2009	(r192037)
+++ projects/pnet/sys/net/netisr2.c	Wed May 13 10:16:31 2009	(r192038)
@@ -69,7 +69,6 @@ __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
 #include <sys/bus.h>
-#include <sys/condvar.h>
 #include <sys/kernel.h>
 #include <sys/kthread.h>
 #include <sys/interrupt.h>
@@ -196,11 +195,12 @@ struct netisr_work {
  * Currently, #workstreams must equal #CPUs.
  */
 struct netisr_workstream {
-	struct thread	*nws_thread;		/* Thread serving stream. */
+	struct intr_event *nws_intr_event;	/* Handler for stream. */
+	void		*nws_swi_cookie;	/* swi(9) cookie for stream. */
 	struct mtx	 nws_mtx;		/* Synchronize work. */
-	struct cv	 nws_cv;		/* Wake up worker. */
 	u_int		 nws_cpu;		/* CPU pinning. */
 	u_int		 nws_flags;		/* Wakeup flags. */
+	u_int		 nws_swi_flags;		/* Flags used in swi. */
 
 	u_int		 nws_pendingwork;	/* Across all protos. */
 	/*
@@ -210,11 +210,6 @@ struct netisr_workstream {
 } __aligned(CACHE_LINE_SIZE);
 
 /*
- * Kernel process associated with worker threads.
- */
-static struct proc			*netisr2_proc;
-
-/*
  * Per-CPU workstream data, indexed by CPU ID.
  */
 static struct netisr_workstream		 nws[MAXCPU];
@@ -239,15 +234,19 @@ static u_int				 nws_count;
 #define	NWS_SIGNALED	0x00000002	/* Signal issued. */
 
 /*
+ * Flags used internally to the SWI handler -- no locking required.
+ */
+#define	NWS_SWI_BOUND	0x00000001	/* SWI bound to CPU. */
+
+/*
  * Synchronization for each workstream: a mutex protects all mutable fields
- * in each stream, including per-protocol state (mbuf queues).  The CV will
- * be used to wake up the worker if asynchronous dispatch is required.
+ * in each stream, including per-protocol state (mbuf queues).  The SWI is
+ * woken up if asynchronous dispatch is required.
  */
 #define	NWS_LOCK(s)		mtx_lock(&(s)->nws_mtx)
 #define	NWS_LOCK_ASSERT(s)	mtx_assert(&(s)->nws_mtx, MA_OWNED)
 #define	NWS_UNLOCK(s)		mtx_unlock(&(s)->nws_mtx)
-#define	NWS_SIGNAL(s)		cv_signal(&(s)->nws_cv)
-#define	NWS_WAIT(s)		cv_wait(&(s)->nws_cv, &(s)->nws_mtx)
+#define	NWS_SIGNAL(s)		swi_sched((s)->nws_swi_cookie, 0)
 
 /*
  * Utility routines for protocols that implement their own mapping of flows
@@ -498,38 +497,33 @@ netisr2_process_workstream(struct netisr
 }
 
 /*
- * Worker thread that waits for and processes packets in a set of workstreams
- * that it owns.  Each thread has one cv, which is uses for all workstreams
- * it handles.
+ * SWI handler for netisr2 -- processes prackets in a set of workstreams that
+ * it owns.
  */
 static void
-netisr2_worker(void *arg)
+swi_net(void *arg)
 {
 	struct netisr_workstream *nwsp;
 
 	nwsp = arg;
 
-	thread_lock(curthread);
-	sched_prio(curthread, SWI_NET * RQ_PPQ + PI_SOFT);
-	sched_bind(curthread, nwsp->nws_cpu);
-	thread_unlock(curthread);
-
 	/*
-	 * Main work loop.  In the future we will want to support stopping
-	 * workers, as well as re-balancing work, in which case we'll need to
-	 * also handle state transitions.
-	 *
-	 * XXXRW: netisr_rwlock.
+	 * On first execution, force the ithread to the desired CPU.  There
+	 * should be a better way to do this.
 	 */
+	if (!(nwsp->nws_swi_flags & NWS_SWI_BOUND)) {
+		thread_lock(curthread);
+		sched_bind(curthread, nwsp->nws_cpu);
+		thread_unlock(curthread);
+		nwsp->nws_swi_flags |= NWS_SWI_BOUND;
+	}
+
 	NWS_LOCK(nwsp);
-	while (1) {
-		while (nwsp->nws_pendingwork == 0) {
-			nwsp->nws_flags &= ~(NWS_SIGNALED | NWS_RUNNING);
-			NWS_WAIT(nwsp);
-			nwsp->nws_flags |= NWS_RUNNING;
-		}
+	nwsp->nws_flags |= NWS_RUNNING;
+	while (nwsp->nws_pendingwork != 0)
 		netisr2_process_workstream(nwsp, NETISR_ALLPROT);
-	}
+	nwsp->nws_flags &= ~(NWS_SIGNALED | NWS_RUNNING);
+	NWS_UNLOCK(nwsp);
 }
 
 static int
@@ -624,6 +618,26 @@ netisr2_dispatch(u_int proto, uintptr_t 
 	return (0);
 }
 
+static void
+netisr2_start_swi(u_int cpuid, struct pcpu *pc)
+{
+	char swiname[12];
+	struct netisr_workstream *nwsp;
+	int error;
+
+	nwsp = &nws[cpuid];
+	mtx_init(&nwsp->nws_mtx, "netisr2_mtx", NULL, MTX_DEF);
+	nwsp->nws_cpu = cpuid;
+	snprintf(swiname, sizeof(swiname), "netisr2: %d", cpuid);
+	error = swi_add(&nwsp->nws_intr_event, swiname, swi_net, nwsp,
+	    SWI_NET, INTR_MPSAFE, &nwsp->nws_swi_cookie);
+	if (error)
+		panic("netisr2_init: swi_add %d", error);
+	pc->pc_netisr2 = nwsp->nws_intr_event;
+	nws_array[nws_count] = nwsp->nws_cpu;
+	nws_count++;
+}
+
 /*
  * Initialize the netisr subsystem.  We rely on BSS and static initialization
  * of most fields in global data structures.
@@ -635,30 +649,16 @@ netisr2_dispatch(u_int proto, uintptr_t 
 static void
 netisr2_init(void *arg)
 {
-	struct netisr_workstream *nwsp;
-	u_int cpuid;
-	int error;
 
 	KASSERT(curcpu == 0, ("netisr2_init: not on CPU 0"));
 
 	NETISR_LOCK_INIT();
-
-	KASSERT(PCPU_GET(netisr2) == NULL, ("netisr2_init: pc_netisr2"));
-
-	cpuid = curcpu;
-	nwsp = &nws[cpuid];
-	mtx_init(&nwsp->nws_mtx, "netisr2_mtx", NULL, MTX_DEF);
-	cv_init(&nwsp->nws_cv, "netisr2_cv");
-	nwsp->nws_cpu = cpuid;
-	error = kproc_kthread_add(netisr2_worker, nwsp, &netisr2_proc,
-	    &nwsp->nws_thread, 0, 0, "netisr2", "netisr2: cpu%d", cpuid);
-	PCPU_SET(netisr2, nwsp->nws_thread);
-	if (error)
-		panic("netisr2_init: kproc_kthread_add %d", error);
-	nws_array[nws_count] = nwsp->nws_cpu;
-	nws_count++;
 	if (netisr_maxthreads < 1)
 		netisr_maxthreads = 1;
+	if (netisr_maxthreads > MAXCPU)
+		netisr_maxthreads = MAXCPU;
+
+	netisr2_start_swi(curcpu, pcpu_find(curcpu));
 }
 SYSINIT(netisr2_init, SI_SUB_SOFTINTR, SI_ORDER_FIRST, netisr2_init, NULL);
 
@@ -669,9 +669,7 @@ SYSINIT(netisr2_init, SI_SUB_SOFTINTR, S
 static void
 netisr2_start(void *arg)
 {
-	struct netisr_workstream *nwsp;
 	struct pcpu *pc;
-	int error;
 
 	SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
 		if (nws_count >= netisr_maxthreads)
@@ -682,18 +680,7 @@ netisr2_start(void *arg)
 		/* Worker will already be present for boot CPU. */
 		if (pc->pc_netisr2 != NULL)
 			continue;
-		nwsp = &nws[pc->pc_cpuid];
-		mtx_init(&nwsp->nws_mtx, "netisr2_mtx", NULL, MTX_DEF);
-		cv_init(&nwsp->nws_cv, "netisr2_cv");
-		nwsp->nws_cpu = pc->pc_cpuid;
-		error = kproc_kthread_add(netisr2_worker, nwsp,
-		    &netisr2_proc, &nwsp->nws_thread, 0, 0, "netisr2",
-		    "netisr2: cpu%d", pc->pc_cpuid);
-		pc->pc_netisr2 = nwsp->nws_thread;
-		if (error)
-			panic("netisr2_start: kproc_kthread_add %d", error);
-		nws_array[nws_count] = pc->pc_cpuid;
-		nws_count++;
+		netisr2_start_swi(pc->pc_cpuid, pc);
 	}
 }
 SYSINIT(netisr2_start, SI_SUB_SMP, SI_ORDER_MIDDLE, netisr2_start, NULL);
@@ -709,7 +696,7 @@ DB_SHOW_COMMAND(netisr2, db_show_netisr2
 	    "Proto", "Len", "WMark", "Max", "Disp", "Drop", "Queue", "Handle");
 	for (cpu = 0; cpu < MAXCPU; cpu++) {
 		nwsp = &nws[cpu];
-		if (nwsp->nws_thread == NULL)
+		if (nwsp->nws_intr_event == NULL)
 			continue;
 		first = 1;
 		for (proto = 0; proto < NETISR_MAXPROT; proto++) {

Modified: projects/pnet/sys/sys/pcpu.h
==============================================================================
--- projects/pnet/sys/sys/pcpu.h	Wed May 13 09:03:54 2009	(r192037)
+++ projects/pnet/sys/sys/pcpu.h	Wed May 13 10:16:31 2009	(r192038)
@@ -86,6 +86,7 @@ struct pcpu {
 	struct vmmeter	pc_cnt;			/* VM stats counters */
 	long		pc_cp_time[CPUSTATES];	/* statclock ticks */
 	struct device	*pc_device;
+	void		*pc_netisr2;		/* netisr2 SWI cookie. */
 
 	/* 
 	 * Stuff for read mostly lock

From owner-svn-src-projects@FreeBSD.ORG  Wed May 13 12:19:54 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 8B0B6106566B;
	Wed, 13 May 2009 12:19:54 +0000 (UTC)
	(envelope-from rwatson@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 793088FC0C;
	Wed, 13 May 2009 12:19:54 +0000 (UTC)
	(envelope-from rwatson@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4DCJspH056138;
	Wed, 13 May 2009 12:19:54 GMT (envelope-from rwatson@svn.freebsd.org)
Received: (from rwatson@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4DCJsmo056137;
	Wed, 13 May 2009 12:19:54 GMT (envelope-from rwatson@svn.freebsd.org)
Message-Id: <200905131219.n4DCJsmo056137@svn.freebsd.org>
From: Robert Watson <rwatson@FreeBSD.org>
Date: Wed, 13 May 2009 12:19:54 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192039 - projects/pnet/sys/net
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 May 2009 12:19:54 -0000

Author: rwatson
Date: Wed May 13 12:19:54 2009
New Revision: 192039
URL: http://svn.freebsd.org/changeset/base/192039

Log:
  Create at most one thread by default -- we want this to be a drop-in
  replacement for netisr1 in 8.0, so don't want to deal with full
  performance evaluation of the MP case yet.
  
  Add a tunable/sysctl to disable binding threads to CPUs, and set that
  by default, as we'll be using just one netisr by default.

Modified:
  projects/pnet/sys/net/netisr2.c

Modified: projects/pnet/sys/net/netisr2.c
==============================================================================
--- projects/pnet/sys/net/netisr2.c	Wed May 13 10:16:31 2009	(r192038)
+++ projects/pnet/sys/net/netisr2.c	Wed May 13 12:19:54 2009	(r192039)
@@ -132,11 +132,16 @@ SYSCTL_INT(_net_isr2, OID_AUTO, direct, 
  * thread for CPU 0, so in practice we ignore values <= 1.  This must be set
  * as a tunable, no run-time reconfiguration yet.
  */
-static int	netisr_maxthreads = MAXCPU;	/* Bound number of threads. */
+static int	netisr_maxthreads = 1;		/* Max number of threads. */
 TUNABLE_INT("net.isr2.maxthreads", &netisr_maxthreads);
 SYSCTL_INT(_net_isr2, OID_AUTO, maxthreads, CTLFLAG_RD, &netisr_maxthreads,
     0, "Use at most this many CPUs for netisr2 processing");
 
+static int	netisr_bindthreads = 0;		/* Bind threads to CPUs. */
+TUNABLE_INT("net.isr2.bindthreads", &netisr_bindthreads);
+SYSCTL_INT(_net_isr2, OID_AUTO, bindthreads, CTLFLAG_RD, &netisr_bindthreads,
+    0, "Bind netisr2 threads to CPUs.");
+
 /*
  * Each protocol is described by an instance of netisr_proto, which holds all
  * global per-protocol information.  This data structure is set up by
@@ -511,7 +516,7 @@ swi_net(void *arg)
 	 * On first execution, force the ithread to the desired CPU.  There
 	 * should be a better way to do this.
 	 */
-	if (!(nwsp->nws_swi_flags & NWS_SWI_BOUND)) {
+	if (netisr_bindthreads && !(nwsp->nws_swi_flags & NWS_SWI_BOUND)) {
 		thread_lock(curthread);
 		sched_bind(curthread, nwsp->nws_cpu);
 		thread_unlock(curthread);

From owner-svn-src-projects@FreeBSD.ORG  Wed May 13 15:07:26 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 5613C1065670;
	Wed, 13 May 2009 15:07:26 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 44E3E8FC18;
	Wed, 13 May 2009 15:07:26 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4DF7QAn059681;
	Wed, 13 May 2009 15:07:26 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4DF7QQK059680;
	Wed, 13 May 2009 15:07:26 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905131507.n4DF7QQK059680@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Wed, 13 May 2009 15:07:26 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192044 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 May 2009 15:07:26 -0000

Author: rpaulo
Date: Wed May 13 15:07:26 2009
New Revision: 192044
URL: http://svn.freebsd.org/changeset/base/192044

Log:
  Use an enum for mesh peering actions.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.h

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.h	Wed May 13 14:43:26 2009	(r192043)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.h	Wed May 13 15:07:26 2009	(r192044)
@@ -260,9 +260,11 @@ struct ieee80211_meshpuc_ie {
 #define	IEEE80211_ACTION_CAT_RESOURCE		16
 #define	IEEE80211_ACTION_CAT_PROXY		17
 
-#define	IEEE80211_ACTION_MESHPEERING_OPEN	0
-#define	IEEE80211_ACTION_MESHPEERING_CONFIRM	1
-#define	IEEE80211_ACTION_MESHPEERING_CLOSE	2
+enum {
+	IEEE80211_ACTION_MESHPEERING_OPEN	= 0,
+	IEEE80211_ACTION_MESHPEERING_CONFIRM	= 1,
+	IEEE80211_ACTION_MESHPEERING_CLOSE	= 2,
+};
 
 struct ieee80211_meshcontrol {
 	uint8_t		mc_flags;
@@ -280,5 +282,5 @@ uint8_t *	ieee80211_add_meshpeer(uint8_t
 		    uint16_t);
 void		ieee80211_create_mbss(struct ieee80211vap *, struct
 		    ieee80211_channel *);
-
+uint32_t	ieee80211_mesh_getseq(void);
 #endif /* !_NET80211_IEEE80211_MESH_H_ */

From owner-svn-src-projects@FreeBSD.ORG  Wed May 13 15:09:02 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 298F31065673;
	Wed, 13 May 2009 15:09:02 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 17DB38FC16;
	Wed, 13 May 2009 15:09:02 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4DF91J3059745;
	Wed, 13 May 2009 15:09:01 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4DF91SN059743;
	Wed, 13 May 2009 15:09:01 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905131509.n4DF91SN059743@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Wed, 13 May 2009 15:09:01 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192045 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 13 May 2009 15:09:02 -0000

Author: rpaulo
Date: Wed May 13 15:09:01 2009
New Revision: 192045
URL: http://svn.freebsd.org/changeset/base/192045

Log:
  Handle atheros superg and HT on input.
  Handle output data frames. XXX: not sure what's happening to the header
  lenght.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_output.c

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Wed May 13 15:07:26 2009	(r192044)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Wed May 13 15:09:01 2009	(r192045)
@@ -266,6 +266,7 @@ mesh_input(struct ieee80211_node *ni, st
 	case IEEE80211_FC0_TYPE_DATA:
 		IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, ni,
 		    "%s", "received data frame");
+		/* XXX: make sure we already peered with this node */
 		hdrspace = ieee80211_hdrspace(ic, wh)
 		    + sizeof(struct ieee80211_meshcontrol);
 		if (m->m_len < hdrspace &&
@@ -294,7 +295,7 @@ mesh_input(struct ieee80211_node *ni, st
 		/*
 		 * Next up, any fragmentation.
 		 */
-		if (!IEEE80211_IS_MULTICAST(wh->i_addr3)) {
+		if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) {
 			m = ieee80211_defrag(ni, m, hdrspace);
 			if (m == NULL) {
 				/* Fragment dropped or frame not complete yet */
@@ -321,7 +322,18 @@ mesh_input(struct ieee80211_node *ni, st
 			IEEE80211_NODE_STAT(ni, rx_decap);
 			goto err;
 		}
-		
+		/* XXX require HT? */
+		if (qos & IEEE80211_QOS_AMSDU) {
+			m = ieee80211_decap_amsdu(ni, m);
+			if (m == NULL)
+				return IEEE80211_FC0_TYPE_DATA;
+		} else {
+#ifdef IEEE80211_SUPPORT_SUPERG
+			m = ieee80211_decap_fastframe(vap, ni, m);
+			if (m == NULL)
+				return IEEE80211_FC0_TYPE_DATA;
+#endif
+		}		
 		/* XXX SuperG/HT */
 		ieee80211_deliver_data(vap, ni, m);
 		return type;
@@ -1095,6 +1107,14 @@ ieee80211_create_mbss(struct ieee80211va
 	ieee80211_new_state(vap, IEEE80211_S_RUN, -1);
 }
 
+uint32_t
+ieee80211_mesh_getseq(void)
+{
+	static uint32_t seq = 0;
+	
+	return seq++;
+}
+
 static int
 mesh_ioctl_get80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
 {

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Wed May 13 15:07:26 2009	(r192044)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Wed May 13 15:09:01 2009	(r192045)
@@ -1216,6 +1216,7 @@ ieee80211_encap(struct ieee80211vap *vap
 	 */
 	addqos = (ni->ni_flags & (IEEE80211_NODE_QOS|IEEE80211_NODE_HT)) &&
 		 (m->m_flags & M_EAPOL) == 0;
+	addqos = 1;
 	if (addqos)
 		hdrsize = sizeof(struct ieee80211_qosframe);
 	else
@@ -1223,15 +1224,22 @@ ieee80211_encap(struct ieee80211vap *vap
 	/*
 	 * 4-address frames need to be generated for:
 	 * o packets sent through a WDS vap (IEEE80211_M_WDS)
+	 * o packets sent through a Mesh vap (IEEE80211_M_MBSS)
 	 * o packets sent through a vap marked for relaying
 	 *   (e.g. a station operating with dynamic WDS)
 	 */
 	is4addr = vap->iv_opmode == IEEE80211_M_WDS ||
+	    vap->iv_opmode == IEEE80211_M_MBSS ||
 	    ((vap->iv_flags_ext & IEEE80211_FEXT_4ADDR) &&
 	     !IEEE80211_ADDR_EQ(eh.ether_shost, vap->iv_myaddr));
 	if (is4addr)
 		hdrsize += IEEE80211_ADDR_LEN;
 	/*
+	 * All Mesh data frames have a Mesh Control field.
+	 */
+	if (vap->iv_opmode == IEEE80211_M_MBSS)
+		hdrsize += sizeof(struct ieee80211_meshcontrol);
+	/*
 	 * Honor driver DATAPAD requirement.
 	 */
 	if (ic->ic_flags & IEEE80211_F_DATAPAD)
@@ -1268,7 +1276,7 @@ ieee80211_encap(struct ieee80211vap *vap
 			goto bad;
 	}
 	datalen = m->m_pkthdr.len;		/* NB: w/o 802.11 header */
-
+	hdrspace -= 2;
 	M_PREPEND(m, hdrspace, M_DONTWAIT);
 	if (m == NULL) {
 		vap->iv_stats.is_tx_nobuf++;
@@ -1307,9 +1315,15 @@ ieee80211_encap(struct ieee80211vap *vap
 		IEEE80211_ADDR_COPY(wh->i_addr2, ni->ni_bssid);
 		IEEE80211_ADDR_COPY(wh->i_addr3, eh.ether_shost);
 		break;
+	case IEEE80211_M_MBSS:
+		wh->i_fc[1] = IEEE80211_FC1_DIR_DSTODS;
+		IEEE80211_ADDR_COPY(wh->i_addr1, ni->ni_macaddr);
+		IEEE80211_ADDR_COPY(wh->i_addr2, vap->iv_myaddr);
+		IEEE80211_ADDR_COPY(wh->i_addr3, eh.ether_dhost);
+		IEEE80211_ADDR_COPY(WH4(wh)->i_addr4, eh.ether_shost);
+		break;
 	case IEEE80211_M_MONITOR:
 	case IEEE80211_M_WDS:		/* NB: is4addr should always be true */
-	case IEEE80211_M_MBSS:
 		goto bad;
 	}
 	if (m->m_flags & M_MORE_DATA)
@@ -1349,6 +1363,19 @@ ieee80211_encap(struct ieee80211vap *vap
 			    htole16(seqno << IEEE80211_SEQ_SEQ_SHIFT);
 			M_SEQNO_SET(m, seqno);
 		}
+		if (vap->iv_opmode == IEEE80211_M_MBSS) {
+			struct ieee80211_meshqosframe_addr4 *mwh;
+			uint32_t seq;
+				
+			mwh = (struct ieee80211_meshqosframe_addr4 *)wh;
+			mwh->i_mflags	= 0;	/* address extension bit */
+			mwh->i_mttl	= 160;
+			seq = ieee80211_mesh_getseq();
+			mwh->i_mseq[0] = seq & 0xff;
+			mwh->i_mseq[1] = (seq >> 8) & 0xff;
+			mwh->i_mseq[2] = (seq >> 16) & 0xff;
+			mwh->i_mseq[3] = (seq >> 24) & 0xff;
+		}
 	} else {
 		seqno = ni->ni_txseqs[IEEE80211_NONQOS_TID]++;
 		*(uint16_t *)wh->i_seq =
@@ -1356,6 +1383,7 @@ ieee80211_encap(struct ieee80211vap *vap
 		M_SEQNO_SET(m, seqno);
 	}
 
+
 	/* check if xmit fragmentation is required */
 	txfrag = (m->m_pkthdr.len > vap->iv_fragthreshold &&
 	    !IEEE80211_IS_MULTICAST(wh->i_addr1) &&

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 03:51:55 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 612A0106566B;
	Thu, 14 May 2009 03:51:55 +0000 (UTC)
	(envelope-from brooks@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 4E8F08FC17;
	Thu, 14 May 2009 03:51:55 +0000 (UTC)
	(envelope-from brooks@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4E3prbg076342;
	Thu, 14 May 2009 03:51:53 GMT (envelope-from brooks@svn.freebsd.org)
Received: (from brooks@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4E3prO8076340;
	Thu, 14 May 2009 03:51:53 GMT (envelope-from brooks@svn.freebsd.org)
Message-Id: <200905140351.n4E3prO8076340@svn.freebsd.org>
From: Brooks Davis <brooks@FreeBSD.org>
Date: Thu, 14 May 2009 03:51:53 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192083 - in projects/ngroups: lib/libc/rpc
	usr.sbin/mountd
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 03:51:55 -0000

Author: brooks
Date: Thu May 14 03:51:53 2009
New Revision: 192083
URL: http://svn.freebsd.org/changeset/base/192083

Log:
  Switch a couple instances of NGROUPS to NGRPS where the use case is RPC
  credentials.

Modified:
  projects/ngroups/lib/libc/rpc/netnamer.c
  projects/ngroups/usr.sbin/mountd/mountd.c

Modified: projects/ngroups/lib/libc/rpc/netnamer.c
==============================================================================
--- projects/ngroups/lib/libc/rpc/netnamer.c	Thu May 14 03:42:58 2009	(r192082)
+++ projects/ngroups/lib/libc/rpc/netnamer.c	Thu May 14 03:51:53 2009	(r192083)
@@ -66,10 +66,6 @@ static char    *NETIDFILE = "/etc/netid"
 static int getnetid( char *, char * );
 static int _getgroups( char *, gid_t * );
 
-#ifndef NGROUPS
-#define NGROUPS 16
-#endif
-
 /*
  * Convert network-name into unix credential
  */
@@ -104,7 +100,7 @@ netname2user(netname, uidp, gidp, gidlen
 			return (0);
 		}
 		*gidp = (gid_t) atol(p);
-		for (gidlen = 0; gidlen < NGROUPS; gidlen++) {
+		for (gidlen = 0; gidlen < NGRPS; gidlen++) {
 			p = strsep(&res, "\n,");
 			if (p == NULL)
 				break;
@@ -157,7 +153,7 @@ netname2user(netname, uidp, gidp, gidlen
 static int
 _getgroups(uname, groups)
 	char           *uname;
-	gid_t          groups[NGROUPS];
+	gid_t          groups[NGRPS];
 {
 	gid_t           ngroups = 0;
 	struct group *grp;
@@ -169,7 +165,7 @@ _getgroups(uname, groups)
 	while ((grp = getgrent())) {
 		for (i = 0; grp->gr_mem[i]; i++)
 			if (!strcmp(grp->gr_mem[i], uname)) {
-				if (ngroups == NGROUPS) {
+				if (ngroups == NGRPS) {
 #ifdef DEBUG
 					fprintf(stderr,
 				"initgroups: %s is in too many groups\n", uname);

Modified: projects/ngroups/usr.sbin/mountd/mountd.c
==============================================================================
--- projects/ngroups/usr.sbin/mountd/mountd.c	Thu May 14 03:42:58 2009	(r192082)
+++ projects/ngroups/usr.sbin/mountd/mountd.c	Thu May 14 03:51:53 2009	(r192083)
@@ -2473,7 +2473,7 @@ parsecred(namelist, cr)
 	char *names;
 	struct passwd *pw;
 	struct group *gr;
-	gid_t groups[NGROUPS + 1];
+	gid_t groups[NGRPS + 1];
 	int ngroups;
 
 	cr->cr_version = XUCRED_VERSION;
@@ -2501,7 +2501,7 @@ parsecred(namelist, cr)
 			return;
 		}
 		cr->cr_uid = pw->pw_uid;
-		ngroups = NGROUPS + 1;
+		ngroups = NGRPS + 1;
 		if (getgrouplist(pw->pw_name, pw->pw_gid, groups, &ngroups))
 			syslog(LOG_ERR, "too many groups");
 		/*
@@ -2526,7 +2526,7 @@ parsecred(namelist, cr)
 		return;
 	}
 	cr->cr_ngroups = 0;
-	while (names != NULL && *names != '\0' && cr->cr_ngroups < NGROUPS) {
+	while (names != NULL && *names != '\0' && cr->cr_ngroups < NGRPS) {
 		name = strsep(&names, ":");
 		if (isdigit(*name) || *name == '-') {
 			cr->cr_groups[cr->cr_ngroups++] = atoi(name);
@@ -2538,7 +2538,7 @@ parsecred(namelist, cr)
 			cr->cr_groups[cr->cr_ngroups++] = gr->gr_gid;
 		}
 	}
-	if (names != NULL && *names != '\0' && cr->cr_ngroups == NGROUPS)
+	if (names != NULL && *names != '\0' && cr->cr_ngroups == NGRPS)
 		syslog(LOG_ERR, "too many groups");
 }
 

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 03:54:04 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 53CF6106564A;
	Thu, 14 May 2009 03:54:04 +0000 (UTC)
	(envelope-from brooks@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 420CF8FC12;
	Thu, 14 May 2009 03:54:04 +0000 (UTC)
	(envelope-from brooks@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4E3s4Yr076418;
	Thu, 14 May 2009 03:54:04 GMT (envelope-from brooks@svn.freebsd.org)
Received: (from brooks@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4E3s4Op076417;
	Thu, 14 May 2009 03:54:04 GMT (envelope-from brooks@svn.freebsd.org)
Message-Id: <200905140354.n4E3s4Op076417@svn.freebsd.org>
From: Brooks Davis <brooks@FreeBSD.org>
Date: Thu, 14 May 2009 03:54:04 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192084 - projects/ngroups/lib/libkvm
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 03:54:04 -0000

Author: brooks
Date: Thu May 14 03:54:03 2009
New Revision: 192084
URL: http://svn.freebsd.org/changeset/base/192084

Log:
  Only copy as many groups from cr_groups to ki_groups as will fit.
  Truncate if there are too many.

Modified:
  projects/ngroups/lib/libkvm/kvm_proc.c

Modified: projects/ngroups/lib/libkvm/kvm_proc.c
==============================================================================
--- projects/ngroups/lib/libkvm/kvm_proc.c	Thu May 14 03:51:53 2009	(r192083)
+++ projects/ngroups/lib/libkvm/kvm_proc.c	Thu May 14 03:54:03 2009	(r192084)
@@ -147,7 +147,8 @@ kvm_proclist(kd, what, arg, p, bp, maxcn
 			kp->ki_svgid = ucred.cr_svgid;
 			kp->ki_ngroups = ucred.cr_ngroups;
 			bcopy(ucred.cr_groups, kp->ki_groups,
-			    NGROUPS * sizeof(gid_t));
+			    (NGROUPS < KI_NGROUPS ? NGROUPS : KI_NGROUPS) *
+			    sizeof(gid_t));
 			kp->ki_uid = ucred.cr_uid;
 			if (ucred.cr_prison != NULL) {
 				if (KREAD(kd, (u_long)ucred.cr_prison, &pr)) {

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 06:48:39 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 318761065675;
	Thu, 14 May 2009 06:48:39 +0000 (UTC)
	(envelope-from brooks@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 201768FC08;
	Thu, 14 May 2009 06:48:39 +0000 (UTC)
	(envelope-from brooks@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4E6md03079839;
	Thu, 14 May 2009 06:48:39 GMT (envelope-from brooks@svn.freebsd.org)
Received: (from brooks@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4E6md8f079838;
	Thu, 14 May 2009 06:48:39 GMT (envelope-from brooks@svn.freebsd.org)
Message-Id: <200905140648.n4E6md8f079838@svn.freebsd.org>
From: Brooks Davis <brooks@FreeBSD.org>
Date: Thu, 14 May 2009 06:48:38 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192086 - projects/ngroups/lib/libc/rpc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 06:48:39 -0000

Author: brooks
Date: Thu May 14 06:48:38 2009
New Revision: 192086
URL: http://svn.freebsd.org/changeset/base/192086

Log:
  Don't ifndef NGROUPS for a base system program.  If it's not defined,
  we shouldn't be using it.

Modified:
  projects/ngroups/lib/libc/rpc/netname.c

Modified: projects/ngroups/lib/libc/rpc/netname.c
==============================================================================
--- projects/ngroups/lib/libc/rpc/netname.c	Thu May 14 05:27:09 2009	(r192085)
+++ projects/ngroups/lib/libc/rpc/netname.c	Thu May 14 06:48:38 2009	(r192086)
@@ -61,9 +61,6 @@ __FBSDID("$FreeBSD$");
 #ifndef MAXHOSTNAMELEN
 #define MAXHOSTNAMELEN 256
 #endif
-#ifndef NGROUPS
-#define NGROUPS 16
-#endif
 
 #define TYPE_BIT(type)  (sizeof (type) * CHAR_BIT)
 

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 06:50:31 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 865DB106566B;
	Thu, 14 May 2009 06:50:31 +0000 (UTC)
	(envelope-from brooks@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 70FCB8FC19;
	Thu, 14 May 2009 06:50:31 +0000 (UTC)
	(envelope-from brooks@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4E6oVjx079922;
	Thu, 14 May 2009 06:50:31 GMT (envelope-from brooks@svn.freebsd.org)
Received: (from brooks@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4E6oURU079910;
	Thu, 14 May 2009 06:50:30 GMT (envelope-from brooks@svn.freebsd.org)
Message-Id: <200905140650.n4E6oURU079910@svn.freebsd.org>
From: Brooks Davis <brooks@FreeBSD.org>
Date: Thu, 14 May 2009 06:50:30 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192087 - in projects/ngroups: lib/libc/gen
	lib/libc/rpc lib/libc/sys usr.bin/id usr.bin/newgrp
	usr.bin/quota usr.sbin/chown usr.sbin/chroot usr.sbin/jail
	usr.sbin/jexec usr.sbin/lpr/lpc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 06:50:31 -0000

Author: brooks
Date: Thu May 14 06:50:30 2009
New Revision: 192087
URL: http://svn.freebsd.org/changeset/base/192087

Log:
  Use to value returned by sysconf(_SC_NGROUPS_MAX) in favor of
  NGROUPS_MAX or NGROUPS since POSIX says that NGROUPS_MAX represents a
  lower bound on sysconf(_SC_NGROUPS_MAX).

Modified:
  projects/ngroups/lib/libc/gen/initgroups.c
  projects/ngroups/lib/libc/rpc/auth_unix.c
  projects/ngroups/lib/libc/sys/getgroups.2
  projects/ngroups/lib/libc/sys/setgroups.2
  projects/ngroups/usr.bin/id/id.c
  projects/ngroups/usr.bin/newgrp/newgrp.c
  projects/ngroups/usr.bin/quota/quota.c
  projects/ngroups/usr.sbin/chown/chown.c
  projects/ngroups/usr.sbin/chroot/chroot.c
  projects/ngroups/usr.sbin/jail/jail.c
  projects/ngroups/usr.sbin/jexec/jexec.c
  projects/ngroups/usr.sbin/lpr/lpc/lpc.c

Modified: projects/ngroups/lib/libc/gen/initgroups.c
==============================================================================
--- projects/ngroups/lib/libc/gen/initgroups.c	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/lib/libc/gen/initgroups.c	Thu May 14 06:50:30 2009	(r192087)
@@ -35,10 +35,12 @@ __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
 
+#include <stdlib.h>
 #include <stdio.h>
 #include "namespace.h"
 #include <err.h>
 #include "un-namespace.h"
+#include <errno.h>
 #include <unistd.h>
 
 int
@@ -46,14 +48,20 @@ initgroups(uname, agroup)
 	const char *uname;
 	gid_t agroup;
 {
-	int ngroups;
+	int ngroups, ret;
+	gid_t *groups;
+
 	/*
-	 * Provide space for one group more than NGROUPS to allow
+	 * Provide space for one group more than possible to allow
 	 * setgroups to fail and set errno.
 	 */
-	gid_t groups[NGROUPS + 1];
+	ngroups = sysconf(_SC_NGROUPS_MAX) + 1;
+	groups = malloc(sizeof(gid_t)*ngroups);
+	if (groups == NULL)
+		return (ENOSPC);
 
-	ngroups = NGROUPS + 1;
 	getgrouplist(uname, agroup, groups, &ngroups);
-	return (setgroups(ngroups, groups));
+	ret = setgroups(ngroups, groups);
+	free(groups);
+	return(ret);
 }

Modified: projects/ngroups/lib/libc/rpc/auth_unix.c
==============================================================================
--- projects/ngroups/lib/libc/rpc/auth_unix.c	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/lib/libc/rpc/auth_unix.c	Thu May 14 06:50:30 2009	(r192087)
@@ -185,23 +185,28 @@ authunix_create(machname, uid, gid, len,
 AUTH *
 authunix_create_default()
 {
-	int len;
+	int ngids;
 	char machname[MAXHOSTNAMELEN + 1];
 	uid_t uid;
 	gid_t gid;
-	gid_t gids[NGROUPS_MAX];
+	gid_t *gids;
+
+	ngids = sysconf(_SC_NGROUPS_MAX);
+	gids = malloc(sizeof(gid_t) * ngids);
+	if (gids == NULL)
+		return (NULL);
 
 	if (gethostname(machname, sizeof machname) == -1)
 		abort();
 	machname[sizeof(machname) - 1] = 0;
 	uid = geteuid();
 	gid = getegid();
-	if ((len = getgroups(NGROUPS_MAX, gids)) < 0)
+	if ((ngids = getgroups(NGROUPS_MAX, gids)) < 0)
 		abort();
-	if (len > NGRPS)
-		len = NGRPS;
+	if (ngids > NGRPS)
+		ngids = NGRPS;
 	/* XXX: interface problem; those should all have been unsigned */
-	return (authunix_create(machname, (int)uid, (int)gid, len,
+	return (authunix_create(machname, (int)uid, (int)gid, ngids,
 	    (int *)gids));
 }
 

Modified: projects/ngroups/lib/libc/sys/getgroups.2
==============================================================================
--- projects/ngroups/lib/libc/sys/getgroups.2	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/lib/libc/sys/getgroups.2	Thu May 14 06:50:30 2009	(r192087)
@@ -59,7 +59,7 @@ system call
 returns the actual number of groups returned in
 .Fa gidset .
 No more than
-.Dv NGROUPS_MAX
+.Fn sysconf _SC_NGROUPS_MAX
 will ever
 be returned.
 If
@@ -91,7 +91,8 @@ an invalid address.
 .El
 .Sh SEE ALSO
 .Xr setgroups 2 ,
-.Xr initgroups 3
+.Xr initgroups 3 ,
+.Xr sysconf 3
 .Sh HISTORY
 The
 .Fn getgroups

Modified: projects/ngroups/lib/libc/sys/setgroups.2
==============================================================================
--- projects/ngroups/lib/libc/sys/setgroups.2	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/lib/libc/sys/setgroups.2	Thu May 14 06:50:30 2009	(r192087)
@@ -53,9 +53,7 @@ The
 argument
 indicates the number of entries in the array and must be no
 more than
-.Dv NGROUPS ,
-as defined in
-.In sys/param.h .
+.Fn sysconf _SC_NGROUPS_MAX .
 .Pp
 Only the super-user may set a new group list.
 .Sh RETURN VALUES
@@ -71,7 +69,7 @@ The caller is not the super-user.
 The number specified in the
 .Fa ngroups
 argument is larger than the
-.Dv NGROUPS
+.Fn sysconf _SC_NGROUPS_MAX
 limit.
 .It Bq Er EFAULT
 The address specified for

Modified: projects/ngroups/usr.bin/id/id.c
==============================================================================
--- projects/ngroups/usr.bin/id/id.c	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/usr.bin/id/id.c	Thu May 14 06:50:30 2009	(r192087)
@@ -257,8 +257,8 @@ id_print(struct passwd *pw, int use_ggl,
 	struct group *gr;
 	gid_t gid, egid, lastgid;
 	uid_t uid, euid;
-	int cnt, ngroups;
-	gid_t groups[NGROUPS + 1];
+	int cnt, ngroups, ngroups_max;
+	gid_t *groups;
 	const char *fmt;
 
 	if (pw != NULL) {
@@ -270,12 +270,16 @@ id_print(struct passwd *pw, int use_ggl,
 		gid = getgid();
 	}
 
+	ngroups_max = sysconf(_SC_NGROUPS_MAX);
+	if ((groups = malloc(sizeof(gid_t) * (ngroups_max + 1))) == NULL)
+		err(1, "malloc");
+
 	if (use_ggl && pw != NULL) {
-		ngroups = NGROUPS + 1;
+		ngroups = ngroups_max + 1;
 		getgrouplist(pw->pw_name, gid, groups, &ngroups);
 	}
 	else {
-		ngroups = getgroups(NGROUPS + 1, groups);
+		ngroups = getgroups(ngroups_max + 1, groups);
 	}
 
 	if (pw != NULL)
@@ -306,6 +310,7 @@ id_print(struct passwd *pw, int use_ggl,
 		lastgid = gid;
 	}
 	printf("\n");
+	free(groups);
 }
 
 #ifdef USE_BSM_AUDIT
@@ -360,16 +365,20 @@ void
 group(struct passwd *pw, int nflag)
 {
 	struct group *gr;
-	int cnt, id, lastid, ngroups;
-	gid_t groups[NGROUPS + 1];
+	int cnt, id, lastid, ngroups, ngroups_max;
+	gid_t *groups;
 	const char *fmt;
 
+	ngroups_max = sysconf(_SC_NGROUPS_MAX);
+	if ((groups = malloc(sizeof(gid_t) * (ngroups_max + 1))) == NULL)
+		err(1, "malloc");
+
 	if (pw) {
-		ngroups = NGROUPS + 1;
+		ngroups = ngroups_max + 1;
 		(void) getgrouplist(pw->pw_name, pw->pw_gid, groups, &ngroups);
 	} else {
 		groups[0] = getgid();
-		ngroups = getgroups(NGROUPS, groups + 1) + 1;
+		ngroups = getgroups(ngroups_max, groups + 1) + 1;
 	}
 	fmt = nflag ? "%s" : "%u";
 	for (lastid = -1, cnt = 0; cnt < ngroups; ++cnt) {
@@ -389,6 +398,7 @@ group(struct passwd *pw, int nflag)
 		lastid = id;
 	}
 	(void)printf("\n");
+	free(groups);
 }
 
 void

Modified: projects/ngroups/usr.bin/newgrp/newgrp.c
==============================================================================
--- projects/ngroups/usr.bin/newgrp/newgrp.c	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/usr.bin/newgrp/newgrp.c	Thu May 14 06:50:30 2009	(r192087)
@@ -146,9 +146,9 @@ restoregrps(void)
 static void
 addgroup(const char *grpname)
 {
-	gid_t grps[NGROUPS_MAX];
+	gid_t *grps;
 	long lgid;
-	int dbmember, i, ngrps;
+	int dbmember, i, ngrps, ngrps_max;
 	gid_t egid;
 	struct group *grp;
 	char *ep, *pass;
@@ -185,7 +185,10 @@ addgroup(const char *grpname)
 		}
 	}
 
-	if ((ngrps = getgroups(NGROUPS_MAX, (gid_t *)grps)) < 0) {
+	ngrps_max = sysconf(_SC_NGROUPS_MAX);
+	if ((grps = malloc(sizeof(gid_t) * ngrps_max)) == NULL)
+		err(1, "malloc");
+	if ((ngrps = getgroups(ngrps_max, (gid_t *)grps)) < 0) {
 		warn("getgroups");
 		return;
 	}
@@ -217,7 +220,7 @@ addgroup(const char *grpname)
 
 	/* Add old effective gid to supp. list if it does not exist. */
 	if (egid != grp->gr_gid && !inarray(egid, grps, ngrps)) {
-		if (ngrps == NGROUPS_MAX)
+		if (ngrps == ngrps_max)
 			warnx("too many groups");
 		else {
 			grps[ngrps++] = egid;
@@ -231,6 +234,7 @@ addgroup(const char *grpname)
 		}
 	}
 
+	free(grps);
 }
 
 static int

Modified: projects/ngroups/usr.bin/quota/quota.c
==============================================================================
--- projects/ngroups/usr.bin/quota/quota.c	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/usr.bin/quota/quota.c	Thu May 14 06:50:30 2009	(r192087)
@@ -117,7 +117,7 @@ int
 main(int argc, char *argv[])
 {
 	int ngroups; 
-	gid_t mygid, gidset[NGROUPS];
+	gid_t mygid, *gidset;
 	int i, ch, gflag = 0, uflag = 0, errflag = 0;
 
 	while ((ch = getopt(argc, argv, "f:ghlrquv")) != -1) {
@@ -159,13 +159,17 @@ main(int argc, char *argv[])
 			errflag += showuid(getuid());
 		if (gflag) {
 			mygid = getgid();
-			ngroups = getgroups(NGROUPS, gidset);
+			ngroups = sysconf(_SC_NGROUPS_MAX);
+			if ((gidset = malloc(sizeof(gid_t) * ngroups)) == NULL)
+				err(1, "malloc");
+			ngroups = getgroups(ngroups, gidset);
 			if (ngroups < 0)
 				err(1, "getgroups");
 			errflag += showgid(mygid);
 			for (i = 0; i < ngroups; i++)
 				if (gidset[i] != mygid)
 					errflag += showgid(gidset[i]);
+			free(gidset);
 		}
 		return(errflag);
 	}

Modified: projects/ngroups/usr.sbin/chown/chown.c
==============================================================================
--- projects/ngroups/usr.sbin/chown/chown.c	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/usr.sbin/chown/chown.c	Thu May 14 06:50:30 2009	(r192087)
@@ -268,8 +268,8 @@ void
 chownerr(const char *file)
 {
 	static uid_t euid = -1;
-	static int ngroups = -1;
-	gid_t groups[NGROUPS_MAX];
+	static int ngroups = -1, ngroups_max;
+	gid_t *groups;
 
 	/* Check for chown without being root. */
 	if (errno != EPERM || (uid != (uid_t)-1 &&
@@ -281,7 +281,10 @@ chownerr(const char *file)
 	/* Check group membership; kernel just returns EPERM. */
 	if (gid != (gid_t)-1 && ngroups == -1 &&
 	    euid == (uid_t)-1 && (euid = geteuid()) != 0) {
-		ngroups = getgroups(NGROUPS_MAX, groups);
+		ngroups_max = sysconf(_SC_NGROUPS_MAX);
+		if ((groups = malloc(sizeof(gid_t) * ngroups_max)) == NULL)
+			err(1, "malloc");
+		ngroups = getgroups(ngroups_max, groups);
 		while (--ngroups >= 0 && gid != groups[ngroups]);
 		if (ngroups < 0) {
 			warnx("you are not a member of group %s", gname);

Modified: projects/ngroups/usr.sbin/chroot/chroot.c
==============================================================================
--- projects/ngroups/usr.sbin/chroot/chroot.c	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/usr.sbin/chroot/chroot.c	Thu May 14 06:50:30 2009	(r192087)
@@ -69,9 +69,9 @@ main(argc, argv)
 	struct passwd	*pw;
 	char		*endp, *p;
 	const char	*shell;
-	gid_t		gid, gidlist[NGROUPS_MAX];
+	gid_t		gid, *gidlist;
 	uid_t		uid;
-	int		ch, gids;
+	int		ch, gids, ngroups_max;
 
 	gid = 0;
 	uid = 0;
@@ -117,8 +117,11 @@ main(argc, argv)
 		}
 	}
 
+	ngroups_max = sysconf(_SC_NGROUPS_MAX);
+	if ((gidlist = malloc(sizeof(gid_t) * ngroups_max)) == NULL)
+		err(1, "malloc");
 	for (gids = 0;
-	    (p = strsep(&grouplist, ",")) != NULL && gids < NGROUPS_MAX; ) {
+	    (p = strsep(&grouplist, ",")) != NULL && gids < ngroups_max; ) {
 		if (*p == '\0')
 			continue;
 
@@ -135,7 +138,7 @@ main(argc, argv)
 		}
 		gids++;
 	}
-	if (p != NULL && gids == NGROUPS_MAX)
+	if (p != NULL && gids == ngroups_max)
 		errx(1, "too many supplementary groups provided");
 
 	if (user != NULL) {

Modified: projects/ngroups/usr.sbin/jail/jail.c
==============================================================================
--- projects/ngroups/usr.sbin/jail/jail.c	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/usr.sbin/jail/jail.c	Thu May 14 06:50:30 2009	(r192087)
@@ -85,7 +85,7 @@ STAILQ_HEAD(addr6head, addr6entry) addr6
 	lcap = login_getpwclass(pwd);					\
 	if (lcap == NULL)						\
 		err(1, "getpwclass: %s", username);			\
-	ngroups = NGROUPS;						\
+	ngroups = ngroups_max;						\
 	if (getgrouplist(username, pwd->pw_gid, groups, &ngroups) != 0)	\
 		err(1, "getgrouplist: %s", username);			\
 } while (0)
@@ -96,8 +96,8 @@ main(int argc, char **argv)
 	login_cap_t *lcap = NULL;
 	struct jail j;
 	struct passwd *pwd = NULL;
-	gid_t groups[NGROUPS];
-	int ch, error, i, ngroups, securelevel;
+	gid_t *groups = NULL;
+	int ch, error, i, ngroups, ngroups_max, securelevel;
 	int hflag, iflag, Jflag, lflag, uflag, Uflag;
 	char path[PATH_MAX], *jailname, *ep, *username, *JidFile, *ip;
 	static char *cleanenv;
@@ -111,6 +111,10 @@ main(int argc, char **argv)
 	jailname = username = JidFile = cleanenv = NULL;
 	fp = NULL;
 
+	ngroups_max = sysconf(_SC_NGROUPS_MAX);	
+	if ((groups = malloc(sizeof(gid_t) * ngroups_max)) == NULL)
+		err(1, "malloc");
+
 	while ((ch = getopt(argc, argv, "hiln:s:u:U:J:")) != -1) {
 		switch (ch) {
 		case 'h':

Modified: projects/ngroups/usr.sbin/jexec/jexec.c
==============================================================================
--- projects/ngroups/usr.sbin/jexec/jexec.c	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/usr.sbin/jexec/jexec.c	Thu May 14 06:50:30 2009	(r192087)
@@ -202,7 +202,7 @@ lookup_jail(int jid, char *jailname)
 	lcap = login_getpwclass(pwd);					\
 	if (lcap == NULL)						\
 		err(1, "getpwclass: %s", username);			\
-	ngroups = NGROUPS;						\
+	ngroups = ngroups_max;						\
 	if (getgrouplist(username, pwd->pw_gid, groups, &ngroups) != 0)	\
 		err(1, "getgrouplist: %s", username);			\
 } while (0)
@@ -213,14 +213,18 @@ main(int argc, char *argv[])
 	int jid;
 	login_cap_t *lcap = NULL;
 	struct passwd *pwd = NULL;
-	gid_t groups[NGROUPS];
-	int ch, ngroups, uflag, Uflag;
+	gid_t *groups = NULL;
+	int ch, ngroups, ngroups_max, uflag, Uflag;
 	char *jailname, *username;
 
 	ch = uflag = Uflag = 0;
 	jailname = username = NULL;
 	jid = -1;
 
+	ngroups_max = sysconf(_SC_NGROUPS_MAX);
+	if ((groups = malloc(sizeof(gid_t) * ngroups_max)) == NULL)
+		err(1, "malloc");
+
 	while ((ch = getopt(argc, argv, "i:n:u:U:")) != -1) {
 		switch (ch) {
 		case 'n':

Modified: projects/ngroups/usr.sbin/lpr/lpc/lpc.c
==============================================================================
--- projects/ngroups/usr.sbin/lpr/lpc/lpc.c	Thu May 14 06:48:38 2009	(r192086)
+++ projects/ngroups/usr.sbin/lpr/lpc/lpc.c	Thu May 14 06:50:30 2009	(r192087)
@@ -356,7 +356,7 @@ ingroup(const char *grname)
 {
 	static struct group *gptr=NULL;
 	static int ngroups = 0;
-	static gid_t groups[NGROUPS];
+	static gid_t *groups;
 	register gid_t gid;
 	register int i;
 
@@ -365,7 +365,10 @@ ingroup(const char *grname)
 			warnx("warning: unknown group '%s'", grname);
 			return(0);
 		}
-		ngroups = getgroups(NGROUPS, groups);
+		ngroups = sysconf(_SC_NGROUPS_MAX);
+		if ((groups = malloc(sizeof(gid_t) * ngroups)) == NULL)
+			err(1, "malloc");
+		ngroups = getgroups(ngroups, groups);
 		if (ngroups < 0)
 			err(1, "getgroups");
 	}

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 10:43:00 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 026F3106564A;
	Thu, 14 May 2009 10:43:00 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id E67778FC12;
	Thu, 14 May 2009 10:42:59 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EAgxBW088524;
	Thu, 14 May 2009 10:42:59 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EAgxJI088523;
	Thu, 14 May 2009 10:42:59 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141042.n4EAgxJI088523@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 10:42:59 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192091 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 10:43:00 -0000

Author: rpaulo
Date: Thu May 14 10:42:59 2009
New Revision: 192091
URL: http://svn.freebsd.org/changeset/base/192091

Log:
  Use the same format string for debugging peering frames.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_output.c

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Thu May 14 09:28:02 2009	(r192090)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Thu May 14 10:42:59 2009	(r192091)
@@ -677,7 +677,7 @@ ieee80211_send_action(struct ieee80211_n
 		case IEEE80211_ACTION_MESHPEERING_OPEN:
 			IEEE80211_NOTE(vap,
 			    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
-			    "send PEER OPEN action: lid %x", args[0]);
+			    "send PEER OPEN action: localid 0x%x", args[0]);
 			ADDSHORT(frm, getcapinfo(vap, ni->ni_chan));
 			frm = ieee80211_add_rates(frm, rs);
 			frm = ieee80211_add_xrates(frm, rs);
@@ -702,8 +702,8 @@ ieee80211_send_action(struct ieee80211_n
 		case IEEE80211_ACTION_MESHPEERING_CONFIRM:
 			IEEE80211_NOTE(vap,
 			    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
-			    "send PEER CONFIRM action: lid %x, pid %x",
-			    args[0], args[1]);
+			    "send PEER CONFIRM action: localid 0x%x, "
+			    "peerid 0x%x", args[0], args[1]);
 			ADDSHORT(frm, getcapinfo(vap, ni->ni_chan));
 			ADDSHORT(frm, 0);	/* status code */
 			ADDSHORT(frm, 0);	/* AID */
@@ -726,8 +726,8 @@ ieee80211_send_action(struct ieee80211_n
 		case IEEE80211_ACTION_MESHPEERING_CLOSE:
 			IEEE80211_NOTE(vap,
 			    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
-			    "sending PEER CLOSE action: localid %x peerid %x "
-			    "reason %d", args[0], args[1], args[2]);
+			    "sending PEER CLOSE action: localid 0x%x, "
+			    "peerid 0x%x reason %d", args[0], args[1], args[2]);
 			ADDSHORT(frm, args[2]);		/* reason code */
 			frm = ieee80211_add_meshid(frm, vap);
 			frm = ieee80211_add_meshpeer(frm,

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 10:43:57 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id F1DAA106564A;
	Thu, 14 May 2009 10:43:57 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id C8C6B8FC13;
	Thu, 14 May 2009 10:43:57 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EAhvHX088578;
	Thu, 14 May 2009 10:43:57 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EAhvDW088576;
	Thu, 14 May 2009 10:43:57 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141043.n4EAhvDW088576@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 10:43:57 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192092 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 10:43:58 -0000

Author: rpaulo
Date: Thu May 14 10:43:57 2009
New Revision: 192092
URL: http://svn.freebsd.org/changeset/base/192092

Log:
  * remove non usable code
  * mark mesh nodes qos capable.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_node.c

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Thu May 14 10:42:59 2009	(r192091)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Thu May 14 10:43:57 2009	(r192092)
@@ -488,6 +488,10 @@ mesh_recv_mgmt(struct ieee80211_node *ni
 			 */
 			ni = ieee80211_add_neighbor(vap, wh, &scan);
 			/*
+			 * Mesh nodes must be QoS capable.
+			 */
+			ni->ni_flags |= IEEE80211_NODE_QOS;
+			/*
 			 * Try to peer with this node.
 			 */
 			get_random_bytes(&ni->ni_plid, 2);
@@ -938,25 +942,6 @@ mesh_verify_meshconf(struct ieee80211vap
 }
 
 /*
- * Parse a MESH ID ie on station join.
- */
-void
-ieee80211_parse_meshid(struct ieee80211_node *ni, const uint8_t *ie)
-{
-	struct ieee80211vap *vap = ni->ni_vap;
-
-	if (vap->iv_caps & IEEE80211_C_MBSS) {
-		/*const struct ieee80211_meshid_ie *meshid =
-		    (const struct ieee80211_meshid_ie *)ie;*/
-
-		/*
-		 * Mesh STAs are QoS stations, so QoS is not optional.
-		 */
-		ni->ni_flags |= IEEE80211_NODE_QOS;
-	}
-}
-
-/*
  * Add a MESH ID element to a frame.
  */
 uint8_t *

Modified: projects/mesh11s/sys/net80211/ieee80211_node.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_node.c	Thu May 14 10:42:59 2009	(r192091)
+++ projects/mesh11s/sys/net80211/ieee80211_node.c	Thu May 14 10:43:57 2009	(r192092)
@@ -785,8 +785,6 @@ ieee80211_sta_join(struct ieee80211vap *
 		if (ni->ni_ies.tdma_ie != NULL)
 			ieee80211_parse_tdma(ni, ni->ni_ies.tdma_ie);
 #endif
-		if (ni->ni_ies.meshid_ie != NULL)
-			ieee80211_parse_meshid(ni, ni->ni_ies.meshid_ie);
 	}
 
 	vap->iv_dtim_period = se->se_dtimperiod;

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 10:47:12 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 15E5B1065670;
	Thu, 14 May 2009 10:47:12 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 04F178FC08;
	Thu, 14 May 2009 10:47:12 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EAlBrn088700;
	Thu, 14 May 2009 10:47:11 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EAlBxf088699;
	Thu, 14 May 2009 10:47:11 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141047.n4EAlBxf088699@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 10:47:11 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192093 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 10:47:12 -0000

Author: rpaulo
Date: Thu May 14 10:47:11 2009
New Revision: 192093
URL: http://svn.freebsd.org/changeset/base/192093

Log:
  Remove wrong assignment.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_output.c

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Thu May 14 10:43:57 2009	(r192092)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Thu May 14 10:47:11 2009	(r192093)
@@ -1216,7 +1216,6 @@ ieee80211_encap(struct ieee80211vap *vap
 	 */
 	addqos = (ni->ni_flags & (IEEE80211_NODE_QOS|IEEE80211_NODE_HT)) &&
 		 (m->m_flags & M_EAPOL) == 0;
-	addqos = 1;
 	if (addqos)
 		hdrsize = sizeof(struct ieee80211_qosframe);
 	else

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 14:01:00 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id DC325106566B;
	Thu, 14 May 2009 14:01:00 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id CAB9A8FC24;
	Thu, 14 May 2009 14:01:00 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EE10gG093096;
	Thu, 14 May 2009 14:01:00 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EE10vB093095;
	Thu, 14 May 2009 14:01:00 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141401.n4EE10vB093095@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 14:01:00 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192099 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 14:01:01 -0000

Author: rpaulo
Date: Thu May 14 14:01:00 2009
New Revision: 192099
URL: http://svn.freebsd.org/changeset/base/192099

Log:
  Add net.wlan.mesh.ttl sysctl.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_freebsd.c

Modified: projects/mesh11s/sys/net80211/ieee80211_freebsd.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_freebsd.c	Thu May 14 13:36:39 2009	(r192098)
+++ projects/mesh11s/sys/net80211/ieee80211_freebsd.c	Thu May 14 14:01:00 2009	(r192099)
@@ -70,6 +70,12 @@ extern int ieee80211_cac_timeout;
 SYSCTL_INT(_net_wlan, OID_AUTO, cac_timeout, CTLFLAG_RW,
 	&ieee80211_cac_timeout, 0, "CAC timeout (secs)");
 
+SYSCTL_NODE(_net_wlan, OID_AUTO, mesh, CTLFLAG_RD, 0,
+    "IEEE 802.11s parameters");
+extern int ieee80211_mesh_ttl;
+SYSCTL_INT(_net_wlan_mesh, OID_AUTO, ttl, CTLFLAG_RW,
+    &ieee80211_mesh_ttl, 0, "TTL for mesh packets");
+
 MALLOC_DEFINE(M_80211_COM, "80211com", "802.11 com state");
 
 /*

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 14:02:00 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 81B4C1065673;
	Thu, 14 May 2009 14:02:00 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 636EB8FC13;
	Thu, 14 May 2009 14:02:00 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EE206k093152;
	Thu, 14 May 2009 14:02:00 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EE20Xi093151;
	Thu, 14 May 2009 14:02:00 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141402.n4EE20Xi093151@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 14:02:00 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192100 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 14:02:02 -0000

Author: rpaulo
Date: Thu May 14 14:02:00 2009
New Revision: 192100
URL: http://svn.freebsd.org/changeset/base/192100

Log:
  * use C99 inline
  * implement remaining mesh peering timers
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Thu May 14 14:01:00 2009	(r192099)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Thu May 14 14:02:00 2009	(r192100)
@@ -69,18 +69,25 @@ static int	mesh_input(struct ieee80211_n
 static void	mesh_recv_mgmt(struct ieee80211_node *, struct mbuf *, int,
 		    int, int, uint32_t);
 static void	mesh_recv_action(struct ieee80211_node *, struct mbuf *);
-static __inline void	mesh_peer_timeout_setup(struct ieee80211_node *);
+static inline void	mesh_peer_timeout_setup(struct ieee80211_node *);
 static void		mesh_peer_timeout_backoff(struct ieee80211_node *);
 static void		mesh_peer_timeout_cb(void *);
-static __inline void	mesh_peer_timeout_stop(struct ieee80211_node *);
+static inline void	mesh_peer_timeout_stop(struct ieee80211_node *);
 static int	mesh_verify_meshid(struct ieee80211vap *,
 		    struct ieee80211_meshid_ie *);
 static int	mesh_verify_meshconf(struct ieee80211vap *,
 		    struct ieee80211_meshconf_ie *);
 
-int	ieee80211_mesh_retrytimeout = 40;	/* 40 miliseconds */
+/* timeout values in miliseconds */
+static const int ieee80211_mesh_retrytimeout = 40;
 #define	RETRY_TIMEOUT	msecs_to_ticks(ieee80211_mesh_retrytimeout)
-int	ieee80211_mesh_maxretries = 60;
+static const int ieee80211_mesh_holdingtimeout = 40;
+#define	HOLDING_TIMEOUT	msecs_to_ticks(ieee80211_mesh_holdingtimeout)
+static const int ieee80211_mesh_confirmtimeout = 40;
+#define	CONFIRM_TIMEOUT	msecs_to_ticks(ieee80211_mesh_confirmtimeout)
+static const int ieee80211_mesh_maxretries = 2;
+/* non static for sysctl hookup */
+int	ieee80211_mesh_ttl = 31;
 
 /* unalligned little endian access */     
 #define LE_READ_2(p)					\
@@ -204,7 +211,7 @@ mesh_newstate(struct ieee80211vap *vap, 
  * of the less interesting frames that come frequently
  * (e.g. beacons).
  */
-static __inline int
+static inline int
 doprint(struct ieee80211vap *vap, int subtype)
 {
 	switch (subtype) {
@@ -824,11 +831,21 @@ mesh_recv_action(struct ieee80211_node *
 	}
 }
 
-static __inline void
+static inline void
 mesh_peer_timeout_setup(struct ieee80211_node *ni)
 {
-	ni->ni_mtimerval = RETRY_TIMEOUT;
-	callout_reset(&ni->ni_mtimer, RETRY_TIMEOUT, mesh_peer_timeout_cb, ni);
+	switch (ni->ni_peerstate) {
+	case IEEE80211_NODE_MESH_HOLDING:
+		ni->ni_mtimerval = HOLDING_TIMEOUT;
+		break;
+	case IEEE80211_NODE_MESH_CONFIRMRECV:
+		ni->ni_mtimerval = CONFIRM_TIMEOUT;
+		break;
+	default:
+		ni->ni_mtimerval = RETRY_TIMEOUT;
+	}
+	callout_reset(&ni->ni_mtimer, ni->ni_mtimerval, mesh_peer_timeout_cb,
+	    ni);
 }
 
 /*
@@ -845,7 +862,7 @@ mesh_peer_timeout_backoff(struct ieee802
 	    ni);
 }
 
-static __inline void
+static inline void
 mesh_peer_timeout_stop(struct ieee80211_node *ni)
 {
 	callout_stop(&ni->ni_mtimer);
@@ -920,7 +937,7 @@ mesh_peer_timeout_cb(void *arg)
 	}
 }
 
-static __inline int
+static inline int
 mesh_verify_meshid(struct ieee80211vap *vap,
     struct ieee80211_meshid_ie *meshid)
 {

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 14:03:15 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id EC81A106566C;
	Thu, 14 May 2009 14:03:14 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id DB50A8FC1D;
	Thu, 14 May 2009 14:03:14 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EE3ElC093211;
	Thu, 14 May 2009 14:03:14 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EE3ElJ093210;
	Thu, 14 May 2009 14:03:14 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141403.n4EE3ElJ093210@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 14:03:14 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192101 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 14:03:16 -0000

Author: rpaulo
Date: Thu May 14 14:03:14 2009
New Revision: 192101
URL: http://svn.freebsd.org/changeset/base/192101

Log:
  Fix added spaces.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.h

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.h	Thu May 14 14:02:00 2009	(r192100)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.h	Thu May 14 14:03:14 2009	(r192101)
@@ -2,7 +2,7 @@
  * Copyright (c) 2009 The FreeBSD Foundation 
  * All rights reserved. 
  * 
- * This software was developed by Rui Paulo under sponsorship from the                 
+ * This software was developed by Rui Paulo under sponsorship from the
  * FreeBSD Foundation. 
  *  
  * Redistribution and use in source and binary forms, with or without 

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 14:13:57 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 7B881106566C;
	Thu, 14 May 2009 14:13:57 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 69F958FC23;
	Thu, 14 May 2009 14:13:57 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EEDv4Z093442;
	Thu, 14 May 2009 14:13:57 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EEDv9x093441;
	Thu, 14 May 2009 14:13:57 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141413.n4EEDv9x093441@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 14:13:57 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192102 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 14:13:57 -0000

Author: rpaulo
Date: Thu May 14 14:13:57 2009
New Revision: 192102
URL: http://svn.freebsd.org/changeset/base/192102

Log:
  Fill in mesh path request/reply IEs.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.h

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.h	Thu May 14 14:03:14 2009	(r192101)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.h	Thu May 14 14:13:57 2009	(r192102)
@@ -212,14 +212,37 @@ struct ieee80211_meshrann_ie {
 struct ieee80211_meshpreq_ie {
 	uint8_t		preq_ie;	/* IEEE80211_ELEMID_MESHPREQ */
 	uint8_t		preq_len;
-	/* XXXRP: TBD */
+	uint8_t		preq_flags;
+	uint8_t		preq_hopcount;
+	uint8_t		preq_ttl;
+	uint8_t		preq_id;
+	uint8_t		preq_origaddr[IEEE80211_ADDR_LEN];
+	uint32_t	preq_origseq;
+	/* NB: may have Originator Proxied Address */
+	uint32_t	preq_lifetime;
+	uint32_t	preq_metric;
+	uint8_t		preq_tcount;	/* target count */
+	struct {
+		uint8_t		target_flags
+		uint8_t		target_addr[IEEE80211_ADDR_LEN];
+		uint32_t	target_seq;
+	} targets[1] __packed;	/* NB: variable size */
 } __packed;
 
 /* Mesh Path Reply */
 struct ieee80211_meshprep_ie {
 	uint8_t		prep_ie;	/* IEEE80211_ELEMID_MESHPREP */
 	uint8_t		prep_len;
-	/* XXXRP: TBD */
+	uint8_t		prep_flags;
+	uint8_t		prep_hopcount;
+	uint8_t		prep_ttl;
+	uint8_t		prep_targetaddr[IEEE80211_ADDR_LEN];
+	uint32_t	prep_targetseq;
+	/* NB: May have Target Proxied Address */
+	uint32_t	prep_lifetime;
+	uint32_t	prep_metric;
+	uint8_t		prep_origaddr[IEEE80211_ADDR_LEN];
+	uint32_t	prep_origseq;
 } __packed;
 
 /* Mesh Path Error */

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 14:17:33 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 1C8661065676;
	Thu, 14 May 2009 14:17:33 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 0AA9B8FC19;
	Thu, 14 May 2009 14:17:33 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EEHWJ1093549;
	Thu, 14 May 2009 14:17:32 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EEHWl5093548;
	Thu, 14 May 2009 14:17:32 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141417.n4EEHWl5093548@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 14:17:32 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192103 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 14:17:33 -0000

Author: rpaulo
Date: Thu May 14 14:17:32 2009
New Revision: 192103
URL: http://svn.freebsd.org/changeset/base/192103

Log:
  * Fix spacing
  * add comments
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.h

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.h	Thu May 14 14:13:57 2009	(r192102)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.h	Thu May 14 14:17:32 2009	(r192103)
@@ -204,7 +204,7 @@ struct ieee80211_meshrann_ie {
 	uint8_t		rann_hopcount;
 	uint8_t		rann_ttl;
 	uint8_t		rann_addr[IEEE80211_ADDR_LEN];
-	uint32_t	rann_seq;		/* HWMP Sequence Number */		
+	uint32_t	rann_seq;		/* HWMP Sequence Number */
 	uint32_t	rann_metric;
 } __packed;
 
@@ -217,7 +217,7 @@ struct ieee80211_meshpreq_ie {
 	uint8_t		preq_ttl;
 	uint8_t		preq_id;
 	uint8_t		preq_origaddr[IEEE80211_ADDR_LEN];
-	uint32_t	preq_origseq;
+	uint32_t	preq_origseq;	/* HWMP Sequence Number */
 	/* NB: may have Originator Proxied Address */
 	uint32_t	preq_lifetime;
 	uint32_t	preq_metric;
@@ -225,7 +225,7 @@ struct ieee80211_meshpreq_ie {
 	struct {
 		uint8_t		target_flags
 		uint8_t		target_addr[IEEE80211_ADDR_LEN];
-		uint32_t	target_seq;
+		uint32_t	target_seq;	/* HWMP Sequence Number */
 	} targets[1] __packed;	/* NB: variable size */
 } __packed;
 
@@ -242,7 +242,7 @@ struct ieee80211_meshprep_ie {
 	uint32_t	prep_lifetime;
 	uint32_t	prep_metric;
 	uint8_t		prep_origaddr[IEEE80211_ADDR_LEN];
-	uint32_t	prep_origseq;
+	uint32_t	prep_origseq;	/* HWMP Sequence Number */
 } __packed;
 
 /* Mesh Path Error */
@@ -253,7 +253,7 @@ struct ieee80211_meshperr_ie {
 	uint8_t		perr_ndests;	/* Number of Destinations */
 	struct {
 		uint8_t		dest_addr[IEEE80211_ADDR_LEN];
-		uint32_t	dest_seq;
+		uint32_t	dest_seq;	/* HWMP Sequence Number */
 	} dests[1] __packed;		/* NB: variable size */
 } __packed;
 

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 14:18:54 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 08481106566C;
	Thu, 14 May 2009 14:18:54 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id EAF258FC0C;
	Thu, 14 May 2009 14:18:53 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EEIrdg093609;
	Thu, 14 May 2009 14:18:53 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EEIrvT093608;
	Thu, 14 May 2009 14:18:53 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141418.n4EEIrvT093608@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 14:18:53 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192104 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 14:18:54 -0000

Author: rpaulo
Date: Thu May 14 14:18:53 2009
New Revision: 192104
URL: http://svn.freebsd.org/changeset/base/192104

Log:
  Add missing semi colon.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.h

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.h	Thu May 14 14:17:32 2009	(r192103)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.h	Thu May 14 14:18:53 2009	(r192104)
@@ -223,7 +223,7 @@ struct ieee80211_meshpreq_ie {
 	uint32_t	preq_metric;
 	uint8_t		preq_tcount;	/* target count */
 	struct {
-		uint8_t		target_flags
+		uint8_t		target_flags;
 		uint8_t		target_addr[IEEE80211_ADDR_LEN];
 		uint32_t	target_seq;	/* HWMP Sequence Number */
 	} targets[1] __packed;	/* NB: variable size */

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 17:04:01 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 7D6D4106566B;
	Thu, 14 May 2009 17:04:01 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 6A5808FC25;
	Thu, 14 May 2009 17:04:01 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EH4145097131;
	Thu, 14 May 2009 17:04:01 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EH41Oj097125;
	Thu, 14 May 2009 17:04:01 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141704.n4EH41Oj097125@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 17:04:01 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192111 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 17:04:01 -0000

Author: rpaulo
Date: Thu May 14 17:04:00 2009
New Revision: 192111
URL: http://svn.freebsd.org/changeset/base/192111

Log:
  * Change the send action API while keeping ABI to support passing a fixed
  list of arguments or a pointer.
  * Ignore action frames for peers without an established link
  * s/ieee80211_meshcontrol/ieee80211_meshcntl/
  * Parse mesh path request frames and send a path reply if it's destined
  to us.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_ht.c
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_mesh.h
  projects/mesh11s/sys/net80211/ieee80211_output.c
  projects/mesh11s/sys/net80211/ieee80211_proto.h
  projects/mesh11s/sys/net80211/ieee80211_var.h

Modified: projects/mesh11s/sys/net80211/ieee80211_ht.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_ht.c	Thu May 14 16:56:56 2009	(r192110)
+++ projects/mesh11s/sys/net80211/ieee80211_ht.c	Thu May 14 17:04:00 2009	(r192111)
@@ -1577,7 +1577,7 @@ ieee80211_aggr_recv_action(struct ieee80
 	struct ieee80211_tx_ampdu *tap;
 	uint8_t dialogtoken, policy;
 	uint16_t baparamset, batimeout, baseqctl, code;
-	uint16_t args[4];
+	union ieee80211_send_action_args vargs;
 	int tid, ac, bufsiz;
 
 	ia = (const struct ieee80211_action *) frm;
@@ -1606,7 +1606,7 @@ ieee80211_aggr_recv_action(struct ieee80
 			rap = &ni->ni_rx_ampdu[tid];
 
 			/* Send ADDBA response */
-			args[0] = dialogtoken;
+			vargs.fixedarg[0] = dialogtoken;
 			/*
 			 * NB: We ack only if the sta associated with HT and
 			 * the ap is configured to do AMPDU rx (the latter
@@ -1618,7 +1618,7 @@ ieee80211_aggr_recv_action(struct ieee80
 				ic->ic_ampdu_rx_start(ni, rap,
 				    baparamset, batimeout, baseqctl);
 
-				args[1] = IEEE80211_STATUS_SUCCESS;
+				vargs.fixedarg[1] = IEEE80211_STATUS_SUCCESS;
 			} else {
 				IEEE80211_NOTE(vap,
 				    IEEE80211_MSG_ACTION | IEEE80211_MSG_11N,
@@ -1627,16 +1627,18 @@ ieee80211_aggr_recv_action(struct ieee80
 				       "administratively disabled" :
 				       "not negotiated for station");
 				vap->iv_stats.is_addba_reject++;
-				args[1] = IEEE80211_STATUS_UNSPECIFIED;
+				vargs.fixedarg[1] =
+				    IEEE80211_STATUS_UNSPECIFIED;
 			}
 			/* XXX honor rap flags? */
-			args[2] = IEEE80211_BAPS_POLICY_IMMEDIATE
+			vargs.fixedarg[2] =
+				  IEEE80211_BAPS_POLICY_IMMEDIATE
 				| SM(tid, IEEE80211_BAPS_TID)
 				| SM(rap->rxa_wnd, IEEE80211_BAPS_BUFSIZ)
 				;
-			args[3] = 0;
+			vargs.fixedarg[3] = 0;
 			ic->ic_send_action(ni, IEEE80211_ACTION_CAT_BA,
-				IEEE80211_ACTION_BA_ADDBA_RESPONSE, args);
+				IEEE80211_ACTION_BA_ADDBA_RESPONSE, vargs);
 			return;
 
 		case IEEE80211_ACTION_BA_ADDBA_RESPONSE:
@@ -1777,9 +1779,9 @@ ieee80211_ampdu_request(struct ieee80211
 	struct ieee80211_tx_ampdu *tap)
 {
 	struct ieee80211com *ic = ni->ni_ic;
-	uint16_t args[4];
 	int tid, dialogtoken;
 	static int tokens = 0;	/* XXX */
+	union ieee80211_send_action_args vargs;
 
 	/* XXX locking */
 	if ((tap->txa_flags & IEEE80211_AGGR_SETUP) == 0) {
@@ -1793,14 +1795,15 @@ ieee80211_ampdu_request(struct ieee80211
 	tid = WME_AC_TO_TID(tap->txa_ac);
 	tap->txa_start = ni->ni_txseqs[tid];
 
-	args[0] = dialogtoken;
-	args[1]	= IEEE80211_BAPS_POLICY_IMMEDIATE
+	vargs.fixedarg[0] = dialogtoken;
+	vargs.fixedarg[1] = IEEE80211_BAPS_POLICY_IMMEDIATE
 		| SM(tid, IEEE80211_BAPS_TID)
 		| SM(IEEE80211_AGGR_BAWMAX, IEEE80211_BAPS_BUFSIZ)
 		;
-	args[2] = 0;	/* batimeout */
+	vargs.fixedarg[2] = 0;	/* batimeout */
 	/* NB: do first so there's no race against reply */
-	if (!ic->ic_addba_request(ni, tap, dialogtoken, args[1], args[2])) {
+	if (!ic->ic_addba_request(ni, tap, dialogtoken, vargs.fixedarg[1],
+	    vargs.fixedarg[2])) {
 		/* unable to setup state, don't make request */
 		IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_11N,
 		    ni, "%s: could not setup BA stream for AC %d",
@@ -1814,11 +1817,11 @@ ieee80211_ampdu_request(struct ieee80211
 	}
 	tokens = dialogtoken;			/* allocate token */
 	/* NB: after calling ic_addba_request so driver can set txa_start */
-	args[3] = SM(tap->txa_start, IEEE80211_BASEQ_START)
+	vargs.fixedarg[3] = SM(tap->txa_start, IEEE80211_BASEQ_START)
 		| SM(0, IEEE80211_BASEQ_FRAG)
 		;
 	return ic->ic_send_action(ni, IEEE80211_ACTION_CAT_BA,
-		IEEE80211_ACTION_BA_ADDBA_REQUEST, args);
+		IEEE80211_ACTION_BA_ADDBA_REQUEST, vargs);
 }
 
 /*
@@ -1831,7 +1834,7 @@ ieee80211_ampdu_stop(struct ieee80211_no
 {
 	struct ieee80211com *ic = ni->ni_ic;
 	struct ieee80211vap *vap = ni->ni_vap;
-	uint16_t args[4];
+	union ieee80211_send_action_args vargs;
 
 	/* XXX locking */
 	tap->txa_flags &= ~IEEE80211_AGGR_BARPEND;
@@ -1842,11 +1845,11 @@ ieee80211_ampdu_stop(struct ieee80211_no
 		vap->iv_stats.is_ampdu_stop++;
 
 		ic->ic_addba_stop(ni, tap);
-		args[0] = WME_AC_TO_TID(tap->txa_ac);
-		args[1] = IEEE80211_DELBAPS_INIT;
-		args[2] = reason;			/* XXX reason code */
+		vargs.fixedarg[0] = WME_AC_TO_TID(tap->txa_ac);
+		vargs.fixedarg[1] = IEEE80211_DELBAPS_INIT;
+		vargs.fixedarg[2] = reason;		/* XXX reason code */
 		ieee80211_send_action(ni, IEEE80211_ACTION_CAT_BA,
-			IEEE80211_ACTION_BA_DELBA, args);
+			IEEE80211_ACTION_BA_DELBA, vargs);
 	} else {
 		IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_11N,
 		    ni, "%s: BA stream for AC %d not running (reason %d)",

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Thu May 14 16:56:56 2009	(r192110)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Thu May 14 17:04:00 2009	(r192111)
@@ -89,13 +89,6 @@ static const int ieee80211_mesh_maxretri
 /* non static for sysctl hookup */
 int	ieee80211_mesh_ttl = 31;
 
-/* unalligned little endian access */     
-#define LE_READ_2(p)					\
-	((uint16_t)					\
-	 ((((const uint8_t *)(p))[0]      ) |		\
-	  (((const uint8_t *)(p))[1] <<  8)))
-
-
 static const char *nodemeshstates[] = {
 	"IDLE",
 	"OPEN SENT",
@@ -273,9 +266,14 @@ mesh_input(struct ieee80211_node *ni, st
 	case IEEE80211_FC0_TYPE_DATA:
 		IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, ni,
 		    "%s", "received data frame");
-		/* XXX: make sure we already peered with this node */
+		if (ni->ni_peerstate != IEEE80211_NODE_MESH_ESTABLISHED) {
+			IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH,
+			    ni->ni_macaddr, NULL,
+			    "peer link not yet established (%s)",
+			    nodemeshstates[ni->ni_peerstate]);
+		}	
 		hdrspace = ieee80211_hdrspace(ic, wh)
-		    + sizeof(struct ieee80211_meshcontrol);
+		    + sizeof(struct ieee80211_meshcntl);
 		if (m->m_len < hdrspace &&
 		    (m = m_pullup(m, hdrspace)) == NULL) {
 			IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
@@ -489,7 +487,7 @@ mesh_recv_mgmt(struct ieee80211_node *ni
 		if ((scan.capinfo & (IEEE80211_CAPINFO_ESS|IEEE80211_CAPINFO_IBSS)) == 0 &&
 		    !IEEE80211_ADDR_EQ(wh->i_addr2, ni->ni_macaddr) &&
 		    IEEE80211_ADDR_EQ(wh->i_addr3, zerobssid)) {
-			uint16_t args[4];
+			union ieee80211_send_action_args vargs;
 			/*
 			 * Create a new entry in the neighbor table.
 			 */
@@ -507,10 +505,10 @@ mesh_recv_mgmt(struct ieee80211_node *ni
 			    IEEE80211_MSG_MESH,
 			    ni, "peer link: switching to state %s",
 			    nodemeshstates[ni->ni_peerstate]);
-			args[0] = ni->ni_plid;
+			vargs.fixedarg[0] = ni->ni_plid;
 			ieee80211_send_action(ni,
 			    IEEE80211_ACTION_CAT_MESHPEERING,
-			    IEEE80211_ACTION_MESHPEERING_OPEN, args);
+			    IEEE80211_ACTION_MESHPEERING_OPEN, vargs);
 			ni->ni_mrcount = 0;
 			mesh_peer_timeout_setup(ni);
 		}
@@ -631,8 +629,9 @@ mesh_recv_action(struct ieee80211_node *
 	struct ieee80211_meshid_ie *meshid;
 	struct ieee80211_meshconf_ie *meshconf;
 	struct ieee80211_meshpeer_ie *meshpeer;
+	struct ieee80211_meshpreq_ie *meshpreq;
 	uint8_t *frm, *efrm;
-	uint16_t args[4];
+	union ieee80211_send_action_args vargs;
 		
 	wh = mtod(m0, struct ieee80211_frame *);
 	ia = (struct ieee80211_action *) &wh[1];
@@ -652,6 +651,7 @@ mesh_recv_action(struct ieee80211_node *
 	meshid = NULL;
 	meshpeer = NULL;
 	meshconf = NULL;
+	meshpreq = NULL;
 	while (efrm - frm > 1) {
 		IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return);
 		switch (*frm) {
@@ -663,32 +663,44 @@ mesh_recv_action(struct ieee80211_node *
 			break;
 		case IEEE80211_ELEMID_MESHPEER:
 			meshpeer = (struct ieee80211_meshpeer_ie *) frm;
-			meshpeer->peer_llinkid = LE_READ_2(&meshpeer->peer_llinkid);
-			meshpeer->peer_linkid = LE_READ_2(&meshpeer->peer_linkid);
-			meshpeer->peer_rcode = LE_READ_2(&meshpeer->peer_rcode);
+			meshpeer->peer_llinkid =
+			    LE_READ_2(&meshpeer->peer_llinkid);
+			meshpeer->peer_linkid =
+			    LE_READ_2(&meshpeer->peer_linkid);
+			meshpeer->peer_rcode =
+			    LE_READ_2(&meshpeer->peer_rcode);
+			break;
+		case IEEE80211_ELEMID_MESHPREQ:
+			meshpreq = (struct ieee80211_meshpreq_ie *) frm;
+			meshpreq->preq_id = LE_READ_4(&meshpreq->preq_id);
+			meshpreq->preq_origseq =
+			    LE_READ_4(&meshpreq->preq_origseq);
+			meshpreq->preq_lifetime =
+			    LE_READ_4(&meshpreq->preq_lifetime);
+			meshpreq->preq_metric =
+			    LE_READ_4(&meshpreq->preq_metric);
 			break;
 		}
 		frm += frm[1] + 2;
 	}
-	/*
-	 * Check if we agree on Mesh ID and Configuration.
-	 * XXX: TBD
-	 */
-	if (mesh_verify_meshid(vap, meshid) ||
-	    mesh_verify_meshconf(vap, meshconf) ||
-	    !meshpeer) {
-		IEEE80211_DISCARD(vap,
-		    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
-		    wh, NULL, "%s", "action frame not for our mesh");
-		vap->iv_stats.is_rx_mgtdiscard++;
-		return;
-	}
 
 	/*
 	 * Mesh Peer Link Management Finite State Machine handling.
 	 */
 	switch (ia->ia_category) {
 	case IEEE80211_ACTION_CAT_MESHPEERING:
+		/*
+		 * Check if we agree on the required fields.
+		 */
+		if (mesh_verify_meshid(vap, meshid) ||
+		    mesh_verify_meshconf(vap, meshconf) ||
+		    !meshpeer) {
+			IEEE80211_DISCARD(vap,
+			    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
+			    wh, NULL, "%s", "action frame not for our mesh");
+			vap->iv_stats.is_rx_mgtdiscard++;
+			return;
+		}
 		switch (ia->ia_action) {
 		case IEEE80211_ACTION_MESHPEERING_OPEN:
 			IEEE80211_NOTE(vap,
@@ -703,27 +715,29 @@ mesh_recv_action(struct ieee80211_node *
 				    nodemeshstates[ni->ni_peerstate]);
 				ni->ni_llid = meshpeer->peer_llinkid;
 				get_random_bytes(&ni->ni_plid, 2);
-				args[0] = ni->ni_plid;
+				vargs.fixedarg[0] = ni->ni_plid;
 				/* Announce we're open too... */
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
-				    IEEE80211_ACTION_MESHPEERING_OPEN, args);
+				    IEEE80211_ACTION_MESHPEERING_OPEN, vargs);
 				/* ...and confirm the link. */
-				args[0] = ni->ni_plid;
-				args[1] = ni->ni_llid;
+				vargs.fixedarg[0] = ni->ni_plid;
+				vargs.fixedarg[1] = ni->ni_llid;
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
-				    IEEE80211_ACTION_MESHPEERING_CONFIRM, args);
+				    IEEE80211_ACTION_MESHPEERING_CONFIRM,
+				    vargs);
 				mesh_peer_timeout_setup(ni);
 				break;
 			case IEEE80211_NODE_MESH_OPENRCV:
-				/* We received a duplicate open, confirm again. */
+				/* Duplicate open, confirm again. */
 				ni->ni_llid = meshpeer->peer_llinkid;
-				args[0] = ni->ni_plid;
-				args[1] = ni->ni_llid;
+				vargs.fixedarg[0] = ni->ni_plid;
+				vargs.fixedarg[1] = ni->ni_llid;
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
-				    IEEE80211_ACTION_MESHPEERING_CONFIRM, args);
+				    IEEE80211_ACTION_MESHPEERING_CONFIRM,
+				    vargs);
 				break;
 			case IEEE80211_NODE_MESH_OPENSNT:
 				ni->ni_peerstate = IEEE80211_NODE_MESH_OPENRCV;
@@ -732,41 +746,47 @@ mesh_recv_action(struct ieee80211_node *
 				    IEEE80211_MSG_MESH,
 				    ni, "peer link: switching to state %s",
 				    nodemeshstates[ni->ni_peerstate]);
-				args[0] = ni->ni_plid;
-				args[1] = ni->ni_llid;
+				vargs.fixedarg[0] = ni->ni_plid;
+				vargs.fixedarg[1] = ni->ni_llid;
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
-				    IEEE80211_ACTION_MESHPEERING_CONFIRM, args);
+				    IEEE80211_ACTION_MESHPEERING_CONFIRM,
+				    vargs);
 				/* NB: don't setup/clear any timeout */
 				break;
 			case IEEE80211_NODE_MESH_CONFIRMRECV:
-				ni->ni_peerstate = IEEE80211_NODE_MESH_ESTABLISHED;
+				ni->ni_peerstate =
+				    IEEE80211_NODE_MESH_ESTABLISHED;
 				IEEE80211_NOTE(vap,
 				    IEEE80211_MSG_MESH,
 				    ni, "peer link: switching to state %s",
 				    nodemeshstates[ni->ni_peerstate]);
 				ni->ni_llid = meshpeer->peer_llinkid;
-				args[0] = ni->ni_plid;
-				args[1] = ni->ni_llid;
+				vargs.fixedarg[0] = ni->ni_plid;
+				vargs.fixedarg[1] = ni->ni_llid;
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
-				    IEEE80211_ACTION_MESHPEERING_CONFIRM, args);
+				    IEEE80211_ACTION_MESHPEERING_CONFIRM,
+				    vargs);
 				mesh_peer_timeout_stop(ni);
 				break;
 			case IEEE80211_NODE_MESH_ESTABLISHED:
-				args[0] = ni->ni_plid;
-				args[1] = ni->ni_llid;
+				vargs.fixedarg[0] = ni->ni_plid;
+				vargs.fixedarg[1] = ni->ni_llid;
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
-				    IEEE80211_ACTION_MESHPEERING_CONFIRM, args);
+				    IEEE80211_ACTION_MESHPEERING_CONFIRM,
+				    vargs);
 				break;
 			case IEEE80211_NODE_MESH_HOLDING:
-				args[0] = ni->ni_llid;
-				args[1] = ni->ni_plid;
-				args[2] = IEEE80211_REASON_MESH_MAX_RETRIES;
+				vargs.fixedarg[0] = ni->ni_llid;
+				vargs.fixedarg[1] = ni->ni_plid;
+				vargs.fixedarg[2] =
+				    IEEE80211_REASON_MESH_MAX_RETRIES;
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
-				    IEEE80211_ACTION_MESHPEERING_CLOSE, args);
+				    IEEE80211_ACTION_MESHPEERING_CLOSE,
+				    vargs);
 				break;
 			}
 			break;
@@ -777,7 +797,8 @@ mesh_recv_action(struct ieee80211_node *
 			    meshpeer->peer_llinkid, meshpeer->peer_linkid);
 			switch (ni->ni_peerstate) {
 			case IEEE80211_NODE_MESH_OPENRCV:
-				ni->ni_peerstate = IEEE80211_NODE_MESH_ESTABLISHED;
+				ni->ni_peerstate =
+				    IEEE80211_NODE_MESH_ESTABLISHED;
 				IEEE80211_NOTE(vap,
 				    IEEE80211_MSG_MESH,
 				    ni, "peer link: switching to state %s",
@@ -785,19 +806,21 @@ mesh_recv_action(struct ieee80211_node *
 				mesh_peer_timeout_stop(ni);
 				break;
 			case IEEE80211_NODE_MESH_OPENSNT:
-				ni->ni_peerstate = IEEE80211_NODE_MESH_CONFIRMRECV;
+				ni->ni_peerstate =
+				    IEEE80211_NODE_MESH_CONFIRMRECV;
 				IEEE80211_NOTE(vap,
 				    IEEE80211_MSG_MESH,
 				    ni, "peer link: switching to state %s",
 				    nodemeshstates[ni->ni_peerstate]);
 				break;
 			case IEEE80211_NODE_MESH_HOLDING:
-				args[0] = ni->ni_llid;
-				args[1] = ni->ni_plid;
-				args[2] = IEEE80211_REASON_MESH_MAX_RETRIES;
+				vargs.fixedarg[0] = ni->ni_llid;
+				vargs.fixedarg[1] = ni->ni_plid;
+				vargs.fixedarg[2] = IEEE80211_REASON_MESH_MAX_RETRIES;
 				ieee80211_send_action(ni,
 				    IEEE80211_ACTION_CAT_MESHPEERING,
-				    IEEE80211_ACTION_MESHPEERING_CLOSE, args);
+				    IEEE80211_ACTION_MESHPEERING_CLOSE,
+				    vargs);
 				break;
 			default:
 				IEEE80211_DISCARD(vap,
@@ -824,8 +847,49 @@ mesh_recv_action(struct ieee80211_node *
 			break;
 		}
 		break;
+	case IEEE80211_ACTION_CAT_MESHPATH:
+		switch (ia->ia_action) {
+		case IEEE80211_ACTION_MESHPATH_REQ:
+			if (meshpreq == NULL) {
+				IEEE80211_DISCARD(vap,
+				    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
+				    wh, NULL, "%s", "preq without IE");
+				vap->iv_stats.is_rx_mgtdiscard++;
+				return;
+			}
+			/*
+			 * Is the peer trying to find us?
+			 */
+			if (IEEE80211_ADDR_EQ(vap->iv_myaddr,
+			    meshpreq->preq_targets[0].target_addr)) {
+				struct ieee80211_meshprep_ie prep;
+				/*
+				 * Build and send a path reply frame.
+				 */
+				prep.prep_flags = 0;
+				prep.prep_hopcount = 0;
+				prep.prep_ttl = ieee80211_mesh_ttl;
+				IEEE80211_ADDR_COPY(prep.prep_targetaddr,
+				    meshpreq->preq_targets[0].target_addr);
+				prep.prep_targetseq = meshpreq->preq_origseq;
+				prep.prep_lifetime = 5000;
+				prep.prep_metric = 0;
+				IEEE80211_ADDR_COPY(prep.prep_origaddr,
+				    vap->iv_myaddr);
+				prep.prep_origseq = 1;
+
+				vargs.ptrarg = &prep;
+				ieee80211_send_action(ni,
+				    IEEE80211_ACTION_CAT_MESHPATH,
+				    IEEE80211_ACTION_MESHPATH_REP,
+				    vargs);
+			}
+			break;
+		}
+		break;
 	default:
-		IEEE80211_DISCARD(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
+		IEEE80211_DISCARD(vap,
+		    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
 		    wh, NULL, "%s", "not handled");
 		vap->iv_stats.is_rx_mgtdiscard++;
 	}
@@ -876,7 +940,7 @@ mesh_peer_timeout_cb(void *arg)
 {
 	struct ieee80211_node *ni = (struct ieee80211_node *)arg;
 	struct ieee80211vap *vap = ni->ni_vap;
-	uint16_t args[4];
+	union ieee80211_send_action_args vargs;
 
 	IEEE80211_NOTE(vap,
 	    IEEE80211_MSG_MESH,
@@ -887,11 +951,11 @@ mesh_peer_timeout_cb(void *arg)
 	case IEEE80211_NODE_MESH_OPENSNT:
 	case IEEE80211_NODE_MESH_OPENRCV:
 		if (ni->ni_mrcount == ieee80211_mesh_maxretries) {
-			args[0] = ni->ni_plid;
-			args[2] = IEEE80211_REASON_MESH_MAX_RETRIES;
+			vargs.fixedarg[0] = ni->ni_plid;
+			vargs.fixedarg[2] = IEEE80211_REASON_MESH_MAX_RETRIES;
 			ieee80211_send_action(ni,
 			    IEEE80211_ACTION_CAT_MESHPEERING,
-			    IEEE80211_ACTION_MESHPEERING_CLOSE, args);
+			    IEEE80211_ACTION_MESHPEERING_CLOSE, vargs);
 			ni->ni_mrcount = 0;
 			ni->ni_peerstate = IEEE80211_NODE_MESH_HOLDING;
 			IEEE80211_NOTE(vap,
@@ -900,21 +964,22 @@ mesh_peer_timeout_cb(void *arg)
 			    nodemeshstates[ni->ni_peerstate]);
 			mesh_peer_timeout_setup(ni);
 		} else {
-			args[0] = ni->ni_plid;
+			vargs.fixedarg[0] = ni->ni_plid;
 			ieee80211_send_action(ni,
 			    IEEE80211_ACTION_CAT_MESHPEERING,
-			    IEEE80211_ACTION_MESHPEERING_OPEN, args);
+			    IEEE80211_ACTION_MESHPEERING_OPEN, vargs);
 			ni->ni_mrcount++;
 			mesh_peer_timeout_backoff(ni);
 		}
 		break;
 	case IEEE80211_NODE_MESH_CONFIRMRECV:
 		if (ni->ni_mrcount == ieee80211_mesh_maxretries) {
-			args[0] = ni->ni_plid;
-			args[2] = IEEE80211_REASON_MESH_CONFIRM_TIMEOUT;
+			vargs.fixedarg[0] = ni->ni_plid;
+			vargs.fixedarg[2] =
+			    IEEE80211_REASON_MESH_CONFIRM_TIMEOUT;
 			ieee80211_send_action(ni,
 			    IEEE80211_ACTION_CAT_MESHPEERING,
-			    IEEE80211_ACTION_MESHPEERING_CLOSE, args);
+			    IEEE80211_ACTION_MESHPEERING_CLOSE, vargs);
 			ni->ni_mrcount = 0;
 			ni->ni_peerstate = IEEE80211_NODE_MESH_HOLDING;
 			IEEE80211_NOTE(vap,

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.h	Thu May 14 16:56:56 2009	(r192110)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.h	Thu May 14 17:04:00 2009	(r192111)
@@ -215,7 +215,7 @@ struct ieee80211_meshpreq_ie {
 	uint8_t		preq_flags;
 	uint8_t		preq_hopcount;
 	uint8_t		preq_ttl;
-	uint8_t		preq_id;
+	uint32_t	preq_id;
 	uint8_t		preq_origaddr[IEEE80211_ADDR_LEN];
 	uint32_t	preq_origseq;	/* HWMP Sequence Number */
 	/* NB: may have Originator Proxied Address */
@@ -226,7 +226,7 @@ struct ieee80211_meshpreq_ie {
 		uint8_t		target_flags;
 		uint8_t		target_addr[IEEE80211_ADDR_LEN];
 		uint32_t	target_seq;	/* HWMP Sequence Number */
-	} targets[1] __packed;	/* NB: variable size */
+	} preq_targets[1] __packed;	/* NB: variable size */
 } __packed;
 
 /* Mesh Path Reply */
@@ -254,7 +254,7 @@ struct ieee80211_meshperr_ie {
 	struct {
 		uint8_t		dest_addr[IEEE80211_ADDR_LEN];
 		uint32_t	dest_seq;	/* HWMP Sequence Number */
-	} dests[1] __packed;		/* NB: variable size */
+	} perr_dests[1] __packed;		/* NB: variable size */
 } __packed;
 
 /* Mesh Proxy Update */
@@ -278,18 +278,30 @@ struct ieee80211_meshpuc_ie {
  */
 #define	IEEE80211_ACTION_CAT_MESHPEERING	30	/* XXX Linux */
 #define	IEEE80211_ACTION_CAT_MESHLINK		13
-#define	IEEE80211_ACTION_CAT_PATHSEL		14
+#define	IEEE80211_ACTION_CAT_MESHPATH		32	/* XXX Linux */
 #define	IEEE80211_ACTION_CAT_INTERWORK		15
 #define	IEEE80211_ACTION_CAT_RESOURCE		16
 #define	IEEE80211_ACTION_CAT_PROXY		17
 
+/*
+ * Mesh Peering Action codes.
+ */
 enum {
 	IEEE80211_ACTION_MESHPEERING_OPEN	= 0,
 	IEEE80211_ACTION_MESHPEERING_CONFIRM	= 1,
 	IEEE80211_ACTION_MESHPEERING_CLOSE	= 2,
 };
 
-struct ieee80211_meshcontrol {
+/*
+ * Mesh Path Selection Action codes.
+ */
+enum {
+	IEEE80211_ACTION_MESHPATH_REQ	= 0,
+	IEEE80211_ACTION_MESHPATH_REP	= 1,
+	IEEE80211_ACTION_MESHPATH_ERR	= 2,
+};
+
+struct ieee80211_meshcntl {
 	uint8_t		mc_flags;
 	uint8_t		mc_ttl;
 	uint32_t	mc_seq;

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Thu May 14 16:56:56 2009	(r192110)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Thu May 14 17:04:00 2009	(r192111)
@@ -538,7 +538,7 @@ ieee80211_send_setup(
  */
 int
 ieee80211_send_action(struct ieee80211_node *ni,
-	int category, int action, uint16_t args[4])
+	int category, int action, union ieee80211_send_action_args vargs)
 {
 #define	senderr(_x, _v)	do { vap->iv_stats._v++; ret = _x; goto bad; } while (0)
 #define	ADDSHORT(frm, v) do {			\
@@ -555,7 +555,7 @@ ieee80211_send_action(struct ieee80211_n
 	struct mbuf *m;
 	uint8_t *frm;
 	uint16_t baparamset;
-	int ret, addsize;
+	int ret, addsize = 0;
 
 	KASSERT(ni != NULL, ("null node"));
 
@@ -571,19 +571,32 @@ ieee80211_send_action(struct ieee80211_n
 		ieee80211_node_refcnt(ni)+1);
 	ieee80211_ref_node(ni);
 
-	addsize = 0;
 	switch (category) {
 	case IEEE80211_ACTION_CAT_BA:
 	case IEEE80211_ACTION_CAT_HT:
-		addsize += sizeof(struct ieee80211_action_ba_addbaresponse);
+		addsize = sizeof(struct ieee80211_action_ba_addbaresponse);
 		break;
 	case IEEE80211_ACTION_CAT_MESHPEERING:
-		addsize += sizeof(uint16_t);		/* capabilities */
-		addsize += 2 + IEEE80211_RATE_SIZE;
-		addsize += 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE);
-		addsize += 2 + vap->iv_meshidlen;	/* Mesh ID */
-		addsize += sizeof(struct ieee80211_meshconf_ie);
-		addsize += sizeof(struct ieee80211_meshpeer_ie);
+		addsize = sizeof(uint16_t)		/* capabilities */
+			+ 2 + IEEE80211_RATE_SIZE
+			+ 2 + (IEEE80211_RATE_MAXSIZE - IEEE80211_RATE_SIZE)
+			+ 2 + vap->iv_meshidlen		/* Mesh ID */
+			+ sizeof(struct ieee80211_meshconf_ie)
+			+ sizeof(struct ieee80211_meshpeer_ie);
+		break;
+	case IEEE80211_ACTION_CAT_MESHPATH:
+		switch (action) {
+		case IEEE80211_ACTION_MESHPATH_REQ:
+			/* XXX more than one destination */
+			addsize = sizeof(struct ieee80211_meshpreq_ie);
+			break;
+		case IEEE80211_ACTION_MESHPATH_REP:
+			addsize = sizeof(struct ieee80211_meshprep_ie);
+			break;
+		case IEEE80211_ACTION_MESHPATH_ERR:
+			addsize = sizeof(struct ieee80211_meshperr_ie);
+			break;
+		}
 		break;
 	}
 	m = ieee80211_getmgtframe(&frm,
@@ -606,39 +619,43 @@ ieee80211_send_action(struct ieee80211_n
 			    IEEE80211_MSG_ACTION | IEEE80211_MSG_11N, ni,
 			    "send ADDBA request: dialogtoken %d "
 			    "baparamset 0x%x (tid %d) batimeout 0x%x baseqctl 0x%x",
-			    args[0], args[1], MS(args[1], IEEE80211_BAPS_TID),
-			    args[2], args[3]);
-
-			*frm++ = args[0];	/* dialog token */
-			ADDSHORT(frm, args[1]);	/* baparamset */
-			ADDSHORT(frm, args[2]);	/* batimeout */
-			ADDSHORT(frm, args[3]);	/* baseqctl */
+			    vargs.fixedarg[0], vargs.fixedarg[1],
+			    MS(vargs.fixedarg[1], IEEE80211_BAPS_TID),
+			    vargs.fixedarg[2], vargs.fixedarg[3]);
+
+			*frm++ = vargs.fixedarg[0];	/* dialog token */
+			ADDSHORT(frm, vargs.fixedarg[1]);	/* baparamset */
+			ADDSHORT(frm, vargs.fixedarg[2]);	/* batimeout */
+			ADDSHORT(frm, vargs.fixedarg[3]);	/* baseqctl */
 			break;
 		case IEEE80211_ACTION_BA_ADDBA_RESPONSE:
 			IEEE80211_NOTE(vap,
 			    IEEE80211_MSG_ACTION | IEEE80211_MSG_11N, ni,
 			    "send ADDBA response: dialogtoken %d status %d "
 			    "baparamset 0x%x (tid %d) batimeout %d",
-			    args[0], args[1], args[2],
-			    MS(args[2], IEEE80211_BAPS_TID), args[3]);
-
-			*frm++ = args[0];	/* dialog token */
-			ADDSHORT(frm, args[1]);	/* statuscode */
-			ADDSHORT(frm, args[2]);	/* baparamset */
-			ADDSHORT(frm, args[3]);	/* batimeout */
+			    vargs.fixedarg[0], vargs.fixedarg[1],
+			    vargs.fixedarg[2], MS(vargs.fixedarg[2],
+			    IEEE80211_BAPS_TID), vargs.fixedarg[3]);
+
+			*frm++ = vargs.fixedarg[0];	/* dialog token */
+			ADDSHORT(frm, vargs.fixedarg[1]);	/* statuscode */
+			ADDSHORT(frm, vargs.fixedarg[2]);	/* baparamset */
+			ADDSHORT(frm, vargs.fixedarg[3]);	/* batimeout */
 			break;
 		case IEEE80211_ACTION_BA_DELBA:
 			/* XXX */
-			baparamset = SM(args[0], IEEE80211_DELBAPS_TID)
-				   | args[1]
+			baparamset = SM(vargs.fixedarg[0],
+				     IEEE80211_DELBAPS_TID)
+				   | vargs.fixedarg[1]
 				   ;
 			ADDSHORT(frm, baparamset);
-			ADDSHORT(frm, args[2]);	/* reason code */
+			ADDSHORT(frm, vargs.fixedarg[2]);  /* reason code */
 
 			IEEE80211_NOTE(vap,
 			    IEEE80211_MSG_ACTION | IEEE80211_MSG_11N, ni,
 			    "send DELBA action: tid %d, initiator %d reason %d",
-			    args[0], args[1], args[2]);
+			    vargs.fixedarg[0], vargs.fixedarg[1],
+			    vargs.fixedarg[2]);
 			break;
 		default:
 			goto badaction;
@@ -677,14 +694,16 @@ ieee80211_send_action(struct ieee80211_n
 		case IEEE80211_ACTION_MESHPEERING_OPEN:
 			IEEE80211_NOTE(vap,
 			    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
-			    "send PEER OPEN action: localid 0x%x", args[0]);
+			    "send PEER OPEN action: localid 0x%x",
+			    vargs.fixedarg[0]);
 			ADDSHORT(frm, getcapinfo(vap, ni->ni_chan));
 			frm = ieee80211_add_rates(frm, rs);
 			frm = ieee80211_add_xrates(frm, rs);
 			frm = ieee80211_add_meshid(frm, vap);
 			frm = ieee80211_add_meshconf(frm, vap);
 			frm = ieee80211_add_meshpeer(frm,
-			    IEEE80211_MESH_PEER_LINK_OPEN, args[0], 0, 0);
+			    IEEE80211_MESH_PEER_LINK_OPEN,
+			    vargs.fixedarg[0], 0, 0);
 			break;
 		/*
 		 * mesh peer confirm action frame format:
@@ -703,7 +722,8 @@ ieee80211_send_action(struct ieee80211_n
 			IEEE80211_NOTE(vap,
 			    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
 			    "send PEER CONFIRM action: localid 0x%x, "
-			    "peerid 0x%x", args[0], args[1]);
+			    "peerid 0x%x", vargs.fixedarg[0],
+			    vargs.fixedarg[1]);
 			ADDSHORT(frm, getcapinfo(vap, ni->ni_chan));
 			ADDSHORT(frm, 0);	/* status code */
 			ADDSHORT(frm, 0);	/* AID */
@@ -712,7 +732,8 @@ ieee80211_send_action(struct ieee80211_n
 			frm = ieee80211_add_meshid(frm, vap);
 			frm = ieee80211_add_meshconf(frm, vap);
 			frm = ieee80211_add_meshpeer(frm,
-			    IEEE80211_MESH_PEER_LINK_CONFIRM, args[0], args[1],
+			    IEEE80211_MESH_PEER_LINK_CONFIRM,
+			    vargs.fixedarg[0], vargs.fixedarg[1],
 			    0);
 			break;
 		/*
@@ -727,15 +748,43 @@ ieee80211_send_action(struct ieee80211_n
 			IEEE80211_NOTE(vap,
 			    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
 			    "sending PEER CLOSE action: localid 0x%x, "
-			    "peerid 0x%x reason %d", args[0], args[1], args[2]);
-			ADDSHORT(frm, args[2]);		/* reason code */
+			    "peerid 0x%x reason %d", vargs.fixedarg[0],
+			    vargs.fixedarg[1], vargs.fixedarg[2]);
+			ADDSHORT(frm, vargs.fixedarg[2]);   /* reason code */
 			frm = ieee80211_add_meshid(frm, vap);
 			frm = ieee80211_add_meshpeer(frm,
-			    IEEE80211_MESH_PEER_LINK_CLOSE, args[0], args[1],
-			    args[2]);
+			    IEEE80211_MESH_PEER_LINK_CLOSE,
+			    vargs.fixedarg[0], vargs.fixedarg[1],
+			    vargs.fixedarg[2]);
 			break;
 		}
 		break;
+	case IEEE80211_ACTION_CAT_MESHPATH:
+		switch (action) {
+		/*
+		 * mesh path request action frame format:
+		 *   [1] action
+		 *   [1] category
+		 *   [tlv] mesh preq
+		 */
+		case IEEE80211_ACTION_MESHPATH_REQ:
+			break;
+		/*
+		 * mesh path request action frame format:
+		 *   [1] action
+		 *   [1] category
+		 *   [tlv] mesh preq
+		 */
+		case IEEE80211_ACTION_MESHPATH_REP:
+			IEEE80211_NOTE(vap,
+			    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
+			    "send PATH REPLY action: flags 0x%x, "
+			    "hopcount 0x%x", vargs.fixedarg[0],
+			    vargs.fixedarg[1]);
+				
+			break;	
+		}
+		break;
 	default:
 	badaction:
 		IEEE80211_NOTE(vap,
@@ -1237,7 +1286,7 @@ ieee80211_encap(struct ieee80211vap *vap
 	 * All Mesh data frames have a Mesh Control field.
 	 */
 	if (vap->iv_opmode == IEEE80211_M_MBSS)
-		hdrsize += sizeof(struct ieee80211_meshcontrol);
+		hdrsize += sizeof(struct ieee80211_meshcntl);
 	/*
 	 * Honor driver DATAPAD requirement.
 	 */

Modified: projects/mesh11s/sys/net80211/ieee80211_proto.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_proto.h	Thu May 14 16:56:56 2009	(r192110)
+++ projects/mesh11s/sys/net80211/ieee80211_proto.h	Thu May 14 17:04:00 2009	(r192111)
@@ -65,7 +65,12 @@ void	ieee80211_syncflag_ext(struct ieee8
 int	ieee80211_input_all(struct ieee80211com *, struct mbuf *,
 		int, int, uint32_t);
 struct ieee80211_bpf_params;
-int	ieee80211_send_action(struct ieee80211_node *, int, int, uint16_t [4]);
+union ieee80211_send_action_args {
+	uint16_t	fixedarg[4];
+	void *		ptrarg;
+};
+int	ieee80211_send_action(struct ieee80211_node *, int, int,
+		union ieee80211_send_action_args);
 int	ieee80211_mgmt_output(struct ieee80211_node *, struct mbuf *, int,
 		struct ieee80211_bpf_params *);
 int	ieee80211_raw_xmit(struct ieee80211_node *, struct mbuf *,

Modified: projects/mesh11s/sys/net80211/ieee80211_var.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_var.h	Thu May 14 16:56:56 2009	(r192110)
+++ projects/mesh11s/sys/net80211/ieee80211_var.h	Thu May 14 17:04:00 2009	(r192111)
@@ -276,7 +276,7 @@ struct ieee80211com {
 				    const uint8_t *frm, const uint8_t *efrm);
 	int			(*ic_send_action)(struct ieee80211_node *,
 				    int category, int action,
-				    uint16_t args[4]);
+				    union ieee80211_send_action_args);
 	/* check if A-MPDU should be enabled this station+ac */
 	int			(*ic_ampdu_enable)(struct ieee80211_node *,
 				    struct ieee80211_tx_ampdu *);

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 17:04:59 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 4FEFB1065678;
	Thu, 14 May 2009 17:04:59 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 3E50C8FC24;
	Thu, 14 May 2009 17:04:59 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EH4xwV097185;
	Thu, 14 May 2009 17:04:59 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EH4xvM097184;
	Thu, 14 May 2009 17:04:59 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905141704.n4EH4xvM097184@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 17:04:59 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192112 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 17:04:59 -0000

Author: rpaulo
Date: Thu May 14 17:04:58 2009
New Revision: 192112
URL: http://svn.freebsd.org/changeset/base/192112

Log:
  Add missing type for mesh ttl sysctl.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_freebsd.c

Modified: projects/mesh11s/sys/net80211/ieee80211_freebsd.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_freebsd.c	Thu May 14 17:04:00 2009	(r192111)
+++ projects/mesh11s/sys/net80211/ieee80211_freebsd.c	Thu May 14 17:04:58 2009	(r192112)
@@ -74,7 +74,7 @@ SYSCTL_NODE(_net_wlan, OID_AUTO, mesh, C
     "IEEE 802.11s parameters");
 extern int ieee80211_mesh_ttl;
 SYSCTL_INT(_net_wlan_mesh, OID_AUTO, ttl, CTLFLAG_RW,
-    &ieee80211_mesh_ttl, 0, "TTL for mesh packets");
+    &ieee80211_mesh_ttl, "I", "TTL for mesh packets");
 
 MALLOC_DEFINE(M_80211_COM, "80211com", "802.11 com state");
 

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 21:15:28 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 208C51065670;
	Thu, 14 May 2009 21:15:28 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 0FBA58FC1E;
	Thu, 14 May 2009 21:15:28 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4ELFRAo002511;
	Thu, 14 May 2009 21:15:27 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4ELFRRb002510;
	Thu, 14 May 2009 21:15:27 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905142115.n4ELFRRb002510@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Thu, 14 May 2009 21:15:27 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192117 - projects/mips/sys/mips/atheros
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 21:15:28 -0000

Author: gonzo
Date: Thu May 14 21:15:27 2009
New Revision: 192117
URL: http://svn.freebsd.org/changeset/base/192117

Log:
  - Remove garbage debug output

Modified:
  projects/mips/sys/mips/atheros/apb.c

Modified: projects/mips/sys/mips/atheros/apb.c
==============================================================================
--- projects/mips/sys/mips/atheros/apb.c	Thu May 14 20:59:36 2009	(r192116)
+++ projects/mips/sys/mips/atheros/apb.c	Thu May 14 21:15:27 2009	(r192117)
@@ -166,8 +166,6 @@ apb_alloc_resource(device_t bus, device_
 		return (BUS_ALLOC_RESOURCE(device_get_parent(bus), child, type,
 		    rid, start, end, count, flags));
 
-	printf("not pass through\n");
-
 	/*
 	 * If this is an allocation of the "default" range for a given RID,
 	 * and we know what the resources for this device are (ie. they aren't

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 21:17:41 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 9185F1065677;
	Thu, 14 May 2009 21:17:41 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 809148FC22;
	Thu, 14 May 2009 21:17:41 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4ELHffs002594;
	Thu, 14 May 2009 21:17:41 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4ELHfFH002593;
	Thu, 14 May 2009 21:17:41 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905142117.n4ELHfFH002593@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 21:17:41 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192118 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 21:17:42 -0000

Author: rpaulo
Date: Thu May 14 21:17:41 2009
New Revision: 192118
URL: http://svn.freebsd.org/changeset/base/192118

Log:
  Fix previous commit and pass the correct args for SYSCTL_INT().
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_freebsd.c

Modified: projects/mesh11s/sys/net80211/ieee80211_freebsd.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_freebsd.c	Thu May 14 21:15:27 2009	(r192117)
+++ projects/mesh11s/sys/net80211/ieee80211_freebsd.c	Thu May 14 21:17:41 2009	(r192118)
@@ -73,8 +73,8 @@ SYSCTL_INT(_net_wlan, OID_AUTO, cac_time
 SYSCTL_NODE(_net_wlan, OID_AUTO, mesh, CTLFLAG_RD, 0,
     "IEEE 802.11s parameters");
 extern int ieee80211_mesh_ttl;
-SYSCTL_INT(_net_wlan_mesh, OID_AUTO, ttl, CTLFLAG_RW,
-    &ieee80211_mesh_ttl, "I", "TTL for mesh packets");
+SYSCTL_INT(_net_wlan_mesh, OID_AUTO, ttl, CTLTYPE_INT | CTLFLAG_RW,
+    &ieee80211_mesh_ttl, 0, "TTL for mesh packets");
 
 MALLOC_DEFINE(M_80211_COM, "80211com", "802.11 com state");
 

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 21:26:07 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id DBAE11065758;
	Thu, 14 May 2009 21:26:07 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id C2B058FC17;
	Thu, 14 May 2009 21:26:07 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4ELQ7M3002818;
	Thu, 14 May 2009 21:26:07 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4ELQ7qP002817;
	Thu, 14 May 2009 21:26:07 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905142126.n4ELQ7qP002817@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Thu, 14 May 2009 21:26:07 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192119 - projects/mips/sys/mips/mips
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 21:26:08 -0000

Author: gonzo
Date: Thu May 14 21:26:07 2009
New Revision: 192119
URL: http://svn.freebsd.org/changeset/base/192119

Log:
  - Off by one check fix. Check for last address in region
      to fit in KSEG1

Modified:
  projects/mips/sys/mips/mips/pmap.c

Modified: projects/mips/sys/mips/mips/pmap.c
==============================================================================
--- projects/mips/sys/mips/mips/pmap.c	Thu May 14 21:17:41 2009	(r192118)
+++ projects/mips/sys/mips/mips/pmap.c	Thu May 14 21:26:07 2009	(r192119)
@@ -2819,7 +2819,7 @@ pmap_mapdev(vm_offset_t pa, vm_size_t si
 	 * KSEG1 maps only first 512M of phys address space. For 
 	 * pa > 0x20000000 we should make proper mapping * using pmap_kenter.
 	 */
-	if (pa + size < MIPS_KSEG0_LARGEST_PHYS)
+	if ((pa + size - 1) < MIPS_KSEG0_LARGEST_PHYS)
 		return (void *)MIPS_PHYS_TO_KSEG1(pa);
 	else {
 		offset = pa & PAGE_MASK;

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 21:27:10 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 3125B10656B2;
	Thu, 14 May 2009 21:27:10 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 609D98FC13;
	Thu, 14 May 2009 21:27:03 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4ELR362002877;
	Thu, 14 May 2009 21:27:03 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4ELR3gL002876;
	Thu, 14 May 2009 21:27:03 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905142127.n4ELR3gL002876@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Thu, 14 May 2009 21:27:03 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192120 - projects/mips/sys/mips/atheros
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 21:27:14 -0000

Author: gonzo
Date: Thu May 14 21:27:03 2009
New Revision: 192120
URL: http://svn.freebsd.org/changeset/base/192120

Log:
  - Add SPI-related registers

Modified:
  projects/mips/sys/mips/atheros/ar71xxreg.h

Modified: projects/mips/sys/mips/atheros/ar71xxreg.h
==============================================================================
--- projects/mips/sys/mips/atheros/ar71xxreg.h	Thu May 14 21:26:07 2009	(r192119)
+++ projects/mips/sys/mips/atheros/ar71xxreg.h	Thu May 14 21:27:03 2009	(r192120)
@@ -324,4 +324,17 @@
 #define			DMA_INTR_TX_UNDERRUN		(1 << 1)
 #define			DMA_INTR_TX_PKT_SENT		(1 << 0)
 
+#define	AR71XX_SPI_BASE	0x1f000000
+#define		AR71XX_SPI_FS		0x00
+#define		AR71XX_SPI_CTRL		0x04
+#define			SPI_CTRL_REMAP_DISABLE		(1 << 6)
+#define			SPI_CTRL_CLOCK_DIVIDER_MASK	((1 << 6) - 1)
+#define		AR71XX_SPI_IO_CTRL	0x08
+#define			SPI_IO_CTRL_CS2			(1 << 18)
+#define			SPI_IO_CTRL_CS1			(1 << 17)
+#define			SPI_IO_CTRL_CS0			(1 << 16)
+#define			SPI_IO_CTRL_CLK			(1 << 8)
+#define			SPI_IO_CTRL_DO			1
+#define		AR71XX_SPI_RDS		0x0C
+
 #endif /* _AR71XX_REG_H_ */

From owner-svn-src-projects@FreeBSD.ORG  Thu May 14 22:13:17 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id C1270106566C;
	Thu, 14 May 2009 22:13:17 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id B02728FC16;
	Thu, 14 May 2009 22:13:17 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4EMDHFJ004113;
	Thu, 14 May 2009 22:13:17 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4EMDH7o004111;
	Thu, 14 May 2009 22:13:17 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905142213.n4EMDH7o004111@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Thu, 14 May 2009 22:13:17 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192126 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 14 May 2009 22:13:18 -0000

Author: rpaulo
Date: Thu May 14 22:13:17 2009
New Revision: 192126
URL: http://svn.freebsd.org/changeset/base/192126

Log:
  * Really send the mesh path reply, don't just pretend.
  * Fix a bug in calculating the location of the IEs on mesh_recv_action().
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_output.c

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Thu May 14 22:01:32 2009	(r192125)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Thu May 14 22:13:17 2009	(r192126)
@@ -3,7 +3,7 @@
  * Copyright (c) 2009 The FreeBSD Foundation 
  * All rights reserved. 
  * 
- * This software was developed by Rui Paulo under sponsorship from the                 
+ * This software was developed by Rui Paulo under sponsorship from the
  * FreeBSD Foundation. 
  *  
  * Redistribution and use in source and binary forms, with or without 
@@ -635,8 +635,7 @@ mesh_recv_action(struct ieee80211_node *
 		
 	wh = mtod(m0, struct ieee80211_frame *);
 	ia = (struct ieee80211_action *) &wh[1];
-	frm = (uint8_t *)&wh[1];
-	frm += sizeof(ia);
+	frm = (uint8_t *)&wh[1] + sizeof(struct ieee80211_action);
 	efrm = mtod(m0, uint8_t *) + m0->m_len;
 
 	/*
@@ -646,8 +645,6 @@ mesh_recv_action(struct ieee80211_node *
 	if (ni == vap->iv_bss) {
 		return;
 	}
-		
-
 	meshid = NULL;
 	meshpeer = NULL;
 	meshconf = NULL;
@@ -684,10 +681,10 @@ mesh_recv_action(struct ieee80211_node *
 		frm += frm[1] + 2;
 	}
 
+	switch (ia->ia_category) {
 	/*
 	 * Mesh Peer Link Management Finite State Machine handling.
 	 */
-	switch (ia->ia_category) {
 	case IEEE80211_ACTION_CAT_MESHPEERING:
 		/*
 		 * Check if we agree on the required fields.

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Thu May 14 22:01:32 2009	(r192125)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Thu May 14 22:13:17 2009	(r192126)
@@ -546,6 +546,13 @@ ieee80211_send_action(struct ieee80211_n
 	frm[1] = (v) >> 8;			\
 	frm += 2;				\
 } while (0)
+#define	ADDWORD(frm, v) do {			\
+	frm[0] = (v) & 0xff;			\
+	frm[1] = ((v) >> 8) & 0xff;		\
+	frm[2] = ((v) >> 16) & 0xff;		\
+	frm[3] = ((v) >> 24) & 0xff;		\
+	frm += 4;				\
+} while (0)
 #define	MS(_v, _f)	(((_v) & _f) >> _f##_S)
 #define	SM(_v, _f)	(((_v) << _f##_S) & _f)
 	struct ieee80211vap *vap = ni->ni_vap;
@@ -765,25 +772,44 @@ ieee80211_send_action(struct ieee80211_n
 		 * mesh path request action frame format:
 		 *   [1] action
 		 *   [1] category
-		 *   [tlv] mesh preq
+		 *   [tlv] mesh path request
 		 */
 		case IEEE80211_ACTION_MESHPATH_REQ:
 			break;
 		/*
-		 * mesh path request action frame format:
+		 * mesh path reply action frame format:
 		 *   [1] action
 		 *   [1] category
-		 *   [tlv] mesh preq
+		 *   [tlv] mesh path reply
 		 */
 		case IEEE80211_ACTION_MESHPATH_REP:
+		{
+			struct ieee80211_meshprep_ie *prep;
+
+			prep = vargs.ptrarg;
 			IEEE80211_NOTE(vap,
 			    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
 			    "send PATH REPLY action: flags 0x%x, "
-			    "hopcount 0x%x", vargs.fixedarg[0],
-			    vargs.fixedarg[1]);
-				
+			    "hopcount 0x%x, ttl 0x%x, "
+			    "seq 0x%x, lifetime 0x%x", prep->prep_flags,
+			    prep->prep_hopcount, prep->prep_ttl,
+			    prep->prep_targetseq, prep->prep_lifetime);
+			*frm++ = IEEE80211_ELEMID_MESHPREP;
+			*frm++ = sizeof(struct ieee80211_meshprep_ie) - 2;
+			*frm++ = prep->prep_flags;
+			*frm++ = prep->prep_hopcount;
+			*frm++ = prep->prep_ttl;
+			IEEE80211_ADDR_COPY(frm, prep->prep_targetaddr);
+			frm += 6;
+			ADDWORD(frm, prep->prep_targetseq);
+			ADDWORD(frm, prep->prep_lifetime);
+			ADDWORD(frm, prep->prep_metric);
+			IEEE80211_ADDR_COPY(frm, prep->prep_origaddr);
+			frm += 6;
+			ADDWORD(frm, prep->prep_origseq);
 			break;	
 		}
+		}
 		break;
 	default:
 	badaction:

From owner-svn-src-projects@FreeBSD.ORG  Fri May 15 01:51:47 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id C18D81065674;
	Fri, 15 May 2009 01:51:47 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id AE9F58FC1D;
	Fri, 15 May 2009 01:51:47 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4F1plnM008524;
	Fri, 15 May 2009 01:51:47 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4F1plPM008523;
	Fri, 15 May 2009 01:51:47 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905150151.n4F1plPM008523@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Fri, 15 May 2009 01:51:47 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192131 - projects/mips/sys/mips/atheros
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 May 2009 01:51:48 -0000

Author: gonzo
Date: Fri May 15 01:51:47 2009
New Revision: 192131
URL: http://svn.freebsd.org/changeset/base/192131

Log:
  - Add definitions for PLL CPU Config register fields

Modified:
  projects/mips/sys/mips/atheros/ar71xxreg.h

Modified: projects/mips/sys/mips/atheros/ar71xxreg.h
==============================================================================
--- projects/mips/sys/mips/atheros/ar71xxreg.h	Fri May 15 00:18:31 2009	(r192130)
+++ projects/mips/sys/mips/atheros/ar71xxreg.h	Fri May 15 01:51:47 2009	(r192131)
@@ -136,7 +136,26 @@
 #define		USB_CTRL_CONFIG_RESUME_UTMI_PLS_DIS	(1 << 1)
 #define		USB_CTRL_CONFIG_UTMI_BACKWARD_ENB	(1 << 0)
 
+#define	AR71XX_BASE_FREQ		40000000
 #define	AR71XX_PLL_CPU_CONFIG		0x18050000
+#define		PLL_SW_UPDATE			(1 << 31)
+#define		PLL_LOCKED			(1 << 30)
+#define		PLL_AHB_DIV_SHIFT		20
+#define		PLL_AHB_DIV_MASK		7
+#define		PLL_DDR_DIV_SEL_SHIFT		18
+#define		PLL_DDR_DIV_SEL_MASK		3
+#define		PLL_CPU_DIV_SEL_SHIFT		16
+#define		PLL_CPU_DIV_SEL_MASK		2
+#define		PLL_LOOP_BW_SHIFT		12
+#define		PLL_LOOP_BW_MASK		0xf
+#define		PLL_DIV_IN_SHIFT		10
+#define		PLL_DIV_IN_MASK			3
+#define		PLL_DIV_OUT_SHIFT		8
+#define		PLL_DIV_OUT_MASK		3
+#define		PLL_FB_SHIFT			3
+#define		PLL_FB_MASK			0x1f
+#define		PLL_BYPASS			(1 << 1)
+#define		PLL_POWER_DOWN			(1 << 0)
 #define	AR71XX_PLL_SEC_CONFIG		0x18050004
 #define	AR71XX_PLL_CPU_CLK_CTRL		0x18050008
 #define	AR71XX_PLL_ETH_INT0_CLK		0x18050010

From owner-svn-src-projects@FreeBSD.ORG  Fri May 15 01:53:09 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 60160106566C;
	Fri, 15 May 2009 01:53:09 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 4D8338FC0C;
	Fri, 15 May 2009 01:53:09 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4F1r9m0008584;
	Fri, 15 May 2009 01:53:09 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4F1r9Bw008583;
	Fri, 15 May 2009 01:53:09 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905150153.n4F1r9Bw008583@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Fri, 15 May 2009 01:53:09 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192132 - projects/mips/sys/mips/atheros
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 May 2009 01:53:09 -0000

Author: gonzo
Date: Fri May 15 01:53:09 2009
New Revision: 192132
URL: http://svn.freebsd.org/changeset/base/192132

Log:
  - Calculate CPU frequency using dividers from PLL registers

Modified:
  projects/mips/sys/mips/atheros/ar71xx_machdep.c

Modified: projects/mips/sys/mips/atheros/ar71xx_machdep.c
==============================================================================
--- projects/mips/sys/mips/atheros/ar71xx_machdep.c	Fri May 15 01:51:47 2009	(r192131)
+++ projects/mips/sys/mips/atheros/ar71xx_machdep.c	Fri May 15 01:53:09 2009	(r192132)
@@ -97,8 +97,8 @@ platform_start(__register_t a0 __unused,
     __register_t a2 __unused, __register_t a3 __unused)
 {
 	vm_offset_t kernend;
-	uint64_t platform_counter_freq;
-	uint32_t reg;
+	uint64_t platform_counter_freq, freq;
+	uint32_t reg, div, pll_config;
 
 	/* clear the BSS and SBSS segments */
 	kernend = round_page((vm_offset_t)&end);
@@ -118,11 +118,16 @@ platform_start(__register_t a0 __unused,
 	 * should be called first.
 	 */
 	init_param1();
-	/* TODO: Get CPU freq from RedBoot. Is it possible? */
-	platform_counter_freq = 680000000UL;
+	pll_config = ATH_READ_REG(AR71XX_PLL_CPU_CONFIG);
+	div = ((pll_config >> PLL_FB_SHIFT) & PLL_FB_MASK) + 1;
+	freq = div * AR71XX_BASE_FREQ;
+	div = ((pll_config >> PLL_CPU_DIV_SEL_SHIFT) & PLL_CPU_DIV_SEL_MASK) 
+	    + 1;
+	platform_counter_freq = freq / div;
 	mips_timer_init_params(platform_counter_freq, 0);
 	cninit();
 
+	printf("platform frequency: %lld\n", platform_counter_freq);
 	printf("arguments: \n");
 	printf("  a0 = %08x\n", a0);
 	printf("  a1 = %08x\n", a1);

From owner-svn-src-projects@FreeBSD.ORG  Fri May 15 01:54:32 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id DB6D0106566B;
	Fri, 15 May 2009 01:54:32 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id C8C268FC17;
	Fri, 15 May 2009 01:54:32 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4F1sWMm008649;
	Fri, 15 May 2009 01:54:32 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4F1sWXl008648;
	Fri, 15 May 2009 01:54:32 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905150154.n4F1sWXl008648@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Fri, 15 May 2009 01:54:32 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192133 - projects/mips/sys/mips/atheros
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 May 2009 01:54:33 -0000

Author: gonzo
Date: Fri May 15 01:54:32 2009
New Revision: 192133
URL: http://svn.freebsd.org/changeset/base/192133

Log:
  - Calculate clock frequency using PLL registers
  - Remove stale comments

Modified:
  projects/mips/sys/mips/atheros/uart_cpu_ar71xx.c

Modified: projects/mips/sys/mips/atheros/uart_cpu_ar71xx.c
==============================================================================
--- projects/mips/sys/mips/atheros/uart_cpu_ar71xx.c	Fri May 15 01:53:09 2009	(r192132)
+++ projects/mips/sys/mips/atheros/uart_cpu_ar71xx.c	Fri May 15 01:54:32 2009	(r192133)
@@ -53,27 +53,34 @@ uart_cpu_eqres(struct uart_bas *b1, stru
 int
 uart_cpu_getdev(int devtype, struct uart_devinfo *di)
 {
+	uint32_t pll_config, div;
+	uint64_t freq;
+
+	/* PLL freq */
+	pll_config = ATH_READ_REG(AR71XX_PLL_CPU_CONFIG);
+	div = ((pll_config >> PLL_FB_SHIFT) & PLL_FB_MASK) + 1;
+	freq = div * AR71XX_BASE_FREQ;
+	/* CPU freq */
+	div = ((pll_config >> PLL_CPU_DIV_SEL_SHIFT) & PLL_CPU_DIV_SEL_MASK) 
+	    + 1;
+	freq = freq / div;
+	/* AHB freq */
+	div = (((pll_config >> PLL_AHB_DIV_SHIFT) & PLL_AHB_DIV_MASK) + 1) * 2;
+	freq = freq / div;
+
 	di->ops = uart_getops(&uart_ns8250_class);
 	di->bas.chan = 0;
 	di->bas.bst = ar71xx_bus_space_reversed;
 	di->bas.regshft = 2;
-	/* TODO: calculate proper AHB freq using PLL registers */
-	di->bas.rclk = 85000000;
+	di->bas.rclk = freq;
 	di->baudrate = 115200;
 	di->databits = 8;
 	di->stopbits = 1;
+
 	di->parity = UART_PARITY_NONE;
 
-	/* TODO: check if uart_bus_space_io mandatory to set */
 	uart_bus_space_io = NULL;
 	uart_bus_space_mem = ar71xx_bus_space_reversed;
-	/* 
-	 * FIXME:
-	 * 3 is to compensate big endian, uart operates 
-	 * with bus_space_read_1/bus_space_write_1 and hence gets 
-	 * highest byte instead of lowest one. Actual fix will involve
-	 * MIPS bus_space fixing.
-	 */
 	di->bas.bsh = MIPS_PHYS_TO_KSEG1(AR71XX_UART_ADDR);
 	return (0);
 }

From owner-svn-src-projects@FreeBSD.ORG  Fri May 15 06:23:11 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 944131065675;
	Fri, 15 May 2009 06:23:11 +0000 (UTC)
	(envelope-from brde@optusnet.com.au)
Received: from fallbackmx09.syd.optusnet.com.au
	(fallbackmx09.syd.optusnet.com.au [211.29.132.242])
	by mx1.freebsd.org (Postfix) with ESMTP id 2D7968FC08;
	Fri, 15 May 2009 06:23:10 +0000 (UTC)
	(envelope-from brde@optusnet.com.au)
Received: from mail08.syd.optusnet.com.au (mail08.syd.optusnet.com.au
	[211.29.132.189])
	by fallbackmx09.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id
	n4F3WvU8021716; Fri, 15 May 2009 13:32:57 +1000
Received: from c122-107-117-19.carlnfd1.nsw.optusnet.com.au
	(c122-107-117-19.carlnfd1.nsw.optusnet.com.au [122.107.117.19])
	by mail08.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id
	n4F3WrlH011506
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO);
	Fri, 15 May 2009 13:32:54 +1000
Date: Fri, 15 May 2009 13:32:52 +1000 (EST)
From: Bruce Evans <brde@optusnet.com.au>
X-X-Sender: bde@delplex.bde.org
To: Brooks Davis <brooks@freebsd.org>
In-Reply-To: <200905140650.n4E6oURU079910@svn.freebsd.org>
Message-ID: <20090515122400.B15792@delplex.bde.org>
References: <200905140650.n4E6oURU079910@svn.freebsd.org>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed
Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org
Subject: Re: svn commit: r192087 - in projects/ngroups: lib/libc/gen
 lib/libc/rpc
 lib/libc/sys usr.bin/id usr.bin/newgrp usr.bin/quota usr.sbin/chown
 usr.sbin/chroot usr.sbin/jail usr.sbin/jexec usr.sbin/lpr/lpc
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 May 2009 06:23:11 -0000

On Thu, 14 May 2009, Brooks Davis wrote:

> Log:
>  Use to value returned by sysconf(_SC_NGROUPS_MAX) in favor of
>  NGROUPS_MAX or NGROUPS since POSIX says that NGROUPS_MAX represents a
>  lower bound on sysconf(_SC_NGROUPS_MAX).

Actually, POSIX says that NGROUPS_MAX is identical to
sysconf(_SC_NGROUPS_MAX) if it is defined (and the sysconf() succeeds).
It is _POSIX_NGROUPS_MAX that gives the lower bound.  _POSIX_NGROUPS_MAX
is always 8, except under old versions of POSIX that don't require
supplementary groups to be supported, where it is always 0.  It is a
bug for a POSIX implementation to define NGROUPS_MAX if its value is
not always identical to sysconf(_SC_NGROUPS_MAX), or for a POSIX
application to use NGROUPS_MAX unconditionally.

> Modified: projects/ngroups/lib/libc/gen/initgroups.c
> ==============================================================================
> --- projects/ngroups/lib/libc/gen/initgroups.c	Thu May 14 06:48:38 2009	(r192086)
> +++ projects/ngroups/lib/libc/gen/initgroups.c	Thu May 14 06:50:30 2009	(r192087)
> @@ -35,10 +35,12 @@ __FBSDID("$FreeBSD$");
>
> #include <sys/param.h>
>
> +#include <stdlib.h>

Insertion sort error.

> #include <stdio.h>
> #include "namespace.h"
> #include <err.h>
> #include "un-namespace.h"
> +#include <errno.h>

Insertion sort error.

> #include <unistd.h>
>
> int
> @@ -46,14 +48,20 @@ initgroups(uname, agroup)
> 	const char *uname;
> 	gid_t agroup;
> {
> -	int ngroups;
> +	int ngroups, ret;
> +	gid_t *groups;

Insertion sort error.

> +
> 	/*
> -	 * Provide space for one group more than NGROUPS to allow
> +	 * Provide space for one group more than possible to allow
> 	 * setgroups to fail and set errno.
> 	 */
> -	gid_t groups[NGROUPS + 1];
> +	ngroups = sysconf(_SC_NGROUPS_MAX) + 1;

This is missing error checking and overflow checking:
- sysconf() returns -1 on error
- sysconf() returns long so assigning to an int gives undefined behaviour
   if its value is preposterously large
- adding 1 to sysconf() may cause overflow before the assignment.

> +	groups = malloc(sizeof(gid_t)*ngroups);

This has style bugs and is missing and is missing overflow checking:
- missing spaces around binary operator
- the multiplication overflows if ngroups is preposterously large

See ps/args.c for the messy error handing needed for a similar case
(_SC_ARG_MAX for ps).  For groups, your changes would be cleaner and
correcter using a utility function to handle all the details.  Something
like the following:

%%%
gid_t *
allocgroups(void)
{
 	long ngroups_max;

 	ngroups_max = sysconf(_SC_NGROUPS_MAX);
 	if (ngroups_max < 0 || ngroups_max > LONG_MAX - 1 ||
 	    ngroups_max > SIZE_MAX / sizeof(gid_t) - 1)
 		return (NULL);
 	return (malloc(sizeof(gid_t) * (ngroups_max + 1)));
}
%%%

> +	if (groups == NULL)
> +		return (ENOSPC);

ENOSPC means no space on a device.  ENOMEM should be used.

Neither ENOSPC nor ENOMEM is a documented errno for initgroups(3).  The
documented errors are those for setgroups(2).

>
> -	ngroups = NGROUPS + 1;
> 	getgrouplist(uname, agroup, groups, &ngroups);
> -	return (setgroups(ngroups, groups));
> +	ret = setgroups(ngroups, groups);
> +	free(groups);
> +	return(ret);
> }

Lost the space after 'return'.

> ...

Similarly, except the whitespace errors are smaller.

One function aborts on getgroups() failure so maybe it can't handle
returning NULL on malloc() failure.  Another function uses err()
for malloc() failure and warn() for getgroups() failure.  Of course,
malloc() cannot fail and library functions cannot abort or exit :-).

> Modified: projects/ngroups/lib/libc/sys/getgroups.2
> ==============================================================================
> --- projects/ngroups/lib/libc/sys/getgroups.2	Thu May 14 06:48:38 2009	(r192086)
> +++ projects/ngroups/lib/libc/sys/getgroups.2	Thu May 14 06:50:30 2009	(r192087)
> @@ -59,7 +59,7 @@ system call
> returns the actual number of groups returned in
> .Fa gidset .
> No more than
> -.Dv NGROUPS_MAX
> +.Fn sysconf _SC_NGROUPS_MAX
> will ever
> be returned.
> If

This and many other places should use POSIX notation {FOO_MAX} for limits.
Saying either NGROUPS_MAX or sysconf(_SC_NGROUPS_MAX} overspecifies the
behaviour and makes it hard to change.  Since getroups() is a syscall and
you haven't changed the kernel yet, NGROUPS_MAX is still correct here.

> @@ -91,7 +91,8 @@ an invalid address.
> .El
> .Sh SEE ALSO
> .Xr setgroups 2 ,
> -.Xr initgroups 3
> +.Xr initgroups 3 ,
> +.Xr sysconf 3

POSIX doesn't bloat man pages that refer to {FOO_MAX} with references to
sysconf().  Here the cross-reference is even less needed since the
reference to sysconf() is explicit in context.

Bruce

From owner-svn-src-projects@FreeBSD.ORG  Fri May 15 09:47:11 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 696E5106566B;
	Fri, 15 May 2009 09:47:11 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 574D48FC0A;
	Fri, 15 May 2009 09:47:11 +0000 (UTC)
	(envelope-from rpaulo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4F9lBod018546;
	Fri, 15 May 2009 09:47:11 GMT (envelope-from rpaulo@svn.freebsd.org)
Received: (from rpaulo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4F9lBWb018542;
	Fri, 15 May 2009 09:47:11 GMT (envelope-from rpaulo@svn.freebsd.org)
Message-Id: <200905150947.n4F9lBWb018542@svn.freebsd.org>
From: Rui Paulo <rpaulo@FreeBSD.org>
Date: Fri, 15 May 2009 09:47:11 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192137 - projects/mesh11s/sys/net80211
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 May 2009 09:47:11 -0000

Author: rpaulo
Date: Fri May 15 09:47:10 2009
New Revision: 192137
URL: http://svn.freebsd.org/changeset/base/192137

Log:
  * move code to create mesh prep IEs to the mesh C file
  * add some comments
  * initial work on airtime link metric report.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_input.c
  projects/mesh11s/sys/net80211/ieee80211_mesh.c
  projects/mesh11s/sys/net80211/ieee80211_mesh.h
  projects/mesh11s/sys/net80211/ieee80211_output.c

Modified: projects/mesh11s/sys/net80211/ieee80211_input.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_input.c	Fri May 15 04:53:55 2009	(r192136)
+++ projects/mesh11s/sys/net80211/ieee80211_input.c	Fri May 15 09:47:10 2009	(r192137)
@@ -807,9 +807,14 @@ ieee80211_recv_action(struct ieee80211_n
 			break;
 		}
 		break;
+	case IEEE80211_ACTION_CAT_MESHPEERING:
+	case IEEE80211_ACTION_CAT_MESHLINK:
+	case IEEE80211_ACTION_CAT_MESHPATH:
+		/* handled by ieee80211_mesh.c */
+		break;
 	default:
 		IEEE80211_NOTE(vap,
-		    IEEE80211_MSG_ACTION | IEEE80211_MSG_11N, ni,
+		    IEEE80211_MSG_ACTION, ni,
 		    "%s: category %d not implemented", __func__,
 		    ia->ia_category);
 		vap->iv_stats.is_rx_mgtdiscard++;

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Fri May 15 04:53:55 2009	(r192136)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Fri May 15 09:47:10 2009	(r192137)
@@ -77,6 +77,8 @@ static int	mesh_verify_meshid(struct iee
 		    struct ieee80211_meshid_ie *);
 static int	mesh_verify_meshconf(struct ieee80211vap *,
 		    struct ieee80211_meshconf_ie *);
+static uint32_t	mesh_compute_airtime(struct ieee80211vap *,
+		    struct ieee80211_node *);
 
 /* timeout values in miliseconds */
 static const int ieee80211_mesh_retrytimeout = 40;
@@ -884,6 +886,33 @@ mesh_recv_action(struct ieee80211_node *
 			break;
 		}
 		break;
+	/*
+	 * Airtime link metric handling.
+	 */
+	case IEEE80211_ACTION_CAT_MESHLINK:
+		switch (ia->ia_action) {
+		case IEEE80211_ACTION_MESHLINK_REQ:
+		{
+			uint32_t metric;
+
+			metric = mesh_compute_airtime(vap, ni);
+			vargs.ptrarg = &metric;
+			ieee80211_send_action(ni,
+			    IEEE80211_ACTION_CAT_MESHLINK,
+			    IEEE80211_ACTION_MESHLINK_REP,
+			    vargs);
+		}
+			break;
+		case IEEE80211_ACTION_MESHLINK_REP:
+			break;
+		default:
+			IEEE80211_DISCARD(vap,
+			    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
+			    wh, NULL, "mesh link using reserved action %d",
+			    ia->ia_action);
+			vap->iv_stats.is_rx_mgtdiscard++;
+		}
+		break;
 	default:
 		IEEE80211_DISCARD(vap,
 		    IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
@@ -1020,8 +1049,20 @@ mesh_verify_meshconf(struct ieee80211vap
 	return 0;
 }
 
+#define	ADDSHORT(frm, v) do {			\
+	frm[0] = (v) & 0xff;			\
+	frm[1] = (v) >> 8;			\
+	frm += 2;				\
+} while (0)
+#define	ADDWORD(frm, v) do {			\
+	frm[0] = (v) & 0xff;			\
+	frm[1] = ((v) >> 8) & 0xff;		\
+	frm[2] = ((v) >> 16) & 0xff;		\
+	frm[3] = ((v) >> 24) & 0xff;		\
+	frm += 4;				\
+} while (0)
 /*
- * Add a MESH ID element to a frame.
+ * Add a Mesh ID IE to a frame.
  */
 uint8_t *
 ieee80211_add_meshid(uint8_t *frm, struct ieee80211vap *vap)
@@ -1037,7 +1078,7 @@ ieee80211_add_meshid(uint8_t *frm, struc
 }
 
 /*
- * Add a Mesh Configuration element to a frame.
+ * Add a Mesh Configuration IE to a frame.
  * For now just use HWMP routing, Airtime link metric, Null Congestion
  * Signaling, Null Sync Protocol and Null Authentication.
  */
@@ -1063,15 +1104,14 @@ ieee80211_add_meshconf(uint8_t *frm, str
 	return frm + sizeof(ie);
 }
 
+/*
+ * Add a Mesh Peer Management IE to a frame.
+ */
 uint8_t *
 ieee80211_add_meshpeer(uint8_t *frm, uint8_t subtype, uint16_t localid,
     uint16_t peerid, uint16_t reason)
 {
-#define	ADDSHORT(frm, v) do {			\
-	frm[0] = (v) & 0xff;			\
-	frm[1] = (v) >> 8;			\
-	frm += 2;				\
-} while (0)
+
 	*frm++ = IEEE80211_ELEMID_MESHPEER;
 	switch (subtype) {
 	case IEEE80211_MESH_PEER_LINK_OPEN:
@@ -1097,10 +1137,70 @@ ieee80211_add_meshpeer(uint8_t *frm, uin
 		ADDSHORT(frm, reason);
 		break;
 	}
+
 	return frm;
-#undef ADDSHORT
 }
 
+/*
+ * Add a Mesh Path Reply IE to a frame.
+ */
+uint8_t *
+ieee80211_add_meshprep(uint8_t *frm, struct ieee80211_meshprep_ie *prep)
+{
+
+	*frm++ = IEEE80211_ELEMID_MESHPREP;
+	*frm++ = sizeof(struct ieee80211_meshprep_ie) - 2;
+	*frm++ = prep->prep_flags;
+	*frm++ = prep->prep_hopcount;
+	*frm++ = prep->prep_ttl;
+	IEEE80211_ADDR_COPY(frm, prep->prep_targetaddr);
+	frm += 6;
+	ADDWORD(frm, prep->prep_targetseq);
+	ADDWORD(frm, prep->prep_lifetime);
+	ADDWORD(frm, prep->prep_metric);
+	IEEE80211_ADDR_COPY(frm, prep->prep_origaddr);
+	frm += 6;
+	ADDWORD(frm, prep->prep_origseq);
+
+	return frm;
+}
+
+/*
+ * Compute an Airtime Link Metric for the link with this node.
+ * XXX needs work
+ */
+static uint32_t
+mesh_compute_airtime(struct ieee80211vap *vap, struct ieee80211_node *ni)
+{
+	uint32_t res, overhead, rate, errrate;
+	const static int nbits = 8192;
+
+	/* Channel access overhead */
+	overhead = 123; /* XXX */
+	/* In Mbps */
+	rate = 10;
+	/* In percentage */
+	errrate = 10;
+	res = (overhead + (nbits / rate)) * (100 / (100 - errrate));
+
+	return res;
+}
+
+/*
+ * Add a Mesh Link Metric report IE to a frame.
+ */
+uint8_t *
+ieee80211_add_meshlink(uint8_t *frm, uint32_t metric)
+{
+
+	*frm++ = IEEE80211_ELEMID_MESHLINK;
+	*frm++ = 4;
+	ADDWORD(frm, metric);
+
+	return frm;
+}
+#undef ADDSHORT
+#undef ADDWORD
 
 void
 ieee80211_create_mbss(struct ieee80211vap *vap, struct ieee80211_channel *chan)

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.h	Fri May 15 04:53:55 2009	(r192136)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.h	Fri May 15 09:47:10 2009	(r192137)
@@ -290,6 +290,7 @@ enum {
 	IEEE80211_ACTION_MESHPEERING_OPEN	= 0,
 	IEEE80211_ACTION_MESHPEERING_CONFIRM	= 1,
 	IEEE80211_ACTION_MESHPEERING_CLOSE	= 2,
+	/* 3-255 reserved */
 };
 
 /*
@@ -299,6 +300,16 @@ enum {
 	IEEE80211_ACTION_MESHPATH_REQ	= 0,
 	IEEE80211_ACTION_MESHPATH_REP	= 1,
 	IEEE80211_ACTION_MESHPATH_ERR	= 2,
+	/* 3-255 reserved */
+};
+
+/*
+ * Mesh Link Metric Action codes.
+ */
+enum {
+	IEEE80211_ACTION_MESHLINK_REQ	= 0,	/* Link Metric Request */
+	IEEE80211_ACTION_MESHLINK_REP	= 1,	/* Link Metric Report */
+	/* 2-255 reserved */
 };
 
 struct ieee80211_meshcntl {
@@ -315,6 +326,9 @@ uint8_t *	ieee80211_add_meshid(uint8_t *
 uint8_t *	ieee80211_add_meshconf(uint8_t *, struct ieee80211vap *);
 uint8_t *	ieee80211_add_meshpeer(uint8_t *, uint8_t, uint16_t, uint16_t,
 		    uint16_t);
+uint8_t *	ieee80211_add_meshprep(uint8_t *,
+		    struct ieee80211_meshprep_ie *);
+uint8_t *	ieee80211_add_meshlink(uint8_t *, uint32_t);
 void		ieee80211_create_mbss(struct ieee80211vap *, struct
 		    ieee80211_channel *);
 uint32_t	ieee80211_mesh_getseq(void);

Modified: projects/mesh11s/sys/net80211/ieee80211_output.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_output.c	Fri May 15 04:53:55 2009	(r192136)
+++ projects/mesh11s/sys/net80211/ieee80211_output.c	Fri May 15 09:47:10 2009	(r192137)
@@ -546,13 +546,6 @@ ieee80211_send_action(struct ieee80211_n
 	frm[1] = (v) >> 8;			\
 	frm += 2;				\
 } while (0)
-#define	ADDWORD(frm, v) do {			\
-	frm[0] = (v) & 0xff;			\
-	frm[1] = ((v) >> 8) & 0xff;		\
-	frm[2] = ((v) >> 16) & 0xff;		\
-	frm[3] = ((v) >> 24) & 0xff;		\
-	frm += 4;				\
-} while (0)
 #define	MS(_v, _f)	(((_v) & _f) >> _f##_S)
 #define	SM(_v, _f)	(((_v) << _f##_S) & _f)
 	struct ieee80211vap *vap = ni->ni_vap;
@@ -794,19 +787,7 @@ ieee80211_send_action(struct ieee80211_n
 			    "seq 0x%x, lifetime 0x%x", prep->prep_flags,
 			    prep->prep_hopcount, prep->prep_ttl,
 			    prep->prep_targetseq, prep->prep_lifetime);
-			*frm++ = IEEE80211_ELEMID_MESHPREP;
-			*frm++ = sizeof(struct ieee80211_meshprep_ie) - 2;
-			*frm++ = prep->prep_flags;
-			*frm++ = prep->prep_hopcount;
-			*frm++ = prep->prep_ttl;
-			IEEE80211_ADDR_COPY(frm, prep->prep_targetaddr);
-			frm += 6;
-			ADDWORD(frm, prep->prep_targetseq);
-			ADDWORD(frm, prep->prep_lifetime);
-			ADDWORD(frm, prep->prep_metric);
-			IEEE80211_ADDR_COPY(frm, prep->prep_origaddr);
-			frm += 6;
-			ADDWORD(frm, prep->prep_origseq);
+			frm = ieee80211_add_meshprep(frm, prep);
 			break;	
 		}
 		}

From owner-svn-src-projects@FreeBSD.ORG  Fri May 15 21:36:50 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 9491B106564A;
	Fri, 15 May 2009 21:36:50 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 82AB78FC0A;
	Fri, 15 May 2009 21:36:50 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4FLaomA035423;
	Fri, 15 May 2009 21:36:50 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4FLaoUY035419;
	Fri, 15 May 2009 21:36:50 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905152136.n4FLaoUY035419@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Fri, 15 May 2009 21:36:50 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192161 - projects/mips/sys/mips/atheros
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 15 May 2009 21:36:50 -0000

Author: gonzo
Date: Fri May 15 21:36:50 2009
New Revision: 192161
URL: http://svn.freebsd.org/changeset/base/192161

Log:
  - Add pci bus space that translates byte order to little endian,
      may be it will be merged with bus_space_reversed later
  - Handle memory resources close to bus in order to control
      bus_space_tag

Added:
  projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.c
  projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.h
Modified:
  projects/mips/sys/mips/atheros/ar71xx_pci.c
  projects/mips/sys/mips/atheros/files.ar71xx

Modified: projects/mips/sys/mips/atheros/ar71xx_pci.c
==============================================================================
--- projects/mips/sys/mips/atheros/ar71xx_pci.c	Fri May 15 21:34:58 2009	(r192160)
+++ projects/mips/sys/mips/atheros/ar71xx_pci.c	Fri May 15 21:36:50 2009	(r192161)
@@ -52,7 +52,8 @@ __FBSDID("$FreeBSD$");
 #include <dev/pci/pcib_private.h>
 #include "pcib_if.h"
 
-#include "mips/atheros/ar71xxreg.h"
+#include <mips/atheros/ar71xxreg.h>
+#include <mips/atheros/ar71xx_pci_bus_space.h>
 
 #undef AR71XX_PCI_DEBUG
 #ifdef AR71XX_PCI_DEBUG
@@ -354,7 +355,7 @@ ar71xx_pci_alloc_resource(device_t bus, 
 {
 
 	struct ar71xx_pci_softc *sc = device_get_softc(bus);	
-	struct resource *rv = NULL;
+	struct resource *rv;
 	struct rman *rm;
 
 	switch (type) {
@@ -382,9 +383,32 @@ ar71xx_pci_alloc_resource(device_t bus, 
 		}
 	} 
 
+
 	return (rv);
 }
 
+
+static int
+ar71xx_pci_activate_resource(device_t bus, device_t child, int type, int rid,
+    struct resource *r)
+{
+	int res = (BUS_ACTIVATE_RESOURCE(device_get_parent(bus),
+	    child, type, rid, r));
+
+	if (!res) {
+		switch(type) {
+		case SYS_RES_MEMORY:
+		case SYS_RES_IOPORT:
+			rman_set_bustag(r, ar71xx_bus_space_pcimem);
+			break;
+		}
+	}
+
+	return (res);
+}
+
+
+
 static int
 ar71xx_pci_setup_intr(device_t bus, device_t child, struct resource *ires,
 		int flags, driver_filter_t *filt, driver_intr_t *handler,
@@ -495,7 +519,7 @@ static device_method_t ar71xx_pci_method
 	DEVMETHOD(bus_write_ivar,	ar71xx_pci_write_ivar),
 	DEVMETHOD(bus_alloc_resource,	ar71xx_pci_alloc_resource),
 	DEVMETHOD(bus_release_resource,	bus_generic_release_resource),
-	DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
+	DEVMETHOD(bus_activate_resource, ar71xx_pci_activate_resource),
 	DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
 	DEVMETHOD(bus_setup_intr,	ar71xx_pci_setup_intr),
 	DEVMETHOD(bus_teardown_intr,	ar71xx_pci_teardown_intr),

Added: projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.c	Fri May 15 21:36:50 2009	(r192161)
@@ -0,0 +1,198 @@
+/*-
+ * Copyright (c) 2009, Oleksandr Tymoshenko <gonzo@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice unmodified, this list of conditions, and the following
+ *    disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+
+#include <machine/bus.h>
+#include <mips/atheros/ar71xx_pci_bus_space.h>
+
+static bs_r_1_s_proto(pcimem);
+static bs_r_2_s_proto(pcimem);
+static bs_r_4_s_proto(pcimem);
+static bs_w_1_s_proto(pcimem);
+static bs_w_2_s_proto(pcimem);
+static bs_w_4_s_proto(pcimem);
+
+/*
+ * Bus space that handles offsets in word for 1/2 bytes read/write access.
+ * Byte order of values is handled by device drivers itself. 
+ */
+static struct bus_space bus_space_pcimem = {
+	/* cookie */
+	(void *) 0,
+
+	/* mapping/unmapping */
+	generic_bs_map,
+	generic_bs_unmap,
+	generic_bs_subregion,
+
+	/* allocation/deallocation */
+	NULL,
+	NULL,
+
+	/* barrier */
+	generic_bs_barrier,
+
+	/* read (single) */
+	generic_bs_r_1,
+	generic_bs_r_2,
+	generic_bs_r_4,
+	NULL,
+
+	/* read multiple */
+	generic_bs_rm_1,
+	generic_bs_rm_2,
+	generic_bs_rm_4,
+	NULL,
+
+	/* read region */
+	generic_bs_rr_1,
+	generic_bs_rr_2,
+	generic_bs_rr_4,
+	NULL,
+
+	/* write (single) */
+	generic_bs_w_1,
+	generic_bs_w_2,
+	generic_bs_w_4,
+	NULL,
+
+	/* write multiple */
+	generic_bs_wm_1,
+	generic_bs_wm_2,
+	generic_bs_wm_4,
+	NULL,
+
+	/* write region */
+	NULL,
+	generic_bs_wr_2,
+	generic_bs_wr_4,
+	NULL,
+
+	/* set multiple */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+
+	/* set region */
+	NULL,
+	generic_bs_sr_2,
+	generic_bs_sr_4,
+	NULL,
+
+	/* copy */
+	NULL,
+	generic_bs_c_2,
+	NULL,
+	NULL,
+
+	/* read (single) stream */
+	pcimem_bs_r_1_s,
+	pcimem_bs_r_2_s,
+	pcimem_bs_r_4_s,
+	NULL,
+
+	/* read multiple stream */
+	generic_bs_rm_1,
+	generic_bs_rm_2,
+	generic_bs_rm_4,
+	NULL,
+
+	/* read region stream */
+	generic_bs_rr_1,
+	generic_bs_rr_2,
+	generic_bs_rr_4,
+	NULL,
+
+	/* write (single) stream */
+	pcimem_bs_w_1_s,
+	pcimem_bs_w_2_s,
+	pcimem_bs_w_4_s,
+	NULL,
+
+	/* write multiple stream */
+	generic_bs_wm_1,
+	generic_bs_wm_2,
+	generic_bs_wm_4,
+	NULL,
+
+	/* write region stream */
+	NULL,
+	generic_bs_wr_2,
+	generic_bs_wr_4,
+	NULL,
+};
+
+bus_space_tag_t ar71xx_bus_space_pcimem = &bus_space_pcimem;
+
+static uint8_t
+pcimem_bs_r_1_s(void *t, bus_space_handle_t h, bus_size_t o)
+{
+
+	return readb(h + (o &~ 3) + (3 - (o & 3)));
+}
+
+static void
+pcimem_bs_w_1_s(void *t, bus_space_handle_t h, bus_size_t o, u_int8_t v)
+{
+
+	writeb(h + (o &~ 3) + (3 - (o & 3)), v);
+}
+
+static uint16_t
+pcimem_bs_r_2_s(void *t, bus_space_handle_t h, bus_size_t o)
+{
+
+	return readw(h + (o &~ 3) + (2 - (o & 3)));
+}
+
+static void
+pcimem_bs_w_2_s(void *t, bus_space_handle_t h, bus_size_t o, uint16_t v)
+{
+
+	writew(h + (o &~ 3) + (2 - (o & 3)), v);
+}
+
+static uint32_t
+pcimem_bs_r_4_s(void *t, bus_space_handle_t h, bus_size_t o)
+{
+	
+	return le32toh(readl(h + o));
+}
+
+static void
+pcimem_bs_w_4_s(void *t, bus_space_handle_t h, bus_size_t o, uint32_t v)
+{
+
+	writel(h + o, htole32(v));
+}

Added: projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/mips/sys/mips/atheros/ar71xx_pci_bus_space.h	Fri May 15 21:36:50 2009	(r192161)
@@ -0,0 +1,33 @@
+/*-
+ * Copyright (c) 2009, Oleksandr Tymoshenko <gonzo@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice unmodified, this list of conditions, and the following
+ *    disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef __AR71XX_PCI_BUS_SPACEH__
+#define __AR71XX_PCI_BUS_SPACEH__
+
+extern bus_space_tag_t ar71xx_bus_space_pcimem;
+
+#endif /* __AR71XX_PCI_BUS_SPACEH__ */

Modified: projects/mips/sys/mips/atheros/files.ar71xx
==============================================================================
--- projects/mips/sys/mips/atheros/files.ar71xx	Fri May 15 21:34:58 2009	(r192160)
+++ projects/mips/sys/mips/atheros/files.ar71xx	Fri May 15 21:36:50 2009	(r192161)
@@ -5,6 +5,7 @@ mips/atheros/ar71xx_machdep.c	standard
 mips/atheros/ar71xx_ehci.c	optional ehci
 mips/atheros/ar71xx_ohci.c	optional ohci
 mips/atheros/ar71xx_pci.c	optional pci
+mips/atheros/ar71xx_pci_bus_space.c	optional pci
 mips/atheros/if_arge.c		optional arge
 mips/atheros/uart_bus_ar71xx.c	optional uart
 mips/atheros/uart_cpu_ar71xx.c	optional uart

From owner-svn-src-projects@FreeBSD.ORG  Sat May 16 02:34:04 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 11FDE106564A;
	Sat, 16 May 2009 02:34:04 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id F42088FC08;
	Sat, 16 May 2009 02:34:03 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G2Y3wi041620;
	Sat, 16 May 2009 02:34:03 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G2Y309041619;
	Sat, 16 May 2009 02:34:03 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905160234.n4G2Y309041619@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Sat, 16 May 2009 02:34:03 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192176 - projects/mips/sys/mips/mips
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 16 May 2009 02:34:04 -0000

Author: gonzo
Date: Sat May 16 02:34:03 2009
New Revision: 192176
URL: http://svn.freebsd.org/changeset/base/192176

Log:
  - Add informational title for cache info lines to separate
      them from environment variables dump

Modified:
  projects/mips/sys/mips/mips/cache_mipsNN.c

Modified: projects/mips/sys/mips/mips/cache_mipsNN.c
==============================================================================
--- projects/mips/sys/mips/mips/cache_mipsNN.c	Sat May 16 00:56:54 2009	(r192175)
+++ projects/mips/sys/mips/mips/cache_mipsNN.c	Sat May 16 02:34:03 2009	(r192176)
@@ -115,6 +115,7 @@ mipsNN_cache_init(struct mips_cpuinfo * 
 	pdcache_way_mask = cpuinfo->l1.dc_nways - 1;
 #define CACHE_DEBUG
 #ifdef CACHE_DEBUG
+	printf("Cache info:\n");
 	if (cpuinfo->icache_virtual)
 		printf("  icache is virtual\n");
 	printf("  picache_stride    = %d\n", picache_stride);

From owner-svn-src-projects@FreeBSD.ORG  Sat May 16 02:39:13 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id AA09D1065675;
	Sat, 16 May 2009 02:39:13 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 958FD8FC12;
	Sat, 16 May 2009 02:39:13 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G2dDkr041749;
	Sat, 16 May 2009 02:39:13 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G2dD8U041748;
	Sat, 16 May 2009 02:39:13 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905160239.n4G2dD8U041748@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Sat, 16 May 2009 02:39:13 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192177 - projects/mips/sys/mips/include
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 16 May 2009 02:39:14 -0000

Author: gonzo
Date: Sat May 16 02:39:13 2009
New Revision: 192177
URL: http://svn.freebsd.org/changeset/base/192177

Log:
  - Add MIPS_IS_KSEG0_ADDR, MIPS_IS_KSEG1_ADDR and MIPS_IS_VALID_PTR
      macroses thet check if address belongs to KSEG0, KSEG1 or both
      of them respectively.

Modified:
  projects/mips/sys/mips/include/cpu.h

Modified: projects/mips/sys/mips/include/cpu.h
==============================================================================
--- projects/mips/sys/mips/include/cpu.h	Sat May 16 02:34:03 2009	(r192176)
+++ projects/mips/sys/mips/include/cpu.h	Sat May 16 02:39:13 2009	(r192177)
@@ -72,6 +72,15 @@
 #define	MIPS_KSEG0_TO_PHYS(x)		((unsigned)(x) & MIPS_PHYS_MASK)
 #define	MIPS_KSEG1_TO_PHYS(x)		((unsigned)(x) & MIPS_PHYS_MASK)
 
+#define	MIPS_IS_KSEG0_ADDR(x)					\
+	(((vm_offset_t)(x) >= MIPS_KSEG0_START) &&		\
+	    ((vm_offset_t)(x) <= MIPS_KSEG0_END))
+#define	MIPS_IS_KSEG1_ADDR(x)					\
+	(((vm_offset_t)(x) >= MIPS_KSEG1_START) &&		\
+	    ((vm_offset_t)(x) <= MIPS_KSEG1_END))
+#define	MIPS_IS_VALID_PTR(x)		(MIPS_IS_KSEG0_ADDR(x) || \
+						MIPS_IS_KSEG1_ADDR(x))
+
 /*
  *  Status register.
  */

From owner-svn-src-projects@FreeBSD.ORG  Sat May 16 02:43:24 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id ADCB31065670;
	Sat, 16 May 2009 02:43:24 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 813F68FC12;
	Sat, 16 May 2009 02:43:24 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G2hOv4041858;
	Sat, 16 May 2009 02:43:24 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G2hOpl041857;
	Sat, 16 May 2009 02:43:24 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905160243.n4G2hOpl041857@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Sat, 16 May 2009 02:43:24 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192178 - projects/mips/sys/mips/atheros
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 16 May 2009 02:43:25 -0000

Author: gonzo
Date: Sat May 16 02:43:24 2009
New Revision: 192178
URL: http://svn.freebsd.org/changeset/base/192178

Log:
  - Get memory size and base MAC address from RedBoot (if available)

Modified:
  projects/mips/sys/mips/atheros/ar71xx_machdep.c

Modified: projects/mips/sys/mips/atheros/ar71xx_machdep.c
==============================================================================
--- projects/mips/sys/mips/atheros/ar71xx_machdep.c	Sat May 16 02:39:13 2009	(r192177)
+++ projects/mips/sys/mips/atheros/ar71xx_machdep.c	Sat May 16 02:43:24 2009	(r192178)
@@ -45,6 +45,8 @@ __FBSDID("$FreeBSD$");
 #include <vm/vm.h>
 #include <vm/vm_page.h>
 
+#include <net/ethernet.h>
+
 #include <machine/clock.h>
 #include <machine/cpu.h>
 #include <machine/hwfunc.h>
@@ -56,6 +58,7 @@ __FBSDID("$FreeBSD$");
 
 extern int *edata;
 extern int *end;
+uint32_t ar711_base_mac[ETHER_ADDR_LEN];
 
 void
 platform_halt(void)
@@ -99,13 +102,43 @@ platform_start(__register_t a0 __unused,
 	vm_offset_t kernend;
 	uint64_t platform_counter_freq, freq;
 	uint32_t reg, div, pll_config;
+	int argc, i, count = 0;
+	char **argv, **envp;
 
 	/* clear the BSS and SBSS segments */
 	kernend = round_page((vm_offset_t)&end);
 	memset(&edata, 0, kernend - (vm_offset_t)(&edata));
 
-	/* TODO: Get available memory from RedBoot. Is it possible? */
-	realmem = btoc(64*1024*1024);
+	argc = a0;
+	argv = (char**)a1;
+	envp = (char**)a2;
+	/* 
+	 * Protect ourselves from garbage in registers 
+	 */
+	if (MIPS_IS_VALID_PTR(envp)) {
+		for (i = 0; envp[i]; i += 2)
+		{
+			if (strcmp(envp[i], "memsize") == 0)
+				realmem = btoc(strtoul(envp[i+1], NULL, 16));
+			else if (strcmp(envp[i], "ethaddr") == 0) {
+				count = sscanf(envp[i+1], "%x.%x.%x.%x.%x.%x", 
+				    &ar711_base_mac[0], &ar711_base_mac[1],
+				    &ar711_base_mac[2], &ar711_base_mac[3],
+				    &ar711_base_mac[4], &ar711_base_mac[5]);
+				if (count < 6)
+					memset(ar711_base_mac, 0,
+					    sizeof(ar711_base_mac));
+			}
+		}
+	}
+
+	/*
+	 * Just wild guess. RedBoot let us down and didn't reported 
+	 * memory size
+	 */
+	if (realmem == 0)
+		realmem = btoc(32*1024*1024);
+
 	/* phys_avail regions are in bytes */
 	phys_avail[0] = MIPS_KSEG0_TO_PHYS((vm_offset_t)&end);
 	phys_avail[1] = ctob(realmem);
@@ -134,6 +167,23 @@ platform_start(__register_t a0 __unused,
 	printf("  a2 = %08x\n", a2);
 	printf("  a3 = %08x\n", a3);
 
+	printf("Cmd line:");
+	if (MIPS_IS_VALID_PTR(argv)) {
+		for (i = 0; i < argc; i++)
+			printf(" %s", argv[i]);
+	}
+	else
+		printf ("argv is invalid");
+	printf("\n");
+
+	printf("Environment:\n");
+	if (MIPS_IS_VALID_PTR(envp)) {
+		for (i = 0; envp[i]; i+=2)
+			printf("  %s = %s\n", envp[i], envp[i+1]);
+	}
+	else 
+		printf ("envp is invalid\n");
+
 	init_param2(physmem);
 	mips_cpu_init();
 	pmap_bootstrap();

From owner-svn-src-projects@FreeBSD.ORG  Sat May 16 02:45:38 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id C3ACE106564A;
	Sat, 16 May 2009 02:45:38 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id B19268FC0C;
	Sat, 16 May 2009 02:45:38 +0000 (UTC)
	(envelope-from gonzo@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G2jc6u041951;
	Sat, 16 May 2009 02:45:38 GMT (envelope-from gonzo@svn.freebsd.org)
Received: (from gonzo@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G2jcBx041950;
	Sat, 16 May 2009 02:45:38 GMT (envelope-from gonzo@svn.freebsd.org)
Message-Id: <200905160245.n4G2jcBx041950@svn.freebsd.org>
From: Oleksandr Tymoshenko <gonzo@FreeBSD.org>
Date: Sat, 16 May 2009 02:45:38 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192179 - projects/mips/sys/mips/atheros
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 16 May 2009 02:45:39 -0000

Author: gonzo
Date: Sat May 16 02:45:38 2009
New Revision: 192179
URL: http://svn.freebsd.org/changeset/base/192179

Log:
  - Set MAC Address obtained from RedBoot or generate random one

Modified:
  projects/mips/sys/mips/atheros/if_arge.c

Modified: projects/mips/sys/mips/atheros/if_arge.c
==============================================================================
--- projects/mips/sys/mips/atheros/if_arge.c	Sat May 16 02:43:24 2009	(r192178)
+++ projects/mips/sys/mips/atheros/if_arge.c	Sat May 16 02:45:38 2009	(r192179)
@@ -153,6 +153,13 @@ DRIVER_MODULE(arge, nexus, arge_driver, 
 DRIVER_MODULE(miibus, arge, miibus_driver, miibus_devclass, 0, 0);
 
 /*
+ * RedBoot passes MAC address to entry point as environment 
+ * variable. platfrom_start parses it and stores in this variable
+ */
+extern uint32_t ar711_base_mac[ETHER_ADDR_LEN];
+
+
+/*
  * Flushes all 
  */
 static void
@@ -183,7 +190,8 @@ arge_attach(device_t dev)
 	struct ifnet		*ifp;
 	struct arge_softc	*sc;
 	int			error = 0, rid, phynum;
-	uint32_t		reg;
+	uint32_t		reg, rnd;
+	int			is_base_mac_empty, i;
 
 	sc = device_get_softc(dev);
 	sc->arge_dev = dev;
@@ -269,12 +277,29 @@ arge_attach(device_t dev)
 
 	ifp->if_capenable = ifp->if_capabilities;
 
-	eaddr[0] = 0x00;
-	eaddr[1] = 0x15;
-	eaddr[2] = 0x6d;
-	eaddr[3] = 0xc1;
-	eaddr[4] = 0x28;
-	eaddr[5] = 0x2e;
+	is_base_mac_empty = 1;
+	for (i = 0; i < ETHER_ADDR_LEN; i++) {
+		eaddr[i] = ar711_base_mac[i] & 0xff;
+		if (eaddr[i] != 0)
+			is_base_mac_empty = 0;
+	}
+
+	if (is_base_mac_empty) {
+		/*
+		 * No MAC address configured. Generate the random one.
+		 */
+                if  (bootverbose)
+			device_printf(dev, 
+			    "Generating random ethernet address.\n");
+
+		rnd = arc4random();
+		eaddr[0] = 'b';
+		eaddr[1] = 's';
+		eaddr[2] = 'd';
+		eaddr[3] = (rnd >> 24) & 0xff;
+		eaddr[4] = (rnd >> 16) & 0xff;
+		eaddr[5] = (rnd >> 8) & 0xff;
+	}
 
 	if (arge_dma_alloc(sc) != 0) {
 		error = ENXIO;

From owner-svn-src-projects@FreeBSD.ORG  Sat May 16 06:49:06 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 855AE1065670;
	Sat, 16 May 2009 06:49:06 +0000 (UTC)
	(envelope-from rwatson@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 68F8D8FC16;
	Sat, 16 May 2009 06:49:06 +0000 (UTC)
	(envelope-from rwatson@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G6n6G4047367;
	Sat, 16 May 2009 06:49:06 GMT (envelope-from rwatson@svn.freebsd.org)
Received: (from rwatson@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G6n6QG047364;
	Sat, 16 May 2009 06:49:06 GMT (envelope-from rwatson@svn.freebsd.org)
Message-Id: <200905160649.n4G6n6QG047364@svn.freebsd.org>
From: Robert Watson <rwatson@FreeBSD.org>
Date: Sat, 16 May 2009 06:49:05 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192190 - projects/pnet/sys/net
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 16 May 2009 06:49:06 -0000

Author: rwatson
Date: Sat May 16 06:49:05 2009
New Revision: 192190
URL: http://svn.freebsd.org/changeset/base/192190

Log:
  Add netisr2_dispatch_if() and netisr2_queue_if(), which accept an explicit
  ifnet argument.  For now we just use it to contribute to an overall flow
  identifier, but in the future we might want to use it as a source of work
  placement policy.
  
  Implement netisr_dispatch() and netisr_queue() for netisr2, which allows
  existing netisr dispatch points to be used unchanged.  These are simple
  wrappers around netisr2_*_if(), and pass in the mbuf's receieve interface
  pointer, which will cause netisr2 to distribute work to threads even
  without protocol- or driver-generated flow IDs.
  
  When there's only one netisr2 worker, don't bother with flow IDs, CPU
  lookups, etc, just use the one thread, avoiding overhead.
  
  Rename netisr2_deregister() to netisr2_unregister() to match existing
  netisr naming convention.

Modified:
  projects/pnet/sys/net/netisr.c
  projects/pnet/sys/net/netisr2.c
  projects/pnet/sys/net/netisr2.h

Modified: projects/pnet/sys/net/netisr.c
==============================================================================
--- projects/pnet/sys/net/netisr.c	Sat May 16 06:42:32 2009	(r192189)
+++ projects/pnet/sys/net/netisr.c	Sat May 16 06:49:05 2009	(r192190)
@@ -28,6 +28,7 @@
  */
 
 #include "opt_device_polling.h"
+#include "opt_netisr.h"
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -149,6 +150,7 @@ netisr_processqueue(struct netisr *ni)
 /*
  * Call the netisr directly instead of queueing the packet, if possible.
  */
+#ifndef NETISR2
 void
 netisr_dispatch(int num, struct mbuf *m)
 {
@@ -209,6 +211,7 @@ netisr_queue(int num, struct mbuf *m)
 	schednetisr(num);
 	return (0);
 }
+#endif /* !NETISR2 */
 
 static void
 swi_net(void *dummy)

Modified: projects/pnet/sys/net/netisr2.c
==============================================================================
--- projects/pnet/sys/net/netisr2.c	Sat May 16 06:42:32 2009	(r192189)
+++ projects/pnet/sys/net/netisr2.c	Sat May 16 06:49:05 2009	(r192190)
@@ -352,20 +352,20 @@ netisr2_drain_proto(struct netisr_work *
 /*
  * Remove the registration of a network protocol, which requires clearing
  * per-protocol fields across all workstreams, including freeing all mbufs in
- * the queues at time of deregister.  All work in netisr2 is briefly
+ * the queues at time of unregister.  All work in netisr2 is briefly
  * suspended while this takes place.
  */
 void
-netisr2_deregister(u_int proto)
+netisr2_unregister(u_int proto)
 {
 	struct netisr_work *npwp;
 	int i;
 
 	NETISR_WLOCK();
 	KASSERT(proto < NETISR_MAXPROT,
-	    ("netisr_deregister(%d): protocol too big", proto));
+	    ("netisr_unregister(%d): protocol too big", proto));
 	KASSERT(np[proto].np_func != NULL,
-	    ("netisr_deregister(%d): protocol not registered", proto));
+	    ("netisr_unregister(%d): protocol not registered", proto));
 
 	np[proto].np_name = NULL;
 	np[proto].np_func = NULL;
@@ -401,6 +401,14 @@ netisr2_selectcpu(struct netisr_proto *n
 
 	NETISR_LOCK_ASSERT();
 
+	/*
+	 * In the event we have only one worker, shortcut and deliver to it
+	 * without further ado.
+	 */
+	if (nws_count == 1) {
+		*cpuidp = nws_array[0];
+		return (m);
+	}
 	if (!(m->m_flags & M_FLOWID) && npp->np_m2flow != NULL) {
 		m = npp->np_m2flow(m);
 		if (m == NULL)
@@ -597,6 +605,20 @@ netisr2_queue(u_int proto, uintptr_t sou
 }
 
 int
+netisr2_queue_if(u_int proto, struct ifnet *ifp, struct mbuf *m)
+{
+
+	return (netisr2_queue(proto, (uintptr_t)ifp, m));
+}
+
+int
+netisr_queue(int proto, struct mbuf *m)
+{
+
+	return (netisr2_queue_if(proto, m->m_pkthdr.rcvif, m));
+}
+
+int
 netisr2_dispatch(u_int proto, uintptr_t source, struct mbuf *m)
 {
 	struct netisr_workstream *nwsp;
@@ -623,6 +645,20 @@ netisr2_dispatch(u_int proto, uintptr_t 
 	return (0);
 }
 
+int
+netisr2_dispatch_if(u_int proto, struct ifnet *ifp, struct mbuf *m)
+{
+
+	return (netisr2_dispatch(proto, (uintptr_t)ifp, m));
+}
+
+void
+netisr_dispatch(int proto, struct mbuf *m)
+{
+
+	(void)netisr2_dispatch_if(proto, m->m_pkthdr.rcvif, m);
+}
+
 static void
 netisr2_start_swi(u_int cpuid, struct pcpu *pc)
 {

Modified: projects/pnet/sys/net/netisr2.h
==============================================================================
--- projects/pnet/sys/net/netisr2.h	Sat May 16 06:42:32 2009	(r192189)
+++ projects/pnet/sys/net/netisr2.h	Sat May 16 06:49:05 2009	(r192190)
@@ -69,15 +69,19 @@ void	netisr2_register(u_int proto, const
 	    netisr_m2flow_t m2flow, netisr_flow2cpu_t flow2cpu, u_int max);
 
 /*
- * Deregister a protocol handler.
+ * Unregister a protocol handler.
  */
-void	netisr2_deregister(u_int proto);
+void	netisr2_unregister(u_int proto);
 
 /*
  * Process a packet destined for a protocol, and attempt direct dispatch.
  */
+//int	netisr_dispatch(u_int proto, struct mbuf *m);
+//int	netisr_queue(u_int proto, struct mbuf *m);
 int	netisr2_dispatch(u_int proto, uintptr_t source, struct mbuf *m);
+int	netisr2_dispatch_if(u_int proto, struct ifnet *ifp, struct mbuf *m);
 int	netisr2_queue(u_int proto, uintptr_t source, struct mbuf *m);
+int	netisr2_queue_if(u_int proto, struct ifnet *ifp, struct mbuf *m);
 
 /*
  * Provide a default implementation of "map a flow ID to a cpu ID".

From owner-svn-src-projects@FreeBSD.ORG  Sat May 16 06:57:26 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 105411065670;
	Sat, 16 May 2009 06:57:26 +0000 (UTC)
	(envelope-from rwatson@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id F053F8FC0C;
	Sat, 16 May 2009 06:57:25 +0000 (UTC)
	(envelope-from rwatson@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4G6vPuk047580;
	Sat, 16 May 2009 06:57:25 GMT (envelope-from rwatson@svn.freebsd.org)
Received: (from rwatson@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4G6vPWV047569;
	Sat, 16 May 2009 06:57:25 GMT (envelope-from rwatson@svn.freebsd.org)
Message-Id: <200905160657.n4G6vPWV047569@svn.freebsd.org>
From: Robert Watson <rwatson@FreeBSD.org>
Date: Sat, 16 May 2009 06:57:25 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192191 - in projects/pnet/sys: net netatalk netinet
	netinet6 netipsec netipx netnatm
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 16 May 2009 06:57:26 -0000

Author: rwatson
Date: Sat May 16 06:57:24 2009
New Revision: 192191
URL: http://svn.freebsd.org/changeset/base/192191

Log:
  Allow netisr2 to be used wherever netisr is used, subject to options
  NETISR2.  In most cases, rely on existing ifnet ordering, or driver-
  provided flow IDs, but for IP divert sockets use the sending socket,
  and IPSEC use the security association for ordering.  No custom
  protocol handlers are registered.

Modified:
  projects/pnet/sys/net/rtsock.c
  projects/pnet/sys/netatalk/ddp_usrreq.c
  projects/pnet/sys/netinet/if_ether.c
  projects/pnet/sys/netinet/igmp.c
  projects/pnet/sys/netinet/ip_divert.c
  projects/pnet/sys/netinet/ip_input.c
  projects/pnet/sys/netinet6/ip6_input.c
  projects/pnet/sys/netinet6/ip6_output.c
  projects/pnet/sys/netipsec/ipsec_input.c
  projects/pnet/sys/netipx/ipx_input.c
  projects/pnet/sys/netnatm/natm_proto.c

Modified: projects/pnet/sys/net/rtsock.c
==============================================================================
--- projects/pnet/sys/net/rtsock.c	Sat May 16 06:49:05 2009	(r192190)
+++ projects/pnet/sys/net/rtsock.c	Sat May 16 06:57:24 2009	(r192191)
@@ -34,6 +34,7 @@
 #include "opt_route.h"
 #include "opt_inet.h"
 #include "opt_inet6.h"
+#include "opt_netisr.h"
 
 #include <sys/param.h>
 #include <sys/domain.h>
@@ -57,6 +58,7 @@
 #include <net/if_dl.h>
 #include <net/if_llatbl.h>
 #include <net/netisr.h>
+#include <net/netisr2.h>
 #include <net/raw_cb.h>
 #include <net/route.h>
 #include <net/vnet.h>
@@ -128,7 +130,12 @@ rts_init(void)
 	if (TUNABLE_INT_FETCH("net.route.netisr_maxqlen", &tmp))
 		rtsintrq.ifq_maxlen = tmp;
 	mtx_init(&rtsintrq.ifq_mtx, "rts_inq", NULL, MTX_DEF);
+#ifdef NETISR2
+	netisr2_register(NETISR_ROUTE, "route", rts_input, NULL, NULL,
+	    rtsintrq.ifq_maxlen);
+#else
 	netisr_register(NETISR_ROUTE, rts_input, &rtsintrq, 0);
+#endif
 }
 SYSINIT(rtsock, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, rts_init, 0);
 
@@ -1224,7 +1231,11 @@ rt_dispatch(struct mbuf *m, const struct
 		*(unsigned short *)(tag + 1) = sa->sa_family;
 		m_tag_prepend(m, tag);
 	}
+#ifdef NETISR2
+	netisr2_queue(NETISR_ROUTE, 0, m);	/* mbuf is free'd on failure. */
+#else
 	netisr_queue(NETISR_ROUTE, m);	/* mbuf is free'd on failure. */
+#endif
 }
 
 /*

Modified: projects/pnet/sys/netatalk/ddp_usrreq.c
==============================================================================
--- projects/pnet/sys/netatalk/ddp_usrreq.c	Sat May 16 06:49:05 2009	(r192190)
+++ projects/pnet/sys/netatalk/ddp_usrreq.c	Sat May 16 06:57:24 2009	(r192191)
@@ -50,6 +50,8 @@
  * $FreeBSD$
  */
 
+#include "opt_netisr.h"
+
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/malloc.h>
@@ -60,6 +62,7 @@
 #include <net/if.h>
 #include <net/route.h>
 #include <net/netisr.h>
+#include <net/netisr2.h>
 
 #include <netatalk/at.h>
 #include <netatalk/at_var.h>
@@ -263,9 +266,18 @@ ddp_init(void)
 	mtx_init(&atintrq2.ifq_mtx, "at2_inq", NULL, MTX_DEF);
 	mtx_init(&aarpintrq.ifq_mtx, "aarp_inq", NULL, MTX_DEF);
 	DDP_LIST_LOCK_INIT();
+#ifdef NETISR2
+	netisr2_register(NETISR_ATALK1, "atalk1", at1intr, NULL, NULL,
+	    IFQ_MAXLEN);
+	netisr2_register(NETISR_ATALK2, "atalk2", at2intr, NULL, NULL,
+	    IFQ_MAXLEN);
+	netisr2_register(NETISR_AARP, "aarp", aarpintr, NULL, NULL,
+	    IFQ_MAXLEN);
+#else
 	netisr_register(NETISR_ATALK1, at1intr, &atintrq1, 0);
 	netisr_register(NETISR_ATALK2, at2intr, &atintrq2, 0);
 	netisr_register(NETISR_AARP, aarpintr, &aarpintrq, 0);
+#endif
 }
 
 #if 0

Modified: projects/pnet/sys/netinet/if_ether.c
==============================================================================
--- projects/pnet/sys/netinet/if_ether.c	Sat May 16 06:49:05 2009	(r192190)
+++ projects/pnet/sys/netinet/if_ether.c	Sat May 16 06:57:24 2009	(r192191)
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
 #include "opt_inet.h"
 #include "opt_route.h"
 #include "opt_mac.h"
+#include "opt_netisr.h"
 #include "opt_carp.h"
 
 #include <sys/param.h>
@@ -60,6 +61,7 @@ __FBSDID("$FreeBSD$");
 #include <net/if_types.h>
 #include <net/route.h>
 #include <net/netisr.h>
+#include <net/netisr2.h>
 #include <net/if_llc.h>
 #include <net/ethernet.h>
 #include <net/vnet.h>
@@ -823,6 +825,10 @@ arp_init(void)
 
 	arpintrq.ifq_maxlen = 50;
 	mtx_init(&arpintrq.ifq_mtx, "arp_inq", NULL, MTX_DEF);
+#ifdef NETISR2
+	netisr2_register(NETISR_ARP, "arp", arpintr, NULL, NULL, 50);
+#else
 	netisr_register(NETISR_ARP, arpintr, &arpintrq, 0);
+#endif
 }
 SYSINIT(arp, SI_SUB_PROTO_DOMAIN, SI_ORDER_ANY, arp_init, 0);

Modified: projects/pnet/sys/netinet/igmp.c
==============================================================================
--- projects/pnet/sys/netinet/igmp.c	Sat May 16 06:49:05 2009	(r192190)
+++ projects/pnet/sys/netinet/igmp.c	Sat May 16 06:57:24 2009	(r192191)
@@ -51,6 +51,7 @@
 __FBSDID("$FreeBSD$");
 
 #include "opt_mac.h"
+#include "opt_netisr.h"
 #include "opt_route.h"
 
 #include <sys/param.h>
@@ -68,6 +69,7 @@ __FBSDID("$FreeBSD$");
 
 #include <net/if.h>
 #include <net/netisr.h>
+#include <net/netisr2.h>
 #include <net/route.h>
 #include <net/vnet.h>
 
@@ -3548,7 +3550,12 @@ igmp_sysinit(void)
 
 	m_raopt = igmp_ra_alloc();
 
+#ifdef NETISR2
+	netisr2_register(NETISR_IGMP, "igmp", igmp_intr, NULL, NULL,
+	    IFQ_MAXLEN);
+#else
 	netisr_register(NETISR_IGMP, igmp_intr, &igmpoq, 0);
+#endif
 }
 
 static void
@@ -3557,7 +3564,11 @@ igmp_sysuninit(void)
 
 	CTR1(KTR_IGMPV3, "%s: tearing down", __func__);
 
+#ifdef NETISR2
+	netisr2_unregister(NETISR_IGMP);
+#else
 	netisr_unregister(NETISR_IGMP);
+#endif
 	mtx_destroy(&igmpoq.ifq_mtx);
 
 	m_free(m_raopt);

Modified: projects/pnet/sys/netinet/ip_divert.c
==============================================================================
--- projects/pnet/sys/netinet/ip_divert.c	Sat May 16 06:49:05 2009	(r192190)
+++ projects/pnet/sys/netinet/ip_divert.c	Sat May 16 06:57:24 2009	(r192191)
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
 #error "IPDIVERT requires IPFIREWALL"
 #endif
 #endif
+#include "opt_netisr.h"
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -66,6 +67,7 @@ __FBSDID("$FreeBSD$");
 
 #include <net/if.h>
 #include <net/netisr.h> 
+#include <net/netisr2.h> 
 #include <net/route.h>
 
 #include <netinet/in.h>
@@ -468,7 +470,11 @@ div_output(struct socket *so, struct mbu
 		SOCK_UNLOCK(so);
 #endif
 		/* Send packet to input processing via netisr */
+#ifdef NETISR2
+		netisr2_queue(NETISR_IP, (uintptr_t)so, m);
+#else
 		netisr_queue(NETISR_IP, m);
+#endif
 	}
 
 	return error;

Modified: projects/pnet/sys/netinet/ip_input.c
==============================================================================
--- projects/pnet/sys/netinet/ip_input.c	Sat May 16 06:49:05 2009	(r192190)
+++ projects/pnet/sys/netinet/ip_input.c	Sat May 16 06:57:24 2009	(r192191)
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
 #include "opt_ipsec.h"
 #include "opt_route.h"
 #include "opt_mac.h"
+#include "opt_netisr.h"
 #include "opt_carp.h"
 
 #include <sys/param.h>
@@ -63,6 +64,7 @@ __FBSDID("$FreeBSD$");
 #include <net/if_dl.h>
 #include <net/route.h>
 #include <net/netisr.h>
+#include <net/netisr2.h>
 #include <net/vnet.h>
 #include <net/flowtable.h>
 
@@ -348,7 +350,11 @@ ip_init(void)
 	IPQ_LOCK_INIT();
 	ipintrq.ifq_maxlen = ipqmaxlen;
 	mtx_init(&ipintrq.ifq_mtx, "ip_inq", NULL, MTX_DEF);
+#ifdef NETISR2
+	netisr2_register(NETISR_IP, "ipv4", ip_input, NULL, NULL, ipqmaxlen);
+#else
 	netisr_register(NETISR_IP, ip_input, &ipintrq, 0);
+#endif
 
 	ip_ft = flowtable_alloc(ip_output_flowtable_size, FL_PCPU);
 }

Modified: projects/pnet/sys/netinet6/ip6_input.c
==============================================================================
--- projects/pnet/sys/netinet6/ip6_input.c	Sat May 16 06:49:05 2009	(r192190)
+++ projects/pnet/sys/netinet6/ip6_input.c	Sat May 16 06:57:24 2009	(r192191)
@@ -66,6 +66,7 @@ __FBSDID("$FreeBSD$");
 #include "opt_inet.h"
 #include "opt_inet6.h"
 #include "opt_ipsec.h"
+#include "opt_netisr.h"
 #include "opt_route.h"
 
 #include <sys/param.h>
@@ -88,6 +89,7 @@ __FBSDID("$FreeBSD$");
 #include <net/if_dl.h>
 #include <net/route.h>
 #include <net/netisr.h>
+#include <net/netisr2.h>
 #include <net/pfil.h>
 #include <net/vnet.h>
 
@@ -297,7 +299,12 @@ ip6_init(void)
 
 	ip6intrq.ifq_maxlen = V_ip6qmaxlen; /* XXX */
 	mtx_init(&ip6intrq.ifq_mtx, "ip6_inq", NULL, MTX_DEF);
+#ifdef NETISR2
+	netisr2_register(NETISR_IPV6, "ipv4", ip6_input, NULL, NULL,
+	    V_ip6qmaxlen);
+#else
 	netisr_register(NETISR_IPV6, ip6_input, &ip6intrq, 0);
+#endif
 }
 
 static int

Modified: projects/pnet/sys/netinet6/ip6_output.c
==============================================================================

Modified: projects/pnet/sys/netipsec/ipsec_input.c
==============================================================================
--- projects/pnet/sys/netipsec/ipsec_input.c	Sat May 16 06:49:05 2009	(r192190)
+++ projects/pnet/sys/netipsec/ipsec_input.c	Sat May 16 06:57:24 2009	(r192191)
@@ -44,6 +44,7 @@
 #include "opt_inet6.h"
 #include "opt_ipsec.h"
 #include "opt_enc.h"
+#include "opt_netisr.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -60,6 +61,7 @@
 #include <net/pfil.h>
 #include <net/route.h>
 #include <net/netisr.h>
+#include <net/netisr2.h>
 
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
@@ -481,7 +483,15 @@ ipsec4_common_input_cb(struct mbuf *m, s
 	/*
 	 * Re-dispatch via software interrupt.
 	 */
+#ifdef NETISR2
+	/*
+	 * XXXRW: Is this ordering sufficient?  Perhaps should be
+	 * m->m_pkthdr.rcvif?
+	 */
+	if ((error = netisr2_queue(NETISR_IP, (uintptr_t)sav, m))) {
+#else
 	if ((error = netisr_queue(NETISR_IP, m))) {
+#endif
 		IPSEC_ISTAT(sproto, V_espstat.esps_qfull, V_ahstat.ahs_qfull,
 			    V_ipcompstat.ipcomps_qfull);
 

Modified: projects/pnet/sys/netipx/ipx_input.c
==============================================================================
--- projects/pnet/sys/netipx/ipx_input.c	Sat May 16 06:49:05 2009	(r192190)
+++ projects/pnet/sys/netipx/ipx_input.c	Sat May 16 06:57:24 2009	(r192191)
@@ -62,6 +62,8 @@
  *	@(#)ipx_input.c
  */
 
+#include "opt_netisr.h"
+
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
@@ -77,6 +79,7 @@ __FBSDID("$FreeBSD$");
 #include <net/if.h>
 #include <net/route.h>
 #include <net/netisr.h>
+#include <net/netisr2.h>
 
 #include <netipx/ipx.h>
 #include <netipx/spx.h>
@@ -153,7 +156,11 @@ ipx_init(void)
 
 	ipxintrq.ifq_maxlen = ipxqmaxlen;
 	mtx_init(&ipxintrq.ifq_mtx, "ipx_inq", NULL, MTX_DEF);
+#ifdef NETISR2
+	netisr2_register(NETISR_IPX, "ipx", ipxintr, NULL, NULL, ipxqmaxlen);
+#else
 	netisr_register(NETISR_IPX, ipxintr, &ipxintrq, 0);
+#endif
 }
 
 /*

Modified: projects/pnet/sys/netnatm/natm_proto.c
==============================================================================
--- projects/pnet/sys/netnatm/natm_proto.c	Sat May 16 06:49:05 2009	(r192190)
+++ projects/pnet/sys/netnatm/natm_proto.c	Sat May 16 06:57:24 2009	(r192191)
@@ -35,6 +35,8 @@
  * protocol layer for access to native mode ATM
  */
 
+#include "opt_netisr.h"
+
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
@@ -47,6 +49,7 @@ __FBSDID("$FreeBSD$");
 
 #include <net/if.h>
 #include <net/netisr.h>
+#include <net/netisr2.h>
 
 #include <netinet/in.h>
 
@@ -105,7 +108,12 @@ natm_init(void)
 	natmintrq.ifq_maxlen = natmqmaxlen;
 	NATM_LOCK_INIT();
 	mtx_init(&natmintrq.ifq_mtx, "natm_inq", NULL, MTX_DEF);
+#ifdef NETISR2
+	netisr2_register(NETISR_NATM, "natm", natmintr, NULL, NULL,
+	    natmqmaxlen);
+#else
 	netisr_register(NETISR_NATM, natmintr, &natmintrq, 0);
+#endif
 }
 
 DOMAIN_SET(natm);

From owner-svn-src-projects@FreeBSD.ORG  Sat May 16 14:30:09 2009
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 39340106567A;
	Sat, 16 May 2009 14:30:09 +0000 (UTC)
	(envelope-from rwatson@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 257868FC2B;
	Sat, 16 May 2009 14:30:09 +0000 (UTC)
	(envelope-from rwatson@FreeBSD.org)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n4GEU8Dt061456;
	Sat, 16 May 2009 14:30:08 GMT (envelope-from rwatson@svn.freebsd.org)
Received: (from rwatson@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n4GEU83l061455;
	Sat, 16 May 2009 14:30:08 GMT (envelope-from rwatson@svn.freebsd.org)
Message-Id: <200905161430.n4GEU83l061455@svn.freebsd.org>
From: Robert Watson <rwatson@FreeBSD.org>
Date: Sat, 16 May 2009 14:30:08 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r192197 - projects/pnet/sys/kern
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
	tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
	<mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sat, 16 May 2009 14:30:10 -0000

Author: rwatson
Date: Sat May 16 14:30:08 2009
New Revision: 192197
URL: http://svn.freebsd.org/changeset/base/192197

Log:
  Binding interrupts to a CPU consists of two parts: setting up CPU
  affinity for the interrupt thread, and requesting that underlying
  hardware direct interrupts to the CPU.  For software interrupt
  threads, implement a no-op interrupt event binder that returns
  success, so that the interrupt management code will just set the
  ithread's affinity and succeed.

Modified:
  projects/pnet/sys/kern/kern_intr.c

Modified: projects/pnet/sys/kern/kern_intr.c
==============================================================================
--- projects/pnet/sys/kern/kern_intr.c	Sat May 16 12:12:31 2009	(r192196)
+++ projects/pnet/sys/kern/kern_intr.c	Sat May 16 14:30:08 2009	(r192197)
@@ -968,6 +968,18 @@ intr_event_schedule_thread(struct intr_e
 #endif
 
 /*
+ * Allow interrupt event binding for software interrupt handlers -- a no-op,
+ * since interrupts are generated in software rather than being directed by
+ * a PIC.
+ */
+static int
+swi_assign_cpu(void *arg, u_char cpu)
+{
+
+	return (0);
+}
+
+/*
  * Add a software interrupt handler to a specified event.  If a given event
  * is not specified, then a new event is created.
  */
@@ -988,7 +1000,7 @@ swi_add(struct intr_event **eventp, cons
 			return (EINVAL);
 	} else {
 		error = intr_event_create(&ie, NULL, IE_SOFT, 0,
-		    NULL, NULL, NULL, NULL, "swi%d:", pri);
+		    NULL, NULL, NULL, swi_assign_cpu, "swi%d:", pri);
 		if (error)
 			return (error);
 		if (eventp != NULL)