PERFORCE change 33879 for review
Marcel Moolenaar
marcel at FreeBSD.org
Sun Jun 29 22:31:52 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=33879
Change 33879 by marcel at 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));
More information about the p4-projects
mailing list