Messages in this thread Patch in this message | | | Date | Wed, 10 Jul 2002 18:10:36 -0700 | From | Jesse Barnes <> | Subject | Re: spinlock assertion macros |
| |
On Wed, Jul 10, 2002 at 06:54:24PM -0600, Andreas Dilger wrote: > You can use CPP to add in the lock name like: > > #define spin_assert_locked(lock) if (!spin_is_locked(lock)) \ > printk("lock assertion error: %s:%d: " #lock \ > " should be locked!\n", __FILE__, __LINE__) > > #define spin_assert_unlocked(lock) if (!spin_is_locked(lock)) \ > printk("lock assertion error: %s:%d: " #lock \ > " should be unlocked!\n", __FILE__, __LINE__)
Oh yeah, I should have done that the first time. How does this look?
Thanks, Jesse
diff -Naur -X /home/jbarnes/dontdiff linux-2.5.25/fs/inode.c linux-2.5.25-spinassert/fs/inode.c --- linux-2.5.25/fs/inode.c Fri Jul 5 16:42:38 2002 +++ linux-2.5.25-spinassert/fs/inode.c Wed Jul 10 16:30:18 2002 @@ -183,6 +183,8 @@ */ void __iget(struct inode * inode) { + spin_assert_locked(&inode_lock); + if (atomic_read(&inode->i_count)) { atomic_inc(&inode->i_count); return; diff -Naur -X /home/jbarnes/dontdiff linux-2.5.25/include/linux/spinlock.h linux-2.5.25-spinassert/include/linux/spinlock.h --- linux-2.5.25/include/linux/spinlock.h Fri Jul 5 16:42:24 2002 +++ linux-2.5.25-spinassert/include/linux/spinlock.h Wed Jul 10 18:05:13 2002 @@ -118,6 +118,22 @@ #endif /* !SMP */ +/* + * Simple lock assertions for debugging and documenting where locks need + * to be locked/unlocked. + */ +#if defined(CONFIG_DEBUG_SPINLOCK) && defined(SMP) +#define spin_assert_locked(lock) if (!spin_is_locked(lock)) { \ + printk("lock assertion failure: %s:%d lock " #lock \ + "should be locked!\n", __FILE__, __LINE__); } +#define spin_assert_unlocked(lock) if (spin_is_locked(lock)) { \ + printk("lock assertion failure: %s:%d lock " #lock \ + "should be unlocked!\n", __FILE__, __LINE__); } +#else +#define spin_assert_locked(lock) do { } while(0) +#define spin_assert_unlocked(lock) do { } while(0) +#endif /* CONFIG_DEBUG_SPINLOCK && SMP */ + #ifdef CONFIG_PREEMPT asmlinkage void preempt_schedule(void); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |