svn commit: r217478 - head/sys/vm
Alan Cox
alc at FreeBSD.org
Sun Jan 16 18:01:40 UTC 2011
Author: alc
Date: Sun Jan 16 18:01:39 2011
New Revision: 217478
URL: http://svn.freebsd.org/changeset/base/217478
Log:
Shift responsibility for synchronizing access to the page's act_count
field to the object's lock.
Reviewed by: kib@
Modified:
head/sys/vm/vm_page.c
head/sys/vm/vm_page.h
head/sys/vm/vm_pageout.c
Modified: head/sys/vm/vm_page.c
==============================================================================
--- head/sys/vm/vm_page.c Sun Jan 16 17:33:34 2011 (r217477)
+++ head/sys/vm/vm_page.c Sun Jan 16 18:01:39 2011 (r217478)
@@ -1338,8 +1338,8 @@ vm_page_alloc(vm_object_t object, vm_pin
atomic_add_int(&cnt.v_wire_count, 1);
m->wire_count = 1;
}
- m->act_count = 0;
mtx_unlock(&vm_page_queue_free_mtx);
+ m->act_count = 0;
if (object != NULL) {
/* Ignore device objects; the pager sets "memattr" for them. */
@@ -1603,6 +1603,7 @@ vm_page_activate(vm_page_t m)
int queue;
vm_page_lock_assert(m, MA_OWNED);
+ VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED);
if ((queue = m->queue) != PQ_ACTIVE) {
if (m->wire_count == 0 && (m->flags & PG_UNMANAGED) == 0) {
if (m->act_count < ACT_INIT)
Modified: head/sys/vm/vm_page.h
==============================================================================
--- head/sys/vm/vm_page.h Sun Jan 16 17:33:34 2011 (r217477)
+++ head/sys/vm/vm_page.h Sun Jan 16 18:01:39 2011 (r217478)
@@ -116,7 +116,7 @@ struct vm_page {
u_int wire_count; /* wired down maps refs (P) */
short hold_count; /* page hold count (P) */
u_short oflags; /* page flags (O) */
- u_char act_count; /* page usage count (P) */
+ u_char act_count; /* page usage count (O) */
u_char busy; /* page busy count (O) */
/* NOTE that these must support one bit per DEV_BSIZE in a page!!! */
/* so, on normal X86 kernels, they must be at least 8 bits wide */
Modified: head/sys/vm/vm_pageout.c
==============================================================================
--- head/sys/vm/vm_pageout.c Sun Jan 16 17:33:34 2011 (r217477)
+++ head/sys/vm/vm_pageout.c Sun Jan 16 18:01:39 2011 (r217478)
@@ -855,9 +855,9 @@ rescan0:
} else if (((m->flags & PG_REFERENCED) == 0) &&
(actcount = pmap_ts_referenced(m))) {
vm_page_activate(m);
- VM_OBJECT_UNLOCK(object);
- m->act_count += (actcount + ACT_ADVANCE);
vm_page_unlock(m);
+ m->act_count += actcount + ACT_ADVANCE;
+ VM_OBJECT_UNLOCK(object);
continue;
}
@@ -871,9 +871,9 @@ rescan0:
vm_page_flag_clear(m, PG_REFERENCED);
actcount = pmap_ts_referenced(m);
vm_page_activate(m);
- VM_OBJECT_UNLOCK(object);
- m->act_count += (actcount + ACT_ADVANCE + 1);
vm_page_unlock(m);
+ m->act_count += actcount + ACT_ADVANCE + 1;
+ VM_OBJECT_UNLOCK(object);
continue;
}
More information about the svn-src-all
mailing list