diff options
Diffstat (limited to 'arch/ia64/kernel')
-rw-r--r-- | arch/ia64/kernel/efi.c | 5 | ||||
-rw-r--r-- | arch/ia64/kernel/head.S | 9 | ||||
-rw-r--r-- | arch/ia64/kernel/module.c | 9 | ||||
-rw-r--r-- | arch/ia64/kernel/setup.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/smp.c | 8 | ||||
-rw-r--r-- | arch/ia64/kernel/smpboot.c | 5 | ||||
-rw-r--r-- | arch/ia64/kernel/vmlinux.lds.S | 8 |
7 files changed, 21 insertions, 25 deletions
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index d45f215bc8fc..51b75cea7018 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
@@ -1232,9 +1232,10 @@ efi_initialize_iomem_resources(struct resource *code_resource, | |||
1232 | if (md->attribute & EFI_MEMORY_WP) { | 1232 | if (md->attribute & EFI_MEMORY_WP) { |
1233 | name = "System ROM"; | 1233 | name = "System ROM"; |
1234 | flags |= IORESOURCE_READONLY; | 1234 | flags |= IORESOURCE_READONLY; |
1235 | } else { | 1235 | } else if (md->attribute == EFI_MEMORY_UC) |
1236 | name = "Uncached RAM"; | ||
1237 | else | ||
1236 | name = "System RAM"; | 1238 | name = "System RAM"; |
1237 | } | ||
1238 | break; | 1239 | break; |
1239 | 1240 | ||
1240 | case EFI_ACPI_MEMORY_NVS: | 1241 | case EFI_ACPI_MEMORY_NVS: |
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index 8bdea8eb62e3..66e491d8baac 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
@@ -367,16 +367,17 @@ start_ap: | |||
367 | ;; | 367 | ;; |
368 | #else | 368 | #else |
369 | (isAP) br.few 2f | 369 | (isAP) br.few 2f |
370 | mov r20=r19 | 370 | movl r20=__cpu0_per_cpu |
371 | sub r19=r19,r18 | ||
372 | ;; | 371 | ;; |
373 | shr.u r18=r18,3 | 372 | shr.u r18=r18,3 |
374 | 1: | 373 | 1: |
375 | ld8 r21=[r20],8;; | 374 | ld8 r21=[r19],8;; |
376 | st8[r19]=r21,8 | 375 | st8[r20]=r21,8 |
377 | adds r18=-1,r18;; | 376 | adds r18=-1,r18;; |
378 | cmp4.lt p7,p6=0,r18 | 377 | cmp4.lt p7,p6=0,r18 |
379 | (p7) br.cond.dptk.few 1b | 378 | (p7) br.cond.dptk.few 1b |
379 | mov r19=r20 | ||
380 | ;; | ||
380 | 2: | 381 | 2: |
381 | #endif | 382 | #endif |
382 | tpa r19=r19 | 383 | tpa r19=r19 |
diff --git a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c index 29aad349e0c4..aaa7d901521f 100644 --- a/arch/ia64/kernel/module.c +++ b/arch/ia64/kernel/module.c | |||
@@ -135,15 +135,6 @@ static const char *reloc_name[256] = { | |||
135 | 135 | ||
136 | #undef N | 136 | #undef N |
137 | 137 | ||
138 | struct got_entry { | ||
139 | uint64_t val; | ||
140 | }; | ||
141 | |||
142 | struct fdesc { | ||
143 | uint64_t ip; | ||
144 | uint64_t gp; | ||
145 | }; | ||
146 | |||
147 | /* Opaque struct for insns, to protect against derefs. */ | 138 | /* Opaque struct for insns, to protect against derefs. */ |
148 | struct insn; | 139 | struct insn; |
149 | 140 | ||
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index c27d5b2c182b..de636b215677 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -616,7 +616,9 @@ setup_arch (char **cmdline_p) | |||
616 | ia64_mca_init(); | 616 | ia64_mca_init(); |
617 | 617 | ||
618 | platform_setup(cmdline_p); | 618 | platform_setup(cmdline_p); |
619 | #ifndef CONFIG_IA64_HP_SIM | ||
619 | check_sal_cache_flush(); | 620 | check_sal_cache_flush(); |
621 | #endif | ||
620 | paging_init(); | 622 | paging_init(); |
621 | } | 623 | } |
622 | 624 | ||
diff --git a/arch/ia64/kernel/smp.c b/arch/ia64/kernel/smp.c index 3676468612b6..da8f020d82c1 100644 --- a/arch/ia64/kernel/smp.c +++ b/arch/ia64/kernel/smp.c | |||
@@ -58,7 +58,7 @@ static struct local_tlb_flush_counts { | |||
58 | unsigned int count; | 58 | unsigned int count; |
59 | } __attribute__((__aligned__(32))) local_tlb_flush_counts[NR_CPUS]; | 59 | } __attribute__((__aligned__(32))) local_tlb_flush_counts[NR_CPUS]; |
60 | 60 | ||
61 | static DEFINE_PER_CPU(unsigned int, shadow_flush_counts[NR_CPUS]) ____cacheline_aligned; | 61 | static DEFINE_PER_CPU(unsigned short, shadow_flush_counts[NR_CPUS]) ____cacheline_aligned; |
62 | 62 | ||
63 | #define IPI_CALL_FUNC 0 | 63 | #define IPI_CALL_FUNC 0 |
64 | #define IPI_CPU_STOP 1 | 64 | #define IPI_CPU_STOP 1 |
@@ -254,7 +254,7 @@ smp_local_flush_tlb(void) | |||
254 | void | 254 | void |
255 | smp_flush_tlb_cpumask(cpumask_t xcpumask) | 255 | smp_flush_tlb_cpumask(cpumask_t xcpumask) |
256 | { | 256 | { |
257 | unsigned int *counts = __ia64_per_cpu_var(shadow_flush_counts); | 257 | unsigned short *counts = __ia64_per_cpu_var(shadow_flush_counts); |
258 | cpumask_t cpumask = xcpumask; | 258 | cpumask_t cpumask = xcpumask; |
259 | int mycpu, cpu, flush_mycpu = 0; | 259 | int mycpu, cpu, flush_mycpu = 0; |
260 | 260 | ||
@@ -262,7 +262,7 @@ smp_flush_tlb_cpumask(cpumask_t xcpumask) | |||
262 | mycpu = smp_processor_id(); | 262 | mycpu = smp_processor_id(); |
263 | 263 | ||
264 | for_each_cpu_mask(cpu, cpumask) | 264 | for_each_cpu_mask(cpu, cpumask) |
265 | counts[cpu] = local_tlb_flush_counts[cpu].count; | 265 | counts[cpu] = local_tlb_flush_counts[cpu].count & 0xffff; |
266 | 266 | ||
267 | mb(); | 267 | mb(); |
268 | for_each_cpu_mask(cpu, cpumask) { | 268 | for_each_cpu_mask(cpu, cpumask) { |
@@ -276,7 +276,7 @@ smp_flush_tlb_cpumask(cpumask_t xcpumask) | |||
276 | smp_local_flush_tlb(); | 276 | smp_local_flush_tlb(); |
277 | 277 | ||
278 | for_each_cpu_mask(cpu, cpumask) | 278 | for_each_cpu_mask(cpu, cpumask) |
279 | while(counts[cpu] == local_tlb_flush_counts[cpu].count) | 279 | while(counts[cpu] == (local_tlb_flush_counts[cpu].count & 0xffff)) |
280 | udelay(FLUSH_DELAY); | 280 | udelay(FLUSH_DELAY); |
281 | 281 | ||
282 | preempt_enable(); | 282 | preempt_enable(); |
diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c index b39853a292d5..d8f05e504fbf 100644 --- a/arch/ia64/kernel/smpboot.c +++ b/arch/ia64/kernel/smpboot.c | |||
@@ -138,6 +138,7 @@ cpumask_t cpu_possible_map = CPU_MASK_NONE; | |||
138 | EXPORT_SYMBOL(cpu_possible_map); | 138 | EXPORT_SYMBOL(cpu_possible_map); |
139 | 139 | ||
140 | cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned; | 140 | cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned; |
141 | EXPORT_SYMBOL(cpu_core_map); | ||
141 | DEFINE_PER_CPU_SHARED_ALIGNED(cpumask_t, cpu_sibling_map); | 142 | DEFINE_PER_CPU_SHARED_ALIGNED(cpumask_t, cpu_sibling_map); |
142 | EXPORT_PER_CPU_SYMBOL(cpu_sibling_map); | 143 | EXPORT_PER_CPU_SYMBOL(cpu_sibling_map); |
143 | 144 | ||
@@ -740,16 +741,14 @@ int __cpu_disable(void) | |||
740 | return -EBUSY; | 741 | return -EBUSY; |
741 | } | 742 | } |
742 | 743 | ||
743 | cpu_clear(cpu, cpu_online_map); | ||
744 | |||
745 | if (migrate_platform_irqs(cpu)) { | 744 | if (migrate_platform_irqs(cpu)) { |
746 | cpu_set(cpu, cpu_online_map); | 745 | cpu_set(cpu, cpu_online_map); |
747 | return (-EBUSY); | 746 | return (-EBUSY); |
748 | } | 747 | } |
749 | 748 | ||
750 | remove_siblinginfo(cpu); | 749 | remove_siblinginfo(cpu); |
751 | cpu_clear(cpu, cpu_online_map); | ||
752 | fixup_irqs(); | 750 | fixup_irqs(); |
751 | cpu_clear(cpu, cpu_online_map); | ||
753 | local_flush_tlb_all(); | 752 | local_flush_tlb_all(); |
754 | cpu_clear(cpu, cpu_callin_map); | 753 | cpu_clear(cpu, cpu_callin_map); |
755 | return 0; | 754 | return 0; |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index de71da811cd6..10a7d47e8510 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
@@ -215,9 +215,6 @@ SECTIONS | |||
215 | /* Per-cpu data: */ | 215 | /* Per-cpu data: */ |
216 | percpu : { } :percpu | 216 | percpu : { } :percpu |
217 | . = ALIGN(PERCPU_PAGE_SIZE); | 217 | . = ALIGN(PERCPU_PAGE_SIZE); |
218 | #ifdef CONFIG_SMP | ||
219 | . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ | ||
220 | #endif | ||
221 | __phys_per_cpu_start = .; | 218 | __phys_per_cpu_start = .; |
222 | .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) | 219 | .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) |
223 | { | 220 | { |
@@ -233,6 +230,11 @@ SECTIONS | |||
233 | data : { } :data | 230 | data : { } :data |
234 | .data : AT(ADDR(.data) - LOAD_OFFSET) | 231 | .data : AT(ADDR(.data) - LOAD_OFFSET) |
235 | { | 232 | { |
233 | #ifdef CONFIG_SMP | ||
234 | . = ALIGN(PERCPU_PAGE_SIZE); | ||
235 | __cpu0_per_cpu = .; | ||
236 | . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ | ||
237 | #endif | ||
236 | DATA_DATA | 238 | DATA_DATA |
237 | *(.data1) | 239 | *(.data1) |
238 | *(.gnu.linkonce.d*) | 240 | *(.gnu.linkonce.d*) |