diff options
| -rw-r--r-- | arch/sparc64/kernel/rtrap.S | 13 | ||||
| -rw-r--r-- | arch/sparc64/kernel/setup.c | 12 | ||||
| -rw-r--r-- | include/asm-sparc64/cpudata.h | 4 | ||||
| -rw-r--r-- | include/asm-sparc64/hardirq.h | 16 |
4 files changed, 15 insertions, 30 deletions
diff --git a/arch/sparc64/kernel/rtrap.S b/arch/sparc64/kernel/rtrap.S index 0696ed4b9d64..fafd227735fa 100644 --- a/arch/sparc64/kernel/rtrap.S +++ b/arch/sparc64/kernel/rtrap.S | |||
| @@ -153,11 +153,14 @@ __handle_signal: | |||
| 153 | rtrap_irq: | 153 | rtrap_irq: |
| 154 | rtrap_clr_l6: clr %l6 | 154 | rtrap_clr_l6: clr %l6 |
| 155 | rtrap: | 155 | rtrap: |
| 156 | ldub [%g6 + TI_CPU], %l0 | 156 | #ifndef CONFIG_SMP |
| 157 | sethi %hi(irq_stat), %l2 ! &softirq_active | 157 | sethi %hi(per_cpu____cpu_data), %l0 |
| 158 | or %l2, %lo(irq_stat), %l2 ! &softirq_active | 158 | lduw [%l0 + %lo(per_cpu____cpu_data)], %l1 |
| 159 | irqsz_patchme: sllx %l0, 0, %l0 | 159 | #else |
| 160 | lduw [%l2 + %l0], %l1 ! softirq_pending | 160 | sethi %hi(per_cpu____cpu_data), %l0 |
| 161 | or %l0, %lo(per_cpu____cpu_data), %l0 | ||
| 162 | lduw [%l0 + %g5], %l1 | ||
| 163 | #endif | ||
| 161 | cmp %l1, 0 | 164 | cmp %l1, 0 |
| 162 | 165 | ||
| 163 | /* mm/ultra.S:xcall_report_regs KNOWS about this load. */ | 166 | /* mm/ultra.S:xcall_report_regs KNOWS about this load. */ |
diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c index fbdfed3798d8..ddbed3341a23 100644 --- a/arch/sparc64/kernel/setup.c +++ b/arch/sparc64/kernel/setup.c | |||
| @@ -511,18 +511,6 @@ void __init setup_arch(char **cmdline_p) | |||
| 511 | conswitchp = &prom_con; | 511 | conswitchp = &prom_con; |
| 512 | #endif | 512 | #endif |
| 513 | 513 | ||
| 514 | #ifdef CONFIG_SMP | ||
| 515 | i = (unsigned long)&irq_stat[1] - (unsigned long)&irq_stat[0]; | ||
| 516 | if ((i == SMP_CACHE_BYTES) || (i == (2 * SMP_CACHE_BYTES))) { | ||
| 517 | extern unsigned int irqsz_patchme[1]; | ||
| 518 | irqsz_patchme[0] |= ((i == SMP_CACHE_BYTES) ? SMP_CACHE_BYTES_SHIFT : \ | ||
| 519 | SMP_CACHE_BYTES_SHIFT + 1); | ||
| 520 | flushi((long)&irqsz_patchme[0]); | ||
| 521 | } else { | ||
| 522 | prom_printf("Unexpected size of irq_stat[] elements\n"); | ||
| 523 | prom_halt(); | ||
| 524 | } | ||
| 525 | #endif | ||
| 526 | /* Work out if we are starfire early on */ | 514 | /* Work out if we are starfire early on */ |
| 527 | check_if_starfire(); | 515 | check_if_starfire(); |
| 528 | 516 | ||
diff --git a/include/asm-sparc64/cpudata.h b/include/asm-sparc64/cpudata.h index cc7198aaac50..9a3a81f1cc58 100644 --- a/include/asm-sparc64/cpudata.h +++ b/include/asm-sparc64/cpudata.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* cpudata.h: Per-cpu parameters. | 1 | /* cpudata.h: Per-cpu parameters. |
| 2 | * | 2 | * |
| 3 | * Copyright (C) 2003 David S. Miller (davem@redhat.com) | 3 | * Copyright (C) 2003, 2005 David S. Miller (davem@redhat.com) |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | #ifndef _SPARC64_CPUDATA_H | 6 | #ifndef _SPARC64_CPUDATA_H |
| @@ -10,7 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | typedef struct { | 11 | typedef struct { |
| 12 | /* Dcache line 1 */ | 12 | /* Dcache line 1 */ |
| 13 | unsigned int __pad0; /* bh_count moved to irq_stat for consistency. KAO */ | 13 | unsigned int __softirq_pending; /* must be 1st, see rtrap.S */ |
| 14 | unsigned int multiplier; | 14 | unsigned int multiplier; |
| 15 | unsigned int counter; | 15 | unsigned int counter; |
| 16 | unsigned int idle_volume; | 16 | unsigned int idle_volume; |
diff --git a/include/asm-sparc64/hardirq.h b/include/asm-sparc64/hardirq.h index d6db1aed7645..f0cf71376ec5 100644 --- a/include/asm-sparc64/hardirq.h +++ b/include/asm-sparc64/hardirq.h | |||
| @@ -1,22 +1,16 @@ | |||
| 1 | /* hardirq.h: 64-bit Sparc hard IRQ support. | 1 | /* hardirq.h: 64-bit Sparc hard IRQ support. |
| 2 | * | 2 | * |
| 3 | * Copyright (C) 1997, 1998 David S. Miller (davem@caip.rutgers.edu) | 3 | * Copyright (C) 1997, 1998, 2005 David S. Miller (davem@davemloft.net) |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | #ifndef __SPARC64_HARDIRQ_H | 6 | #ifndef __SPARC64_HARDIRQ_H |
| 7 | #define __SPARC64_HARDIRQ_H | 7 | #define __SPARC64_HARDIRQ_H |
| 8 | 8 | ||
| 9 | #include <linux/config.h> | 9 | #include <asm/cpudata.h> |
| 10 | #include <linux/threads.h> | ||
| 11 | #include <linux/spinlock.h> | ||
| 12 | #include <linux/cache.h> | ||
| 13 | 10 | ||
| 14 | /* rtrap.S is sensitive to the offsets of these fields */ | 11 | #define __ARCH_IRQ_STAT |
| 15 | typedef struct { | 12 | #define local_softirq_pending() \ |
| 16 | unsigned int __softirq_pending; | 13 | (local_cpu_data().__softirq_pending) |
| 17 | } ____cacheline_aligned irq_cpustat_t; | ||
| 18 | |||
| 19 | #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ | ||
| 20 | 14 | ||
| 21 | #define HARDIRQ_BITS 8 | 15 | #define HARDIRQ_BITS 8 |
| 22 | 16 | ||
