PERFORCE change 120075 for review
John Baldwin
jhb at FreeBSD.org
Sat May 19 20:37:32 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=120075
Change 120075 by jhb at jhb_mutex on 2007/05/19 20:36:47
IFC @120073
Affected files ...
.. //depot/projects/smpng/sys/arm/include/asm.h#6 integrate
.. //depot/projects/smpng/sys/arm/include/profile.h#7 integrate
.. //depot/projects/smpng/sys/ia64/ia64/pmap.c#85 integrate
.. //depot/projects/smpng/sys/kern/kern_sx.c#49 integrate
.. //depot/projects/smpng/sys/sys/sx.h#28 integrate
Differences ...
==== //depot/projects/smpng/sys/arm/include/asm.h#6 (text+ko) ====
@@ -33,7 +33,7 @@
*
* from: @(#)asm.h 5.5 (Berkeley) 5/7/91
*
- * $FreeBSD: src/sys/arm/include/asm.h,v 1.5 2006/08/30 11:45:07 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/asm.h,v 1.6 2007/05/19 16:20:37 cognet Exp $
*/
#ifndef _MACHINE_ASM_H_
@@ -80,7 +80,7 @@
#ifdef GPROF
# define _PROF_PROLOGUE \
- mov ip, lr; bl _mcount
+ mov ip, lr; bl __mcount
#else
# define _PROF_PROLOGUE
#endif
==== //depot/projects/smpng/sys/arm/include/profile.h#7 (text+ko) ====
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)profile.h 8.1 (Berkeley) 6/11/93
- * $FreeBSD: src/sys/arm/include/profile.h,v 1.6 2005/01/05 21:58:48 imp Exp $
+ * $FreeBSD: src/sys/arm/include/profile.h,v 1.7 2007/05/19 16:20:37 cognet Exp $
*/
#ifndef _MACHINE_PROFILE_H_
@@ -61,9 +61,9 @@
#define MCOUNT \
__asm__(".text"); \
__asm__(".align 0"); \
- __asm__(".type _mcount ,%function"); \
- __asm__(".global _mcount"); \
- __asm__("_mcount:"); \
+ __asm__(".type __mcount ,%function"); \
+ __asm__(".global __mcount"); \
+ __asm__("__mcount:"); \
/* \
* Preserve registers that are trashed during mcount \
*/ \
==== //depot/projects/smpng/sys/ia64/ia64/pmap.c#85 (text+ko) ====
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ia64/ia64/pmap.c,v 1.184 2007/05/19 13:11:27 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/ia64/ia64/pmap.c,v 1.185 2007/05/19 18:25:14 marcel Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -1420,14 +1420,14 @@
pmap_remove_pte(pmap, pte, va, pv, 1);
}
}
-
} else {
- for (va = sva; va < eva; va = va += PAGE_SIZE) {
+ for (va = sva; va < eva; va += PAGE_SIZE) {
pte = pmap_find_vhpt(va);
if (pte != NULL)
pmap_remove_pte(pmap, pte, va, 0, 1);
}
}
+
out:
vm_page_unlock_queues();
pmap_install(oldpmap);
==== //depot/projects/smpng/sys/kern/kern_sx.c#49 (text+ko) ====
@@ -40,7 +40,7 @@
#include "opt_ddb.h"
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_sx.c,v 1.46 2007/05/18 15:05:41 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_sx.c,v 1.49 2007/05/19 20:18:12 jhb Exp $");
#include <sys/param.h>
#include <sys/ktr.h>
@@ -101,14 +101,6 @@
*/
#define sx_recursed(sx) ((sx)->sx_recurse != 0)
-/*
- * Return a pointer to the owning thread if the lock is exclusively
- * locked.
- */
-#define sx_xholder(sx) \
- ((sx)->sx_lock & SX_LOCK_SHARED ? NULL : \
- (struct thread *)SX_OWNER((sx)->sx_lock))
-
#ifdef DDB
static void db_show_sx(struct lock_object *lock);
#endif
@@ -170,6 +162,9 @@
{
int flags;
+ MPASS((opts & ~(SX_QUIET | SX_RECURSE | SX_NOWITNESS | SX_DUPOK |
+ SX_NOPROFILE | SX_ADAPTIVESPIN)) == 0);
+
flags = LO_SLEEPABLE | LO_UPGRADABLE | LO_RECURSABLE;
if (opts & SX_DUPOK)
flags |= LO_DUPOK;
@@ -180,7 +175,7 @@
if (opts & SX_QUIET)
flags |= LO_QUIET;
- flags |= opts & SX_ADAPTIVESPIN;
+ flags |= opts & (SX_ADAPTIVESPIN | SX_RECURSE);
sx->sx_lock = SX_LOCK_UNLOCKED;
sx->sx_recurse = 0;
lock_init(&sx->lock_object, &lock_class_sx, description, NULL, flags);
@@ -254,7 +249,7 @@
KASSERT(sx->sx_lock != SX_LOCK_DESTROYED,
("sx_try_xlock() of destroyed sx @ %s:%d", file, line));
- if (sx_xlocked(sx)) {
+ if (sx_xlocked(sx) && (sx->lock_object.lo_flags & SX_RECURSE) != 0) {
sx->sx_recurse++;
atomic_set_ptr(&sx->sx_lock, SX_LOCK_RECURSED);
rval = 1;
@@ -412,6 +407,9 @@
/* If we already hold an exclusive lock, then recurse. */
if (sx_xlocked(sx)) {
+ KASSERT((sx->lock_object.lo_flags & SX_RECURSE) != 0,
+ ("_sx_xlock_hard: recursed on non-recursive sx %s @ %s:%d\n",
+ sx->lock_object.lo_name, file, line));
sx->sx_recurse++;
atomic_set_ptr(&sx->sx_lock, SX_LOCK_RECURSED);
if (LOCK_LOG_TEST(&sx->lock_object, 0))
==== //depot/projects/smpng/sys/sys/sx.h#28 (text+ko) ====
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
- * $FreeBSD: src/sys/sys/sx.h,v 1.31 2007/05/08 21:51:37 jhb Exp $
+ * $FreeBSD: src/sys/sys/sx.h,v 1.33 2007/05/19 20:18:12 jhb Exp $
*/
#ifndef _SYS_SX_H_
@@ -213,6 +213,14 @@
#define sx_try_upgrade(sx) _sx_try_upgrade((sx), LOCK_FILE, LOCK_LINE)
#define sx_downgrade(sx) _sx_downgrade((sx), LOCK_FILE, LOCK_LINE)
+/*
+ * Return a pointer to the owning thread if the lock is exclusively
+ * locked.
+ */
+#define sx_xholder(sx) \
+ ((sx)->sx_lock & SX_LOCK_SHARED ? NULL : \
+ (struct thread *)SX_OWNER((sx)->sx_lock))
+
#define sx_xlocked(sx) \
(((sx)->sx_lock & ~(SX_LOCK_FLAGMASK & ~SX_LOCK_SHARED)) == \
(uintptr_t)curthread)
@@ -235,6 +243,7 @@
#define SX_NOWITNESS 0x04
#define SX_QUIET 0x08
#define SX_ADAPTIVESPIN 0x10
+#define SX_RECURSE 0x20
/*
* XXX: These options should be renamed as SA_*
More information about the p4-projects
mailing list