--- //depot/vendor/freebsd/src/sys/kern/kern_lock.c 2007/11/14 06:27:32 +++ //depot/user/attilio/attilio_schedlock/kern/kern_lock.c 2007/11/16 00:32:42 @@ -60,6 +60,7 @@ #include #endif +static void assert_lockmgr(struct lock_object *lock, int what); #ifdef DDB #include static void db_show_lockmgr(struct lock_object *lock); @@ -70,6 +71,7 @@ struct lock_class lock_class_lockmgr = { .lc_name = "lockmgr", .lc_flags = LC_SLEEPLOCK | LC_SLEEPABLE | LC_RECURSABLE | LC_UPGRADABLE, + .lc_assert = assert_lockmgr, #ifdef DDB .lc_ddb_show = db_show_lockmgr, #endif @@ -83,6 +85,13 @@ */ void +assert_lockmgr(struct lock_object *lock, int what) +{ + + panic("lockmgr locks do not support assertions"); +} + +void lock_lockmgr(struct lock_object *lock, int how) { --- //depot/vendor/freebsd/src/sys/kern/kern_mutex.c 2007/11/14 06:27:32 +++ //depot/user/attilio/attilio_schedlock/kern/kern_mutex.c 2007/11/16 00:32:42 @@ -84,6 +84,7 @@ #define mtx_owner(m) ((struct thread *)((m)->mtx_lock & ~MTX_FLAGMASK)) +static void assert_mtx(struct lock_object *lock, int what); #ifdef DDB static void db_show_mtx(struct lock_object *lock); #endif @@ -98,6 +99,7 @@ struct lock_class lock_class_mtx_sleep = { .lc_name = "sleep mutex", .lc_flags = LC_SLEEPLOCK | LC_RECURSABLE, + .lc_assert = assert_mtx, #ifdef DDB .lc_ddb_show = db_show_mtx, #endif @@ -107,6 +109,7 @@ struct lock_class lock_class_mtx_spin = { .lc_name = "spin mutex", .lc_flags = LC_SPINLOCK | LC_RECURSABLE, + .lc_assert = assert_mtx, #ifdef DDB .lc_ddb_show = db_show_mtx, #endif @@ -135,6 +138,13 @@ #endif void +assert_mtx(struct lock_object *lock, int what) +{ + + mtx_assert((struct mtx *)lock, what); +} + +void lock_mtx(struct lock_object *lock, int how) { --- //depot/vendor/freebsd/src/sys/kern/kern_rmlock.c 2007/11/10 15:11:47 +++ //depot/user/attilio/attilio_schedlock/kern/kern_rmlock.c 2007/11/16 00:32:42 @@ -71,12 +71,14 @@ __asm __volatile("":::"memory"); } +static void assert_rm(struct lock_object *lock, int what); static void lock_rm(struct lock_object *lock, int how); static int unlock_rm(struct lock_object *lock); struct lock_class lock_class_rm = { .lc_name = "rm", .lc_flags = LC_SLEEPLOCK | LC_RECURSABLE, + .lc_assert = assert_rm, #if 0 #ifdef DDB .lc_ddb_show = db_show_rwlock, @@ -87,6 +89,13 @@ }; static void +assert_rm(struct lock_object *lock, int what) +{ + + panic("assert_rm called"); +} + +static void lock_rm(struct lock_object *lock, int how) { panic("lock_rm called"); } --- //depot/vendor/freebsd/src/sys/kern/kern_rwlock.c 2007/11/14 21:26:00 +++ //depot/user/attilio/attilio_schedlock/kern/kern_rwlock.c 2007/11/16 00:39:48 @@ -59,12 +59,14 @@ static void db_show_rwlock(struct lock_object *lock); #endif +static void assert_rw(struct lock_object *lock, int what); static void lock_rw(struct lock_object *lock, int how); static int unlock_rw(struct lock_object *lock); struct lock_class lock_class_rw = { .lc_name = "rw", .lc_flags = LC_SLEEPLOCK | LC_RECURSABLE | LC_UPGRADABLE, + .lc_assert = assert_rw, #ifdef DDB .lc_ddb_show = db_show_rwlock, #endif @@ -103,6 +105,13 @@ #endif void +assert_rw(struct lock_object *lock, int what) +{ + + rw_assert((struct rwlock *)lock, what); +} + +void lock_rw(struct lock_object *lock, int how) { struct rwlock *rw; --- //depot/vendor/freebsd/src/sys/kern/kern_sx.c 2007/11/14 06:27:32 +++ //depot/user/attilio/attilio_schedlock/kern/kern_sx.c 2007/11/16 00:32:42 @@ -103,6 +103,7 @@ */ #define sx_recursed(sx) ((sx)->sx_recurse != 0) +static void assert_sx(struct lock_object *lock, int what); #ifdef DDB static void db_show_sx(struct lock_object *lock); #endif @@ -112,6 +113,7 @@ struct lock_class lock_class_sx = { .lc_name = "sx", .lc_flags = LC_SLEEPLOCK | LC_SLEEPABLE | LC_RECURSABLE | LC_UPGRADABLE, + .lc_assert = assert_sx, #ifdef DDB .lc_ddb_show = db_show_sx, #endif @@ -124,6 +126,13 @@ #endif void +assert_sx(struct lock_object *lock, int what) +{ + + sx_assert((struct sx *)lock, what); +} + +void lock_sx(struct lock_object *lock, int how) { struct sx *sx; --- //depot/vendor/freebsd/src/sys/sys/lock.h 2007/11/08 14:51:14 +++ //depot/user/attilio/attilio_schedlock/sys/lock.h 2007/11/16 00:32:42 @@ -57,6 +57,7 @@ struct lock_class { const char *lc_name; u_int lc_flags; + void (*lc_assert)(struct lock_object *lock, int what); void (*lc_ddb_show)(struct lock_object *lock); void (*lc_lock)(struct lock_object *lock, int how); int (*lc_unlock)(struct lock_object *lock);