PERFORCE change 96327 for review

Marcel Moolenaar marcel at FreeBSD.org
Fri Apr 28 21:29:44 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=96327

Change 96327 by marcel at marcel_nfs on 2006/04/28 21:29:05

	IFC @96325

Affected files ...

.. //depot/projects/uart/alpha/conf/DEFAULTS#3 integrate
.. //depot/projects/uart/amd64/conf/DEFAULTS#3 integrate
.. //depot/projects/uart/conf/NOTES#35 integrate
.. //depot/projects/uart/conf/files#65 integrate
.. //depot/projects/uart/conf/kmod.mk#20 integrate
.. //depot/projects/uart/conf/options#33 integrate
.. //depot/projects/uart/dev/nve/if_nve.c#5 integrate
.. //depot/projects/uart/dev/ppc/ppc_puc.c#7 integrate
.. //depot/projects/uart/dev/puc/puc.c#42 integrate
.. //depot/projects/uart/dev/puc/puc_bfe.h#5 integrate
.. //depot/projects/uart/dev/puc/puc_bus.h#3 integrate
.. //depot/projects/uart/dev/puc/puc_cfg.c#6 integrate
.. //depot/projects/uart/dev/puc/puc_cfg.h#6 integrate
.. //depot/projects/uart/dev/puc/puc_pccard.c#5 integrate
.. //depot/projects/uart/dev/puc/puc_pci.c#13 integrate
.. //depot/projects/uart/dev/puc/pucdata.c#46 integrate
.. //depot/projects/uart/dev/sio/sio_puc.c#6 integrate
.. //depot/projects/uart/dev/uart/uart_bus.h#47 integrate
.. //depot/projects/uart/dev/uart/uart_bus_puc.c#15 integrate
.. //depot/projects/uart/dev/uart/uart_core.c#54 integrate
.. //depot/projects/uart/i386/conf/DEFAULTS#3 integrate
.. //depot/projects/uart/i386/i386/pmap.c#37 integrate
.. //depot/projects/uart/ia64/conf/DEFAULTS#3 integrate
.. //depot/projects/uart/kern/subr_rman.c#9 integrate
.. //depot/projects/uart/modules/puc/Makefile#3 integrate
.. //depot/projects/uart/modules/sio/Makefile#5 integrate
.. //depot/projects/uart/net80211/ieee80211_node.c#17 integrate
.. //depot/projects/uart/pc98/conf/DEFAULTS#3 integrate
.. //depot/projects/uart/sys/rman.h#8 integrate

Differences ...

==== //depot/projects/uart/alpha/conf/DEFAULTS#3 (text+ko) ====

@@ -1,7 +1,7 @@
 #
 # DEFAULTS -- Default kernel configuration file for FreeBSD/alpha
 #
-# $FreeBSD: src/sys/alpha/conf/DEFAULTS,v 1.3 2005/11/27 23:16:58 ru Exp $
+# $FreeBSD: src/sys/alpha/conf/DEFAULTS,v 1.4 2006/04/28 21:21:50 marcel Exp $
 
 machine		alpha
 

==== //depot/projects/uart/amd64/conf/DEFAULTS#3 (text+ko) ====

@@ -1,7 +1,7 @@
 #
 # DEFAULTS -- Default kernel configuration file for FreeBSD/amd64
 #
-# $FreeBSD: src/sys/amd64/conf/DEFAULTS,v 1.4 2005/11/27 23:16:58 ru Exp $
+# $FreeBSD: src/sys/amd64/conf/DEFAULTS,v 1.5 2006/04/28 21:21:51 marcel Exp $
 
 machine		amd64
 

==== //depot/projects/uart/conf/NOTES#35 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1358 2006/04/18 22:43:46 mjacob Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1359 2006/04/28 21:21:51 marcel Exp $
 #
 # NOTES -- Lines that can be cut/pasted into kernel and hints configs.
 #

==== //depot/projects/uart/conf/files#65 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1112 2006/04/27 00:14:01 yongari Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1113 2006/04/28 21:21:51 marcel Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and

==== //depot/projects/uart/conf/kmod.mk#20 (text+ko) ====

@@ -1,5 +1,5 @@
 #	From: @(#)bsd.prog.mk	5.26 (Berkeley) 6/25/91
-# $FreeBSD: src/sys/conf/kmod.mk,v 1.206 2006/02/24 01:49:36 marcel Exp $
+# $FreeBSD: src/sys/conf/kmod.mk,v 1.207 2006/04/28 21:21:51 marcel Exp $
 #
 # The include file <bsd.kmod.mk> handles building and installing loadable
 # kernel modules.
@@ -321,8 +321,8 @@
 	dev/pci/pcib_if.m dev/ppbus/ppbus_if.m dev/smbus/smbus_if.m \
 	dev/sound/pcm/ac97_if.m dev/sound/pcm/channel_if.m \
 	dev/sound/pcm/feeder_if.m dev/sound/pcm/mixer_if.m \
-	dev/usb/usb_if.m isa/isa_if.m \
-	kern/bus_if.m kern/cpufreq_if.m kern/device_if.m \
+	dev/usb/usb_if.m isa/isa_if.m kern/bus_if.m kern/cpufreq_if.m \
+	kern/device_if.m kern/serdev_if.m \
 	libkern/iconv_converter_if.m opencrypto/crypto_if.m \
 	pc98/pc98/canbus_if.m pci/agp_if.m
 

==== //depot/projects/uart/conf/options#33 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options,v 1.537 2006/04/25 15:56:52 mr Exp $
+# $FreeBSD: src/sys/conf/options,v 1.538 2006/04/28 21:21:51 marcel Exp $
 #
 #        On the handling of kernel options
 #

==== //depot/projects/uart/dev/nve/if_nve.c#5 (text+ko) ====

