svn commit: r208685 - in user/jmallett/octeon: bin/sh cddl/contrib/opensolaris/lib/libzfs/common sbin/mount share/man/man5 sys/amd64/amd64 sys/boot/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zf...

Juli Mallett jmallett at FreeBSD.org
Mon May 31 23:58:37 UTC 2010


Author: jmallett
Date: Mon May 31 23:58:36 2010
New Revision: 208685
URL: http://svn.freebsd.org/changeset/base/208685

Log:
  Merge from head.

Added:
  user/jmallett/octeon/tools/regression/bin/sh/builtins/dot1.0
     - copied unchanged from r208684, head/tools/regression/bin/sh/builtins/dot1.0
  user/jmallett/octeon/tools/regression/bin/sh/builtins/dot2.0
     - copied unchanged from r208684, head/tools/regression/bin/sh/builtins/dot2.0
  user/jmallett/octeon/tools/regression/bin/sh/builtins/exec1.0
     - copied unchanged from r208684, head/tools/regression/bin/sh/builtins/exec1.0
  user/jmallett/octeon/tools/regression/bin/sh/builtins/exec2.0
     - copied unchanged from r208684, head/tools/regression/bin/sh/builtins/exec2.0
  user/jmallett/octeon/tools/regression/bin/sh/builtins/return4.0
     - copied unchanged from r208684, head/tools/regression/bin/sh/builtins/return4.0
  user/jmallett/octeon/tools/regression/bin/sh/parser/heredoc4.0
     - copied unchanged from r208684, head/tools/regression/bin/sh/parser/heredoc4.0
  user/jmallett/octeon/tools/regression/bin/sh/parser/heredoc5.0
     - copied unchanged from r208684, head/tools/regression/bin/sh/parser/heredoc5.0
  user/jmallett/octeon/tools/regression/bin/sh/parser/heredoc6.0
     - copied unchanged from r208684, head/tools/regression/bin/sh/parser/heredoc6.0
Modified:
  user/jmallett/octeon/bin/sh/eval.c
  user/jmallett/octeon/bin/sh/main.c
  user/jmallett/octeon/bin/sh/parser.c
  user/jmallett/octeon/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
  user/jmallett/octeon/sbin/mount/mount.8
  user/jmallett/octeon/share/man/man5/devfs.5
  user/jmallett/octeon/sys/amd64/amd64/pmap.c
  user/jmallett/octeon/sys/boot/zfs/zfs.c
  user/jmallett/octeon/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
  user/jmallett/octeon/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
  user/jmallett/octeon/sys/dev/amdsbwd/amdsbwd.c
  user/jmallett/octeon/sys/dev/ath/ath_hal/ah_eeprom_v1.c
  user/jmallett/octeon/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c
  user/jmallett/octeon/sys/dev/ath/ath_hal/ar5211/ar5211_reset.c
  user/jmallett/octeon/sys/dev/fdc/fdc_acpi.c
  user/jmallett/octeon/sys/fs/udf/udf_vnops.c
  user/jmallett/octeon/sys/geom/label/g_label.c
  user/jmallett/octeon/sys/i386/i386/pmap.c
  user/jmallett/octeon/sys/i386/xen/pmap.c
  user/jmallett/octeon/sys/ia64/ia64/pmap.c
  user/jmallett/octeon/sys/mips/mips/pmap.c
  user/jmallett/octeon/sys/pc98/pc98/machdep.c
  user/jmallett/octeon/sys/sun4v/sun4v/pmap.c
  user/jmallett/octeon/sys/vm/vm_page.h
  user/jmallett/octeon/usr.sbin/newsyslog/newsyslog.c
  user/jmallett/octeon/usr.sbin/newsyslog/newsyslog.conf.5
Directory Properties:
  user/jmallett/octeon/   (props changed)

