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 | ||