diff options
| -rw-r--r-- | arch/sparc64/lib/debuglocks.c | 9 | ||||
| -rw-r--r-- | include/asm-sparc64/spinlock.h | 3 |
2 files changed, 8 insertions, 4 deletions
diff --git a/arch/sparc64/lib/debuglocks.c b/arch/sparc64/lib/debuglocks.c index 8a7c0f77ff2e..341cce76b773 100644 --- a/arch/sparc64/lib/debuglocks.c +++ b/arch/sparc64/lib/debuglocks.c @@ -35,14 +35,17 @@ static inline void show_read (char *str, rwlock_t *lock, unsigned long caller) static inline void show_write (char *str, rwlock_t *lock, unsigned long caller) { int cpu = smp_processor_id(); + int i; printk("%s(%p) CPU#%d stuck at %08x\n", str, lock, cpu, (unsigned int) caller); printk("Writer: PC(%08x):CPU(%x)\n", lock->writer_pc, lock->writer_cpu); - printk("Readers: 0[%08x] 1[%08x] 2[%08x] 4[%08x]\n", - lock->reader_pc[0], lock->reader_pc[1], - lock->reader_pc[2], lock->reader_pc[3]); + printk("Readers:"); + for (i = 0; i < NR_CPUS; i++) + if (lock->reader_pc[i]) + printk(" %d[%08x]", i, lock->reader_pc[i]); + printk("\n"); } #undef INIT_STUCK diff --git a/include/asm-sparc64/spinlock.h b/include/asm-sparc64/spinlock.h index 201472fc01bc..8387816e4ac2 100644 --- a/include/asm-sparc64/spinlock.h +++ b/include/asm-sparc64/spinlock.h @@ -7,6 +7,7 @@ #define __SPARC64_SPINLOCK_H #include <linux/config.h> +#include <linux/threads.h> /* For NR_CPUS */ #ifndef __ASSEMBLY__ @@ -131,7 +132,7 @@ extern int __write_trylock(rwlock_t *); typedef struct { unsigned long lock; unsigned int writer_pc, writer_cpu; - unsigned int reader_pc[4]; + unsigned int reader_pc[NR_CPUS]; } rwlock_t; #define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, 0xff, { 0, 0, 0, 0 } } #define rwlock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; } while(0) |
