Date: Fri, 28 Apr 2006 21:29:42 GMT From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 96327 for review Message-ID: <200604282129.k3SLTg1V097981@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=96327 Change 96327 by marcel@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_
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200604282129.k3SLTg1V097981>