PERFORCE change 177615 for review
Alexander Motin
mav at FreeBSD.org
Sun May 2 19:39:02 UTC 2010
http://p4web.freebsd.org/@@177615?ac=10
Change 177615 by mav at mav_mavbook on 2010/05/02 19:38:39
IFC
Affected files ...
.. //depot/projects/scottl-camlock/src/sbin/camcontrol/camcontrol.8#13 integrate
.. //depot/projects/scottl-camlock/src/sbin/camcontrol/camcontrol.c#41 integrate
.. //depot/projects/scottl-camlock/src/share/man/man4/Makefile#26 integrate
.. //depot/projects/scottl-camlock/src/sys/arm/mv/files.mv#4 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_pmp.c#36 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/ata/ata_xpt.c#89 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/cam_ccb.h#42 integrate
.. //depot/projects/scottl-camlock/src/sys/conf/NOTES#58 integrate
.. //depot/projects/scottl-camlock/src/sys/conf/files#75 integrate
.. //depot/projects/scottl-camlock/src/sys/conf/kmod.mk#24 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#112 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#40 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/quicc/quicc_bfe.h#2 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/siis/siis.c#48 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/siis/siis.h#18 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/uart/uart_dev_ns8250.c#13 integrate
.. //depot/projects/scottl-camlock/src/sys/fs/tmpfs/tmpfs_vnops.c#10 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/uipc_syscalls.c#36 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/vfs_bio.c#25 integrate
.. //depot/projects/scottl-camlock/src/sys/mips/cavium/uart_dev_oct16550.c#2 integrate
.. //depot/projects/scottl-camlock/src/sys/modules/Makefile#51 integrate
.. //depot/projects/scottl-camlock/src/sys/sparc64/sparc64/interrupt.S#6 integrate
.. //depot/projects/scottl-camlock/src/sys/vm/vm_contig.c#23 integrate
.. //depot/projects/scottl-camlock/src/sys/vm/vm_fault.c#34 integrate
.. //depot/projects/scottl-camlock/src/sys/vm/vm_object.c#25 integrate
.. //depot/projects/scottl-camlock/src/sys/vm/vm_page.c#28 integrate
Differences ...
==== //depot/projects/scottl-camlock/src/sbin/camcontrol/camcontrol.8#13 (text+ko) ====
@@ -25,9 +25,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/sbin/camcontrol/camcontrol.8,v 1.49 2010/01/20 13:31:12 mav Exp $
+.\" $FreeBSD: src/sbin/camcontrol/camcontrol.8,v 1.50 2010/05/02 11:36:27 mav Exp $
.\"
-.Dd January 20, 2010
+.Dd May 2, 2010
.Dt CAMCONTROL 8
.Os
.Sh NAME
@@ -123,6 +123,8 @@
.Op generic args
.Aq Fl a Ar cmd Op args
.Aq Fl c Ar cmd Op args
+.Op Fl d
+.Op Fl f
.Op Fl i Ar len Ar fmt
.Bk -words
.Op Fl o Ar len Ar fmt Op args
@@ -530,6 +532,10 @@
.It Fl c Ar cmd Op args
This specifies the SCSI CDB.
SCSI CDBs may be 6, 10, 12 or 16 bytes.
+.It Fl d
+Specifies DMA protocol to be used for ATA command.
+.It Fl f
+Specifies FPDMA (NCQ) protocol to be used for ATA command.
.It Fl i Ar len Ar fmt
This specifies the amount of data to read, and how it should be displayed.
If the format is
==== //depot/projects/scottl-camlock/src/sbin/camcontrol/camcontrol.c#41 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sbin/camcontrol/camcontrol.c,v 1.74 2010/02/22 10:45:40 mav Exp $");
+__FBSDID("$FreeBSD: src/sbin/camcontrol/camcontrol.c,v 1.76 2010/05/02 12:07:47 mav Exp $");
#include <sys/ioctl.h>
#include <sys/stdint.h>
@@ -4369,7 +4369,7 @@
" [-P pagectl][-e | -b][-d]\n"
" camcontrol cmd [dev_id][generic args]\n"
" <-a cmd [args] | -c cmd [args]>\n"
-" [-i len fmt|-o len fmt [args]] [-r fmt]\n"
+" [-d] [-f] [-i len fmt|-o len fmt [args]] [-r fmt]\n"
" camcontrol debug [-I][-P][-T][-S][-X][-c]\n"
" <all|bus[:target[:lun]]|off>\n"
" camcontrol tags [dev_id][generic args] [-N tags] [-q] [-v]\n"
==== //depot/projects/scottl-camlock/src/share/man/man4/Makefile#26 (text+ko) ====
@@ -1,5 +1,5 @@
# @(#)Makefile 8.1 (Berkeley) 6/18/93
-# $FreeBSD: src/share/man/man4/Makefile,v 1.477 2010/04/14 21:27:48 yongari Exp $
+# $FreeBSD: src/share/man/man4/Makefile,v 1.478 2010/05/02 19:28:30 mav Exp $
MAN= aac.4 \
acpi.4 \
==== //depot/projects/scottl-camlock/src/sys/arm/mv/files.mv#4 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/arm/mv/files.mv,v 1.6 2009/06/24 15:41:18 raj Exp $
+# $FreeBSD: src/sys/arm/mv/files.mv,v 1.7 2010/05/02 19:28:30 mav Exp $
#
# The Marvell CPU cores
# - Compliant with V5TE architecture
==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_pmp.c#36 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/ata/ata_pmp.c,v 1.7 2010/02/02 18:03:21 mav Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/ata/ata_pmp.c,v 1.8 2010/05/02 12:07:47 mav Exp $");
#include <sys/param.h>
==== //depot/projects/scottl-camlock/src/sys/cam/ata/ata_xpt.c#89 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/ata/ata_xpt.c,v 1.29 2010/04/30 07:56:21 mav Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/ata/ata_xpt.c,v 1.30 2010/05/02 12:07:47 mav Exp $");
#include <sys/param.h>
#include <sys/bus.h>
==== //depot/projects/scottl-camlock/src/sys/cam/cam_ccb.h#42 (text+ko) ====
@@ -25,7 +25,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/cam/cam_ccb.h,v 1.44 2010/02/02 11:09:28 mav Exp $
+ * $FreeBSD: src/sys/cam/cam_ccb.h,v 1.45 2010/05/02 12:07:47 mav Exp $
*/
#ifndef _CAM_CAM_CCB_H
==== //depot/projects/scottl-camlock/src/sys/conf/NOTES#58 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1582 2010/05/01 16:36:14 imp Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1583 2010/05/02 19:28:30 mav Exp $
#
# NOTES -- Lines that can be cut/pasted into kernel and hints configs.
#
==== //depot/projects/scottl-camlock/src/sys/conf/files#75 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1514 2010/04/28 22:25:27 jkim Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1515 2010/05/02 19:28:30 mav Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
==== //depot/projects/scottl-camlock/src/sys/conf/kmod.mk#24 (text+ko) ====
@@ -1,5 +1,5 @@
# From: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91
-# $FreeBSD: src/sys/conf/kmod.mk,v 1.232 2010/04/22 09:24:01 netchild Exp $
+# $FreeBSD: src/sys/conf/kmod.mk,v 1.233 2010/05/02 19:28:30 mav Exp $
#
# The include file <bsd.kmod.mk> handles building and installing loadable
# kernel modules.
==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#112 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ahci/ahci.c,v 1.33 2010/04/30 08:02:12 mav Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ahci/ahci.c,v 1.35 2010/05/02 14:46:05 mav Exp $");
#include <sys/param.h>
#include <sys/module.h>
@@ -340,6 +340,7 @@
rman_fini(&ctlr->sc_iomem);
return (error);
}
+ pci_enable_busmaster(dev);
/* Reset controller */
if ((error = ahci_ctlr_reset(dev)) != 0) {
bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem);
==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#40 (text+ko) ====
@@ -24,7 +24,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/ahci/ahci.h,v 1.11 2010/02/14 12:30:35 mav Exp $
+ * $FreeBSD: src/sys/dev/ahci/ahci.h,v 1.12 2010/05/02 12:07:47 mav Exp $
*/
/* ATA register defines */
==== //depot/projects/scottl-camlock/src/sys/dev/quicc/quicc_bfe.h#2 (text+ko) ====
@@ -25,7 +25,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/quicc/quicc_bfe.h,v 1.1 2008/03/03 18:20:16 raj Exp $
+ * $FreeBSD: src/sys/dev/quicc/quicc_bfe.h,v 1.2 2010/05/02 19:05:57 marius Exp $
*/
#ifndef _DEV_QUICC_BFE_H_
@@ -50,7 +50,6 @@
u_int sc_clock;
int sc_fastintr:1;
- int sc_leaving:1;
int sc_polled:1;
};
==== //depot/projects/scottl-camlock/src/sys/dev/siis/siis.c#48 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/siis/siis.c,v 1.25 2010/04/30 08:22:47 mav Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/siis/siis.c,v 1.26 2010/05/02 12:07:47 mav Exp $");
#include <sys/param.h>
#include <sys/module.h>
==== //depot/projects/scottl-camlock/src/sys/dev/siis/siis.h#18 (text+ko) ====
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/dev/siis/siis.h,v 1.9 2010/02/02 11:09:28 mav Exp $
+ * $FreeBSD: src/sys/dev/siis/siis.h,v 1.10 2010/05/02 12:07:47 mav Exp $
*/
/* ATA register defines */
==== //depot/projects/scottl-camlock/src/sys/dev/uart/uart_dev_ns8250.c#13 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/uart/uart_dev_ns8250.c,v 1.30 2009/04/08 00:14:06 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/uart/uart_dev_ns8250.c,v 1.31 2010/05/02 19:07:19 marius Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -604,7 +604,7 @@
if (ipend == 0)
ns8250_clrint(bas);
uart_unlock(sc->sc_hwmtx);
- return ((sc->sc_leaving) ? 0 : ipend);
+ return (ipend);
}
static int
==== //depot/projects/scottl-camlock/src/sys/fs/tmpfs/tmpfs_vnops.c#10 (text+ko) ====
@@ -34,7 +34,7 @@
* tmpfs vnode interface.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/fs/tmpfs/tmpfs_vnops.c,v 1.34 2009/10/11 07:03:56 delphij Exp $");
+__FBSDID("$FreeBSD: src/sys/fs/tmpfs/tmpfs_vnops.c,v 1.35 2010/05/02 17:33:46 alc Exp $");
#include <sys/param.h>
#include <sys/fcntl.h>
@@ -516,8 +516,16 @@
lookupvpg:
if (((m = vm_page_lookup(vobj, idx)) != NULL) &&
vm_page_is_valid(m, offset, tlen)) {
- if (vm_page_sleep_if_busy(m, FALSE, "tmfsmr"))
+ if ((m->oflags & VPO_BUSY) != 0) {
+ /*
+ * Reference the page before unlocking and sleeping so
+ * that the page daemon is less likely to reclaim it.
+ */
+ vm_page_lock_queues();
+ vm_page_flag_set(m, PG_REFERENCED);
+ vm_page_sleep(m, "tmfsmr");
goto lookupvpg;
+ }
vm_page_busy(m);
VM_OBJECT_UNLOCK(vobj);
error = uiomove_fromphys(&m, offset, tlen, uio);
@@ -526,8 +534,16 @@
VM_OBJECT_UNLOCK(vobj);
return (error);
} else if (m != NULL && uio->uio_segflg == UIO_NOCOPY) {
- if (vm_page_sleep_if_busy(m, FALSE, "tmfsmr"))
+ if ((m->oflags & VPO_BUSY) != 0) {
+ /*
+ * Reference the page before unlocking and sleeping so
+ * that the page daemon is less likely to reclaim it.
+ */
+ vm_page_lock_queues();
+ vm_page_flag_set(m, PG_REFERENCED);
+ vm_page_sleep(m, "tmfsmr");
goto lookupvpg;
+ }
vm_page_busy(m);
VM_OBJECT_UNLOCK(vobj);
sched_pin();
@@ -627,8 +643,16 @@
lookupvpg:
if (((vpg = vm_page_lookup(vobj, idx)) != NULL) &&
vm_page_is_valid(vpg, offset, tlen)) {
- if (vm_page_sleep_if_busy(vpg, FALSE, "tmfsmw"))
+ if ((vpg->oflags & VPO_BUSY) != 0) {
+ /*
+ * Reference the page before unlocking and sleeping so
+ * that the page daemon is less likely to reclaim it.
+ */
+ vm_page_lock_queues();
+ vm_page_flag_set(vpg, PG_REFERENCED);
+ vm_page_sleep(vpg, "tmfsmw");
goto lookupvpg;
+ }
vm_page_busy(vpg);
vm_page_lock_queues();
vm_page_undirty(vpg);
==== //depot/projects/scottl-camlock/src/sys/kern/uipc_syscalls.c#36 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/uipc_syscalls.c,v 1.293 2010/03/19 10:46:54 kib Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/uipc_syscalls.c,v 1.294 2010/05/02 19:25:22 kib Exp $");
#include "opt_inet.h"
#include "opt_inet6.h"
@@ -2108,6 +2108,7 @@
mbstat.sf_iocnt++;
}
if (error) {
+ vm_page_lock(pg);
vm_page_lock_queues();
vm_page_unwire(pg, 0);
/*
@@ -2121,6 +2122,7 @@
vm_page_free(pg);
}
vm_page_unlock_queues();
+ vm_page_unlock(pg);
VM_OBJECT_UNLOCK(obj);
if (error == EAGAIN)
error = 0; /* not a real error */
==== //depot/projects/scottl-camlock/src/sys/kern/vfs_bio.c#25 (text+ko) ====
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/vfs_bio.c,v 1.571 2010/04/30 00:46:43 kmacy Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/vfs_bio.c,v 1.573 2010/05/02 19:10:27 alc Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1563,7 +1563,6 @@
vm_page_t m;
VM_OBJECT_LOCK(bp->b_bufobj->bo_object);
- vm_page_lock_queues();
for (i = 0; i < bp->b_npages; i++) {
m = bp->b_pages[i];
bp->b_pages[i] = NULL;
@@ -1571,16 +1570,16 @@
* In order to keep page LRU ordering consistent, put
* everything on the inactive queue.
*/
+ vm_page_lock(m);
+ vm_page_lock_queues();
vm_page_unwire(m, 0);
/*
* We don't mess with busy pages, it is
* the responsibility of the process that
* busied the pages to deal with them.
*/
- if ((m->oflags & VPO_BUSY) || (m->busy != 0))
- continue;
-
- if (m->wire_count == 0) {
+ if ((m->oflags & VPO_BUSY) == 0 && m->busy == 0 &&
+ m->wire_count == 0) {
/*
* Might as well free the page if we can and it has
* no valid data. We also free the page if the
@@ -1595,8 +1594,9 @@
vm_page_try_to_cache(m);
}
}
+ vm_page_unlock_queues();
+ vm_page_unlock(m);
}
- vm_page_unlock_queues();
VM_OBJECT_UNLOCK(bp->b_bufobj->bo_object);
pmap_qremove(trunc_page((vm_offset_t) bp->b_data), bp->b_npages);
@@ -3024,8 +3024,17 @@
* vm_fault->getpages->cluster_read->allocbuf
*
*/
- if (vm_page_sleep_if_busy(m, FALSE, "pgtblk"))
+ if ((m->oflags & VPO_BUSY) != 0) {
+ /*
+ * Reference the page before unlocking
+ * and sleeping so that the page daemon
+ * is less likely to reclaim it.
+ */
+ vm_page_lock_queues();
+ vm_page_flag_set(m, PG_REFERENCED);
+ vm_page_sleep(m, "pgtblk");
continue;
+ }
/*
* We have a good page.
==== //depot/projects/scottl-camlock/src/sys/mips/cavium/uart_dev_oct16550.c#2 (text+ko) ====
@@ -55,7 +55,7 @@
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/mips/cavium/uart_dev_oct16550.c,v 1.2 2010/01/11 04:29:26 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/mips/cavium/uart_dev_oct16550.c,v 1.3 2010/05/02 19:07:19 marius Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -644,12 +644,9 @@
if (ipend) octeon_led_run_wheel(&where1, 6 + device_get_unit(sc->sc_dev));
#endif
- return ((sc->sc_leaving) ? 0 : ipend);
+ return (ipend);
}
-
-
-
static int
oct16550_bus_param (struct uart_softc *sc, int baudrate, int databits,
int stopbits, int parity)
==== //depot/projects/scottl-camlock/src/sys/modules/Makefile#51 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/modules/Makefile,v 1.650 2010/04/14 20:45:33 yongari Exp $
+# $FreeBSD: src/sys/modules/Makefile,v 1.651 2010/05/02 19:28:30 mav Exp $
.include <bsd.own.mk>
==== //depot/projects/scottl-camlock/src/sys/sparc64/sparc64/interrupt.S#6 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <machine/asm.h>
-__FBSDID("$FreeBSD: src/sys/sparc64/sparc64/interrupt.S,v 1.11 2009/12/23 20:23:04 marius Exp $");
+__FBSDID("$FreeBSD: src/sys/sparc64/sparc64/interrupt.S,v 1.12 2010/05/02 12:08:15 marius Exp $");
#include <machine/asi.h>
#include <machine/asmacros.h>
@@ -83,8 +83,11 @@
* The 2nd word points to code to execute and the 3rd is an argument
* to pass. Jump to it.
*/
- brnz,a,pt %g3, 1f
- nop
+ brnz,pt %g3, 1f
+ /*
+ * NB: Zeus CPUs set some undocumented bits in the first data word.
+ */
+ and %g3, IV_MAX - 1, %g3
jmpl %g4, %g0
nop
/* NOTREACHED */
==== //depot/projects/scottl-camlock/src/sys/vm/vm_contig.c#23 (text+ko) ====
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/vm/vm_contig.c,v 1.76 2010/04/30 21:20:14 kmacy Exp $");
+__FBSDID("$FreeBSD: src/sys/vm/vm_contig.c,v 1.77 2010/05/02 16:44:06 alc Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -96,33 +96,33 @@
vm_page_t m_tmp;
struct vnode *vp;
struct mount *mp;
- int vfslocked, dirty;
+ int vfslocked;
- vm_page_lock(m);
- vm_page_lock_queues();
+ mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ vm_page_lock_assert(m, MA_OWNED);
object = m->object;
if (!VM_OBJECT_TRYLOCK(object) &&
!vm_pageout_fallback_object_lock(m, next)) {
+ vm_page_unlock(m);
VM_OBJECT_UNLOCK(object);
- vm_page_unlock_queues();
- vm_page_unlock(m);
return (EAGAIN);
}
if (vm_page_sleep_if_busy(m, TRUE, "vpctw0")) {
VM_OBJECT_UNLOCK(object);
+ vm_page_lock_queues();
return (EBUSY);
}
vm_page_test_dirty(m);
if (m->dirty == 0 && m->hold_count == 0)
pmap_remove_all(m);
- if ((dirty = m->dirty) != 0) {
- vm_page_unlock_queues();
+ if (m->dirty != 0) {
vm_page_unlock(m);
if ((object->flags & OBJ_DEAD) != 0) {
VM_OBJECT_UNLOCK(object);
return (EAGAIN);
}
if (object->type == OBJT_VNODE) {
+ vm_page_unlock_queues();
vp = object->handle;
vm_object_reference_locked(object);
VM_OBJECT_UNLOCK(object);
@@ -136,19 +136,20 @@
VFS_UNLOCK_GIANT(vfslocked);
vm_object_deallocate(object);
vn_finished_write(mp);
+ vm_page_lock_queues();
return (0);
} else if (object->type == OBJT_SWAP ||
object->type == OBJT_DEFAULT) {
+ vm_page_unlock_queues();
m_tmp = m;
vm_pageout_flush(&m_tmp, 1, VM_PAGER_PUT_SYNC);
VM_OBJECT_UNLOCK(object);
+ vm_page_lock_queues();
return (0);
}
- } else if (m->hold_count == 0)
- vm_page_cache(m);
-
- if (dirty == 0) {
- vm_page_unlock_queues();
+ } else {
+ if (m->hold_count == 0)
+ vm_page_cache(m);
vm_page_unlock(m);
}
VM_OBJECT_UNLOCK(object);
@@ -167,11 +168,12 @@
if ((m->flags & PG_MARKER) != 0)
continue;
+ if (!vm_page_trylock(m))
+ continue;
KASSERT(VM_PAGE_INQUEUE2(m, queue),
("vm_contig_launder: page %p's queue is not %d", m, queue));
- vm_page_unlock_queues();
error = vm_contig_launder_page(m, &next);
- vm_page_lock_queues();
+ vm_page_lock_assert(m, MA_NOTOWNED);
if (error == 0)
return (TRUE);
if (error == EBUSY)
==== //depot/projects/scottl-camlock/src/sys/vm/vm_fault.c#34 (text+ko) ====
@@ -72,7 +72,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/vm/vm_fault.c,v 1.269 2010/04/30 16:20:14 kib Exp $");
+__FBSDID("$FreeBSD: src/sys/vm/vm_fault.c,v 1.270 2010/05/02 17:33:46 alc Exp $");
#include "opt_vm.h"
@@ -338,6 +338,12 @@
* to pmap it.
*/
if ((fs.m->oflags & VPO_BUSY) || fs.m->busy) {
+ /*
+ * Reference the page before unlocking and
+ * sleeping so that the page daemon is less
+ * likely to reclaim it.
+ */
+ vm_page_flag_set(fs.m, PG_REFERENCED);
vm_page_unlock_queues();
vm_page_unlock(fs.m);
VM_OBJECT_UNLOCK(fs.object);
==== //depot/projects/scottl-camlock/src/sys/vm/vm_object.c#25 (text+ko) ====
@@ -63,7 +63,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/vm/vm_object.c,v 1.416 2010/04/30 22:31:37 kmacy Exp $");
+__FBSDID("$FreeBSD: src/sys/vm/vm_object.c,v 1.417 2010/05/02 18:09:33 alc Exp $");
#include "opt_vm.h"
@@ -1454,7 +1454,6 @@
* not be changed by this operation.
*/
if ((m->oflags & VPO_BUSY) || m->busy) {
- vm_page_unlock_queues();
VM_OBJECT_UNLOCK(new_object);
m->oflags |= VPO_WANTED;
msleep(m, VM_OBJECT_MTX(orig_object), PVM, "spltwt", 0);
==== //depot/projects/scottl-camlock/src/sys/vm/vm_page.c#28 (text+ko) ====
@@ -98,7 +98,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/vm/vm_page.c,v 1.386 2010/04/30 02:46:49 kmacy Exp $");
+__FBSDID("$FreeBSD: src/sys/vm/vm_page.c,v 1.387 2010/05/02 17:33:46 alc Exp $");
#include "opt_vm.h"
@@ -599,7 +599,7 @@
/*
* vm_page_sleep:
*
- * Sleep and release the page queues lock.
+ * Sleep and release the page and page queues locks.
*
* The object containing the given page must be locked.
*/
@@ -608,13 +608,10 @@
{
VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED);
- if (!mtx_owned(vm_page_lockptr(m)))
- vm_page_lock(m);
- if (!mtx_owned(&vm_page_queue_mtx))
- vm_page_lock_queues();
- vm_page_flag_set(m, PG_REFERENCED);
- vm_page_unlock_queues();
- vm_page_unlock(m);
+ if (mtx_owned(&vm_page_queue_mtx))
+ vm_page_unlock_queues();
+ if (mtx_owned(vm_page_lockptr(m)))
+ vm_page_unlock(m);
/*
* It's possible that while we sleep, the page will get
@@ -1896,7 +1893,17 @@
VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
retrylookup:
if ((m = vm_page_lookup(object, pindex)) != NULL) {
- if (vm_page_sleep_if_busy(m, TRUE, "pgrbwt")) {
+ if ((m->oflags & VPO_BUSY) != 0 || m->busy != 0) {
+ if ((allocflags & VM_ALLOC_RETRY) != 0) {
+ /*
+ * Reference the page before unlocking and
+ * sleeping so that the page daemon is less
+ * likely to reclaim it.
+ */
+ vm_page_lock_queues();
+ vm_page_flag_set(m, PG_REFERENCED);
+ }
+ vm_page_sleep(m, "pgrbwt");
if ((allocflags & VM_ALLOC_RETRY) == 0)
return (NULL);
goto retrylookup;
More information about the p4-projects
mailing list