Date: Tue, 8 Jul 2003 12:22:25 -0700 (PDT) From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 34203 for review Message-ID: <200307081922.h68JMPb9068395@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=34203 Change 34203 by jhb@jhb_laptop on 2003/07/08 12:22:19 IFC @34201. Affected files ... .. //depot/projects/smpng/sys/alpha/alpha/busdma_machdep.c#19 integrate .. //depot/projects/smpng/sys/alpha/alpha/mp_machdep.c#19 integrate .. //depot/projects/smpng/sys/alpha/alpha/pmap.c#48 integrate .. //depot/projects/smpng/sys/amd64/amd64/busdma_machdep.c#4 integrate .. //depot/projects/smpng/sys/amd64/amd64/pmap.c#6 integrate .. //depot/projects/smpng/sys/boot/efi/libefi/Makefile#8 integrate .. //depot/projects/smpng/sys/boot/i386/libi386/Makefile#10 integrate .. //depot/projects/smpng/sys/boot/ia64/libski/Makefile#6 integrate .. //depot/projects/smpng/sys/boot/ia64/libski/pal_stub.S#1 branch .. //depot/projects/smpng/sys/boot/ia64/libski/pal_stub.s#2 delete .. //depot/projects/smpng/sys/boot/pc98/libpc98/Makefile#9 integrate .. //depot/projects/smpng/sys/conf/NOTES#48 integrate .. //depot/projects/smpng/sys/conf/files#81 integrate .. //depot/projects/smpng/sys/conf/files.ia64#29 integrate .. //depot/projects/smpng/sys/contrib/dev/ath/freebsd/i386-elf.hal.o.uu#2 integrate .. //depot/projects/smpng/sys/dev/acpica/acpi.c#43 integrate .. //depot/projects/smpng/sys/dev/acpica/acpi_isab.c#1 branch .. //depot/projects/smpng/sys/dev/ata/ata-chipset.c#16 integrate .. //depot/projects/smpng/sys/dev/ata/ata-pci.c#33 integrate .. //depot/projects/smpng/sys/dev/ata/ata-pci.h#10 integrate .. //depot/projects/smpng/sys/dev/em/if_em.h#15 integrate .. //depot/projects/smpng/sys/dev/en/midway.c#17 integrate .. //depot/projects/smpng/sys/dev/fatm/if_fatm.c#3 integrate .. //depot/projects/smpng/sys/dev/firewire/fwdma.c#3 integrate .. //depot/projects/smpng/sys/dev/firewire/fwohci.c#19 integrate .. //depot/projects/smpng/sys/dev/firewire/fwohci_pci.c#15 integrate .. //depot/projects/smpng/sys/dev/firewire/sbp.c#21 integrate .. //depot/projects/smpng/sys/dev/fxp/if_fxp.c#40 integrate .. //depot/projects/smpng/sys/dev/ips/ips_pci.c#4 integrate .. //depot/projects/smpng/sys/dev/kbd/atkbd.c#8 integrate .. //depot/projects/smpng/sys/dev/lge/if_lge.c#14 integrate .. //depot/projects/smpng/sys/dev/nge/if_nge.c#24 integrate .. //depot/projects/smpng/sys/dev/pccbb/pccbb.c#32 integrate .. //depot/projects/smpng/sys/dev/pci/isa_pci.c#4 integrate .. //depot/projects/smpng/sys/dev/ppc/ppc.c#1 branch .. //depot/projects/smpng/sys/dev/ppc/ppcreg.h#1 branch .. //depot/projects/smpng/sys/dev/random/randomdev.c#13 integrate .. //depot/projects/smpng/sys/dev/sio/sio.c#32 integrate .. //depot/projects/smpng/sys/dev/sound/pci/ich.c#21 integrate .. //depot/projects/smpng/sys/dev/sound/pcm/feeder.c#8 integrate .. //depot/projects/smpng/sys/dev/sound/pcm/feeder.h#3 integrate .. //depot/projects/smpng/sys/dev/txp/if_txp.c#15 integrate .. //depot/projects/smpng/sys/dev/usb/ehci_pci.c#3 integrate .. //depot/projects/smpng/sys/dev/usb/hid.c#6 integrate .. //depot/projects/smpng/sys/dev/usb/hid.h#3 integrate .. //depot/projects/smpng/sys/dev/usb/if_axe.c#3 integrate .. //depot/projects/smpng/sys/dev/usb/if_cue.c#14 integrate .. //depot/projects/smpng/sys/dev/usb/ohci.c#22 integrate .. //depot/projects/smpng/sys/dev/usb/ohcireg.h#4 integrate .. //depot/projects/smpng/sys/dev/usb/ucom.c#10 integrate .. //depot/projects/smpng/sys/dev/usb/udbp.c#8 integrate .. //depot/projects/smpng/sys/dev/usb/udbp.h#3 integrate .. //depot/projects/smpng/sys/dev/usb/ufm.c#6 integrate .. //depot/projects/smpng/sys/dev/usb/uftdi.c#6 integrate .. //depot/projects/smpng/sys/dev/usb/ugen.c#16 integrate .. //depot/projects/smpng/sys/dev/usb/uhci.c#25 integrate .. //depot/projects/smpng/sys/dev/usb/uhcireg.h#5 integrate .. //depot/projects/smpng/sys/dev/usb/uhcivar.h#8 integrate .. //depot/projects/smpng/sys/dev/usb/uhid.c#14 integrate .. //depot/projects/smpng/sys/dev/usb/uhub.c#11 integrate .. //depot/projects/smpng/sys/dev/usb/ukbd.c#10 integrate .. //depot/projects/smpng/sys/dev/usb/umass.c#26 integrate .. //depot/projects/smpng/sys/dev/usb/umct.c#2 integrate .. //depot/projects/smpng/sys/dev/usb/ums.c#11 integrate .. //depot/projects/smpng/sys/dev/usb/uplcom.c#6 integrate .. //depot/projects/smpng/sys/dev/usb/urio.c#14 integrate .. //depot/projects/smpng/sys/dev/usb/usb_mem.h#3 integrate .. //depot/projects/smpng/sys/dev/usb/usb_port.h#15 integrate .. //depot/projects/smpng/sys/dev/usb/usb_subr.c#14 integrate .. //depot/projects/smpng/sys/dev/usb/usbdevs#35 integrate .. //depot/projects/smpng/sys/dev/usb/usbdi.c#12 integrate .. //depot/projects/smpng/sys/dev/usb/usbdi.h#9 integrate .. //depot/projects/smpng/sys/dev/usb/usbdi_util.c#7 integrate .. //depot/projects/smpng/sys/dev/usb/usbdi_util.h#5 integrate .. //depot/projects/smpng/sys/dev/usb/usbdivar.h#10 integrate .. //depot/projects/smpng/sys/dev/usb/uvisor.c#5 integrate .. //depot/projects/smpng/sys/dev/usb/uvscom.c#8 integrate .. //depot/projects/smpng/sys/dev/wi/if_wi.c#53 integrate .. //depot/projects/smpng/sys/dev/wi/if_wi_pccard.c#19 integrate .. //depot/projects/smpng/sys/dev/zs/zs.c#7 integrate .. //depot/projects/smpng/sys/fs/msdosfs/msdosfs_vnops.c#19 integrate .. //depot/projects/smpng/sys/geom/geom_ctl.c#16 integrate .. //depot/projects/smpng/sys/i386/bios/apm.c#5 integrate .. //depot/projects/smpng/sys/i386/i386/busdma_machdep.c#21 integrate .. //depot/projects/smpng/sys/i386/i386/pmap.c#41 integrate .. //depot/projects/smpng/sys/i386/i386/sys_machdep.c#30 integrate .. //depot/projects/smpng/sys/i386/i386/vm_machdep.c#40 integrate .. //depot/projects/smpng/sys/i386/isa/pcvt/pcvt_drv.c#10 integrate .. //depot/projects/smpng/sys/ia64/ia64/busdma_machdep.c#18 integrate .. //depot/projects/smpng/sys/ia64/ia64/context.S#1 branch .. //depot/projects/smpng/sys/ia64/ia64/context.s#3 delete .. //depot/projects/smpng/sys/ia64/ia64/db_trace.c#11 integrate .. //depot/projects/smpng/sys/ia64/ia64/exception.S#1 branch .. //depot/projects/smpng/sys/ia64/ia64/exception.s#26 delete .. //depot/projects/smpng/sys/ia64/ia64/locore.S#1 branch .. //depot/projects/smpng/sys/ia64/ia64/locore.s#20 delete .. //depot/projects/smpng/sys/ia64/ia64/pal.S#1 branch .. //depot/projects/smpng/sys/ia64/ia64/pal.s#5 delete .. //depot/projects/smpng/sys/ia64/ia64/pmap.c#49 integrate .. //depot/projects/smpng/sys/ia64/ia64/setjmp.S#1 branch .. //depot/projects/smpng/sys/ia64/ia64/setjmp.s#2 delete .. //depot/projects/smpng/sys/ia64/ia64/support.S#1 branch .. //depot/projects/smpng/sys/ia64/ia64/support.s#13 delete .. //depot/projects/smpng/sys/ia64/ia64/syscall.S#1 branch .. //depot/projects/smpng/sys/ia64/ia64/syscall.s#4 delete .. //depot/projects/smpng/sys/ia64/ia64/unwind.c#8 integrate .. //depot/projects/smpng/sys/ia64/include/unwind.h#4 integrate .. //depot/projects/smpng/sys/isa/atkbdc_isa.c#7 integrate .. //depot/projects/smpng/sys/isa/fd.c#23 integrate .. //depot/projects/smpng/sys/isa/isa_common.c#12 integrate .. //depot/projects/smpng/sys/isa/isahint.c#3 integrate .. //depot/projects/smpng/sys/isa/isavar.h#5 integrate .. //depot/projects/smpng/sys/isa/psm.c#17 integrate .. //depot/projects/smpng/sys/isa/syscons_isa.c#6 integrate .. //depot/projects/smpng/sys/kern/kern_condvar.c#30 integrate .. //depot/projects/smpng/sys/kern/kern_descrip.c#48 integrate .. //depot/projects/smpng/sys/kern/kern_mutex.c#71 integrate .. //depot/projects/smpng/sys/kern/kern_prot.c#72 integrate .. //depot/projects/smpng/sys/kern/kern_sig.c#72 integrate .. //depot/projects/smpng/sys/kern/kern_tc.c#22 integrate .. //depot/projects/smpng/sys/kern/kern_thr.c#10 integrate .. //depot/projects/smpng/sys/kern/kern_thread.c#39 integrate .. //depot/projects/smpng/sys/kern/kern_umtx.c#5 integrate .. //depot/projects/smpng/sys/kern/sched_ule.c#14 integrate .. //depot/projects/smpng/sys/kern/subr_hints.c#6 integrate .. //depot/projects/smpng/sys/kern/subr_param.c#12 integrate .. //depot/projects/smpng/sys/kern/sys_pipe.c#29 integrate .. //depot/projects/smpng/sys/kern/vfs_syscalls.c#59 integrate .. //depot/projects/smpng/sys/modules/acpi/Makefile#12 integrate .. //depot/projects/smpng/sys/modules/geom/geom_mbr/Makefile#2 integrate .. //depot/projects/smpng/sys/net/if_vlan.c#17 integrate .. //depot/projects/smpng/sys/netgraph/atm/ng_atm.c#2 integrate .. //depot/projects/smpng/sys/netgraph/ng_tee.c#8 integrate .. //depot/projects/smpng/sys/netinet/ip_fw.h#14 integrate .. //depot/projects/smpng/sys/netinet/ip_fw2.c#16 integrate .. //depot/projects/smpng/sys/nfsclient/nfs_nfsiod.c#9 integrate .. //depot/projects/smpng/sys/nfsserver/nfs_syscalls.c#19 integrate .. //depot/projects/smpng/sys/pc98/pc98/fd.c#24 integrate .. //depot/projects/smpng/sys/pc98/pc98/pc98kbd.c#4 integrate .. //depot/projects/smpng/sys/pc98/pc98/sio.c#29 integrate .. //depot/projects/smpng/sys/pc98/pc98/syscons_pc98.c#6 integrate .. //depot/projects/smpng/sys/pci/if_dc.c#40 integrate .. //depot/projects/smpng/sys/pci/if_dcreg.h#15 integrate .. //depot/projects/smpng/sys/pci/if_pcn.c#18 integrate .. //depot/projects/smpng/sys/pci/if_rl.c#32 integrate .. //depot/projects/smpng/sys/pci/if_sf.c#20 integrate .. //depot/projects/smpng/sys/pci/if_sis.c#28 integrate .. //depot/projects/smpng/sys/pci/if_sk.c#19 integrate .. //depot/projects/smpng/sys/pci/if_ste.c#22 integrate .. //depot/projects/smpng/sys/pci/if_vr.c#18 integrate .. //depot/projects/smpng/sys/pci/if_wb.c#17 integrate .. //depot/projects/smpng/sys/pci/if_xl.c#30 integrate .. //depot/projects/smpng/sys/powerpc/powerpc/pmap.c#29 integrate .. //depot/projects/smpng/sys/security/mac_bsdextended/mac_bsdextended.c#7 integrate .. //depot/projects/smpng/sys/security/mac_ifoff/mac_ifoff.c#5 integrate .. //depot/projects/smpng/sys/security/mac_lomac/mac_lomac.c#10 integrate .. //depot/projects/smpng/sys/security/mac_test/mac_test.c#13 integrate .. //depot/projects/smpng/sys/sparc64/sparc64/pmap.c#40 integrate .. //depot/projects/smpng/sys/sys/bus.h#10 integrate .. //depot/projects/smpng/sys/sys/param.h#44 integrate .. //depot/projects/smpng/sys/sys/pipe.h#4 integrate .. //depot/projects/smpng/sys/sys/signalvar.h#18 integrate .. //depot/projects/smpng/sys/ufs/ufs/ufs_vnops.c#29 integrate .. //depot/projects/smpng/sys/vm/pmap.h#20 integrate .. //depot/projects/smpng/sys/vm/vm_contig.c#15 integrate .. //depot/projects/smpng/sys/vm/vm_map.c#40 integrate .. //depot/projects/smpng/sys/vm/vm_mmap.c#30 integrate .. //depot/projects/smpng/sys/vm/vm_pageout.c#34 integrate Differences ... ==== //depot/projects/smpng/sys/alpha/alpha/busdma_machdep.c#19 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/alpha/alpha/busdma_machdep.c,v 1.40 2003/07/01 15:51:50 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/busdma_machdep.c,v 1.42 2003/07/01 21:20:51 mux Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -106,12 +106,21 @@ static void init_bounce_pages(void *dummy); static int alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages); -static int reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map); -static vm_offset_t add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, +static int reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, + int commit); +static bus_addr_t add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr, bus_size_t size); static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage); static __inline int run_filter(bus_dma_tag_t dmat, bus_addr_t paddr); +/* + * Return true if a match is made. + * + * To find a match walk the chain of bus_dma_tag_t's looking for 'paddr'. + * + * If paddr is within the bounds of the dma tag then call the filter callback + * to check for a match, if there is no filter callback then assume a match. + */ static __inline int run_filter(bus_dma_tag_t dmat, bus_addr_t paddr) { @@ -282,8 +291,14 @@ atomic_subtract_int(&dmat->ref_count, 1); if (dmat->ref_count == 0) { free(dmat, M_DEVBUF); - } - dmat = parent; + /* + * Last reference count, so + * release our reference + * count on our parent. + */ + dmat = parent; + } else + dmat = NULL; } } return (0); @@ -379,16 +394,10 @@ sgmap_free_region(chipset.sgmap, map->sgmaphandle); } - if (map != NULL) { + if (map != NULL && map != &nobounce_dmamap) { if (STAILQ_FIRST(&map->bpages) != NULL) return (EBUSY); - /* - * The nobounce_dmamap map is not dynamically - * allocated, thus we should on no account try to - * free it. - */ - if (map != &nobounce_dmamap) - free(map, M_DEVBUF); + free(map, M_DEVBUF); } dmat->map_count--; return (0); @@ -430,7 +439,7 @@ /* * Free a piece of memory and it's allociated dmamap, that was allocated - * via bus_dmamem_alloc. + * via bus_dmamem_alloc. Make the same choice for free/contigfree. */ void bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map) @@ -525,18 +534,24 @@ /* Reserve Necessary Bounce Pages */ if (map->pagesneeded != 0) { mtx_lock(&bounce_lock); - if (reserve_bounce_pages(dmat, map) != 0) { - - /* Queue us for resources */ - map->dmat = dmat; - map->buf = buf; - map->buflen = buflen; - map->callback = callback; - map->callback_arg = callback_arg; - - STAILQ_INSERT_TAIL(&bounce_map_waitinglist, map, links); - mtx_unlock(&bounce_lock); - return (EINPROGRESS); + if (flags & BUS_DMA_NOWAIT) { + if (reserve_bounce_pages(dmat, map, 0) != 0) { + mtx_unlock(&bounce_lock); + return (ENOMEM); + } + } else { + if (reserve_bounce_pages(dmat, map, 1) != 0) { + /* Queue us for resources */ + map->dmat = dmat; + map->buf = buf; + map->buflen = buflen; + map->callback = callback; + map->callback_arg = callback_arg; + STAILQ_INSERT_TAIL(&bounce_map_waitinglist, + map, links); + mtx_unlock(&bounce_lock); + return (EINPROGRESS); + } } mtx_unlock(&bounce_lock); } @@ -619,7 +634,7 @@ pmap = NULL; lastaddr = *lastaddrp; - bmask = ~(dmat->boundary - 1); + bmask = ~(dmat->boundary - 1); for (seg = *segp; buflen > 0 ; ) { /* @@ -706,7 +721,7 @@ error = 0; if (m0->m_pkthdr.len <= dmat->maxsize) { int first = 1; - vm_offset_t lastaddr = 0; + bus_addr_t lastaddr = 0; struct mbuf *m; for (m = m0; m != NULL && error == 0; m = m->m_next) { @@ -742,7 +757,7 @@ bus_dmamap_callback2_t *callback, void *callback_arg, int flags) { - vm_offset_t lastaddr; + bus_addr_t lastaddr; #ifdef __GNUC__ bus_dma_segment_t dm_segments[dmat->nsegments]; #else @@ -825,7 +840,6 @@ struct bounce_page *bpage; if ((bpage = STAILQ_FIRST(&map->bpages)) != NULL) { - /* * Handle data bouncing. We might also * want to add support for invalidating @@ -887,7 +901,7 @@ PAGE_SIZE, dmat->boundary); mtx_unlock(&Giant); - if (bpage->vaddr == NULL) { + if (bpage->vaddr == 0) { free(bpage, M_DEVBUF); break; } @@ -904,12 +918,14 @@ } static int -reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map) +reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int commit) { int pages; mtx_assert(&bounce_lock, MA_OWNED); pages = MIN(free_bpages, map->pagesneeded - map->pagesreserved); + if (commit == 0 && map->pagesneeded > (map->pagesreserved + pages)) + return (map->pagesneeded - (map->pagesreserved + pages)); free_bpages -= pages; reserved_bpages += pages; map->pagesreserved += pages; @@ -918,7 +934,7 @@ return (pages); } -static vm_offset_t +static bus_addr_t add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr, bus_size_t size) { @@ -961,7 +977,7 @@ free_bpages++; active_bpages--; if ((map = STAILQ_FIRST(&bounce_map_waitinglist)) != NULL) { - if (reserve_bounce_pages(map->dmat, map) == 0) { + if (reserve_bounce_pages(map->dmat, map, 1) == 0) { STAILQ_REMOVE_HEAD(&bounce_map_waitinglist, links); STAILQ_INSERT_TAIL(&bounce_map_callbacklist, map, links); ==== //depot/projects/smpng/sys/alpha/alpha/mp_machdep.c#19 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/alpha/alpha/mp_machdep.c,v 1.42 2003/06/10 16:50:43 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/mp_machdep.c,v 1.44 2003/07/03 14:33:17 jhb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -349,7 +349,6 @@ mtx_init(&ap_boot_mtx, "ap boot", NULL, MTX_SPIN); for (i = 0; i < hwrpb->rpb_pcs_cnt; i++) { - int dv; struct pcs *pcsp; if (i == boot_cpu_id) @@ -380,8 +379,7 @@ } continue; } - dv = 0; - if (resource_int_value("cpu", i, "disable", &dv) == 0 && dv) { + if (resource_disabled("cpu", i)) { printf("CPU %d disabled by loader.\n", i); continue; } ==== //depot/projects/smpng/sys/alpha/alpha/pmap.c#48 (text+ko) ==== @@ -148,7 +148,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.128 2003/06/29 21:20:02 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.130 2003/07/06 20:32:42 alc Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -993,7 +993,7 @@ if (m->wire_count == 0) { vm_page_busy(m); vm_page_free_zero(m); - --cnt.v_wire_count; + atomic_subtract_int(&cnt.v_wire_count, 1); } return 1; } @@ -1181,7 +1181,7 @@ #endif p->wire_count--; - cnt.v_wire_count--; + atomic_subtract_int(&cnt.v_wire_count, 1); vm_page_free_zero(p); vm_page_unlock_queues(); return 1; @@ -2070,7 +2070,6 @@ return (void *) ALPHA_PHYS_TO_K0SEG(pa - (i * PAGE_SIZE)); } -#define MAX_INIT_PT (96) /* * pmap_object_init_pt preloads the ptes for a given object * into the specified pmap. This eliminates the blast of soft @@ -2079,112 +2078,12 @@ void pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, vm_pindex_t pindex, - vm_size_t size, int limit) + vm_size_t size) { - vm_offset_t tmpidx; - int psize; - vm_page_t p, mpte; - int objpgs; - if (pmap == NULL || object == NULL) - return; - VM_OBJECT_LOCK(object); - psize = alpha_btop(size); - - if ((object->type != OBJT_VNODE) || - ((limit & MAP_PREFAULT_PARTIAL) && (psize > MAX_INIT_PT) && - (object->resident_page_count > MAX_INIT_PT))) { - goto unlock_return; - } - - if (psize + pindex > object->size) { - if (object->size < pindex) - goto unlock_return; - psize = object->size - pindex; - } - - mpte = NULL; - /* - * if we are processing a major portion of the object, then scan the - * entire thing. - */ - if (psize > (object->resident_page_count >> 2)) { - objpgs = psize; - - for (p = TAILQ_FIRST(&object->memq); - ((objpgs > 0) && (p != NULL)); - p = TAILQ_NEXT(p, listq)) { - - tmpidx = p->pindex; - if (tmpidx < pindex) { - continue; - } - tmpidx -= pindex; - if (tmpidx >= psize) { - continue; - } - /* - * don't allow an madvise to blow away our really - * free pages allocating pv entries. - */ - if ((limit & MAP_PREFAULT_MADVISE) && - cnt.v_free_count < cnt.v_free_reserved) { - break; - } - vm_page_lock_queues(); - if (((p->valid & VM_PAGE_BITS_ALL) == VM_PAGE_BITS_ALL) && - (p->busy == 0) && - (p->flags & (PG_BUSY | PG_FICTITIOUS)) == 0) { - if ((p->queue - p->pc) == PQ_CACHE) - vm_page_deactivate(p); - vm_page_busy(p); - vm_page_unlock_queues(); - VM_OBJECT_UNLOCK(object); - mpte = pmap_enter_quick(pmap, - addr + alpha_ptob(tmpidx), p, mpte); - VM_OBJECT_LOCK(object); - vm_page_lock_queues(); - vm_page_wakeup(p); - } - vm_page_unlock_queues(); - objpgs -= 1; - } - } else { - /* - * else lookup the pages one-by-one. - */ - for (tmpidx = 0; tmpidx < psize; tmpidx += 1) { - /* - * don't allow an madvise to blow away our really - * free pages allocating pv entries. - */ - if ((limit & MAP_PREFAULT_MADVISE) && - cnt.v_free_count < cnt.v_free_reserved) { - break; - } - p = vm_page_lookup(object, tmpidx + pindex); - if (p == NULL) - continue; - vm_page_lock_queues(); - if ((p->valid & VM_PAGE_BITS_ALL) == VM_PAGE_BITS_ALL && - (p->busy == 0) && - (p->flags & (PG_BUSY | PG_FICTITIOUS)) == 0) { - if ((p->queue - p->pc) == PQ_CACHE) - vm_page_deactivate(p); - vm_page_busy(p); - vm_page_unlock_queues(); - VM_OBJECT_UNLOCK(object); - mpte = pmap_enter_quick(pmap, - addr + alpha_ptob(tmpidx), p, mpte); - VM_OBJECT_LOCK(object); - vm_page_lock_queues(); - vm_page_wakeup(p); - } - vm_page_unlock_queues(); - } - } -unlock_return: - VM_OBJECT_UNLOCK(object); + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); + KASSERT(object->type == OBJT_DEVICE, + ("pmap_object_init_pt: non-device object")); } /* ==== //depot/projects/smpng/sys/amd64/amd64/busdma_machdep.c#4 (text+ko) ==== @@ -22,10 +22,11 @@ * 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: src/sys/amd64/amd64/busdma_machdep.c,v 1.48 2003/07/01 16:54:54 mux Exp $ */ +#include <sys/cdefs.h> +__FBSDID("$FreeBSD: src/sys/amd64/amd64/busdma_machdep.c,v 1.49 2003/07/01 19:16:48 mux Exp $"); + #include <sys/param.h> #include <sys/systm.h> #include <sys/malloc.h> @@ -76,6 +77,7 @@ int busdma_swi_pending; +static struct mtx bounce_lock; static STAILQ_HEAD(bp_list, bounce_page) bounce_page_list; static int free_bpages; static int reserved_bpages; @@ -102,20 +104,17 @@ static void init_bounce_pages(void *dummy); static int alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages); static int reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, - int commit); + int commit); static bus_addr_t add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr, bus_size_t size); static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage); static __inline int run_filter(bus_dma_tag_t dmat, bus_addr_t paddr); -/* To protect all the the bounce pages related lists and data. */ -static struct mtx bounce_lock; - /* * Return true if a match is made. - * + * * To find a match walk the chain of bus_dma_tag_t's looking for 'paddr'. - * + * * If paddr is within the bounds of the dma tag then call the filter callback * to check for a match, if there is no filter callback then assume a match. */ @@ -372,7 +371,7 @@ int bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map) { - if (map != NULL) { + if (map != NULL && map != &nobounce_dmamap) { if (STAILQ_FIRST(&map->bpages) != NULL) return (EBUSY); free(map, M_DEVBUF); @@ -509,7 +508,7 @@ map->buf = buf; map->buflen = buflen; STAILQ_INSERT_TAIL(&bounce_map_waitinglist, - map, links); + map, links); mtx_unlock(&bounce_lock); return (EINPROGRESS); } @@ -639,8 +638,7 @@ #endif int nsegs, error; - KASSERT(m0->m_flags & M_PKTHDR, - ("bus_dmamap_load_mbuf: no packet header")); + M_ASSERTPKTHDR(m0); flags |= BUS_DMA_NOWAIT; nsegs = 0; ==== //depot/projects/smpng/sys/amd64/amd64/pmap.c#6 (text+ko) ==== @@ -39,7 +39,7 @@ * SUCH DAMAGE. * * from: @(#)pmap.c 7.7 (Berkeley) 5/12/91 - * $FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.418 2003/06/29 21:20:03 alc Exp $ + * $FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.419 2003/07/03 20:18:01 alc Exp $ */ /*- * Copyright (c) 2003 Networks Associates Technology, Inc. @@ -2057,31 +2057,22 @@ return ((void *)crashdumpmap); } -#define MAX_INIT_PT (96) /* - * pmap_object_init_pt preloads the ptes for a given object - * into the specified pmap. This eliminates the blast of soft - * faults on process startup and immediately after an mmap. + * This code maps large physical mmap regions into the + * processor address space. Note that some shortcuts + * are taken, but the code works. */ void pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, vm_pindex_t pindex, - vm_size_t size, int limit) + vm_size_t size) { - vm_pindex_t tmpidx; - int psize; - vm_page_t p, mpte; + vm_page_t p; - if (pmap == NULL || object == NULL) - return; - VM_OBJECT_LOCK(object); - /* - * This code maps large physical mmap regions into the - * processor address space. Note that some shortcuts - * are taken, but the code works. - */ - if ((object->type == OBJT_DEVICE) && - ((addr & (NBPDR - 1)) == 0) && ((size & (NBPDR - 1)) == 0)) { + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); + KASSERT(object->type == OBJT_DEVICE, + ("pmap_object_init_pt: non-device object")); + if (((addr & (NBPDR - 1)) == 0) && ((size & (NBPDR - 1)) == 0)) { int i; vm_page_t m[1]; int npdes; @@ -2089,7 +2080,7 @@ pde = pmap_pde(pmap, addr); if (pde != 0 && (*pde & PG_V) != 0) - goto unlock_return; + return; retry: p = vm_page_lookup(object, pindex); if (p != NULL) { @@ -2099,14 +2090,14 @@ } else { p = vm_page_alloc(object, pindex, VM_ALLOC_NORMAL); if (p == NULL) - goto unlock_return; + return; m[0] = p; if (vm_pager_get_pages(object, m, 1, 0) != VM_PAGER_OK) { vm_page_lock_queues(); vm_page_free(p); vm_page_unlock_queues(); - goto unlock_return; + return; } p = vm_page_lookup(object, pindex); @@ -2116,9 +2107,8 @@ vm_page_unlock_queues(); ptepa = VM_PAGE_TO_PHYS(p); - if (ptepa & (NBPDR - 1)) { - goto unlock_return; - } + if (ptepa & (NBPDR - 1)) + return; p->valid = VM_PAGE_BITS_ALL; @@ -2130,65 +2120,7 @@ pde++; } pmap_invalidate_all(kernel_pmap); - goto unlock_return; - } - - psize = amd64_btop(size); - - if ((object->type != OBJT_VNODE) || - ((limit & MAP_PREFAULT_PARTIAL) && (psize > MAX_INIT_PT) && - (object->resident_page_count > MAX_INIT_PT))) { - goto unlock_return; } - - if (psize + pindex > object->size) { - if (object->size < pindex) - goto unlock_return; - psize = object->size - pindex; - } - - mpte = NULL; - - if ((p = TAILQ_FIRST(&object->memq)) != NULL) { - if (p->pindex < pindex) { - p = vm_page_splay(pindex, object->root); - if ((object->root = p)->pindex < pindex) - p = TAILQ_NEXT(p, listq); - } - } - /* - * Assert: the variable p is either (1) the page with the - * least pindex greater than or equal to the parameter pindex - * or (2) NULL. - */ - for (; - p != NULL && (tmpidx = p->pindex - pindex) < psize; - p = TAILQ_NEXT(p, listq)) { - /* - * don't allow an madvise to blow away our really - * free pages allocating pv entries. - */ - if ((limit & MAP_PREFAULT_MADVISE) && - cnt.v_free_count < cnt.v_free_reserved) { - break; - } - vm_page_lock_queues(); - if ((p->valid & VM_PAGE_BITS_ALL) == VM_PAGE_BITS_ALL && - (p->busy == 0) && - (p->flags & (PG_BUSY | PG_FICTITIOUS)) == 0) { - if ((p->queue - p->pc) == PQ_CACHE) - vm_page_deactivate(p); - vm_page_busy(p); - vm_page_unlock_queues(); - mpte = pmap_enter_quick(pmap, - addr + amd64_ptob(tmpidx), p, mpte); - vm_page_lock_queues(); - vm_page_wakeup(p); - } - vm_page_unlock_queues(); - } -unlock_return: - VM_OBJECT_UNLOCK(object); } /* ==== //depot/projects/smpng/sys/boot/efi/libefi/Makefile#8 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/boot/efi/libefi/Makefile,v 1.11 2002/12/10 06:22:25 marcel Exp $ +# $FreeBSD: src/sys/boot/efi/libefi/Makefile,v 1.12 2003/07/02 11:53:55 ru Exp $ .PATH: ${.CURDIR}/../../../${MACHINE_ARCH}/${MACHINE_ARCH} @@ -6,7 +6,7 @@ INTERNALLIB= true SRCS= libefi.c efi_console.c time.c copy.c devicename.c module.c -SRCS+= delay.c efifs.c efinet.c elf_freebsd.c bootinfo.c pal.s +SRCS+= delay.c efifs.c efinet.c elf_freebsd.c bootinfo.c pal.S .if ${MACHINE_ARCH} == "ia64" SRCS+= efifpswa.c ==== //depot/projects/smpng/sys/boot/i386/libi386/Makefile#10 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/boot/i386/libi386/Makefile,v 1.31 2003/06/07 17:42:26 obrien Exp $ +# $FreeBSD: src/sys/boot/i386/libi386/Makefile,v 1.32 2003/07/02 12:45:45 ru Exp $ # LIB= i386 INTERNALLIB= true @@ -7,7 +7,7 @@ biospci.c biossmap.c bootinfo.c bootinfo32.c bootinfo64.c \ comconsole.c devicename.c elf32_freebsd.c \ elf64_freebsd.c gatea20.c \ - i386_copy.c i386_module.c nullconsole.c pxe.c \ + i386_copy.c i386_module.c nullconsole.c pxe.c pxetramp.s \ time.c vidconsole.c amd64_tramp.S CFLAGS+= -ffreestanding @@ -45,8 +45,4 @@ .endif -OBJS+= pxetramp.o -pxetramp.o: pxetramp.s - ${AS} ${AFLAGS} -o ${.TARGET} ${.ALLSRC:M*pxetramp*} - .include <bsd.lib.mk> ==== //depot/projects/smpng/sys/boot/ia64/libski/Makefile#6 (text+ko) ==== @@ -1,11 +1,11 @@ -# $FreeBSD: src/sys/boot/ia64/libski/Makefile,v 1.9 2003/02/01 22:50:08 marcel Exp $ +# $FreeBSD: src/sys/boot/ia64/libski/Makefile,v 1.10 2003/07/02 11:47:33 ru Exp $ LIB= ski INTERNALLIB= true SRCS= skiconsole.c time.c copy.c devicename.c module.c exit.c SRCS+= delay.c skifs.c elf_freebsd.c bootinfo.c ssc.c -SRCS+= acpi_stub.c efi_stub.c pal_stub.s sal_stub.c +SRCS+= acpi_stub.c efi_stub.c pal_stub.S sal_stub.c CFLAGS+= -ffreestanding -fpic -g CFLAGS+= -I${.CURDIR}/../include ==== //depot/projects/smpng/sys/boot/pc98/libpc98/Makefile#9 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/boot/pc98/libpc98/Makefile,v 1.17 2003/06/08 03:16:59 nyan Exp $ +# $FreeBSD: src/sys/boot/pc98/libpc98/Makefile,v 1.18 2003/07/02 12:45:45 ru Exp $ # LIB= pc98 INTERNALLIB= true @@ -7,7 +7,7 @@ SRCS= bioscd.c biosdisk.c biosmem.c biospnp.c biospci.c biossmap.c \ bootinfo.c bootinfo32.c comconsole.c devicename.c elf32_freebsd.c \ - gatea20.c i386_copy.c i386_module.c nullconsole.c pxe.c \ + gatea20.c i386_copy.c i386_module.c nullconsole.c pxe.c pxetramp.s \ time.c vidconsole.c CFLAGS+= -ffreestanding @@ -46,8 +46,4 @@ .endif -OBJS+= pxetramp.o -pxetramp.o: pxetramp.s - ${AS} ${AFLAGS} -o ${.TARGET} ${.ALLSRC:M*pxetramp*} - .include <bsd.lib.mk> ==== //depot/projects/smpng/sys/conf/NOTES#48 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/NOTES,v 1.1157 2003/06/28 05:47:34 scottl Exp $ +# $FreeBSD: src/sys/conf/NOTES,v 1.1161 2003/07/07 21:19:04 wollman Exp $ # # NOTES -- Lines that can be cut/pasted into kernel and hints configs. # @@ -456,7 +456,7 @@ # The `ether' device provides generic code to handle # Ethernets; it is MANDATORY when an Ethernet device driver is # configured or token-ring is enabled. -# The 'wlan' device provides generic code to support 802.11 +# The `wlan' device provides generic code to support 802.11 # drivers, including host AP mode; it is MANDATORY for the wi # driver and will eventually be required by all 802.11 drivers. # The `fddi' device provides generic code to support FDDI. @@ -674,13 +674,13 @@ # One of these is mandatory: options FFS #Fast filesystem options NFSCLIENT #Network File System -options NFSSERVER #Network File System # The rest are optional: options CD9660 #ISO 9660 filesystem options FDESCFS #File descriptor filesystem options HPFS #OS/2 File system options MSDOSFS #MS DOS File System (FAT, FAT32) +options NFSSERVER #Network File System options NTFS #NT File System options NULLFS #NULL filesystem #options NWFS #NetWare filesystem @@ -727,8 +727,8 @@ # # In order to manage swap, the system must reserve bitmap space that # scales with the largest mounted swap device multiplied by NSWAPDEV, -# irregardless of whether other swap devices exist or not. So it -# is not a good idea to make this value too large. +# irrespective of whether other swap devices exist. So it is not a +# good idea to make this value too large. options NSWAPDEV=5 # Disk quotas are supported when this option is enabled. @@ -848,14 +848,15 @@ # device drivers. The host adapters are listed in the ISA and PCI # device configuration sections below. # -# Beginning with FreeBSD 2.0.5 you can wire down your SCSI devices so -# that a given bus, target, and LUN always come on line as the same -# device unit. In earlier versions the unit numbers were assigned -# in the order that the devices were probed on the SCSI bus. This -# means that if you removed a disk drive, you may have had to rewrite -# your /etc/fstab file, and also that you had to be careful when adding -# a new disk as it may have been probed earlier and moved your device -# configuration around. +# It is possible to wire down your SCSI devices so that a given bus, +# target, and LUN always come on line as the same device unit. In +# earlier versions the unit numbers were assigned in the order that +# the devices were probed on the SCSI bus. This means that if you +# removed a disk drive, you may have had to rewrite your /etc/fstab +# file, and also that you had to be careful when adding a new disk +# as it may have been probed earlier and moved your device configuration +# around. (See also option GEOM_VOL for a different solution to this +# problem.) # This old behavior is maintained as the default behavior. The unit # assignment begins with the first non-wired down unit for a device ==== //depot/projects/smpng/sys/conf/files#81 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/files,v 1.801 2003/06/28 06:12:41 sam Exp $ +# $FreeBSD: src/sys/conf/files,v 1.802 2003/07/08 18:59:32 jhb Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -241,6 +241,7 @@ dev/acpica/acpi_cmbat.c optional acpi dev/acpica/acpi_cpu.c optional acpi dev/acpica/acpi_ec.c optional acpi +dev/acpica/acpi_isab.c optional acpi dev/acpica/acpi_lid.c optional acpi dev/acpica/acpi_pci.c optional acpi pci dev/acpica/acpi_pci_link.c optional acpi pci ==== //depot/projects/smpng/sys/conf/files.ia64#29 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.ia64,v 1.52 2003/05/16 21:26:40 marcel Exp $ +# $FreeBSD: src/sys/conf/files.ia64,v 1.53 2003/07/02 12:57:06 ru Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -75,7 +75,7 @@ ia64/ia64/busdma_machdep.c standard ia64/ia64/clock.c standard ia64/ia64/clock_if.m standard -ia64/ia64/context.s standard +ia64/ia64/context.S standard ia64/ia64/critical.c standard ia64/ia64/db_disasm.c optional ddb ia64/ia64/db_interface.c optional ddb @@ -84,26 +84,26 @@ ia64/ia64/efi.c standard ia64/ia64/eficlock.c standard ia64/ia64/elf_machdep.c standard -ia64/ia64/exception.s standard +ia64/ia64/exception.S standard ia64/ia64/ia64-gdbstub.c optional ddb ia64/ia64/in_cksum.c optional inet ia64/ia64/interrupt.c standard -ia64/ia64/locore.s standard no-obj +ia64/ia64/locore.S standard no-obj ia64/ia64/machdep.c standard ia64/ia64/mca.c standard ia64/ia64/mem.c standard >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200307081922.h68JMPb9068395>