@@ -72,7 +72,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/nve/if_nve.c,v 1.20 2005/12/12 06:23:43 bz Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/nve/if_nve.c,v 1.21 2006/04/28 20:08:16 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1277,9 +1277,27 @@
 {
 	struct nve_softc *sc = ifp->if_softc;
 
+	NVE_LOCK(sc);
+
+	/*
+	 * The nvidia driver blob defers tx completion notifications.
+	 * Thus, sometimes the watchdog timer will go off when the
+	 * tx engine is fine, but the tx completions are just deferred.
+	 * Try kicking the driver blob to clear out any pending tx
+	 * completions.  If that clears up all the pending tx
+	 * operations, then just return without printing the warning
+	 * message or resetting the adapter.
+	 */
+	sc->hwapi->pfnDisableInterrupts(sc->hwapi->pADCX);
+	sc->hwapi->pfnHandleInterrupt(sc->hwapi->pADCX);
+	sc->hwapi->pfnEnableInterrupts(sc->hwapi->pADCX);
+	if (sc->pending_txs == 0) {
+		NVE_UNLOCK(sc);
+		return;
+	}
+
 	device_printf(sc->dev, "device timeout (%d)\n", sc->pending_txs);
 
-	NVE_LOCK(sc);
 	sc->tx_errors++;
 
 	nve_stop(sc);

==== //depot/projects/uart/dev/ppc/ppc_puc.c#7 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ppc/ppc_puc.c,v 1.4 2006/04/26 21:25:13 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ppc/ppc_puc.c,v 1.5 2006/04/28 21:21:52 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>

==== //depot/projects/uart/dev/puc/puc.c#42 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/puc/puc.c,v 1.46 2006/02/22 17:19:10 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/puc/puc.c,v 1.47 2006/04/28 21:21:52 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/uart/dev/puc/puc_bfe.h#5 (text+ko) ====


==== //depot/projects/uart/dev/puc/puc_bus.h#3 (text+ko) ====


==== //depot/projects/uart/dev/puc/puc_cfg.c#6 (text+ko) ====


==== //depot/projects/uart/dev/puc/puc_cfg.h#6 (text+ko) ====


==== //depot/projects/uart/dev/puc/puc_pccard.c#5 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/puc/puc_pccard.c,v 1.9 2004/05/30 20:08:38 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/puc/puc_pccard.c,v 1.10 2006/04/28 21:21:52 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/uart/dev/puc/puc_pci.c#13 (text+ko) ====

@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/puc/puc_pci.c,v 1.14 2005/03/05 18:10:49 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/puc/puc_pci.c,v 1.15 2006/04/28 21:21:52 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/uart/dev/puc/pucdata.c#46 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/puc/pucdata.c,v 1.54 2005/12/08 22:29:42 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/puc/pucdata.c,v 1.55 2006/04/28 21:21:52 marcel Exp $");
 
 /*
  * PCI "universal" communications card driver configuration data (used to

==== //depot/projects/uart/dev/sio/sio_puc.c#6 (text+ko) ====

@@ -24,7 +24,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/sio/sio_puc.c,v 1.9 2005/05/29 04:42:25 nyan Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/sio/sio_puc.c,v 1.10 2006/04/28 21:21:52 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/uart/dev/uart/uart_bus.h#47 (text+ko) ====

@@ -23,7 +23,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/uart/uart_bus.h,v 1.13 2006/04/02 21:45:54 marcel Exp $
+ * $FreeBSD: src/sys/dev/uart/uart_bus.h,v 1.14 2006/04/28 18:29:23 marcel Exp $
  */
 
 #ifndef _DEV_UART_BUS_H_

==== //depot/projects/uart/dev/uart/uart_bus_puc.c#15 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/uart/uart_bus_puc.c,v 1.2 2003/09/26 05:14:56 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/uart/uart_bus_puc.c,v 1.3 2006/04/28 21:21:52 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/uart/dev/uart/uart_core.c#54 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/uart/uart_core.c,v 1.18 2006/03/30 18:37:03 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/uart/uart_core.c,v 1.19 2006/04/28 18:29:23 marcel Exp $");
 
 #ifndef KLD_MODULE
 #include "opt_comconsole.h"

==== //depot/projects/uart/i386/conf/DEFAULTS#3 (text+ko) ====

@@ -1,7 +1,7 @@
 #
 # DEFAULTS -- Default kernel configuration file for FreeBSD/i386
 #
-# $FreeBSD: src/sys/i386/conf/DEFAULTS,v 1.3 2005/11/27 23:16:58 ru Exp $
+# $FreeBSD: src/sys/i386/conf/DEFAULTS,v 1.4 2006/04/28 21:21:53 marcel Exp $
 
 machine		i386
 

==== //depot/projects/uart/i386/i386/pmap.c#37 (text+ko) ====

@@ -75,7 +75,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.552 2006/04/27 21:26:25 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.553 2006/04/28 19:05:08 peter Exp $");
 
 /*
  *	Manages physical address maps.
@@ -216,6 +216,11 @@
 static int pv_entry_count = 0, pv_entry_max = 0, pv_entry_high_water = 0;
 static int shpgperproc = PMAP_SHPGPERPROC;
 
+TAILQ_HEAD(,pv_chunk) pv_freechunks;	/* Freelist of chunk pages */
+struct pv_chunk *pv_chunkbase;		/* KVA block for pv_chunks */
+int pv_maxchunks;			/* How many chunks we have KVA for */
+int pv_nextindex;			/* Where to map the next page */
+
 /*
  * All those kernel PT submaps that BSD is so fond of
  */
@@ -491,6 +496,7 @@
 pmap_init(void)
 {
 
+	TAILQ_INIT(&pv_freechunks);
 	/*
 	 * Initialize the address space (zone) for the pv entries.  Set a
 	 * high water mark so that the system can recover from excessive
@@ -499,8 +505,15 @@
 	TUNABLE_INT_FETCH("vm.pmap.shpgperproc", &shpgperproc);
 	pv_entry_max = shpgperproc * maxproc + cnt.v_page_count;
 	TUNABLE_INT_FETCH("vm.pmap.pv_entries", &pv_entry_max);
+	pv_entry_max = roundup(pv_entry_max, _NPCPV);
 	pv_entry_high_water = 9 * (pv_entry_max / 10);
 
+	pv_maxchunks = pv_entry_max / _NPCPV;
+	pv_chunkbase = (struct pv_chunk *)kmem_alloc_nofault(kernel_map,
+	    PAGE_SIZE * pv_maxchunks);
+	if (pv_chunkbase == NULL)
+		panic("pmap_init: not enough kvm for pv chunks");
+	pv_nextindex = 0;
 #ifdef PAE
 	pdptzone = uma_zcreate("PDPT", NPGPTD * sizeof(pdpt_entry_t), NULL,
 	    NULL, NULL, NULL, (NPGPTD * sizeof(pdpt_entry_t)) - 1,
@@ -511,36 +524,11 @@
 
 
 SYSCTL_NODE(_vm, OID_AUTO, pmap, CTLFLAG_RD, 0, "VM/pmap parameters");
-static int
-pmap_pventry_proc(SYSCTL_HANDLER_ARGS)
-{
-	int error;
-
-	error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req);
-	if (error == 0 && req->newptr) {
-		shpgperproc = (pv_entry_max - cnt.v_page_count) / maxproc;
-		pv_entry_high_water = 9 * (pv_entry_max / 10);
-	}
-	return (error);
-}
-SYSCTL_PROC(_vm_pmap, OID_AUTO, pv_entry_max, CTLTYPE_INT|CTLFLAG_RW, 
-    &pv_entry_max, 0, pmap_pventry_proc, "IU", "Max number of PV entries");
-
-static int
-pmap_shpgperproc_proc(SYSCTL_HANDLER_ARGS)
-{
-	int error;
+SYSCTL_INT(_vm_pmap, OID_AUTO, pv_entry_max, CTLFLAG_RD, &pv_entry_max, 0,
+	"Max number of PV entries");
+SYSCTL_INT(_vm_pmap, OID_AUTO, shpgperproc, CTLFLAG_RD, &shpgperproc, 0,
+	"Page share factor per proc");
 
-	error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req);
-	if (error == 0 && req->newptr) {
-		pv_entry_max = shpgperproc * maxproc + cnt.v_page_count;
-		pv_entry_high_water = 9 * (pv_entry_max / 10);
-	}
-	return (error);
-}
-SYSCTL_PROC(_vm_pmap, OID_AUTO, shpgperproc, CTLTYPE_INT|CTLFLAG_RW, 
-    &shpgperproc, 0, pmap_shpgperproc_proc, "IU", "Page share factor per proc");
-
 /***************************************************
  * Low level helper routines.....
  ***************************************************/
@@ -1488,6 +1476,7 @@
 
 #ifdef PV_STATS
 static int pc_chunk_count, pc_chunk_allocs, pc_chunk_frees, pc_chunk_tryfail;
+static int pc_chunk_spare;
 
 SYSCTL_INT(_vm_pmap, OID_AUTO, pc_chunk_count, CTLFLAG_RD, &pc_chunk_count, 0,
 	"Current number of pv entry chunks");
@@ -1497,6 +1486,8 @@
 	"Current number of pv entry chunks frees");
 SYSCTL_INT(_vm_pmap, OID_AUTO, pc_chunk_tryfail, CTLFLAG_RD, &pc_chunk_tryfail, 0,
 	"Number of times tried to get a chunk page but failed.");
+SYSCTL_INT(_vm_pmap, OID_AUTO, pc_chunk_spare, CTLFLAG_RD, &pc_chunk_spare, 0,
+	"Current number of spare pv entry chunks allocated");
 
 static long pv_entry_frees, pv_entry_allocs;
 static int pv_entry_spare;
@@ -1577,7 +1568,6 @@
 static void
 free_pv_entry(pmap_t pmap, pv_entry_t pv)
 {
-	vm_page_t m;
 	struct pv_chunk *pc;
 	int idx, field, bit;
 
@@ -1598,15 +1588,10 @@
 	PV_STAT(pv_entry_spare -= _NPCPV);
 	PV_STAT(pc_chunk_count--);
 	PV_STAT(pc_chunk_frees++);
-	/* entire chunk is free, return it */
+	/* entire chunk is free, return it to freelist */
 	TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
-	m = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc));
-	pmap_qremove((vm_offset_t)pc, 1);
-	vm_page_lock_queues();
-	vm_page_unwire(m, 0);
-	vm_page_free(m);
-	vm_page_unlock_queues();
-	kmem_free(kernel_map, (vm_offset_t)pc, PAGE_SIZE);
+	TAILQ_INSERT_HEAD(&pv_freechunks, pc, pc_list);
+	PV_STAT(pc_chunk_spare++);
 }
 
 /*
@@ -1653,50 +1638,52 @@
 			return (pv);
 		}
 	}
-	/* No free items, allocate another chunk */
-	pc = (struct pv_chunk *)kmem_alloc_nofault(kernel_map, PAGE_SIZE);
-	if (pc == NULL) {
-		if (try) {
-			pv_entry_count--;
-			PV_STAT(pc_chunk_tryfail++);
-			return (NULL);
-		}
-		panic("get_pv_entry: out of kvm for pv entry chunk!");
-	}
-	m = vm_page_alloc(NULL, colour, VM_ALLOC_SYSTEM | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED);
-	if (m == NULL) {
-		if (try) {
-			pv_entry_count--;
-			PV_STAT(pc_chunk_tryfail++);
-			kmem_free(kernel_map, (vm_offset_t)pc, PAGE_SIZE);
-			return (NULL);
-		}
-		/*
-		 * Reclaim pv entries: At first, destroy mappings to inactive
-		 * pages.  After that, if a pv chunk entry is still needed,
-		 * destroy mappings to active pages.
-		 */
-		if (ratecheck(&lastprint, &printinterval))
-			printf("Approaching the limit on PV entries, consider"
-			    "increasing sysctl vm.pmap.shpgperproc or "
-			    "vm.pmap.pv_entry_max\n");
-		PV_STAT(pmap_collect_inactive++);
-		pmap_collect(pmap, &vm_page_queues[PQ_INACTIVE]);
-		m = vm_page_alloc(NULL, colour,
-		    VM_ALLOC_SYSTEM | VM_ALLOC_NOOBJ);
+	/* See if we have a preallocated chunk */
+	pc = TAILQ_FIRST(&pv_freechunks);
+	if (pc) {
+		/* Take a preallocated one from the freelist */
+		TAILQ_REMOVE(&pv_freechunks, pc, pc_list);
+		PV_STAT(pc_chunk_spare--);
+	} else {
+		/* No free items, allocate another chunk */
+		m = vm_page_alloc(NULL, colour, VM_ALLOC_SYSTEM |
+		    VM_ALLOC_NOOBJ | VM_ALLOC_WIRED);
 		if (m == NULL) {
-			PV_STAT(pmap_collect_active++);
-			pmap_collect(pmap, &vm_page_queues[PQ_ACTIVE]);
+			if (try) {
+				pv_entry_count--;
+				PV_STAT(pc_chunk_tryfail++);
+				return (NULL);
+			}
+			/*
+			 * Reclaim pv entries: At first, destroy mappings to
+			 * inactive pages.  After that, if a pv chunk entry
+			 * is still needed, destroy mappings to active pages.
+			 */
+			if (ratecheck(&lastprint, &printinterval))
+				printf("Approaching the limit on PV entries, "
+				    "consider increasing tunables "
+				    "vm.pmap.shpgperproc or "
+				    "vm.pmap.pv_entry_max\n");
+			PV_STAT(pmap_collect_inactive++);
+			pmap_collect(pmap, &vm_page_queues[PQ_INACTIVE]);
 			m = vm_page_alloc(NULL, colour,
 			    VM_ALLOC_SYSTEM | VM_ALLOC_NOOBJ);
-			if (m == NULL)
-				panic("get_pv_entry: increase vm.pmap.shpgperproc");
+			if (m == NULL) {
+				PV_STAT(pmap_collect_active++);
+				pmap_collect(pmap, &vm_page_queues[PQ_ACTIVE]);
+				m = vm_page_alloc(NULL, colour,
+				    VM_ALLOC_SYSTEM | VM_ALLOC_NOOBJ);
+				if (m == NULL)
+					panic("get_pv_entry: increase vm.pmap.shpgperproc");
+			}
 		}
+		colour++;
+		pc = pv_chunkbase + pv_nextindex;	/* Scaled */
+		pv_nextindex++;
+		pmap_qenter((vm_offset_t)pc, &m, 1);
 	}
 	PV_STAT(pc_chunk_count++);
 	PV_STAT(pc_chunk_allocs++);
-	colour++;
-	pmap_qenter((vm_offset_t)pc, &m, 1);
 	pc->pc_pmap = pmap;
 	pc->pc_map[0] = pc_freemask[0] & ~1ul;	/* preallocated bit 0 */
 	for (field = 1; field < _NPCM; field++)
@@ -2843,13 +2830,9 @@
 			PV_STAT(pc_chunk_count--);
 			PV_STAT(pc_chunk_frees++);
 			TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
-			m = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc));
-			pmap_qremove((vm_offset_t)pc, 1);
-			vm_page_lock_queues();
-			vm_page_unwire(m, 0);
-			vm_page_free(m);
-			vm_page_unlock_queues();
-			kmem_free(kernel_map, (vm_offset_t)pc, PAGE_SIZE);
+			/* Return to freelist */
+			TAILQ_INSERT_HEAD(&pv_freechunks, pc, pc_list);
+			PV_STAT(pc_chunk_spare++);
 		}
 	}
 	sched_unpin();

