diff options
| author | David S. Miller <davem@nuts.davemloft.net> | 2004-02-24 07:29:30 -0800 |
|---|---|---|
| committer | David S. Miller <davem@nuts.davemloft.net> | 2004-02-24 07:29:30 -0800 |
| commit | 9b91e15be1064f3b9b75be8fa44f5fffe0c14c9c (patch) | |
| tree | c52b55e6b2843d93b75b6cf31e07482cf3af7d44 | |
| parent | 61e7d4eb42c5e71e647ac7275f16be56036ad865 (diff) | |
| parent | d6c90be10ece90d36a76975be330f638495c3d36 (diff) | |
Merge bk://bk.phunnypharm.org/sparc-2.6
into nuts.davemloft.net:/disk1/BK/sparc-2.6
| -rw-r--r-- | arch/sparc64/kernel/irq.c | 5 | ||||
| -rw-r--r-- | arch/sparc64/lib/debuglocks.c | 9 | ||||
| -rw-r--r-- | include/asm-sparc64/spinlock.h | 3 |
3 files changed, 11 insertions, 6 deletions
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c index 50cbd964e6c5..48d96659a369 100644 --- a/arch/sparc64/kernel/irq.c +++ b/arch/sparc64/kernel/irq.c @@ -1104,8 +1104,9 @@ void init_irqwork_curcpu(void) { register struct irq_work_struct *workp asm("o2"); unsigned long tmp; + int cpu = hard_smp_processor_id(); - memset(__irq_work + smp_processor_id(), 0, sizeof(*workp)); + memset(__irq_work + cpu, 0, sizeof(*workp)); /* Make sure we are called with PSTATE_IE disabled. */ __asm__ __volatile__("rdpr %%pstate, %0\n\t" @@ -1120,7 +1121,7 @@ void init_irqwork_curcpu(void) } /* Set interrupt globals. */ - workp = &__irq_work[smp_processor_id()]; + workp = &__irq_work[cpu]; __asm__ __volatile__( "rdpr %%pstate, %0\n\t" "wrpr %0, %1, %%pstate\n\t" 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) |