Modified: user/jmallett/octeon/bin/sh/eval.c
==============================================================================
--- user/jmallett/octeon/bin/sh/eval.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/bin/sh/eval.c	Mon May 31 23:58:36 2010	(r208685)
@@ -1170,6 +1170,12 @@ truecmd(int argc __unused, char **argv _
 int
 execcmd(int argc, char **argv)
 {
+	/*
+	 * Because we have historically not supported any options,
+	 * only treat "--" specially.
+	 */
+	if (argc > 1 && strcmp(argv[1], "--") == 0)
+		argc--, argv++;
 	if (argc > 1) {
 		struct strlist *sp;
 

Modified: user/jmallett/octeon/bin/sh/main.c
==============================================================================
--- user/jmallett/octeon/bin/sh/main.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/bin/sh/main.c	Mon May 31 23:58:36 2010	(r208685)
@@ -314,14 +314,20 @@ find_dot_file(char *basename)
 int
 dotcmd(int argc, char **argv)
 {
-	char *fullname;
+	char *filename, *fullname;
 
 	if (argc < 2)
 		error("missing filename");
 
 	exitstatus = 0;
 
-	fullname = find_dot_file(argv[1]);
+	/*
+	 * Because we have historically not supported any options,
+	 * only treat "--" specially.
+	 */
+	filename = argc > 2 && strcmp(argv[1], "--") == 0 ? argv[2] : argv[1];
+
+	fullname = find_dot_file(filename);
 	setinputfile(fullname, 1);
 	commandname = fullname;
 	cmdloop(0);

Modified: user/jmallett/octeon/bin/sh/parser.c
==============================================================================
--- user/jmallett/octeon/bin/sh/parser.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/bin/sh/parser.c	Mon May 31 23:58:36 2010	(r208685)
@@ -203,6 +203,7 @@ parsecmd(int interact)
 	 * which could happen if we add command substitution on PS1/PS2.
 	 */
 	parser_temp_free_all();
+	heredoclist = NULL;
 
 	tokpushback = 0;
 	doprompt = interact;
@@ -973,6 +974,8 @@ parsebackq(char *out, struct nodelist **
 	const int bq_startlinno = plinno;
 	char *volatile ostr = NULL;
 	struct parsefile *const savetopfile = getcurrentfile();
+	struct heredoc *const saveheredoclist = heredoclist;
+	struct heredoc *here;
 
 	str = NULL;
 	if (setjmp(jmploc.loc)) {
@@ -981,6 +984,7 @@ parsebackq(char *out, struct nodelist **
 			ckfree(str);
 		if (ostr)
 			ckfree(ostr);
+		heredoclist = saveheredoclist;
 		handler = savehandler;
 		if (exception == EXERROR) {
 			startlinno = bq_startlinno;
@@ -995,6 +999,7 @@ parsebackq(char *out, struct nodelist **
 		memcpy(str, stackblock(), savelen);
 	}
 	handler = &jmploc;
+	heredoclist = NULL;
 	INTON;
         if (oldstyle) {
                 /* We must read until the closing backquote, giving special
@@ -1091,21 +1096,26 @@ done:
 	while (stackblocksize() <= savelen)
 		growstackblock();
 	STARTSTACKSTR(out);
+	INTOFF;
 	if (str) {
 		memcpy(out, str, savelen);
 		STADJUST(savelen, out);
-		INTOFF;
 		ckfree(str);
 		str = NULL;
-		INTON;
 	}
 	if (ostr) {
-		INTOFF;
 		ckfree(ostr);
 		ostr = NULL;
-		INTON;
+	}
+	here = saveheredoclist;
+	if (here != NULL) {
+		while (here->next != NULL)
+			here = here->next;
+		here->next = heredoclist;
+		heredoclist = saveheredoclist;
 	}
 	handler = savehandler;
+	INTON;
 	if (quoted)
 		USTPUTC(CTLBACKQ | CTLQUOTE, out);
 	else

Modified: user/jmallett/octeon/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
==============================================================================
--- user/jmallett/octeon/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c	Mon May 31 23:58:36 2010	(r208685)
@@ -1791,7 +1791,6 @@ zfs_prop_set(zfs_handle_t *zhp, const ch
 	/* We don't support those properties on FreeBSD. */
 	switch (prop) {
 	case ZFS_PROP_DEVICES:
-	case ZFS_PROP_ZONED:
 	case ZFS_PROP_SHAREISCSI:
 	case ZFS_PROP_ISCSIOPTIONS:
 	case ZFS_PROP_XATTR:

Modified: user/jmallett/octeon/sbin/mount/mount.8
==============================================================================
--- user/jmallett/octeon/sbin/mount/mount.8	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sbin/mount/mount.8	Mon May 31 23:58:36 2010	(r208685)
@@ -525,6 +525,7 @@ support for a particular file system mig
 .Xr nmount 2 ,
 .Xr acl 3 ,
 .Xr mac 4 ,
+.Xr devfs 5 ,
 .Xr ext2fs 5 ,
 .Xr fstab 5 ,
 .Xr procfs 5 ,

Modified: user/jmallett/octeon/share/man/man5/devfs.5
==============================================================================
--- user/jmallett/octeon/share/man/man5/devfs.5	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/share/man/man5/devfs.5	Mon May 31 23:58:36 2010	(r208685)
@@ -38,7 +38,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd December 14, 1996
+.Dd May 30, 2010
 .Dt DEVFS 5
 .Os
 .Sh NAME
@@ -80,9 +80,9 @@ mount point.
 To mount a
 .Nm
 volume located on
-.Pa /dev :
+.Pa /mychroot/dev :
 .Pp
-.Dl "mount -t devfs devfs /dev"
+.Dl "mount -t devfs devfs /mychroot/dev"
 .Sh SEE ALSO
 .Xr devfs 8 ,
 .Xr mount 8
@@ -91,6 +91,10 @@ The
 .Nm
 file system first appeared in
 .Fx 2.0 .
+It became the preferred method for accessing devices in
+.Fx 5.0
+and the only method in
+.Fx 6.0 .
 The
 .Nm
 manual page first appeared in

Modified: user/jmallett/octeon/sys/amd64/amd64/pmap.c
==============================================================================
--- user/jmallett/octeon/sys/amd64/amd64/pmap.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/amd64/amd64/pmap.c	Mon May 31 23:58:36 2010	(r208685)
@@ -2041,7 +2041,6 @@ SYSCTL_INT(_vm_pmap, OID_AUTO, pmap_coll
 static void
 pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq)
 {
-	struct md_page *pvh;
 	pd_entry_t *pde;
 	pmap_t pmap;
 	pt_entry_t *pte, tpte;
@@ -2077,15 +2076,13 @@ pmap_collect(pmap_t locked_pmap, struct 
 			pmap_invalidate_page(pmap, va);
 			pmap_free_zero_pages(free);
 			TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-			if (TAILQ_EMPTY(&m->md.pv_list)) {
-				pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
-				if (TAILQ_EMPTY(&pvh->pv_list))
-					vm_page_flag_clear(m, PG_WRITEABLE);
-			}
 			free_pv_entry(pmap, pv);
 			if (pmap != locked_pmap)
 				PMAP_UNLOCK(pmap);
 		}
+		if (TAILQ_EMPTY(&m->md.pv_list) &&
+		    TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list))
+			vm_page_flag_clear(m, PG_WRITEABLE);
 	}
 }
 
@@ -3128,11 +3125,11 @@ void
 pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
     vm_prot_t prot, boolean_t wired)
 {
-	vm_paddr_t pa;
 	pd_entry_t *pde;
 	pt_entry_t *pte;
-	vm_paddr_t opa;
-	pt_entry_t origpte, newpte;
+	pt_entry_t newpte, origpte;
+	pv_entry_t pv;
+	vm_paddr_t opa, pa;
 	vm_page_t mpte, om;
 	boolean_t invlva;
 
@@ -3190,16 +3187,15 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 		if (mpte)
 			mpte->wire_count--;
 
-		/*
-		 * We might be turning off write access to the page,
-		 * so we go ahead and sense modify status.
-		 */
 		if (origpte & PG_MANAGED) {
 			om = m;
 			pa |= PG_MANAGED;
 		}
 		goto validate;
 	} 
+
+	pv = NULL;
+
 	/*
 	 * Mapping has changed, invalidate old range and fall through to
 	 * handle validating new mapping.
@@ -3209,7 +3205,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 			pmap->pm_stats.wired_count--;
 		if (origpte & PG_MANAGED) {
 			om = PHYS_TO_VM_PAGE(opa);
-			pmap_remove_entry(pmap, om, va);
+			pv = pmap_pvh_remove(&om->md, pmap, va);
 		}
 		if (mpte != NULL) {
 			mpte->wire_count--;
@@ -3226,9 +3222,13 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 	if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) {
 		KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva,
 		    ("pmap_enter: managed mapping within the clean submap"));
-		pmap_insert_entry(pmap, va, m);
+		if (pv == NULL)
+			pv = get_pv_entry(pmap, FALSE);
+		pv->pv_va = va;
+		TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
 		pa |= PG_MANAGED;
-	}
+	} else if (pv != NULL)
+		free_pv_entry(pmap, pv);
 
 	/*
 	 * Increment counters
@@ -3243,7 +3243,8 @@ validate:
 	newpte = (pt_entry_t)(pa | pmap_cache_bits(m->md.pat_mode, 0) | PG_V);
 	if ((prot & VM_PROT_WRITE) != 0) {
 		newpte |= PG_RW;
-		vm_page_flag_set(m, PG_WRITEABLE);
+		if ((newpte & PG_MANAGED) != 0)
+			vm_page_flag_set(m, PG_WRITEABLE);
 	}
 	if ((prot & VM_PROT_EXECUTE) == 0)
 		newpte |= pg_nx;
@@ -3278,6 +3279,10 @@ validate:
 				if ((newpte & PG_RW) == 0)
 					invlva = TRUE;
 			}
+			if ((origpte & PG_MANAGED) != 0 &&
+			    TAILQ_EMPTY(&om->md.pv_list) &&
+			    TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list))
+				vm_page_flag_clear(om, PG_WRITEABLE);
 			if (invlva)
 				pmap_invalidate_page(pmap, va);
 		} else

Modified: user/jmallett/octeon/sys/boot/zfs/zfs.c
==============================================================================
--- user/jmallett/octeon/sys/boot/zfs/zfs.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/boot/zfs/zfs.c	Mon May 31 23:58:36 2010	(r208685)
@@ -265,6 +265,8 @@ zfs_readdir(struct open_file *f, struct 
 
 		rc = dnode_read(spa, &fp->f_dnode,
 				fp->f_seekp, &mze, sizeof(mze));
+		if (rc)
+			return (rc);
 		fp->f_seekp += sizeof(mze);
 
 		if (!mze.mze_name[0])

Modified: user/jmallett/octeon/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
==============================================================================
--- user/jmallett/octeon/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c	Mon May 31 23:58:36 2010	(r208685)
@@ -1425,6 +1425,12 @@ spa_load(spa_t *spa, nvlist_t *config, s
 		 */
 		if (need_update)
 			spa_async_request(spa, SPA_ASYNC_CONFIG_UPDATE);
+
+		/*
+		 * Check all DTLs to see if anything needs resilvering.
+		 */
+		if (vdev_resilver_needed(rvd, NULL, NULL))
+			spa_async_request(spa, SPA_ASYNC_RESILVER);
 	}
 
 	error = 0;

Modified: user/jmallett/octeon/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
==============================================================================
--- user/jmallett/octeon/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c	Mon May 31 23:58:36 2010	(r208685)
@@ -183,7 +183,7 @@ vdev_geom_io(struct g_consumer *cp, int 
 {
 	struct bio *bp;
 	u_char *p;
-	off_t off;
+	off_t off, maxio;
 	int error;
 
 	ASSERT((offset % cp->provider->sectorsize) == 0);
@@ -193,14 +193,15 @@ vdev_geom_io(struct g_consumer *cp, int 
 	off = offset;
 	offset += size;
 	p = data;
+	maxio = MAXPHYS - (MAXPHYS % cp->provider->sectorsize);
 	error = 0;
 
-	for (; off < offset; off += MAXPHYS, p += MAXPHYS, size -= MAXPHYS) {
+	for (; off < offset; off += maxio, p += maxio, size -= maxio) {
 		bzero(bp, sizeof(*bp));
 		bp->bio_cmd = cmd;
 		bp->bio_done = NULL;
 		bp->bio_offset = off;
-		bp->bio_length = MIN(size, MAXPHYS);
+		bp->bio_length = MIN(size, maxio);
 		bp->bio_data = p;
 		g_io_request(bp, cp);
 		error = biowait(bp, "vdev_geom_io");

Modified: user/jmallett/octeon/sys/dev/amdsbwd/amdsbwd.c
==============================================================================
--- user/jmallett/octeon/sys/dev/amdsbwd/amdsbwd.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/dev/amdsbwd/amdsbwd.c	Mon May 31 23:58:36 2010	(r208685)
@@ -230,10 +230,10 @@ amdsbwd_event(void *arg, unsigned int cm
 	cmd &= WD_INTERVAL;
 	if (cmd < WD_TO_1SEC)
 		cmd = 0;
-	timeout = ((uint64_t)1 << (cmd - WD_TO_1MS)) / sc->ms_per_tick;
-	if (timeout > sc->max_ticks)
-		timeout = sc->max_ticks;
 	if (cmd) {
+		timeout = ((uint64_t)1 << (cmd - WD_TO_1MS)) / sc->ms_per_tick;
+		if (timeout > sc->max_ticks)
+			timeout = sc->max_ticks;
 		if (timeout != sc->timeout) {
 			amdsbwd_tmr_set(sc, timeout);
 			if (!sc->active)

Modified: user/jmallett/octeon/sys/dev/ath/ath_hal/ah_eeprom_v1.c
==============================================================================
--- user/jmallett/octeon/sys/dev/ath/ath_hal/ah_eeprom_v1.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/dev/ath/ath_hal/ah_eeprom_v1.c	Mon May 31 23:58:36 2010	(r208685)
@@ -112,7 +112,7 @@ ath_hal_v1EepromAttach(struct ath_hal *a
 {
 	HAL_EEPROM_v1 *ee = AH_PRIVATE(ah)->ah_eeprom;
 	uint16_t athvals[AR_EEPROM_ATHEROS_MAX];	/* XXX off stack */
-	uint16_t protect, version, eeval;
+	uint16_t protect, eeprom_version, eeval;
 	uint32_t sum;
 	int i, loc;
 
@@ -138,18 +138,18 @@ ath_hal_v1EepromAttach(struct ath_hal *a
 	HALDEBUG(ah, HAL_DEBUG_ATTACH, "EEPROM protect 0x%x\n", protect);
 	/* XXX check proper access before continuing */
 
-	if (!ath_hal_eepromRead(ah, AR_EEPROM_VERSION, &version)) {
+	if (!ath_hal_eepromRead(ah, AR_EEPROM_VERSION, &eeprom_version)) {
 		HALDEBUG(ah, HAL_DEBUG_ANY,
 		    "%s: unable to read EEPROM version\n", __func__);
 		return HAL_EEREAD;
 	}
-	if (((version>>12) & 0xf) != 1) {
+	if (((eeprom_version>>12) & 0xf) != 1) {
 		/*
 		 * This code only groks the version 1 EEPROM layout.
 		 */
 		HALDEBUG(ah, HAL_DEBUG_ANY,
 		    "%s: unsupported EEPROM version 0x%x found\n",
-		    __func__, version);
+		    __func__, eeprom_version);
 		return HAL_EEVERSION;
 	}
 
@@ -183,7 +183,7 @@ ath_hal_v1EepromAttach(struct ath_hal *a
 		return HAL_ENOMEM;
 	}
 
-	ee->ee_version		= version;
+	ee->ee_version		= eeprom_version;
 	ee->ee_protect		= protect;
 	ee->ee_antenna		= athvals[2];
 	ee->ee_biasCurrents	= athvals[3];
@@ -243,7 +243,7 @@ ath_hal_v1EepromAttach(struct ath_hal *a
 	}
 
 	AH_PRIVATE(ah)->ah_eeprom = ee;
-	AH_PRIVATE(ah)->ah_eeversion = version;
+	AH_PRIVATE(ah)->ah_eeversion = eeprom_version;
 	AH_PRIVATE(ah)->ah_eepromDetach = v1EepromDetach;
 	AH_PRIVATE(ah)->ah_eepromGet = v1EepromGet;
 	AH_PRIVATE(ah)->ah_eepromSet = v1EepromSet;

Modified: user/jmallett/octeon/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c
==============================================================================
--- user/jmallett/octeon/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c	Mon May 31 23:58:36 2010	(r208685)
@@ -526,9 +526,10 @@ ar5210PerCalibrationN(struct ath_hal *ah
 	/* AGC calibration (this was added to make the NF threshold check work) */
 	OS_REG_WRITE(ah, AR_PHY_AGCCTL,
 		 OS_REG_READ(ah, AR_PHY_AGCCTL) | AR_PHY_AGC_CAL);
-	if (!ath_hal_wait(ah, AR_PHY_AGCCTL, AR_PHY_AGC_CAL, 0))
+	if (!ath_hal_wait(ah, AR_PHY_AGCCTL, AR_PHY_AGC_CAL, 0)) {
 		HALDEBUG(ah, HAL_DEBUG_ANY, "%s: AGC calibration timeout\n",
 		    __func__);
+	}
 
 	/* Rewrite our AGC values we stored off earlier (return AGC to normal operation) */
 	OS_REG_WRITE(ah, 0x9858, reg9858);

Modified: user/jmallett/octeon/sys/dev/ath/ath_hal/ar5211/ar5211_reset.c
==============================================================================
--- user/jmallett/octeon/sys/dev/ath/ath_hal/ar5211/ar5211_reset.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/dev/ath/ath_hal/ar5211/ar5211_reset.c	Mon May 31 23:58:36 2010	(r208685)
@@ -46,7 +46,7 @@ typedef struct {
 } CHAN_INFO_2GHZ;
 
 #define CI_2GHZ_INDEX_CORRECTION 19
-const static CHAN_INFO_2GHZ chan2GHzData[] = {
+static const CHAN_INFO_2GHZ chan2GHzData[] = {
 	{ 1, 0x46, 96  },	/* 2312 -19 */
 	{ 1, 0x46, 97  },	/* 2317 -18 */
 	{ 1, 0x46, 98  },	/* 2322 -17 */
@@ -926,9 +926,10 @@ ar5211IsNfGood(struct ath_hal *ah, struc
 
 	if (!getNoiseFloorThresh(ah, chan, &nfThresh))
 		return AH_FALSE;
-	if (OS_REG_READ(ah, AR_PHY_AGC_CONTROL) & AR_PHY_AGC_CONTROL_NF)
+	if (OS_REG_READ(ah, AR_PHY_AGC_CONTROL) & AR_PHY_AGC_CONTROL_NF) {
 		HALDEBUG(ah, HAL_DEBUG_ANY,
 		    "%s: NF did not complete in calibration window\n", __func__);
+	}
 	nf = ar5211GetNoiseFloor(ah);
 	if (nf > nfThresh) {
 		HALDEBUG(ah, HAL_DEBUG_ANY,

Modified: user/jmallett/octeon/sys/dev/fdc/fdc_acpi.c
==============================================================================
--- user/jmallett/octeon/sys/dev/fdc/fdc_acpi.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/dev/fdc/fdc_acpi.c	Mon May 31 23:58:36 2010	(r208685)
@@ -96,6 +96,7 @@ fdc_acpi_attach(device_t dev)
 {
 	struct fdc_data *sc;
 	ACPI_BUFFER buf;
+	ACPI_OBJECT *obj;
 	device_t bus;
 	int error;
 
@@ -131,7 +132,8 @@ fdc_acpi_attach(device_t dev)
 	}
 
 	/* Add fd child devices as specified. */
-	error = fdc_acpi_probe_children(bus, dev, buf.Pointer);
+	obj = buf.Pointer;
+	error = fdc_acpi_probe_children(bus, dev, obj->Buffer.Pointer);
 
 out:
 	if (buf.Pointer)

Modified: user/jmallett/octeon/sys/fs/udf/udf_vnops.c
==============================================================================
--- user/jmallett/octeon/sys/fs/udf/udf_vnops.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/fs/udf/udf_vnops.c	Mon May 31 23:58:36 2010	(r208685)
@@ -904,9 +904,9 @@ udf_readlink(struct vop_readlink_args *a
 	vp = ap->a_vp;
 	node = VTON(vp);
 	len = le64toh(node->fentry->inf_len);
+	iov[0].iov_len = len;
 	buf = malloc(iov[0].iov_len, M_DEVBUF, M_WAITOK);
 	iov[0].iov_base = buf;
-	iov[0].iov_len = len;
 	uio.uio_iov = iov;
 	uio.uio_iovcnt = 1;
 	uio.uio_offset = 0;

Modified: user/jmallett/octeon/sys/geom/label/g_label.c
==============================================================================
--- user/jmallett/octeon/sys/geom/label/g_label.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/geom/label/g_label.c	Mon May 31 23:58:36 2010	(r208685)
@@ -203,10 +203,8 @@ g_label_destroy(struct g_geom *gp, boole
 			    pp->acr, pp->acw, pp->ace);
 			return (EBUSY);
 		}
-	} else {
-		G_LABEL_DEBUG(1, "Label %s removed.",
-		    LIST_FIRST(&gp->provider)->name);
-	}
+	} else if (pp != NULL)
+		G_LABEL_DEBUG(1, "Label %s removed.", pp->name);
 	g_slice_spoiled(LIST_FIRST(&gp->consumer));
 	return (0);
 }

Modified: user/jmallett/octeon/sys/i386/i386/pmap.c
==============================================================================
--- user/jmallett/octeon/sys/i386/i386/pmap.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/i386/i386/pmap.c	Mon May 31 23:58:36 2010	(r208685)
@@ -2147,7 +2147,6 @@ SYSCTL_INT(_vm_pmap, OID_AUTO, pmap_coll
 static void
 pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq)
 {
-	struct md_page *pvh;
 	pd_entry_t *pde;
 	pmap_t pmap;
 	pt_entry_t *pte, tpte;
@@ -2184,15 +2183,13 @@ pmap_collect(pmap_t locked_pmap, struct 
 			pmap_invalidate_page(pmap, va);
 			pmap_free_zero_pages(free);
 			TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-			if (TAILQ_EMPTY(&m->md.pv_list)) {
-				pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
-				if (TAILQ_EMPTY(&pvh->pv_list))
-					vm_page_flag_clear(m, PG_WRITEABLE);
-			}
 			free_pv_entry(pmap, pv);
 			if (pmap != locked_pmap)
 				PMAP_UNLOCK(pmap);
 		}
+		if (TAILQ_EMPTY(&m->md.pv_list) &&
+		    TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list))
+			vm_page_flag_clear(m, PG_WRITEABLE);
 	}
 	sched_unpin();
 }
@@ -3257,11 +3254,11 @@ void
 pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
     vm_prot_t prot, boolean_t wired)
 {
-	vm_paddr_t pa;
 	pd_entry_t *pde;
 	pt_entry_t *pte;
-	vm_paddr_t opa;
-	pt_entry_t origpte, newpte;
+	pt_entry_t newpte, origpte;
+	pv_entry_t pv;
+	vm_paddr_t opa, pa;
 	vm_page_t mpte, om;
 	boolean_t invlva;
 
@@ -3326,16 +3323,15 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 		if (mpte)
 			mpte->wire_count--;
 
-		/*
-		 * We might be turning off write access to the page,
-		 * so we go ahead and sense modify status.
-		 */
 		if (origpte & PG_MANAGED) {
 			om = m;
 			pa |= PG_MANAGED;
 		}
 		goto validate;
 	} 
+
+	pv = NULL;
+
 	/*
 	 * Mapping has changed, invalidate old range and fall through to
 	 * handle validating new mapping.
@@ -3345,7 +3341,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 			pmap->pm_stats.wired_count--;
 		if (origpte & PG_MANAGED) {
 			om = PHYS_TO_VM_PAGE(opa);
-			pmap_remove_entry(pmap, om, va);
+			pv = pmap_pvh_remove(&om->md, pmap, va);
 		}
 		if (mpte != NULL) {
 			mpte->wire_count--;
@@ -3362,9 +3358,13 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 	if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) {
 		KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva,
 		    ("pmap_enter: managed mapping within the clean submap"));
-		pmap_insert_entry(pmap, va, m);
+		if (pv == NULL)
+			pv = get_pv_entry(pmap, FALSE);
+		pv->pv_va = va;
+		TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
 		pa |= PG_MANAGED;
-	}
+	} else if (pv != NULL)
+		free_pv_entry(pmap, pv);
 
 	/*
 	 * Increment counters
@@ -3379,7 +3379,8 @@ validate:
 	newpte = (pt_entry_t)(pa | pmap_cache_bits(m->md.pat_mode, 0) | PG_V);
 	if ((prot & VM_PROT_WRITE) != 0) {
 		newpte |= PG_RW;
-		vm_page_flag_set(m, PG_WRITEABLE);
+		if ((newpte & PG_MANAGED) != 0)
+			vm_page_flag_set(m, PG_WRITEABLE);
 	}
 #ifdef PAE
 	if ((prot & VM_PROT_EXECUTE) == 0)
@@ -3420,6 +3421,10 @@ validate:
 				if ((prot & VM_PROT_WRITE) == 0)
 					invlva = TRUE;
 			}
+			if ((origpte & PG_MANAGED) != 0 &&
+			    TAILQ_EMPTY(&om->md.pv_list) &&
+			    TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list))
+				vm_page_flag_clear(om, PG_WRITEABLE);
 			if (invlva)
 				pmap_invalidate_page(pmap, va);
 		} else

Modified: user/jmallett/octeon/sys/i386/xen/pmap.c
==============================================================================
--- user/jmallett/octeon/sys/i386/xen/pmap.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/i386/xen/pmap.c	Mon May 31 23:58:36 2010	(r208685)
@@ -103,8 +103,6 @@ __FBSDID("$FreeBSD$");
  *	and to when physical maps must be made correct.
  */
 
-#define PMAP_DIAGNOSTIC
-
 #include "opt_cpu.h"
 #include "opt_pmap.h"
 #include "opt_msgbuf.h"
@@ -168,13 +166,11 @@ __FBSDID("$FreeBSD$");
 #define PMAP_SHPGPERPROC 200
 #endif
 
-#if defined(DIAGNOSTIC)
-#define PMAP_DIAGNOSTIC
-#endif
+#define DIAGNOSTIC
 
-#if !defined(PMAP_DIAGNOSTIC)
+#if !defined(DIAGNOSTIC)
 #ifdef __GNUC_GNU_INLINE__
-#define PMAP_INLINE	inline
+#define PMAP_INLINE	__attribute__((__gnu_inline__)) inline
 #else
 #define PMAP_INLINE	extern inline
 #endif
@@ -298,6 +294,9 @@ SYSCTL_ULONG(_vm_pmap_pde, OID_AUTO, map
 
 static void	free_pv_entry(pmap_t pmap, pv_entry_t pv);
 static pv_entry_t get_pv_entry(pmap_t locked_pmap, int try);
+static void	pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va);
+static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap,
+		    vm_offset_t va);
 
 static vm_page_t pmap_enter_quick_locked(multicall_entry_t **mcl, int *count, pmap_t pmap, vm_offset_t va,
     vm_page_t m, vm_prot_t prot, vm_page_t mpte);
@@ -307,7 +306,6 @@ static void pmap_remove_page(struct pmap
     vm_page_t *free);
 static void pmap_remove_entry(struct pmap *pmap, vm_page_t m,
 					vm_offset_t va);
-static void pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m);
 static boolean_t pmap_try_insert_pv_entry(pmap_t pmap, vm_offset_t va,
     vm_page_t m);
 
@@ -2073,23 +2071,19 @@ pmap_collect(pmap_t locked_pmap, struct 
 			    ("pmap_collect: wired pte %#jx", (uintmax_t)tpte));
 			if (tpte & PG_A)
 				vm_page_flag_set(m, PG_REFERENCED);
-			if (tpte & PG_M) {
-				KASSERT((tpte & PG_RW),
-	("pmap_collect: modified page not writable: va: %#x, pte: %#jx",
-				    va, (uintmax_t)tpte));
+			if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW))
 				vm_page_dirty(m);
-			}
 			free = NULL;
 			pmap_unuse_pt(pmap, va, &free);
 			pmap_invalidate_page(pmap, va);
 			pmap_free_zero_pages(free);
 			TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-			if (TAILQ_EMPTY(&m->md.pv_list))
-				vm_page_flag_clear(m, PG_WRITEABLE);
 			free_pv_entry(pmap, pv);
 			if (pmap != locked_pmap)
 				PMAP_UNLOCK(pmap);
 		}
+		if (TAILQ_EMPTY(&m->md.pv_list))
+			vm_page_flag_clear(m, PG_WRITEABLE);
 	}
 	sched_unpin();
 }
@@ -2229,38 +2223,39 @@ retry:
 	return (pv);
 }
 
-static void
-pmap_remove_entry(pmap_t pmap, vm_page_t m, vm_offset_t va)
+static __inline pv_entry_t
+pmap_pvh_remove(struct md_page *pvh, pmap_t pmap, vm_offset_t va)
 {
 	pv_entry_t pv;
 
-	PMAP_LOCK_ASSERT(pmap, MA_OWNED);
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
-	TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) {
-		if (pmap == PV_PMAP(pv) && va == pv->pv_va)
+	TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) {
+		if (pmap == PV_PMAP(pv) && va == pv->pv_va) {
+			TAILQ_REMOVE(&pvh->pv_list, pv, pv_list);
 			break;
+		}
 	}
-	KASSERT(pv != NULL, ("pmap_remove_entry: pv not found"));
-	TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-	if (TAILQ_EMPTY(&m->md.pv_list))
-		vm_page_flag_clear(m, PG_WRITEABLE);
-	free_pv_entry(pmap, pv);
+	return (pv);
 }
 
-/*
- * Create a pv entry for page at pa for
- * (pmap, va).
- */
 static void
-pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m)
+pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va)
 {
 	pv_entry_t pv;
 
-	PMAP_LOCK_ASSERT(pmap, MA_OWNED);
+	pv = pmap_pvh_remove(pvh, pmap, va);
+	KASSERT(pv != NULL, ("pmap_pvh_free: pv not found"));
+	free_pv_entry(pmap, pv);
+}
+
+static void
+pmap_remove_entry(pmap_t pmap, vm_page_t m, vm_offset_t va)
+{
+
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
-	pv = get_pv_entry(pmap, FALSE);
-	pv->pv_va = va;
-	TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
+	pmap_pvh_free(&m->md, pmap, va);
+	if (TAILQ_EMPTY(&m->md.pv_list))
+		vm_page_flag_clear(m, PG_WRITEABLE);
 }
 
 /*
@@ -2320,12 +2315,8 @@ pmap_remove_pte(pmap_t pmap, pt_entry_t 
 		if (!(oldpte & PG_MANAGED))
 			printf("va=0x%x is unmanaged :-( pte=0x%llx\n", va, oldpte);
 
-		if (oldpte & PG_M) {
-			KASSERT((oldpte & PG_RW),
-	("pmap_remove_pte: modified page not writable: va: %#x, pte: %#jx",
-			    va, (uintmax_t)oldpte));
+		if ((oldpte & (PG_M | PG_RW)) == (PG_M | PG_RW))
 			vm_page_dirty(m);
-		}
 		if (oldpte & PG_A)
 			vm_page_flag_set(m, PG_REFERENCED);
 		pmap_remove_entry(pmap, m, va);
@@ -2487,6 +2478,7 @@ pmap_remove_all(vm_page_t m)
 
 	KASSERT((m->flags & PG_FICTITIOUS) == 0,
 	    ("pmap_remove_all: page %p is fictitious", m));
+	free = NULL;
 	vm_page_lock_queues();
 	sched_pin();
 	while ((pv = TAILQ_FIRST(&m->md.pv_list)) != NULL) {
@@ -2505,16 +2497,10 @@ pmap_remove_all(vm_page_t m)
 		/*
 		 * Update the vm_page_t clean and reference bits.
 		 */
-		if (tpte & PG_M) {
-			KASSERT((tpte & PG_RW),
-	("pmap_remove_all: modified page not writable: va: %#x, pte: %#jx",
-			    pv->pv_va, (uintmax_t)tpte));
+		if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW))
 			vm_page_dirty(m);
-		}
-		free = NULL;
 		pmap_unuse_pt(pmap, pv->pv_va, &free);
 		pmap_invalidate_page(pmap, pv->pv_va);
-		pmap_free_zero_pages(free);
 		TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
 		free_pv_entry(pmap, pv);
 		PMAP_UNLOCK(pmap);
@@ -2525,6 +2511,7 @@ pmap_remove_all(vm_page_t m)
 		PT_SET_MA(PADDR1, 0);
 	sched_unpin();
 	vm_page_unlock_queues();
+	pmap_free_zero_pages(free);
 }
 
 /*
@@ -2671,19 +2658,19 @@ void
 pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
     vm_prot_t prot, boolean_t wired)
 {
-	vm_paddr_t pa;
 	pd_entry_t *pde;
 	pt_entry_t *pte;
-	vm_paddr_t opa;
-	pt_entry_t origpte, newpte;
+	pt_entry_t newpte, origpte;
+	pv_entry_t pv;
+	vm_paddr_t opa, pa;
 	vm_page_t mpte, om;
 	boolean_t invlva;
 
 	CTR6(KTR_PMAP, "pmap_enter: pmap=%08p va=0x%08x access=0x%x ma=0x%08x prot=0x%x wired=%d",
 	    pmap, va, access, xpmap_ptom(VM_PAGE_TO_PHYS(m)), prot, wired);
 	va = trunc_page(va);
- 	KASSERT(va <= VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig"));
- 	KASSERT(va < UPT_MIN_ADDRESS || va >= UPT_MAX_ADDRESS,
+	KASSERT(va <= VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig"));
+	KASSERT(va < UPT_MIN_ADDRESS || va >= UPT_MAX_ADDRESS,
 	    ("pmap_enter: invalid to pmap_enter page table pages (va: 0x%x)",
 	    va));
 	KASSERT((m->oflags & VPO_BUSY) != 0,
@@ -2702,16 +2689,6 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 	if (va < VM_MAXUSER_ADDRESS) {
 		mpte = pmap_allocpte(pmap, va, M_WAITOK);
 	}
-#if 0 && defined(PMAP_DIAGNOSTIC)
-	else {
-		pd_entry_t *pdeaddr = pmap_pde(pmap, va);
-		origpte = *pdeaddr;
-		if ((origpte & PG_V) == 0) { 
-			panic("pmap_enter: invalid kernel page table page, pdir=%p, pde=%p, va=%p\n",
-				pmap->pm_pdir[PTDPTDI], origpte, va);
-		}
-	}
-#endif
 
 	pde = pmap_pde(pmap, va);
 	if ((*pde & PG_PS) != 0)
@@ -2722,7 +2699,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 	 * Page Directory table entry not valid, we need a new PT page
 	 */
 	if (pte == NULL) {
-		panic("pmap_enter: invalid page directory pdir=%#jx, va=%#x\n",
+		panic("pmap_enter: invalid page directory pdir=%#jx, va=%#x",
 			(uintmax_t)pmap->pm_pdir[va >> PDRSHIFT], va);
 	}
 
@@ -2760,16 +2737,15 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 		if (mpte)
 			mpte->wire_count--;
 
-		/*
-		 * We might be turning off write access to the page,
-		 * so we go ahead and sense modify status.
-		 */
 		if (origpte & PG_MANAGED) {
 			om = m;
 			pa |= PG_MANAGED;
 		}
 		goto validate;
 	} 
+
+	pv = NULL;
+
 	/*
 	 * Mapping has changed, invalidate old range and fall through to
 	 * handle validating new mapping.
@@ -2779,7 +2755,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 			pmap->pm_stats.wired_count--;
 		if (origpte & PG_MANAGED) {
 			om = PHYS_TO_VM_PAGE(opa);
-			pmap_remove_entry(pmap, om, va);
+			pv = pmap_pvh_remove(&om->md, pmap, va);
 		} else if (va < VM_MAXUSER_ADDRESS) 
 			printf("va=0x%x is unmanaged :-( \n", va);
 			
@@ -2798,9 +2774,13 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 	if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0) {
 		KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva,
 		    ("pmap_enter: managed mapping within the clean submap"));
-		pmap_insert_entry(pmap, va, m);
+		if (pv == NULL)
+			pv = get_pv_entry(pmap, FALSE);
+		pv->pv_va = va;
+		TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
 		pa |= PG_MANAGED;
-	}
+	} else if (pv != NULL)
+		free_pv_entry(pmap, pv);
 
 	/*
 	 * Increment counters
@@ -2815,7 +2795,8 @@ validate:
 	newpte = (pt_entry_t)(pa | PG_V);
 	if ((prot & VM_PROT_WRITE) != 0) {
 		newpte |= PG_RW;
-		vm_page_flag_set(m, PG_WRITEABLE);
+		if ((newpte & PG_MANAGED) != 0)
+			vm_page_flag_set(m, PG_WRITEABLE);
 	}
 #ifdef PAE
 	if ((prot & VM_PROT_EXECUTE) == 0)
@@ -2849,15 +2830,15 @@ validate:
 					invlva = TRUE;
 #endif
 			}
-			if (origpte & PG_M) {
-				KASSERT((origpte & PG_RW),
-	("pmap_enter: modified page not writable: va: %#x, pte: %#jx",
-				    va, (uintmax_t)origpte));
+			if ((origpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) {
 				if ((origpte & PG_MANAGED) != 0)
 					vm_page_dirty(om);
 				if ((prot & VM_PROT_WRITE) == 0)
 					invlva = TRUE;
 			}
+			if ((origpte & PG_MANAGED) != 0 &&
+			    TAILQ_EMPTY(&om->md.pv_list))
+				vm_page_flag_clear(om, PG_WRITEABLE);
 			if (invlva)
 				pmap_invalidate_page(pmap, va);
 		} else{
@@ -3270,8 +3251,8 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pm
 		pd_entry_t srcptepaddr;
 		unsigned ptepindex;
 
-		if (addr >= UPT_MIN_ADDRESS)
-			panic("pmap_copy: invalid to pmap_copy page tables");
+		KASSERT(addr < UPT_MIN_ADDRESS,
+		    ("pmap_copy: invalid to pmap_copy page tables"));
 
 		pdnxt = (addr + NBPDR) & ~PDRMASK;
 		ptepindex = addr >> PDRSHIFT;
@@ -3290,8 +3271,8 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pm
 		}
 
 		srcmpte = PHYS_TO_VM_PAGE(srcptepaddr & PG_FRAME);
-		if (srcmpte->wire_count == 0)
-			panic("pmap_copy: source page table page is unused");
+		KASSERT(srcmpte->wire_count > 0,
+		    ("pmap_copy: source page table page is unused"));
 
 		if (pdnxt > end_addr)
 			pdnxt = end_addr;

Modified: user/jmallett/octeon/sys/ia64/ia64/pmap.c
==============================================================================
--- user/jmallett/octeon/sys/ia64/ia64/pmap.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/ia64/ia64/pmap.c	Mon May 31 23:58:36 2010	(r208685)
@@ -800,8 +800,6 @@ retry:
 			TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist);
 			m->md.pv_list_count--;
 			TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-			if (TAILQ_EMPTY(&m->md.pv_list))
-				vm_page_flag_clear(m, PG_WRITEABLE);
 			if (pmap != locked_pmap)
 				PMAP_UNLOCK(pmap);
 			if (allocated_pv == NULL)
@@ -809,6 +807,8 @@ retry:
 			else
 				free_pv_entry(pv);
 		}
+		if (TAILQ_EMPTY(&m->md.pv_list))
+			vm_page_flag_clear(m, PG_WRITEABLE);
 	}
 	if (allocated_pv == NULL) {
 		if (vpq == &vm_page_queues[PQ_INACTIVE]) {
@@ -1595,7 +1595,7 @@ validate:
 	if (icache_inval)
 		ia64_sync_icache(va, PAGE_SIZE);
 
-	if ((prot & VM_PROT_WRITE) != 0)
+	if ((prot & VM_PROT_WRITE) != 0 && managed)
 		vm_page_flag_set(m, PG_WRITEABLE);
 	vm_page_unlock_queues();
 	pmap_switch(oldpmap);

Modified: user/jmallett/octeon/sys/mips/mips/pmap.c
==============================================================================
--- user/jmallett/octeon/sys/mips/mips/pmap.c	Mon May 31 23:29:56 2010	(r208684)
+++ user/jmallett/octeon/sys/mips/mips/pmap.c	Mon May 31 23:58:36 2010	(r208685)
@@ -167,6 +167,9 @@ static int pv_entry_count = 0, pv_entry_
 
 static PMAP_INLINE void free_pv_entry(pv_entry_t pv);
 static pv_entry_t get_pv_entry(pmap_t locked_pmap);
+static void pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va);
+static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap,
+    vm_offset_t va);
 static __inline void pmap_clear_modified_bit(vm_page_t m);
 
 static vm_page_t pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va,
@@ -175,9 +178,6 @@ static int pmap_remove_pte(struct pmap *
 static void pmap_remove_page(struct pmap *pmap, vm_offset_t va);
 static void pmap_remove_entry(struct pmap *pmap, vm_page_t m, vm_offset_t va);
 static boolean_t pmap_check_modified_bit(vm_page_t m);
-static void 
-pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t mpte,
-    vm_page_t m, boolean_t wired);
 static boolean_t pmap_try_insert_pv_entry(pmap_t pmap, vm_page_t mpte,
     vm_offset_t va, vm_page_t m);
 static __inline void
@@ -1327,10 +1327,6 @@ retry:
 			TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist);
 			m->md.pv_list_count--;
 			TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-			if (TAILQ_EMPTY(&m->md.pv_list)) {
-				vm_page_flag_clear(m, PG_WRITEABLE);
-				m->md.pv_flags &= ~(PV_TABLE_REF | PV_TABLE_MOD);
-			}
 			pmap_unuse_pt(pmap, va, pv->pv_ptem);
 			if (pmap != locked_pmap)
 				PMAP_UNLOCK(pmap);
@@ -1339,6 +1335,10 @@ retry:
 			else
 				free_pv_entry(pv);
 		}
+		if (TAILQ_EMPTY(&m->md.pv_list)) {
+			vm_page_flag_clear(m, PG_WRITEABLE);
+			m->md.pv_flags &= ~(PV_TABLE_REF | PV_TABLE_MOD);
+		}
 	}
 	if (allocated_pv == NULL) {
 		if (vpq == &vm_page_queues[PQ_INACTIVE]) {
@@ -1370,15 +1370,15 @@ retry:
  * the entry.  In either case we free the now unused entry.
  */
 
-static void
-pmap_remove_entry(struct pmap *pmap, vm_page_t m, vm_offset_t va)
+static pv_entry_t
+pmap_pvh_remove(struct md_page *pvh, pmap_t pmap, vm_offset_t va)
 {
 	pv_entry_t pv;
 
 	PMAP_LOCK_ASSERT(pmap, MA_OWNED);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-user mailing list