==== //depot/projects/uart/ia64/conf/DEFAULTS#3 (text+ko) ====

@@ -1,7 +1,7 @@
 #
 # DEFAULTS -- Default kernel configuration file for FreeBSD/ia64
 #
-# $FreeBSD: src/sys/ia64/conf/DEFAULTS,v 1.3 2005/11/27 23:16:59 ru Exp $
+# $FreeBSD: src/sys/ia64/conf/DEFAULTS,v 1.4 2006/04/28 21:21:53 marcel Exp $
 
 machine		ia64
 

==== //depot/projects/uart/kern/subr_rman.c#9 (text+ko) ====

@@ -56,7 +56,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/subr_rman.c,v 1.49 2006/04/19 21:25:55 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/subr_rman.c,v 1.50 2006/04/28 21:23:08 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/uart/modules/puc/Makefile#3 (text+ko) ====

@@ -1,5 +1,5 @@
 
-# $FreeBSD: src/sys/modules/puc/Makefile,v 1.1 2005/04/22 07:43:27 imp Exp $
+# $FreeBSD: src/sys/modules/puc/Makefile,v 1.2 2006/04/28 21:21:53 marcel Exp $
 
 .PATH:	${.CURDIR}/../../dev/puc
 

==== //depot/projects/uart/modules/sio/Makefile#5 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/modules/sio/Makefile,v 1.9 2005/10/14 23:30:15 yar Exp $
+# $FreeBSD: src/sys/modules/sio/Makefile,v 1.10 2006/04/28 21:21:53 marcel Exp $
 
 .if ${MACHINE} == "pc98"
 .PATH: ${.CURDIR}/../../pc98/cbus
