From 8b4f43c443a8494ee2460d183bd91a983a98c556 Mon Sep 17 00:00:00 2001 From: yamt Date: Wed, 4 Aug 2004 01:16:06 +0000 Subject: [PATCH] - revert a part of the previous which breaks LK_SPIN locks. (reported by Nicolas Joly on current-users@) - propagate the previous to spinlock_acquire_count. --- sys/kern/kern_lock.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c index 8b27bc80e560..a2ec3ebb1ee7 100644 --- a/sys/kern/kern_lock.c +++ b/sys/kern/kern_lock.c @@ -1,4 +1,4 @@ -/* $NetBSD: kern_lock.c,v 1.81 2004/08/03 12:08:51 yamt Exp $ */ +/* $NetBSD: kern_lock.c,v 1.82 2004/08/04 01:16:06 yamt Exp $ */ /*- * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc. @@ -76,7 +76,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: kern_lock.c,v 1.81 2004/08/03 12:08:51 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_lock.c,v 1.82 2004/08/04 01:16:06 yamt Exp $"); #include "opt_multiprocessor.h" #include "opt_lockdebug.h" @@ -776,7 +776,8 @@ lockmgr(__volatile struct lock *lkp, u_int flags, /* * Try to acquire the want_exclusive flag. */ - error = acquire(&lkp, &s, extflags, 0, LK_WANT_EXCL); + error = acquire(&lkp, &s, extflags, 0, + LK_HAVE_EXCL | LK_WANT_EXCL); if (error) break; lkp->lk_flags |= LK_WANT_EXCL; @@ -993,7 +994,7 @@ spinlock_acquire_count(__volatile struct lock *lkp, int count) * Wait for shared locks and upgrades to finish. */ error = acquire(&lkp, &s, LK_SPIN, 0, - LK_SHARE_NONZERO | LK_WANT_UPGRADE); + LK_HAVE_EXCL | LK_SHARE_NONZERO | LK_WANT_UPGRADE); lkp->lk_flags &= ~LK_WANT_EXCL; lkp->lk_flags |= LK_HAVE_EXCL; SETHOLDER(lkp, LK_NOPROC, 0, cpu_id);