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