Module Name:    src
Committed By:   cherry
Date:           Sat Aug 13 11:41:57 UTC 2011

Modified Files:
        src/sys/arch/xen/include: xenpmap.h
        src/sys/arch/xen/x86: x86_xpmap.c

Log Message:
remove unnecessary locking overhead for UP


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/xen/include/xenpmap.h
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/xen/x86/x86_xpmap.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/xen/include/xenpmap.h
diff -u src/sys/arch/xen/include/xenpmap.h:1.28 src/sys/arch/xen/include/xenpmap.h:1.29
--- src/sys/arch/xen/include/xenpmap.h:1.28	Wed Aug 10 09:50:37 2011
+++ src/sys/arch/xen/include/xenpmap.h	Sat Aug 13 11:41:57 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: xenpmap.h,v 1.28 2011/08/10 09:50:37 cherry Exp $	*/
+/*	$NetBSD: xenpmap.h,v 1.29 2011/08/13 11:41:57 cherry Exp $	*/
 
 /*
  *
@@ -36,8 +36,16 @@
 
 #define	INVALID_P2M_ENTRY	(~0UL)
 
+#ifdef MULTIPROCESSOR
 void xpq_queue_lock(void);
 void xpq_queue_unlock(void);
+bool xpq_queue_locked(void);
+#else /* MULTIPROCESSOR */
+#define xpq_queue_lock() do {} while(0) /* nothing */
+#define xpq_queue_unlock() do {} while(0) /* nothing */
+#define xpq_queue_locked() (true) /* Always true for UP */
+#endif /* MULTIPROCESSOR */
+
 void xpq_queue_machphys_update(paddr_t, paddr_t);
 void xpq_queue_invlpg(vaddr_t);
 void xpq_queue_pte_update(paddr_t, pt_entry_t);

Index: src/sys/arch/xen/x86/x86_xpmap.c
diff -u src/sys/arch/xen/x86/x86_xpmap.c:1.29 src/sys/arch/xen/x86/x86_xpmap.c:1.30
--- src/sys/arch/xen/x86/x86_xpmap.c:1.29	Wed Aug 10 09:50:37 2011
+++ src/sys/arch/xen/x86/x86_xpmap.c	Sat Aug 13 11:41:57 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: x86_xpmap.c,v 1.29 2011/08/10 09:50:37 cherry Exp $	*/
+/*	$NetBSD: x86_xpmap.c,v 1.30 2011/08/13 11:41:57 cherry Exp $	*/
 
 /*
  * Copyright (c) 2006 Mathieu Ropert <[email protected]>
@@ -69,7 +69,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: x86_xpmap.c,v 1.29 2011/08/10 09:50:37 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: x86_xpmap.c,v 1.30 2011/08/13 11:41:57 cherry Exp $");
 
 #include "opt_xen.h"
 #include "opt_ddb.h"
@@ -166,6 +166,8 @@
 #define XPQUEUE_SIZE 2048
 static mmu_update_t xpq_queue[XPQUEUE_SIZE];
 static int xpq_idx = 0;
+
+#ifdef MULTIPROCESSOR
 static struct simplelock xpq_lock = SIMPLELOCK_INITIALIZER;
 
 void
@@ -180,13 +182,20 @@
 	simple_unlock(&xpq_lock);
 }
 
+bool
+xpq_queue_locked(void)
+{
+	return xpq_queue_locked();
+}
+#endif /* MULTIPROCESSOR */
+
 /* Must be called with xpq_lock held */
 void
 xpq_flush_queue(void)
 {
 	int i, ok, ret;
 
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	XENPRINTK2(("flush queue %p entries %d\n", xpq_queue, xpq_idx));
 	for (i = 0; i < xpq_idx; i++)
 		XENPRINTK2(("%d: 0x%08" PRIx64 " 0x%08" PRIx64 "\n", i,
@@ -210,7 +219,7 @@
 xpq_increment_idx(void)
 {
 
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_idx++;
 	if (__predict_false(xpq_idx == XPQUEUE_SIZE))
 		xpq_flush_queue();
@@ -221,7 +230,7 @@
 {
 	XENPRINTK2(("xpq_queue_machphys_update ma=0x%" PRIx64 " pa=0x%" PRIx64
 	    "\n", (int64_t)ma, (int64_t)pa));
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_queue[xpq_idx].ptr = ma | MMU_MACHPHYS_UPDATE;
 	xpq_queue[xpq_idx].val = (pa - XPMAP_OFFSET) >> PAGE_SHIFT;
 	xpq_increment_idx();
@@ -235,7 +244,7 @@
 {
 
 	KASSERT((ptr & 3) == 0);
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_queue[xpq_idx].ptr = (paddr_t)ptr | MMU_NORMAL_PT_UPDATE;
 	xpq_queue[xpq_idx].val = val;
 	xpq_increment_idx();
@@ -248,7 +257,7 @@
 xpq_queue_pt_switch(paddr_t pa)
 {
 	struct mmuext_op op;
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	XENPRINTK2(("xpq_queue_pt_switch: 0x%" PRIx64 " 0x%" PRIx64 "\n",
@@ -264,7 +273,7 @@
 {
 	struct mmuext_op op;
 
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	XENPRINTK2(("xpq_queue_pin_l%d_table: %#" PRIxPADDR "\n",
@@ -282,7 +291,7 @@
 {
 	struct mmuext_op op;
 
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	XENPRINTK2(("xpq_queue_unpin_table: %#" PRIxPADDR "\n", pa));
@@ -297,7 +306,7 @@
 {
 	struct mmuext_op op;
 
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	XENPRINTK2(("xpq_queue_set_ldt\n"));
@@ -314,7 +323,7 @@
 {
 	struct mmuext_op op;
 
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	XENPRINTK2(("xpq_queue_tlb_flush\n"));
@@ -345,7 +354,7 @@
 xpq_queue_invlpg(vaddr_t va)
 {
 	struct mmuext_op op;
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	XENPRINTK2(("xpq_queue_invlpg %#" PRIxVADDR "\n", va));
@@ -360,7 +369,7 @@
 {
 	mmuext_op_t op;
 
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 
 	/* Flush pending page updates */
 	xpq_flush_queue();
@@ -382,7 +391,7 @@
 	mmuext_op_t op;
 
 	/* Flush pending page updates */
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	op.cmd = MMUEXT_INVLPG_ALL;
@@ -402,7 +411,7 @@
 	mmuext_op_t op;
 
 	/* Flush pending page updates */
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	op.cmd = MMUEXT_TLB_FLUSH_MULTI;
@@ -422,7 +431,7 @@
 	mmuext_op_t op;
 
 	/* Flush pending page updates */
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	op.cmd = MMUEXT_TLB_FLUSH_ALL;
@@ -441,7 +450,7 @@
 	KASSERT(eva > sva);
 
 	/* Flush pending page updates */
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	/* Align to nearest page boundary */
@@ -462,7 +471,7 @@
 	KASSERT(eva > sva);
 
 	/* Flush pending page updates */
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	/* Align to nearest page boundary */
@@ -482,7 +491,7 @@
 	mmu_update_t op;
 	int ok;
 
-	KASSERT(simple_lock_held(&xpq_lock));
+	KASSERT(xpq_queue_locked());
 	xpq_flush_queue();
 
 	op.ptr = ptr;

Reply via email to