TESTED: With MACH_LOCK_MON set to 1 in configfrag.ac
---
kern/lock.h | 22 +++++++++++++---------
kern/lock_mon.c | 22 +++++++++-------------
2 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/kern/lock.h b/kern/lock.h
index 74f2e26e..226735f3 100644
--- a/kern/lock.h
+++ b/kern/lock.h
@@ -59,12 +59,25 @@
*/
#include <machine/lock.h>/*XXX*/
+
+/*
+ * A simple spin lock.
+ */
+
+struct slock {
+ volatile natural_t lock_data; /* in general 1 bit is sufficient */
+ struct {} is_a_simple_lock;
+};
+
#if NCPUS > 1
#if MACH_LOCK_MON == 0
#define simple_lock_nocheck _simple_lock
#define simple_lock_try_nocheck _simple_lock_try
#define simple_unlock_nocheck _simple_unlock
#else
+extern void simple_lock(struct slock *l);
+extern int simple_lock_try(struct slock *l);
+extern void simple_unlock(struct slock *l);
#define simple_lock_nocheck simple_lock
#define simple_lock_try_nocheck simple_lock_try
#define simple_unlock_nocheck simple_unlock
@@ -73,15 +86,6 @@
#define MACH_SLOCKS ((NCPUS > 1) || MACH_LDEBUG)
-/*
- * A simple spin lock.
- */
-
-struct slock {
- volatile natural_t lock_data; /* in general 1 bit is sufficient */
- struct {} is_a_simple_lock;
-};
-
/*
* Used by macros to assert that the given argument is a simple
* lock.
diff --git a/kern/lock_mon.c b/kern/lock_mon.c
index edc8ae55..e4a933b9 100644
--- a/kern/lock_mon.c
+++ b/kern/lock_mon.c
@@ -60,11 +60,11 @@ typedef unsigned int time_stamp_t;
/* in milliseconds */
#define time_stamp (elapsed_ticks * 1000 / hz)
-#define LOCK_INFO_MAX (1024*32)
-#define LOCK_INFO_HASH_COUNT 1024
-#define LOCK_INFO_PER_BUCKET (LOCK_INFO_MAX/LOCK_INFO_HASH_COUNT)
-
-#define HASH_LOCK(lock) ((long)lock>>5 & (LOCK_INFO_HASH_COUNT-1))
+#define LOCK_INFO_HASH_COUNT 1024
+#define LOCK_INFO_BUCKET_BITS 5
+#define LOCK_INFO_PER_BUCKET (1 << LOCK_INFO_BUCKET_BITS)
+#define LOCK_INFO_MAX (LOCK_INFO_HASH_COUNT << LOCK_INFO_BUCKET_BITS)
+#define HASH_LOCK(lock) (((long)lock >> LOCK_INFO_BUCKET_BITS)
& (LOCK_INFO_HASH_COUNT-1))
struct lock_info {
unsigned int success;
@@ -91,8 +91,7 @@ extern spl_t curr_ipl[];
struct lock_info *
-locate_lock_info(lock)
-decl_simple_lock_data(, **lock)
+locate_lock_info(struct slock **lock)
{
struct lock_info *li = &(lock_info[HASH_LOCK(*lock)].info[0]);
int i;
@@ -112,8 +111,7 @@ decl_simple_lock_data(, **lock)
}
-void simple_lock(lock)
-decl_simple_lock_data(, *lock)
+void simple_lock(struct slock *lock)
{
struct lock_info *li = locate_lock_info(&lock);
int my_cpu = cpu_number();
@@ -131,8 +129,7 @@ decl_simple_lock_data(, *lock)
li->time = time_stamp - li->time;
}
-int simple_lock_try(lock)
-decl_simple_lock_data(, *lock)
+int simple_lock_try(struct slock *lock)
{
struct lock_info *li = locate_lock_info(&lock);
int my_cpu = cpu_number();
@@ -151,8 +148,7 @@ decl_simple_lock_data(, *lock)
}
}
-void simple_unlock(lock)
-decl_simple_lock_data(, *lock)
+void simple_unlock(struct slock *lock)
{
time_stamp_t stamp = time_stamp;
time_stamp_t *time = &locate_lock_info(&lock)->time;
--
2.51.0