@@ -6,7 +6,7 @@
 .PATH: ${.CURDIR}/../../dev/sio
 
 KMOD=	sio
-SRCS=	bus_if.h card_if.h device_if.h isa_if.h pci_if.h \
+SRCS=	bus_if.h card_if.h device_if.h isa_if.h pci_if.h serdev_if.h \
 	opt_comconsole.h opt_compat.h opt_gdb.h opt_kdb.h opt_sio.h \
 	sio.c sio_pccard.c sio_pci.c sio_puc.c pccarddevs.h
 .if ${MACHINE} == "pc98"

==== //depot/projects/uart/net80211/ieee80211_node.c#17 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_node.c,v 1.73 2006/03/06 17:23:26 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_node.c,v 1.74 2006/04/28 19:06:15 sam Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h> 
@@ -1454,8 +1454,19 @@
 	IEEE80211_NODE_LOCK(nt);
 	if (ic->ic_opmode == IEEE80211_M_STA || IEEE80211_IS_MULTICAST(macaddr))
 		ni = ieee80211_ref_node(ic->ic_bss);
-	else
+	else {
 		ni = _ieee80211_find_node(nt, macaddr);
+		if (ic->ic_opmode == IEEE80211_M_HOSTAP && 
+		    (ni != NULL && ni->ni_associd == 0)) {
+			/*
+			 * Station is not associated; don't permit the
+			 * data frame to be sent by returning NULL.  This
+			 * is kinda a kludge but the least intrusive way
+			 * to add this check into all drivers.
+			 */
+			ieee80211_unref_node(&ni);	/* NB: null's ni */
+		}
+	}
 	IEEE80211_NODE_UNLOCK(nt);
 
 	if (ni == NULL) {

==== //depot/projects/uart/pc98/conf/DEFAULTS#3 (text+ko) ====

@@ -1,7 +1,7 @@
 #
 # DEFAULTS -- Default kernel configuration file for FreeBSD/pc98
 #
-# $FreeBSD: src/sys/pc98/conf/DEFAULTS,v 1.3 2005/11/27 23:17:00 ru Exp $
+# $FreeBSD: src/sys/pc98/conf/DEFAULTS,v 1.4 2006/04/28 21:21:53 marcel Exp $
 
 machine		pc98 i386
 options 	PC98

==== //depot/projects/uart/sys/rman.h#8 (text+ko) ====

@@ -26,7 +26,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/sys/rman.h,v 1.32 2005/10/06 21:49:31 phk Exp $
+ * $FreeBSD: src/sys/sys/rman.h,v 1.33 2006/04/28 21:23:09 marcel Exp $
  */
 
 #ifndef _SYS_RMAN_H_


More information about the p4-projects mailing list