svn commit: r197750 - head/sys/vm
Alan Cox
alc at FreeBSD.org
Sun Oct 4 18:53:10 UTC 2009
Author: alc
Date: Sun Oct 4 18:53:10 2009
New Revision: 197750
URL: http://svn.freebsd.org/changeset/base/197750
Log:
Align and pad the page queue and free page queue locks so that the linker
can't possibly place them together within the same cache line.
MFC after: 3 weeks
Modified:
head/sys/vm/vm_page.c
head/sys/vm/vm_page.h
Modified: head/sys/vm/vm_page.c
==============================================================================
--- head/sys/vm/vm_page.c Sun Oct 4 17:22:51 2009 (r197749)
+++ head/sys/vm/vm_page.c Sun Oct 4 18:53:10 2009 (r197750)
@@ -135,8 +135,8 @@ __FBSDID("$FreeBSD$");
*/
struct vpgqueues vm_page_queues[PQ_COUNT];
-struct mtx vm_page_queue_mtx;
-struct mtx vm_page_queue_free_mtx;
+struct vpglocks vm_page_queue_lock;
+struct vpglocks vm_page_queue_free_lock;
vm_page_t vm_page_array = 0;
int vm_page_array_size = 0;
Modified: head/sys/vm/vm_page.h
==============================================================================
--- head/sys/vm/vm_page.h Sun Oct 4 17:22:51 2009 (r197749)
+++ head/sys/vm/vm_page.h Sun Oct 4 18:53:10 2009 (r197750)
@@ -170,7 +170,15 @@ struct vpgqueues {
};
extern struct vpgqueues vm_page_queues[PQ_COUNT];
-extern struct mtx vm_page_queue_free_mtx;
+
+struct vpglocks {
+ struct mtx data;
+ char pad[CACHE_LINE_SIZE - sizeof(struct mtx)];
+} __aligned(CACHE_LINE_SIZE);
+
+extern struct vpglocks vm_page_queue_free_lock;
+
+#define vm_page_queue_free_mtx vm_page_queue_free_lock.data
/*
* These are the flags defined for vm_page.
@@ -258,7 +266,9 @@ PHYS_TO_VM_PAGE(vm_paddr_t pa)
#endif
}
-extern struct mtx vm_page_queue_mtx;
+extern struct vpglocks vm_page_queue_lock;
+
+#define vm_page_queue_mtx vm_page_queue_lock.data
#define vm_page_lock_queues() mtx_lock(&vm_page_queue_mtx)
#define vm_page_unlock_queues() mtx_unlock(&vm_page_queue_mtx)
More information about the svn-src-all
mailing list