Date: Sun, 29 Jun 2003 22:31:49 -0700 (PDT) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 33879 for review Message-ID: <200306300531.h5U5Vn3K041402@repoman.freebsd.org>
index | next in thread | raw e-mail
http://perforce.freebsd.org/chv.cgi?CH=33879 Change 33879 by marcel@marcel_nfs on 2003/06/29 22:31:43 IFC @33872 Affected files ... .. //depot/projects/uart/alpha/alpha/pmap.c#2 integrate .. //depot/projects/uart/amd64/amd64/pmap.c#2 integrate .. //depot/projects/uart/boot/common/loader.8#2 integrate .. //depot/projects/uart/boot/i386/kgzldr/Makefile#2 integrate .. //depot/projects/uart/boot/pc98/kgzldr/Makefile#2 integrate .. //depot/projects/uart/dev/wi/if_wi.c#2 integrate .. //depot/projects/uart/i386/i386/pmap.c#2 integrate .. //depot/projects/uart/ia64/ia64/pmap.c#3 integrate .. //depot/projects/uart/net80211/ieee80211.c#2 integrate .. //depot/projects/uart/net80211/ieee80211_ioctl.c#2 integrate .. //depot/projects/uart/net80211/ieee80211_node.c#2 integrate .. //depot/projects/uart/netipsec/ipsec.c#2 integrate .. //depot/projects/uart/netipsec/key.c#2 integrate .. //depot/projects/uart/powerpc/powerpc/pmap.c#2 integrate .. //depot/projects/uart/sparc64/sparc64/pmap.c#2 integrate .. //depot/projects/uart/vm/pmap.h#2 integrate .. //depot/projects/uart/vm/vm_map.c#2 integrate .. //depot/projects/uart/vm/vm_map.h#2 integrate .. //depot/projects/uart/vm/vm_pageout.c#2 integrate Differences ... ==== //depot/projects/uart/alpha/alpha/pmap.c#2 (text+ko) ==== @@ -148,7 +148,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.127 2003/06/28 21:21:04 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.128 2003/06/29 21:20:02 alc Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -330,8 +330,6 @@ static void alpha_protection_init(void); static void pmap_changebit(vm_page_t m, int bit, boolean_t setem); -static vm_page_t pmap_enter_quick(pmap_t pmap, vm_offset_t va, - vm_page_t m, vm_page_t mpte); static int pmap_remove_pte(pmap_t pmap, pt_entry_t* ptq, vm_offset_t sva); static void pmap_remove_page(struct pmap *pmap, vm_offset_t va); static int pmap_remove_entry(struct pmap *pmap, vm_page_t m, vm_offset_t va); @@ -1973,7 +1971,7 @@ * but is *MUCH* faster than pmap_enter... */ -static vm_page_t +vm_page_t pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t mpte) { register pt_entry_t *pte; ==== //depot/projects/uart/amd64/amd64/pmap.c#2 (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.417 2003/06/26 01:04:31 peter Exp $ + * $FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.418 2003/06/29 21:20:03 alc Exp $ */ /*- * Copyright (c) 2003 Networks Associates Technology, Inc. @@ -208,8 +208,6 @@ static void amd64_protection_init(void); static __inline void pmap_changebit(vm_page_t m, int bit, boolean_t setem); -static vm_page_t pmap_enter_quick(pmap_t pmap, vm_offset_t va, - vm_page_t m, vm_page_t mpte); static int pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t sva); static void pmap_remove_page(struct pmap *pmap, vm_offset_t va); static int pmap_remove_entry(struct pmap *pmap, vm_page_t m, @@ -1951,7 +1949,7 @@ * but is *MUCH* faster than pmap_enter... */ -static vm_page_t +vm_page_t pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t mpte) { pt_entry_t *pte; ==== //depot/projects/uart/boot/common/loader.8#2 (text+ko) ==== @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/sys/boot/common/loader.8,v 1.56 2003/05/17 22:17:23 ru Exp $ +.\" $FreeBSD: src/sys/boot/common/loader.8,v 1.57 2003/06/29 20:57:55 brueffer Exp $ .\" .\" Note: The date here should be updated whenever a non-trivial .\" change is made to the manual page. @@ -57,7 +57,7 @@ The main drive behind these commands is user-friendliness. The bigger component is an .Tn ANS -Forth compatible Forth interpreter based on ficl, by +Forth compatible Forth interpreter based on FICL, by .An John Sadler . .Pp During initialization, ==== //depot/projects/uart/boot/i386/kgzldr/Makefile#2 (text+ko) ==== @@ -1,25 +1,19 @@ -# $FreeBSD: src/sys/boot/i386/kgzldr/Makefile,v 1.15 2003/06/07 17:42:26 obrien Exp $ +# $FreeBSD: src/sys/boot/i386/kgzldr/Makefile,v 1.16 2003/06/30 00:15:38 ru Exp $ -SRCS= boot.c inflate.c lib.c +SRCS= start.s boot.c inflate.c lib.c crt.s sio.s OBJS= ${SRCS:N*.h:R:S/$/.o/g} CFLAGS= -ffreestanding CFLAGS+=-Os CFLAGS+=-DKZIP -LDFLAGS=-nostdlib -static -r +LDFLAGS=-nostdlib -static -Wl,-r .PATH: ${.CURDIR}/../../../kern -.for asm in start crt sio -OBJS+= ${asm}.o -${asm}.o: ${asm}.s - ${AS} ${AFLAGS} -o ${.TARGET} ${.ALLSRC:M*${asm}*} -.endfor - CLEANFILES=kgzldr.o BOOT_COMCONSOLE_PORT?= 0x3f8 AFLAGS+=--defsym SIO_PRT=${BOOT_COMCONSOLE_PORT} -all: ${OBJS} kgzldr.o +all: kgzldr.o kgzldr.o: ${OBJS} ${CC} ${LDFLAGS} -o ${.TARGET} ${OBJS} @@ -28,4 +22,4 @@ ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ kgzldr.o ${DESTDIR}${LIBDIR} -.include <bsd.lib.mk> +.include <bsd.prog.mk> ==== //depot/projects/uart/boot/pc98/kgzldr/Makefile#2 (text+ko) ==== @@ -1,28 +1,22 @@ -# $FreeBSD: src/sys/boot/pc98/kgzldr/Makefile,v 1.9 2003/06/07 17:42:26 obrien Exp $ +# $FreeBSD: src/sys/boot/pc98/kgzldr/Makefile,v 1.10 2003/06/30 00:20:28 ru Exp $ -SRCS= boot.c inflate.c lib.c +SRCS= start.s boot.c inflate.c lib.c crt.s sio.s OBJS= ${SRCS:N*.h:R:S/$/.o/g} CFLAGS= -ffreestanding CFLAGS+=-Os CFLAGS+=-DKZIP -LDFLAGS=-nostdlib -static -r +LDFLAGS=-nostdlib -static -Wl,-r .PATH: ${.CURDIR}/../../../kern .PATH: ${.CURDIR}/../../i386/kgzldr AFLAGS+=--defsym PC98=1 -.for asm in start crt sio -OBJS+= ${asm}.o -${asm}.o: ${asm}.s - ${AS} ${AFLAGS} -o ${.TARGET} ${.ALLSRC:M*${asm}*} -.endfor - CLEANFILES=kgzldr.o BOOT_COMCONSOLE_PORT?= 0x238 AFLAGS+=--defsym SIO_PRT=${BOOT_COMCONSOLE_PORT} -all: ${OBJS} kgzldr.o +all: kgzldr.o kgzldr.o: ${OBJS} ${CC} ${LDFLAGS} -o ${.TARGET} ${OBJS} @@ -31,4 +25,4 @@ ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ kgzldr.o ${DESTDIR}${LIBDIR} -.include <bsd.lib.mk> +.include <bsd.prog.mk> ==== //depot/projects/uart/dev/wi/if_wi.c#2 (text+ko) ==== @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/wi/if_wi.c,v 1.144 2003/06/28 06:17:26 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/wi/if_wi.c,v 1.145 2003/06/29 20:14:35 sam Exp $"); #define WI_HERMES_AUTOINC_WAR /* Work around data write autoinc bug. */ #define WI_HERMES_STATS_WAR /* Work around stats counter bug. */ @@ -347,6 +347,10 @@ ic->ic_channels[val].ic_flags != 0, ("wi_attach: invalid own channel %u!", val)); ic->ic_ibss_chan = &ic->ic_channels[val]; + } else { + device_printf(dev, + "WI_RID_OWN_CHNL failed, using first channel!\n"); + ic->ic_ibss_chan = &ic->ic_channels[0]; } /* ==== //depot/projects/uart/i386/i386/pmap.c#2 (text+ko) ==== @@ -42,7 +42,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.413 2003/06/27 22:39:13 peter Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.414 2003/06/29 21:20:03 alc Exp $"); /*- * Copyright (c) 2003 Networks Associates Technology, Inc. * All rights reserved. @@ -243,8 +243,6 @@ static void i386_protection_init(void); static __inline void pmap_changebit(vm_page_t m, int bit, boolean_t setem); -static vm_page_t pmap_enter_quick(pmap_t pmap, vm_offset_t va, - vm_page_t m, vm_page_t mpte); static int pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t sva); static void pmap_remove_page(struct pmap *pmap, vm_offset_t va); static int pmap_remove_entry(struct pmap *pmap, vm_page_t m, @@ -2090,7 +2088,7 @@ * but is *MUCH* faster than pmap_enter... */ -static vm_page_t +vm_page_t pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t mpte) { pt_entry_t *pte; ==== //depot/projects/uart/ia64/ia64/pmap.c#3 (text+ko) ==== @@ -43,7 +43,7 @@ * from: @(#)pmap.c 7.7 (Berkeley) 5/12/91 * from: i386 Id: pmap.c,v 1.193 1998/04/19 15:22:48 bde Exp * with some ideas from NetBSD's alpha pmap - * $FreeBSD: src/sys/ia64/ia64/pmap.c,v 1.112 2003/06/29 06:10:32 alc Exp $ + * $FreeBSD: src/sys/ia64/ia64/pmap.c,v 1.113 2003/06/29 21:20:03 alc Exp $ */ /* @@ -267,7 +267,6 @@ static pmap_t pmap_install(pmap_t); static void pmap_invalidate_all(pmap_t pmap); -static void pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m); vm_offset_t pmap_steal_memory(vm_size_t size) @@ -1709,8 +1708,8 @@ * but is *MUCH* faster than pmap_enter... */ -static void -pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m) +vm_page_t +pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t mpte) { struct ia64_lpte *pte; pmap_t oldpmap; @@ -1719,7 +1718,7 @@ pte = pmap_find_pte(va); if (pte->pte_p) - return; + goto reinstall; /* * Enter on the PV list since its part of our managed memory. @@ -1737,8 +1736,9 @@ pmap_set_pte(pte, va, VM_PAGE_TO_PHYS(m), PTE_IG_MANAGED, PTE_PL_USER, PTE_AR_R); - +reinstall: pmap_install(oldpmap); + return (NULL); } /* @@ -1821,7 +1821,8 @@ vm_page_unlock_queues(); VM_OBJECT_UNLOCK(object); pmap_enter_quick(pmap, - addr + ia64_ptob(tmpidx), p); + addr + ia64_ptob(tmpidx), p, + NULL); VM_OBJECT_LOCK(object); vm_page_lock_queues(); vm_page_wakeup(p); @@ -1855,7 +1856,8 @@ vm_page_unlock_queues(); VM_OBJECT_UNLOCK(object); pmap_enter_quick(pmap, - addr + ia64_ptob(tmpidx), p); + addr + ia64_ptob(tmpidx), p, + NULL); VM_OBJECT_LOCK(object); vm_page_lock_queues(); vm_page_wakeup(p); @@ -1951,7 +1953,7 @@ } vm_page_busy(m); vm_page_unlock_queues(); - pmap_enter_quick(pmap, addr, m); + pmap_enter_quick(pmap, addr, m, NULL); vm_page_lock_queues(); vm_page_wakeup(m); } ==== //depot/projects/uart/net80211/ieee80211.c#2 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/net80211/ieee80211.c,v 1.3 2003/06/27 05:13:52 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/net80211/ieee80211.c,v 1.4 2003/06/29 20:10:54 sam Exp $"); /* * IEEE 802.11 generic handler @@ -197,10 +197,13 @@ return c - ic->ic_channels; else if (c == IEEE80211_CHAN_ANYC) return IEEE80211_CHAN_ANY; - else { + else if (c != NULL) { if_printf(&ic->ic_if, "invalid channel freq %u flags %x\n", c->ic_freq, c->ic_flags); return 0; /* XXX */ + } else { + if_printf(&ic->ic_if, "invalid channel (NULL)\n"); + return 0; /* XXX */ } } ==== //depot/projects/uart/net80211/ieee80211_ioctl.c#2 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_ioctl.c,v 1.2 2003/06/27 05:13:52 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_ioctl.c,v 1.3 2003/06/29 20:12:17 sam Exp $"); /* * IEEE 802.11 ioctl support (FreeBSD-specific) @@ -404,7 +404,7 @@ } memset(ic->ic_des_essid, 0, sizeof(ic->ic_des_essid)); ic->ic_des_esslen = le16toh(wreq.wi_val[0]) * 2; - memcpy(ic->ic_des_essid, &wreq.wi_val[1], len); + memcpy(ic->ic_des_essid, &wreq.wi_val[1], ic->ic_des_esslen); error = ENETRESET; break; case WI_RID_CURRENT_BSSID: ==== //depot/projects/uart/net80211/ieee80211_node.c#2 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_node.c,v 1.2 2003/06/27 05:13:52 sam Exp $"); +__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_node.c,v 1.3 2003/06/29 20:13:38 sam Exp $"); #include "opt_inet.h" @@ -87,7 +87,8 @@ ic->ic_node_free = ieee80211_node_free; ic->ic_node_copy = ieee80211_node_copy; ic->ic_bss = (*ic->ic_node_alloc)(ic); - /* XXX KASSERT != NULL? */ + KASSERT(ic->ic_bss != NULL, ("unable to setup inital BSS node")); + ic->ic_bss->ni_chan = IEEE80211_CHAN_ANYC; } void ==== //depot/projects/uart/netipsec/ipsec.c#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/netipsec/ipsec.c,v 1.4 2003/02/28 20:06:29 sam Exp $ */ +/* $FreeBSD: src/sys/netipsec/ipsec.c,v 1.5 2003/06/29 23:58:38 sam Exp $ */ /* $KAME: ipsec.c,v 1.103 2001/05/24 07:14:18 sakane Exp $ */ /* @@ -1922,6 +1922,8 @@ { struct xformsw *xsp; + if (sav->tdb_xform != NULL) /* previously initialized */ + return 0; for (xsp = xforms; xsp; xsp = xsp->xf_next) if (xsp->xf_type == xftype) return (*xsp->xf_init)(sav, xsp); ==== //depot/projects/uart/netipsec/key.c#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/netipsec/key.c,v 1.5 2003/02/19 05:47:36 imp Exp $ */ +/* $FreeBSD: src/sys/netipsec/key.c,v 1.6 2003/06/29 23:58:38 sam Exp $ */ /* $KAME: key.c,v 1.191 2001/06/27 10:46:49 sakane Exp $ */ /* @@ -2751,13 +2751,24 @@ if (__LIST_CHAINED(sav)) LIST_REMOVE(sav, chain); + /* + * Cleanup xform state. Note that zeroize'ing causes the + * keys to be cleared; otherwise we must do it ourself. + */ + if (sav->tdb_xform != NULL) { + sav->tdb_xform->xf_zeroize(sav); + sav->tdb_xform = NULL; + } else { + if (sav->key_auth != NULL) + bzero(_KEYBUF(sav->key_auth), _KEYLEN(sav->key_auth)); + if (sav->key_enc != NULL) + bzero(_KEYBUF(sav->key_enc), _KEYLEN(sav->key_enc)); + } if (sav->key_auth != NULL) { - bzero(_KEYBUF(sav->key_auth), _KEYLEN(sav->key_auth)); KFREE(sav->key_auth); sav->key_auth = NULL; } if (sav->key_enc != NULL) { - bzero(_KEYBUF(sav->key_enc), _KEYLEN(sav->key_enc)); KFREE(sav->key_enc); sav->key_enc = NULL; } ==== //depot/projects/uart/powerpc/powerpc/pmap.c#2 (text+ko) ==== @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/powerpc/powerpc/pmap.c,v 1.57 2003/06/14 23:23:54 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/powerpc/powerpc/pmap.c,v 1.58 2003/06/29 21:20:04 alc Exp $"); /* * Manages physical address maps. @@ -1032,6 +1032,14 @@ pmap_syncicache(VM_PAGE_TO_PHYS(m), PAGE_SIZE); } +vm_page_t +pmap_enter_quick(pmap_t pm, vm_offset_t va, vm_page_t m, vm_page_t mpte) +{ + + pmap_enter(pm, va, m, VM_PROT_READ | VM_PROT_EXECUTE, FALSE); + return (NULL); +} + vm_offset_t pmap_extract(pmap_t pm, vm_offset_t va) { ==== //depot/projects/uart/sparc64/sparc64/pmap.c#2 (text+ko) ==== @@ -39,7 +39,7 @@ * SUCH DAMAGE. * * from: @(#)pmap.c 7.7 (Berkeley) 5/12/91 - * $FreeBSD: src/sys/sparc64/sparc64/pmap.c,v 1.115 2003/06/18 17:03:04 jake Exp $ + * $FreeBSD: src/sys/sparc64/sparc64/pmap.c,v 1.116 2003/06/29 21:20:04 alc Exp $ */ /* @@ -1331,6 +1331,14 @@ } } +vm_page_t +pmap_enter_quick(pmap_t pm, vm_offset_t va, vm_page_t m, vm_page_t mpte) +{ + + pmap_enter(pm, va, m, VM_PROT_READ | VM_PROT_EXECUTE, FALSE); + return (NULL); +} + void pmap_object_init_pt(pmap_t pm, vm_offset_t addr, vm_object_t object, vm_pindex_t pindex, vm_size_t size, int limit) ==== //depot/projects/uart/vm/pmap.h#2 (text+ko) ==== @@ -61,7 +61,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $FreeBSD: src/sys/vm/pmap.h,v 1.59 2003/06/14 23:23:55 alc Exp $ + * $FreeBSD: src/sys/vm/pmap.h,v 1.60 2003/06/29 21:20:04 alc Exp $ */ /* @@ -103,6 +103,8 @@ void pmap_copy_page(vm_page_t, vm_page_t); void pmap_enter(pmap_t, vm_offset_t, vm_page_t, vm_prot_t, boolean_t); +vm_page_t pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, + vm_page_t mpte); vm_paddr_t pmap_extract(pmap_t pmap, vm_offset_t va); void pmap_growkernel(vm_offset_t); void pmap_init(vm_paddr_t, vm_paddr_t); @@ -110,7 +112,7 @@ boolean_t pmap_ts_referenced(vm_page_t m); vm_offset_t pmap_map(vm_offset_t *, vm_paddr_t, vm_paddr_t, int); void pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, - vm_object_t object, vm_pindex_t pindex, vm_offset_t size, + vm_object_t object, vm_pindex_t pindex, vm_size_t size, int pagelimit); boolean_t pmap_page_exists_quick(pmap_t pmap, vm_page_t m); void pmap_page_protect(vm_page_t m, vm_prot_t prot); ==== //depot/projects/uart/vm/vm_map.c#2 (text+ko) ==== @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/vm/vm_map.c,v 1.300 2003/06/27 18:52:49 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/vm/vm_map.c,v 1.301 2003/06/29 23:32:55 alc Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -911,11 +911,9 @@ #endif if (cow & (MAP_PREFAULT|MAP_PREFAULT_PARTIAL)) { - mtx_lock(&Giant); - pmap_object_init_pt(map->pmap, start, + vm_map_pmap_enter(map, start, object, OFF_TO_IDX(offset), end - start, cow & MAP_PREFAULT_PARTIAL); - mtx_unlock(&Giant); } return (KERN_SUCCESS); @@ -1272,6 +1270,23 @@ } /* + * vm_map_pmap_enter: + * + * Preload the mappings for the given object into the specified + * map. This eliminates the soft faults on process startup and + * immediately after an mmap(2). + */ +void +vm_map_pmap_enter(vm_map_t map, vm_offset_t addr, + vm_object_t object, vm_pindex_t pindex, vm_size_t size, int flags) +{ + + mtx_lock(&Giant); + pmap_object_init_pt(map->pmap, addr, object, pindex, size, flags); + mtx_unlock(&Giant); +} + +/* * vm_map_protect: * * Sets the protection of the specified address @@ -1491,16 +1506,13 @@ vm_object_madvise(current->object.vm_object, pindex, count, behav); if (behav == MADV_WILLNEED) { - mtx_lock(&Giant); - pmap_object_init_pt( - map->pmap, + vm_map_pmap_enter(map, useStart, current->object.vm_object, pindex, (count << PAGE_SHIFT), MAP_PREFAULT_MADVISE ); - mtx_unlock(&Giant); } } vm_map_unlock_read(map); ==== //depot/projects/uart/vm/vm_map.h#2 (text+ko) ==== @@ -61,7 +61,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $FreeBSD: src/sys/vm/vm_map.h,v 1.98 2003/06/15 07:28:33 alc Exp $ + * $FreeBSD: src/sys/vm/vm_map.h,v 1.99 2003/06/29 23:32:55 alc Exp $ */ /* @@ -310,6 +310,8 @@ void vm_map_lookup_done (vm_map_t, vm_map_entry_t); boolean_t vm_map_lookup_entry (vm_map_t, vm_offset_t, vm_map_entry_t *); int vm_map_clean (vm_map_t, vm_offset_t, vm_offset_t, boolean_t, boolean_t); +void vm_map_pmap_enter(vm_map_t map, vm_offset_t addr, + vm_object_t object, vm_pindex_t pindex, vm_size_t size, int flags); int vm_map_protect (vm_map_t, vm_offset_t, vm_offset_t, vm_prot_t, boolean_t); int vm_map_remove (vm_map_t, vm_offset_t, vm_offset_t); void vm_map_startup (void); ==== //depot/projects/uart/vm/vm_pageout.c#2 (text+ko) ==== @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/vm/vm_pageout.c,v 1.237 2003/06/28 20:07:54 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/vm/vm_pageout.c,v 1.238 2003/06/29 19:51:24 alc Exp $"); #include "opt_vm.h" #include <sys/param.h> @@ -472,7 +472,7 @@ vm_page_t p, next; int actcount, rcount, remove_mode; - GIANT_REQUIRED; + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); if (object->type == OBJT_DEVICE || object->type == OBJT_PHYS) return; @@ -556,7 +556,6 @@ vm_object_t obj, bigobj; int nothingwired; - GIANT_REQUIRED; if (!vm_map_trylock(map)) return; @@ -571,10 +570,15 @@ while (tmpe != &map->header) { if ((tmpe->eflags & MAP_ENTRY_IS_SUB_MAP) == 0) { obj = tmpe->object.vm_object; - if ((obj != NULL) && (obj->shadow_count <= 1) && - ((bigobj == NULL) || - (bigobj->resident_page_count < obj->resident_page_count))) { - bigobj = obj; + if (obj != NULL && VM_OBJECT_TRYLOCK(obj)) { + if (obj->shadow_count <= 1 && + (bigobj == NULL || + bigobj->resident_page_count < obj->resident_page_count)) { + if (bigobj != NULL) + VM_OBJECT_UNLOCK(bigobj); + bigobj = obj; + } else + VM_OBJECT_UNLOCK(obj); } } if (tmpe->wired_count > 0) @@ -582,9 +586,10 @@ tmpe = tmpe->next; } - if (bigobj) + if (bigobj != NULL) { vm_pageout_object_deactivate_pages(map, bigobj, desired); - + VM_OBJECT_UNLOCK(bigobj); + } /* * Next, hunt around for other pages to deactivate. We actually * do this search sort of wrong -- .text first is not the best idea. @@ -595,8 +600,11 @@ break; if ((tmpe->eflags & MAP_ENTRY_IS_SUB_MAP) == 0) { obj = tmpe->object.vm_object; - if (obj) + if (obj != NULL) { + VM_OBJECT_LOCK(obj); vm_pageout_object_deactivate_pages(map, obj, desired); + VM_OBJECT_UNLOCK(obj); + } } tmpe = tmpe->next; } @@ -606,6 +614,7 @@ * table pages. */ if (desired == 0 && nothingwired) { + GIANT_REQUIRED; vm_page_lock_queues(); pmap_remove(vm_map_pmap(map), vm_map_min(map), vm_map_max(map));help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200306300531.h5U5Vn3K041402>
