Date: Mon, 31 May 2010 23:58:37 +0000 (UTC) From: Juli Mallett <jmallett@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: 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... Message-ID: <201005312358.o4VNwbLS061089@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005312358.o4VNwbLS061089>