From owner-p4-projects@FreeBSD.ORG Sat May 19 20:37:32 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 3BB9316A46B; Sat, 19 May 2007 20:37:32 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DAC4A16A468 for ; Sat, 19 May 2007 20:37:31 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id CA43113C45B for ; Sat, 19 May 2007 20:37:31 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l4JKbVr5051533 for ; Sat, 19 May 2007 20:37:31 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l4JKbVKd051524 for perforce@freebsd.org; Sat, 19 May 2007 20:37:31 GMT (envelope-from jhb@freebsd.org) Date: Sat, 19 May 2007 20:37:31 GMT Message-Id: <200705192037.l4JKbVKd051524@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Cc: Subject: PERFORCE change 120075 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 May 2007 20:37:32 -0000 http://perforce.freebsd.org/chv.cgi?CH=120075 Change 120075 by jhb@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 -__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 #include @@ -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 -__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 #include @@ -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_*