diff options
Diffstat (limited to 'arch/ia64')
35 files changed, 178 insertions, 174 deletions
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index bef47725d4ad..c9307c99a1dc 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -42,6 +42,11 @@ config MMU | |||
42 | config SWIOTLB | 42 | config SWIOTLB |
43 | bool | 43 | bool |
44 | 44 | ||
45 | config GENERIC_LOCKBREAK | ||
46 | bool | ||
47 | default y | ||
48 | depends on SMP && PREEMPT | ||
49 | |||
45 | config RWSEM_XCHGADD_ALGORITHM | 50 | config RWSEM_XCHGADD_ALGORITHM |
46 | bool | 51 | bool |
47 | default y | 52 | default y |
@@ -75,6 +80,9 @@ config GENERIC_TIME_VSYSCALL | |||
75 | bool | 80 | bool |
76 | default y | 81 | default y |
77 | 82 | ||
83 | config HAVE_SETUP_PER_CPU_AREA | ||
84 | def_bool y | ||
85 | |||
78 | config DMI | 86 | config DMI |
79 | bool | 87 | bool |
80 | default y | 88 | default y |
diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile index 34951aa2370b..b916ccfdef84 100644 --- a/arch/ia64/Makefile +++ b/arch/ia64/Makefile | |||
@@ -77,7 +77,7 @@ vmlinux.gz: vmlinux | |||
77 | $(Q)$(MAKE) $(build)=$(boot) $@ | 77 | $(Q)$(MAKE) $(build)=$(boot) $@ |
78 | 78 | ||
79 | unwcheck: vmlinux | 79 | unwcheck: vmlinux |
80 | -$(Q)READELF=$(READELF) $(srctree)/arch/ia64/scripts/unwcheck.py $< | 80 | -$(Q)READELF=$(READELF) python $(srctree)/arch/ia64/scripts/unwcheck.py $< |
81 | 81 | ||
82 | archclean: | 82 | archclean: |
83 | $(Q)$(MAKE) $(clean)=$(boot) | 83 | $(Q)$(MAKE) $(clean)=$(boot) |
diff --git a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c index bc859a311eaf..45bf04eb7d70 100644 --- a/arch/ia64/hp/common/sba_iommu.c +++ b/arch/ia64/hp/common/sba_iommu.c | |||
@@ -2034,7 +2034,8 @@ sba_init(void) | |||
2034 | if (!ia64_platform_is("hpzx1") && !ia64_platform_is("hpzx1_swiotlb")) | 2034 | if (!ia64_platform_is("hpzx1") && !ia64_platform_is("hpzx1_swiotlb")) |
2035 | return 0; | 2035 | return 0; |
2036 | 2036 | ||
2037 | #if defined(CONFIG_IA64_GENERIC) && defined(CONFIG_CRASH_DUMP) | 2037 | #if defined(CONFIG_IA64_GENERIC) && defined(CONFIG_CRASH_DUMP) && \ |
2038 | defined(CONFIG_PROC_FS) | ||
2038 | /* If we are booting a kdump kernel, the sba_iommu will | 2039 | /* If we are booting a kdump kernel, the sba_iommu will |
2039 | * cause devices that were not shutdown properly to MCA | 2040 | * cause devices that were not shutdown properly to MCA |
2040 | * as soon as they are turned back on. Our only option for | 2041 | * as soon as they are turned back on. Our only option for |
diff --git a/arch/ia64/hp/sim/boot/Makefile b/arch/ia64/hp/sim/boot/Makefile index df6e9968c845..2e805e0cc560 100644 --- a/arch/ia64/hp/sim/boot/Makefile +++ b/arch/ia64/hp/sim/boot/Makefile | |||
@@ -33,5 +33,5 @@ $(obj)/vmlinux.bin: vmlinux FORCE | |||
33 | LDFLAGS_bootloader = -static -T | 33 | LDFLAGS_bootloader = -static -T |
34 | 34 | ||
35 | $(obj)/bootloader: $(src)/bootloader.lds $(obj)/bootloader.o $(obj)/boot_head.o $(obj)/fw-emu.o \ | 35 | $(obj)/bootloader: $(src)/bootloader.lds $(obj)/bootloader.o $(obj)/boot_head.o $(obj)/fw-emu.o \ |
36 | lib/lib.a arch/ia64/lib/lib.a FORCE | 36 | lib/lib.a arch/ia64/lib/built-in.o arch/ia64/lib/lib.a FORCE |
37 | $(call if_changed,ld) | 37 | $(call if_changed,ld) |
diff --git a/arch/ia64/hp/sim/boot/bootloader.lds b/arch/ia64/hp/sim/boot/bootloader.lds index 69ae58531033..3977f25a1265 100644 --- a/arch/ia64/hp/sim/boot/bootloader.lds +++ b/arch/ia64/hp/sim/boot/bootloader.lds | |||
@@ -22,10 +22,11 @@ SECTIONS | |||
22 | .sdata : { *(.sdata) } | 22 | .sdata : { *(.sdata) } |
23 | _edata = .; | 23 | _edata = .; |
24 | 24 | ||
25 | _bss = .; | 25 | __bss_start = .; |
26 | .sbss : { *(.sbss) *(.scommon) } | 26 | .sbss : { *(.sbss) *(.scommon) } |
27 | .bss : { *(.bss) *(COMMON) } | 27 | .bss : { *(.bss) *(COMMON) } |
28 | . = ALIGN(64 / 8); | 28 | . = ALIGN(64 / 8); |
29 | __bss_stop = .; | ||
29 | _end = . ; | 30 | _end = . ; |
30 | 31 | ||
31 | /* Stabs debugging sections. */ | 32 | /* Stabs debugging sections. */ |
diff --git a/arch/ia64/hp/sim/simeth.c b/arch/ia64/hp/sim/simeth.c index 08b117e2c54b..9898febf609a 100644 --- a/arch/ia64/hp/sim/simeth.c +++ b/arch/ia64/hp/sim/simeth.c | |||
@@ -497,11 +497,6 @@ simeth_interrupt(int irq, void *dev_id) | |||
497 | { | 497 | { |
498 | struct net_device *dev = dev_id; | 498 | struct net_device *dev = dev_id; |
499 | 499 | ||
500 | if ( dev == NULL ) { | ||
501 | printk(KERN_WARNING "simeth: irq %d for unknown device\n", irq); | ||
502 | return IRQ_NONE; | ||
503 | } | ||
504 | |||
505 | /* | 500 | /* |
506 | * very simple loop because we get interrupts only when receiving | 501 | * very simple loop because we get interrupts only when receiving |
507 | */ | 502 | */ |
diff --git a/arch/ia64/hp/sim/simscsi.c b/arch/ia64/hp/sim/simscsi.c index 6ef9b5219930..7661bb065fa5 100644 --- a/arch/ia64/hp/sim/simscsi.c +++ b/arch/ia64/hp/sim/simscsi.c | |||
@@ -360,7 +360,6 @@ static struct scsi_host_template driver_template = { | |||
360 | .max_sectors = 1024, | 360 | .max_sectors = 1024, |
361 | .cmd_per_lun = SIMSCSI_REQ_QUEUE_LEN, | 361 | .cmd_per_lun = SIMSCSI_REQ_QUEUE_LEN, |
362 | .use_clustering = DISABLE_CLUSTERING, | 362 | .use_clustering = DISABLE_CLUSTERING, |
363 | .use_sg_chaining = ENABLE_SG_CHAINING, | ||
364 | }; | 363 | }; |
365 | 364 | ||
366 | static int __init | 365 | static int __init |
diff --git a/arch/ia64/ia32/binfmt_elf32.c b/arch/ia64/ia32/binfmt_elf32.c index f6ae3ec93810..4f0c30c38e99 100644 --- a/arch/ia64/ia32/binfmt_elf32.c +++ b/arch/ia64/ia32/binfmt_elf32.c | |||
@@ -52,33 +52,29 @@ extern struct page *ia32_shared_page[]; | |||
52 | extern unsigned long *ia32_gdt; | 52 | extern unsigned long *ia32_gdt; |
53 | extern struct page *ia32_gate_page; | 53 | extern struct page *ia32_gate_page; |
54 | 54 | ||
55 | struct page * | 55 | int |
56 | ia32_install_shared_page (struct vm_area_struct *vma, unsigned long address, int *type) | 56 | ia32_install_shared_page (struct vm_area_struct *vma, struct vm_fault *vmf) |
57 | { | 57 | { |
58 | struct page *pg = ia32_shared_page[smp_processor_id()]; | 58 | vmf->page = ia32_shared_page[smp_processor_id()]; |
59 | get_page(pg); | 59 | get_page(vmf->page); |
60 | if (type) | 60 | return 0; |
61 | *type = VM_FAULT_MINOR; | ||
62 | return pg; | ||
63 | } | 61 | } |
64 | 62 | ||
65 | struct page * | 63 | int |
66 | ia32_install_gate_page (struct vm_area_struct *vma, unsigned long address, int *type) | 64 | ia32_install_gate_page (struct vm_area_struct *vma, struct vm_fault *vmf) |
67 | { | 65 | { |
68 | struct page *pg = ia32_gate_page; | 66 | vmf->page = ia32_gate_page; |
69 | get_page(pg); | 67 | get_page(vmf->page); |
70 | if (type) | 68 | return 0; |
71 | *type = VM_FAULT_MINOR; | ||
72 | return pg; | ||
73 | } | 69 | } |
74 | 70 | ||
75 | 71 | ||
76 | static struct vm_operations_struct ia32_shared_page_vm_ops = { | 72 | static struct vm_operations_struct ia32_shared_page_vm_ops = { |
77 | .nopage = ia32_install_shared_page | 73 | .fault = ia32_install_shared_page |
78 | }; | 74 | }; |
79 | 75 | ||
80 | static struct vm_operations_struct ia32_gate_page_vm_ops = { | 76 | static struct vm_operations_struct ia32_gate_page_vm_ops = { |
81 | .nopage = ia32_install_gate_page | 77 | .fault = ia32_install_gate_page |
82 | }; | 78 | }; |
83 | 79 | ||
84 | void | 80 | void |
@@ -226,7 +222,8 @@ elf32_set_personality (void) | |||
226 | } | 222 | } |
227 | 223 | ||
228 | static unsigned long | 224 | static unsigned long |
229 | elf32_map (struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type) | 225 | elf32_map(struct file *filep, unsigned long addr, struct elf_phdr *eppnt, |
226 | int prot, int type, unsigned long unused) | ||
230 | { | 227 | { |
231 | unsigned long pgoff = (eppnt->p_vaddr) & ~IA32_PAGE_MASK; | 228 | unsigned long pgoff = (eppnt->p_vaddr) & ~IA32_PAGE_MASK; |
232 | 229 | ||
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 897e2083a3b1..00b5d08f6da8 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -860,7 +860,7 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu) | |||
860 | lsapic = (struct acpi_madt_local_sapic *)obj->buffer.pointer; | 860 | lsapic = (struct acpi_madt_local_sapic *)obj->buffer.pointer; |
861 | 861 | ||
862 | if ((lsapic->header.type != ACPI_MADT_TYPE_LOCAL_SAPIC) || | 862 | if ((lsapic->header.type != ACPI_MADT_TYPE_LOCAL_SAPIC) || |
863 | (!lsapic->lapic_flags & ACPI_MADT_ENABLED)) { | 863 | (!(lsapic->lapic_flags & ACPI_MADT_ENABLED))) { |
864 | kfree(buffer.pointer); | 864 | kfree(buffer.pointer); |
865 | return -EINVAL; | 865 | return -EINVAL; |
866 | } | 866 | } |
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index 8e8f8b6193ee..242d79341120 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
@@ -370,7 +370,7 @@ efi_get_pal_addr (void) | |||
370 | continue; | 370 | continue; |
371 | } | 371 | } |
372 | 372 | ||
373 | if (md->num_pages << EFI_PAGE_SHIFT > IA64_GRANULE_SIZE) | 373 | if (efi_md_size(md) > IA64_GRANULE_SIZE) |
374 | panic("Woah! PAL code size bigger than a granule!"); | 374 | panic("Woah! PAL code size bigger than a granule!"); |
375 | 375 | ||
376 | #if EFI_DEBUG | 376 | #if EFI_DEBUG |
@@ -378,7 +378,7 @@ efi_get_pal_addr (void) | |||
378 | 378 | ||
379 | printk(KERN_INFO "CPU %d: mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n", | 379 | printk(KERN_INFO "CPU %d: mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n", |
380 | smp_processor_id(), md->phys_addr, | 380 | smp_processor_id(), md->phys_addr, |
381 | md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT), | 381 | md->phys_addr + efi_md_size(md), |
382 | vaddr & mask, (vaddr & mask) + IA64_GRANULE_SIZE); | 382 | vaddr & mask, (vaddr & mask) + IA64_GRANULE_SIZE); |
383 | #endif | 383 | #endif |
384 | return __va(md->phys_addr); | 384 | return __va(md->phys_addr); |
@@ -523,7 +523,7 @@ efi_init (void) | |||
523 | md = p; | 523 | md = p; |
524 | printk("mem%02u: type=%u, attr=0x%lx, range=[0x%016lx-0x%016lx) (%luMB)\n", | 524 | printk("mem%02u: type=%u, attr=0x%lx, range=[0x%016lx-0x%016lx) (%luMB)\n", |
525 | i, md->type, md->attribute, md->phys_addr, | 525 | i, md->type, md->attribute, md->phys_addr, |
526 | md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT), | 526 | md->phys_addr + efi_md_size(md), |
527 | md->num_pages >> (20 - EFI_PAGE_SHIFT)); | 527 | md->num_pages >> (20 - EFI_PAGE_SHIFT)); |
528 | } | 528 | } |
529 | } | 529 | } |
@@ -656,7 +656,7 @@ efi_memory_descriptor (unsigned long phys_addr) | |||
656 | for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) { | 656 | for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) { |
657 | md = p; | 657 | md = p; |
658 | 658 | ||
659 | if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT)) | 659 | if (phys_addr - md->phys_addr < efi_md_size(md)) |
660 | return md; | 660 | return md; |
661 | } | 661 | } |
662 | return NULL; | 662 | return NULL; |
@@ -1158,7 +1158,7 @@ efi_initialize_iomem_resources(struct resource *code_resource, | |||
1158 | 1158 | ||
1159 | res->name = name; | 1159 | res->name = name; |
1160 | res->start = md->phys_addr; | 1160 | res->start = md->phys_addr; |
1161 | res->end = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1; | 1161 | res->end = md->phys_addr + efi_md_size(md) - 1; |
1162 | res->flags = flags; | 1162 | res->flags = flags; |
1163 | 1163 | ||
1164 | if (insert_resource(&iomem_resource, res) < 0) | 1164 | if (insert_resource(&iomem_resource, res) < 0) |
diff --git a/arch/ia64/kernel/gate.lds.S b/arch/ia64/kernel/gate.lds.S index 454d7a7dfa9d..3cb1abc00e24 100644 --- a/arch/ia64/kernel/gate.lds.S +++ b/arch/ia64/kernel/gate.lds.S | |||
@@ -30,7 +30,7 @@ SECTIONS | |||
30 | * the dynamic symbol table et al. If this amount is insufficient, | 30 | * the dynamic symbol table et al. If this amount is insufficient, |
31 | * ld -shared will barf. Just increase it here. | 31 | * ld -shared will barf. Just increase it here. |
32 | */ | 32 | */ |
33 | . = GATE_ADDR + 0x500; | 33 | . = GATE_ADDR + 0x600; |
34 | 34 | ||
35 | .data.patch : { | 35 | .data.patch : { |
36 | __start_gate_mckinley_e9_patchlist = .; | 36 | __start_gate_mckinley_e9_patchlist = .; |
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index 4e5e27540e27..d3a41d5f8d12 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
@@ -1176,6 +1176,7 @@ tlb_purge_done: | |||
1176 | RESTORE_REG(cr.dcr, r25, r17);; | 1176 | RESTORE_REG(cr.dcr, r25, r17);; |
1177 | RESTORE_REG(cr.iva, r25, r17);; | 1177 | RESTORE_REG(cr.iva, r25, r17);; |
1178 | RESTORE_REG(cr.pta, r25, r17);; | 1178 | RESTORE_REG(cr.pta, r25, r17);; |
1179 | srlz.d;; // required not to violate RAW dependency | ||
1179 | RESTORE_REG(cr.itv, r25, r17);; | 1180 | RESTORE_REG(cr.itv, r25, r17);; |
1180 | RESTORE_REG(cr.pmv, r25, r17);; | 1181 | RESTORE_REG(cr.pmv, r25, r17);; |
1181 | RESTORE_REG(cr.cmcv, r25, r17);; | 1182 | RESTORE_REG(cr.cmcv, r25, r17);; |
diff --git a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c index bd17190bebb6..c3b4412ccc67 100644 --- a/arch/ia64/kernel/ia64_ksyms.c +++ b/arch/ia64/kernel/ia64_ksyms.c | |||
@@ -63,6 +63,9 @@ EXPORT_SYMBOL(__udivdi3); | |||
63 | EXPORT_SYMBOL(__moddi3); | 63 | EXPORT_SYMBOL(__moddi3); |
64 | EXPORT_SYMBOL(__umoddi3); | 64 | EXPORT_SYMBOL(__umoddi3); |
65 | 65 | ||
66 | #include <asm/page.h> | ||
67 | EXPORT_SYMBOL(copy_page); | ||
68 | |||
66 | #if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE) | 69 | #if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE) |
67 | extern void xor_ia64_2(void); | 70 | extern void xor_ia64_2(void); |
68 | extern void xor_ia64_3(void); | 71 | extern void xor_ia64_3(void); |
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index 274a59383043..398e2fd1cd25 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
@@ -199,19 +199,6 @@ static inline int __gsi_to_irq(unsigned int gsi) | |||
199 | return -1; | 199 | return -1; |
200 | } | 200 | } |
201 | 201 | ||
202 | /* | ||
203 | * Translate GSI number to the corresponding IA-64 interrupt vector. If no | ||
204 | * entry exists, return -1. | ||
205 | */ | ||
206 | inline int | ||
207 | gsi_to_vector (unsigned int gsi) | ||
208 | { | ||
209 | int irq = __gsi_to_irq(gsi); | ||
210 | if (check_irq_used(irq) < 0) | ||
211 | return -1; | ||
212 | return irq_to_vector(irq); | ||
213 | } | ||
214 | |||
215 | int | 202 | int |
216 | gsi_to_irq (unsigned int gsi) | 203 | gsi_to_irq (unsigned int gsi) |
217 | { | 204 | { |
@@ -429,7 +416,7 @@ iosapic_end_level_irq (unsigned int irq) | |||
429 | #define iosapic_disable_level_irq mask_irq | 416 | #define iosapic_disable_level_irq mask_irq |
430 | #define iosapic_ack_level_irq nop | 417 | #define iosapic_ack_level_irq nop |
431 | 418 | ||
432 | struct irq_chip irq_type_iosapic_level = { | 419 | static struct irq_chip irq_type_iosapic_level = { |
433 | .name = "IO-SAPIC-level", | 420 | .name = "IO-SAPIC-level", |
434 | .startup = iosapic_startup_level_irq, | 421 | .startup = iosapic_startup_level_irq, |
435 | .shutdown = iosapic_shutdown_level_irq, | 422 | .shutdown = iosapic_shutdown_level_irq, |
@@ -478,7 +465,7 @@ iosapic_ack_edge_irq (unsigned int irq) | |||
478 | #define iosapic_disable_edge_irq nop | 465 | #define iosapic_disable_edge_irq nop |
479 | #define iosapic_end_edge_irq nop | 466 | #define iosapic_end_edge_irq nop |
480 | 467 | ||
481 | struct irq_chip irq_type_iosapic_edge = { | 468 | static struct irq_chip irq_type_iosapic_edge = { |
482 | .name = "IO-SAPIC-edge", | 469 | .name = "IO-SAPIC-edge", |
483 | .startup = iosapic_startup_edge_irq, | 470 | .startup = iosapic_startup_edge_irq, |
484 | .shutdown = iosapic_disable_edge_irq, | 471 | .shutdown = iosapic_disable_edge_irq, |
@@ -491,7 +478,7 @@ struct irq_chip irq_type_iosapic_edge = { | |||
491 | .set_affinity = iosapic_set_affinity | 478 | .set_affinity = iosapic_set_affinity |
492 | }; | 479 | }; |
493 | 480 | ||
494 | unsigned int | 481 | static unsigned int |
495 | iosapic_version (char __iomem *addr) | 482 | iosapic_version (char __iomem *addr) |
496 | { | 483 | { |
497 | /* | 484 | /* |
@@ -938,7 +925,7 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi, | |||
938 | case ACPI_INTERRUPT_CPEI: | 925 | case ACPI_INTERRUPT_CPEI: |
939 | irq = vector = IA64_CPE_VECTOR; | 926 | irq = vector = IA64_CPE_VECTOR; |
940 | BUG_ON(bind_irq_vector(irq, vector, CPU_MASK_ALL)); | 927 | BUG_ON(bind_irq_vector(irq, vector, CPU_MASK_ALL)); |
941 | delivery = IOSAPIC_LOWEST_PRIORITY; | 928 | delivery = IOSAPIC_FIXED; |
942 | mask = 1; | 929 | mask = 1; |
943 | break; | 930 | break; |
944 | default: | 931 | default: |
diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c index 00a4599e5f47..0b52f19ed046 100644 --- a/arch/ia64/kernel/irq_ia64.c +++ b/arch/ia64/kernel/irq_ia64.c | |||
@@ -200,7 +200,7 @@ assign_irq_vector (int irq) | |||
200 | { | 200 | { |
201 | unsigned long flags; | 201 | unsigned long flags; |
202 | int vector, cpu; | 202 | int vector, cpu; |
203 | cpumask_t domain; | 203 | cpumask_t domain = CPU_MASK_NONE; |
204 | 204 | ||
205 | vector = -ENOSPC; | 205 | vector = -ENOSPC; |
206 | 206 | ||
@@ -340,7 +340,7 @@ int create_irq(void) | |||
340 | { | 340 | { |
341 | unsigned long flags; | 341 | unsigned long flags; |
342 | int irq, vector, cpu; | 342 | int irq, vector, cpu; |
343 | cpumask_t domain; | 343 | cpumask_t domain = CPU_MASK_NONE; |
344 | 344 | ||
345 | irq = vector = -ENOSPC; | 345 | irq = vector = -ENOSPC; |
346 | spin_lock_irqsave(&vector_lock, flags); | 346 | spin_lock_irqsave(&vector_lock, flags); |
diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c index 5fd65d8302c8..fc4d2676264f 100644 --- a/arch/ia64/kernel/kprobes.c +++ b/arch/ia64/kernel/kprobes.c | |||
@@ -182,8 +182,8 @@ static int __kprobes unsupported_inst(uint template, uint slot, | |||
182 | qp = kprobe_inst & 0x3f; | 182 | qp = kprobe_inst & 0x3f; |
183 | if (is_cmp_ctype_unc_inst(template, slot, major_opcode, kprobe_inst)) { | 183 | if (is_cmp_ctype_unc_inst(template, slot, major_opcode, kprobe_inst)) { |
184 | if (slot == 1 && qp) { | 184 | if (slot == 1 && qp) { |
185 | printk(KERN_WARNING "Kprobes on cmp unc" | 185 | printk(KERN_WARNING "Kprobes on cmp unc " |
186 | "instruction on slot 1 at <0x%lx>" | 186 | "instruction on slot 1 at <0x%lx> " |
187 | "is not supported\n", addr); | 187 | "is not supported\n", addr); |
188 | return -EINVAL; | 188 | return -EINVAL; |
189 | 189 | ||
@@ -221,8 +221,8 @@ static int __kprobes unsupported_inst(uint template, uint slot, | |||
221 | * bit 12 to be equal to 1 | 221 | * bit 12 to be equal to 1 |
222 | */ | 222 | */ |
223 | if (slot == 1 && qp) { | 223 | if (slot == 1 && qp) { |
224 | printk(KERN_WARNING "Kprobes on test bit" | 224 | printk(KERN_WARNING "Kprobes on test bit " |
225 | "instruction on slot at <0x%lx>" | 225 | "instruction on slot at <0x%lx> " |
226 | "is not supported\n", addr); | 226 | "is not supported\n", addr); |
227 | return -EINVAL; | 227 | return -EINVAL; |
228 | } | 228 | } |
@@ -242,7 +242,7 @@ static int __kprobes unsupported_inst(uint template, uint slot, | |||
242 | */ | 242 | */ |
243 | int x6=(kprobe_inst >> 27) & 0x3F; | 243 | int x6=(kprobe_inst >> 27) & 0x3F; |
244 | if ((x6 == 0x10) || (x6 == 0x11)) { | 244 | if ((x6 == 0x10) || (x6 == 0x11)) { |
245 | printk(KERN_WARNING "Kprobes on" | 245 | printk(KERN_WARNING "Kprobes on " |
246 | "Indirect Predict is not supported\n"); | 246 | "Indirect Predict is not supported\n"); |
247 | return -EINVAL; | 247 | return -EINVAL; |
248 | } | 248 | } |
@@ -435,6 +435,23 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) | |||
435 | /* another task is sharing our hash bucket */ | 435 | /* another task is sharing our hash bucket */ |
436 | continue; | 436 | continue; |
437 | 437 | ||
438 | orig_ret_address = (unsigned long)ri->ret_addr; | ||
439 | if (orig_ret_address != trampoline_address) | ||
440 | /* | ||
441 | * This is the real return address. Any other | ||
442 | * instances associated with this task are for | ||
443 | * other calls deeper on the call stack | ||
444 | */ | ||
445 | break; | ||
446 | } | ||
447 | |||
448 | regs->cr_iip = orig_ret_address; | ||
449 | |||
450 | hlist_for_each_entry_safe(ri, node, tmp, head, hlist) { | ||
451 | if (ri->task != current) | ||
452 | /* another task is sharing our hash bucket */ | ||
453 | continue; | ||
454 | |||
438 | if (ri->rp && ri->rp->handler) | 455 | if (ri->rp && ri->rp->handler) |
439 | ri->rp->handler(ri, regs); | 456 | ri->rp->handler(ri, regs); |
440 | 457 | ||
@@ -452,8 +469,6 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) | |||
452 | 469 | ||
453 | kretprobe_assert(ri, orig_ret_address, trampoline_address); | 470 | kretprobe_assert(ri, orig_ret_address, trampoline_address); |
454 | 471 | ||
455 | regs->cr_iip = orig_ret_address; | ||
456 | |||
457 | reset_current_kprobe(); | 472 | reset_current_kprobe(); |
458 | spin_unlock_irqrestore(&kretprobe_lock, flags); | 473 | spin_unlock_irqrestore(&kretprobe_lock, flags); |
459 | preempt_enable_no_resched(); | 474 | preempt_enable_no_resched(); |
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index 10b48cd15a87..6dbf5919d2d0 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c | |||
@@ -75,6 +75,7 @@ | |||
75 | #include <linux/workqueue.h> | 75 | #include <linux/workqueue.h> |
76 | #include <linux/cpumask.h> | 76 | #include <linux/cpumask.h> |
77 | #include <linux/kdebug.h> | 77 | #include <linux/kdebug.h> |
78 | #include <linux/cpu.h> | ||
78 | 79 | ||
79 | #include <asm/delay.h> | 80 | #include <asm/delay.h> |
80 | #include <asm/machvec.h> | 81 | #include <asm/machvec.h> |
@@ -1813,6 +1814,36 @@ ia64_mca_cpu_init(void *cpu_data) | |||
1813 | PAGE_KERNEL)); | 1814 | PAGE_KERNEL)); |
1814 | } | 1815 | } |
1815 | 1816 | ||
1817 | static void __cpuinit ia64_mca_cmc_vector_adjust(void *dummy) | ||
1818 | { | ||
1819 | unsigned long flags; | ||
1820 | |||
1821 | local_irq_save(flags); | ||
1822 | if (!cmc_polling_enabled) | ||
1823 | ia64_mca_cmc_vector_enable(NULL); | ||
1824 | local_irq_restore(flags); | ||
1825 | } | ||
1826 | |||
1827 | static int __cpuinit mca_cpu_callback(struct notifier_block *nfb, | ||
1828 | unsigned long action, | ||
1829 | void *hcpu) | ||
1830 | { | ||
1831 | int hotcpu = (unsigned long) hcpu; | ||
1832 | |||
1833 | switch (action) { | ||
1834 | case CPU_ONLINE: | ||
1835 | case CPU_ONLINE_FROZEN: | ||
1836 | smp_call_function_single(hotcpu, ia64_mca_cmc_vector_adjust, | ||
1837 | NULL, 1, 0); | ||
1838 | break; | ||
1839 | } | ||
1840 | return NOTIFY_OK; | ||
1841 | } | ||
1842 | |||
1843 | static struct notifier_block mca_cpu_notifier __cpuinitdata = { | ||
1844 | .notifier_call = mca_cpu_callback | ||
1845 | }; | ||
1846 | |||
1816 | /* | 1847 | /* |
1817 | * ia64_mca_init | 1848 | * ia64_mca_init |
1818 | * | 1849 | * |
@@ -1996,6 +2027,8 @@ ia64_mca_late_init(void) | |||
1996 | if (!mca_init) | 2027 | if (!mca_init) |
1997 | return 0; | 2028 | return 0; |
1998 | 2029 | ||
2030 | register_hotcpu_notifier(&mca_cpu_notifier); | ||
2031 | |||
1999 | /* Setup the CMCI/P vector and handler */ | 2032 | /* Setup the CMCI/P vector and handler */ |
2000 | init_timer(&cmc_poll_timer); | 2033 | init_timer(&cmc_poll_timer); |
2001 | cmc_poll_timer.function = ia64_mca_cmc_poll; | 2034 | cmc_poll_timer.function = ia64_mca_cmc_poll; |
diff --git a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c index 196287928bae..e58f4367cf11 100644 --- a/arch/ia64/kernel/module.c +++ b/arch/ia64/kernel/module.c | |||
@@ -940,14 +940,3 @@ module_arch_cleanup (struct module *mod) | |||
940 | if (mod->arch.core_unw_table) | 940 | if (mod->arch.core_unw_table) |
941 | unw_remove_unwind_table(mod->arch.core_unw_table); | 941 | unw_remove_unwind_table(mod->arch.core_unw_table); |
942 | } | 942 | } |
943 | |||
944 | #ifdef CONFIG_SMP | ||
945 | void | ||
946 | percpu_modcopy (void *pcpudst, const void *src, unsigned long size) | ||
947 | { | ||
948 | unsigned int i; | ||
949 | for_each_possible_cpu(i) { | ||
950 | memcpy(pcpudst + __per_cpu_offset[i], src, size); | ||
951 | } | ||
952 | } | ||
953 | #endif /* CONFIG_SMP */ | ||
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index 2418289ee5ca..7377d323131d 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/interrupt.h> | 27 | #include <linux/interrupt.h> |
28 | #include <linux/delay.h> | 28 | #include <linux/delay.h> |
29 | #include <linux/kdebug.h> | 29 | #include <linux/kdebug.h> |
30 | #include <linux/utsname.h> | ||
30 | 31 | ||
31 | #include <asm/cpu.h> | 32 | #include <asm/cpu.h> |
32 | #include <asm/delay.h> | 33 | #include <asm/delay.h> |
@@ -107,8 +108,9 @@ show_regs (struct pt_regs *regs) | |||
107 | print_modules(); | 108 | print_modules(); |
108 | printk("\nPid: %d, CPU %d, comm: %20s\n", task_pid_nr(current), | 109 | printk("\nPid: %d, CPU %d, comm: %20s\n", task_pid_nr(current), |
109 | smp_processor_id(), current->comm); | 110 | smp_processor_id(), current->comm); |
110 | printk("psr : %016lx ifs : %016lx ip : [<%016lx>] %s\n", | 111 | printk("psr : %016lx ifs : %016lx ip : [<%016lx>] %s (%s)\n", |
111 | regs->cr_ipsr, regs->cr_ifs, ip, print_tainted()); | 112 | regs->cr_ipsr, regs->cr_ifs, ip, print_tainted(), |
113 | init_utsname()->release); | ||
112 | print_symbol("ip is at %s\n", ip); | 114 | print_symbol("ip is at %s\n", ip); |
113 | printk("unat: %016lx pfs : %016lx rsc : %016lx\n", | 115 | printk("unat: %016lx pfs : %016lx rsc : %016lx\n", |
114 | regs->ar_unat, regs->ar_pfs, regs->ar_rsc); | 116 | regs->ar_unat, regs->ar_pfs, regs->ar_rsc); |
@@ -737,6 +739,7 @@ flush_thread (void) | |||
737 | ia32_drop_ia64_partial_page_list(current); | 739 | ia32_drop_ia64_partial_page_list(current); |
738 | current->thread.task_size = IA32_PAGE_OFFSET; | 740 | current->thread.task_size = IA32_PAGE_OFFSET; |
739 | set_fs(USER_DS); | 741 | set_fs(USER_DS); |
742 | memset(current->thread.tls_array, 0, sizeof(current->thread.tls_array)); | ||
740 | } | 743 | } |
741 | #endif | 744 | #endif |
742 | } | 745 | } |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 2b3751eef5ce..86028c69861e 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -71,8 +71,6 @@ unsigned long __per_cpu_offset[NR_CPUS]; | |||
71 | EXPORT_SYMBOL(__per_cpu_offset); | 71 | EXPORT_SYMBOL(__per_cpu_offset); |
72 | #endif | 72 | #endif |
73 | 73 | ||
74 | extern void ia64_setup_printk_clock(void); | ||
75 | |||
76 | DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); | 74 | DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); |
77 | DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); | 75 | DEFINE_PER_CPU(unsigned long, local_per_cpu_offset); |
78 | unsigned long ia64_cycles_per_usec; | 76 | unsigned long ia64_cycles_per_usec; |
@@ -95,7 +93,6 @@ static struct resource bss_resource = { | |||
95 | .name = "Kernel bss", | 93 | .name = "Kernel bss", |
96 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM | 94 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM |
97 | }; | 95 | }; |
98 | extern char _text[], _end[], _etext[], _edata[], _bss[]; | ||
99 | 96 | ||
100 | unsigned long ia64_max_cacheline_size; | 97 | unsigned long ia64_max_cacheline_size; |
101 | 98 | ||
@@ -206,7 +203,7 @@ static int __init register_memory(void) | |||
206 | code_resource.end = ia64_tpa(_etext) - 1; | 203 | code_resource.end = ia64_tpa(_etext) - 1; |
207 | data_resource.start = ia64_tpa(_etext); | 204 | data_resource.start = ia64_tpa(_etext); |
208 | data_resource.end = ia64_tpa(_edata) - 1; | 205 | data_resource.end = ia64_tpa(_edata) - 1; |
209 | bss_resource.start = ia64_tpa(_bss); | 206 | bss_resource.start = ia64_tpa(__bss_start); |
210 | bss_resource.end = ia64_tpa(_end) - 1; | 207 | bss_resource.end = ia64_tpa(_end) - 1; |
211 | efi_initialize_iomem_resources(&code_resource, &data_resource, | 208 | efi_initialize_iomem_resources(&code_resource, &data_resource, |
212 | &bss_resource); | 209 | &bss_resource); |
@@ -508,8 +505,6 @@ setup_arch (char **cmdline_p) | |||
508 | /* process SAL system table: */ | 505 | /* process SAL system table: */ |
509 | ia64_sal_init(__va(efi.sal_systab)); | 506 | ia64_sal_init(__va(efi.sal_systab)); |
510 | 507 | ||
511 | ia64_setup_printk_clock(); | ||
512 | |||
513 | #ifdef CONFIG_SMP | 508 | #ifdef CONFIG_SMP |
514 | cpu_physical_id(0) = hard_smp_processor_id(); | 509 | cpu_physical_id(0) = hard_smp_processor_id(); |
515 | #endif | 510 | #endif |
diff --git a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c index cdb64cc4d9c8..309da3567bc8 100644 --- a/arch/ia64/kernel/signal.c +++ b/arch/ia64/kernel/signal.c | |||
@@ -98,7 +98,7 @@ restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr) | |||
98 | if ((flags & IA64_SC_FLAG_FPH_VALID) != 0) { | 98 | if ((flags & IA64_SC_FLAG_FPH_VALID) != 0) { |
99 | struct ia64_psr *psr = ia64_psr(&scr->pt); | 99 | struct ia64_psr *psr = ia64_psr(&scr->pt); |
100 | 100 | ||
101 | __copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16); | 101 | err |= __copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16); |
102 | psr->mfh = 0; /* drop signal handler's fph contents... */ | 102 | psr->mfh = 0; /* drop signal handler's fph contents... */ |
103 | preempt_disable(); | 103 | preempt_disable(); |
104 | if (psr->dfh) | 104 | if (psr->dfh) |
@@ -244,7 +244,7 @@ static long | |||
244 | setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratch *scr) | 244 | setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratch *scr) |
245 | { | 245 | { |
246 | unsigned long flags = 0, ifs, cfm, nat; | 246 | unsigned long flags = 0, ifs, cfm, nat; |
247 | long err; | 247 | long err = 0; |
248 | 248 | ||
249 | ifs = scr->pt.cr_ifs; | 249 | ifs = scr->pt.cr_ifs; |
250 | 250 | ||
@@ -257,12 +257,12 @@ setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratc | |||
257 | ia64_flush_fph(current); | 257 | ia64_flush_fph(current); |
258 | if ((current->thread.flags & IA64_THREAD_FPH_VALID)) { | 258 | if ((current->thread.flags & IA64_THREAD_FPH_VALID)) { |
259 | flags |= IA64_SC_FLAG_FPH_VALID; | 259 | flags |= IA64_SC_FLAG_FPH_VALID; |
260 | __copy_to_user(&sc->sc_fr[32], current->thread.fph, 96*16); | 260 | err = __copy_to_user(&sc->sc_fr[32], current->thread.fph, 96*16); |
261 | } | 261 | } |
262 | 262 | ||
263 | nat = ia64_get_scratch_nat_bits(&scr->pt, scr->scratch_unat); | 263 | nat = ia64_get_scratch_nat_bits(&scr->pt, scr->scratch_unat); |
264 | 264 | ||
265 | err = __put_user(flags, &sc->sc_flags); | 265 | err |= __put_user(flags, &sc->sc_flags); |
266 | err |= __put_user(nat, &sc->sc_nat); | 266 | err |= __put_user(nat, &sc->sc_nat); |
267 | err |= PUT_SIGSET(mask, &sc->sc_mask); | 267 | err |= PUT_SIGSET(mask, &sc->sc_mask); |
268 | err |= __put_user(cfm, &sc->sc_cfm); | 268 | err |= __put_user(cfm, &sc->sc_cfm); |
@@ -280,15 +280,7 @@ setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratc | |||
280 | err |= __copy_to_user(&sc->sc_gr[15], &scr->pt.r15, 8); /* r15 */ | 280 | err |= __copy_to_user(&sc->sc_gr[15], &scr->pt.r15, 8); /* r15 */ |
281 | err |= __put_user(scr->pt.cr_iip + ia64_psr(&scr->pt)->ri, &sc->sc_ip); | 281 | err |= __put_user(scr->pt.cr_iip + ia64_psr(&scr->pt)->ri, &sc->sc_ip); |
282 | 282 | ||
283 | if (flags & IA64_SC_FLAG_IN_SYSCALL) { | 283 | if (!(flags & IA64_SC_FLAG_IN_SYSCALL)) { |
284 | /* Clear scratch registers if the signal interrupted a system call. */ | ||
285 | err |= __put_user(0, &sc->sc_ar_ccv); /* ar.ccv */ | ||
286 | err |= __put_user(0, &sc->sc_br[7]); /* b7 */ | ||
287 | err |= __put_user(0, &sc->sc_gr[14]); /* r14 */ | ||
288 | err |= __clear_user(&sc->sc_ar25, 2*8); /* ar.csd & ar.ssd */ | ||
289 | err |= __clear_user(&sc->sc_gr[2], 2*8); /* r2-r3 */ | ||
290 | err |= __clear_user(&sc->sc_gr[16], 16*8); /* r16-r31 */ | ||
291 | } else { | ||
292 | /* Copy scratch regs to sigcontext if the signal didn't interrupt a syscall. */ | 284 | /* Copy scratch regs to sigcontext if the signal didn't interrupt a syscall. */ |
293 | err |= __put_user(scr->pt.ar_ccv, &sc->sc_ar_ccv); /* ar.ccv */ | 285 | err |= __put_user(scr->pt.ar_ccv, &sc->sc_ar_ccv); /* ar.ccv */ |
294 | err |= __put_user(scr->pt.b7, &sc->sc_br[7]); /* b7 */ | 286 | err |= __put_user(scr->pt.b7, &sc->sc_br[7]); /* b7 */ |
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c index 2bb84214e5f1..3ab042720970 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c | |||
@@ -344,33 +344,6 @@ udelay (unsigned long usecs) | |||
344 | } | 344 | } |
345 | EXPORT_SYMBOL(udelay); | 345 | EXPORT_SYMBOL(udelay); |
346 | 346 | ||
347 | static unsigned long long ia64_itc_printk_clock(void) | ||
348 | { | ||
349 | if (ia64_get_kr(IA64_KR_PER_CPU_DATA)) | ||
350 | return sched_clock(); | ||
351 | return 0; | ||
352 | } | ||
353 | |||
354 | static unsigned long long ia64_default_printk_clock(void) | ||
355 | { | ||
356 | return (unsigned long long)(jiffies_64 - INITIAL_JIFFIES) * | ||
357 | (1000000000/HZ); | ||
358 | } | ||
359 | |||
360 | unsigned long long (*ia64_printk_clock)(void) = &ia64_default_printk_clock; | ||
361 | |||
362 | unsigned long long printk_clock(void) | ||
363 | { | ||
364 | return ia64_printk_clock(); | ||
365 | } | ||
366 | |||
367 | void __init | ||
368 | ia64_setup_printk_clock(void) | ||
369 | { | ||
370 | if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT)) | ||
371 | ia64_printk_clock = ia64_itc_printk_clock; | ||
372 | } | ||
373 | |||
374 | /* IA64 doesn't cache the timezone */ | 347 | /* IA64 doesn't cache the timezone */ |
375 | void update_vsyscall_tz(void) | 348 | void update_vsyscall_tz(void) |
376 | { | 349 | { |
diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c index 14261fee5f4d..a2484fc1a06c 100644 --- a/arch/ia64/kernel/topology.c +++ b/arch/ia64/kernel/topology.c | |||
@@ -354,27 +354,27 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev) | |||
354 | if (unlikely(retval < 0)) | 354 | if (unlikely(retval < 0)) |
355 | return retval; | 355 | return retval; |
356 | 356 | ||
357 | all_cpu_cache_info[cpu].kobj.parent = &sys_dev->kobj; | 357 | retval = kobject_init_and_add(&all_cpu_cache_info[cpu].kobj, |
358 | kobject_set_name(&all_cpu_cache_info[cpu].kobj, "%s", "cache"); | 358 | &cache_ktype_percpu_entry, &sys_dev->kobj, |
359 | all_cpu_cache_info[cpu].kobj.ktype = &cache_ktype_percpu_entry; | 359 | "%s", "cache"); |
360 | retval = kobject_register(&all_cpu_cache_info[cpu].kobj); | ||
361 | 360 | ||
362 | for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) { | 361 | for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) { |
363 | this_object = LEAF_KOBJECT_PTR(cpu,i); | 362 | this_object = LEAF_KOBJECT_PTR(cpu,i); |
364 | this_object->kobj.parent = &all_cpu_cache_info[cpu].kobj; | 363 | retval = kobject_init_and_add(&(this_object->kobj), |
365 | kobject_set_name(&(this_object->kobj), "index%1lu", i); | 364 | &cache_ktype, |
366 | this_object->kobj.ktype = &cache_ktype; | 365 | &all_cpu_cache_info[cpu].kobj, |
367 | retval = kobject_register(&(this_object->kobj)); | 366 | "index%1lu", i); |
368 | if (unlikely(retval)) { | 367 | if (unlikely(retval)) { |
369 | for (j = 0; j < i; j++) { | 368 | for (j = 0; j < i; j++) { |
370 | kobject_unregister( | 369 | kobject_put(&(LEAF_KOBJECT_PTR(cpu,j)->kobj)); |
371 | &(LEAF_KOBJECT_PTR(cpu,j)->kobj)); | ||
372 | } | 370 | } |
373 | kobject_unregister(&all_cpu_cache_info[cpu].kobj); | 371 | kobject_put(&all_cpu_cache_info[cpu].kobj); |
374 | cpu_cache_sysfs_exit(cpu); | 372 | cpu_cache_sysfs_exit(cpu); |
375 | break; | 373 | break; |
376 | } | 374 | } |
375 | kobject_uevent(&(this_object->kobj), KOBJ_ADD); | ||
377 | } | 376 | } |
377 | kobject_uevent(&all_cpu_cache_info[cpu].kobj, KOBJ_ADD); | ||
378 | return retval; | 378 | return retval; |
379 | } | 379 | } |
380 | 380 | ||
@@ -385,10 +385,10 @@ static int __cpuinit cache_remove_dev(struct sys_device * sys_dev) | |||
385 | unsigned long i; | 385 | unsigned long i; |
386 | 386 | ||
387 | for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) | 387 | for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) |
388 | kobject_unregister(&(LEAF_KOBJECT_PTR(cpu,i)->kobj)); | 388 | kobject_put(&(LEAF_KOBJECT_PTR(cpu,i)->kobj)); |
389 | 389 | ||
390 | if (all_cpu_cache_info[cpu].kobj.parent) { | 390 | if (all_cpu_cache_info[cpu].kobj.parent) { |
391 | kobject_unregister(&all_cpu_cache_info[cpu].kobj); | 391 | kobject_put(&all_cpu_cache_info[cpu].kobj); |
392 | memset(&all_cpu_cache_info[cpu].kobj, | 392 | memset(&all_cpu_cache_info[cpu].kobj, |
393 | 0, | 393 | 0, |
394 | sizeof(struct kobject)); | 394 | sizeof(struct kobject)); |
diff --git a/arch/ia64/kernel/unaligned.c b/arch/ia64/kernel/unaligned.c index 2173de9fe917..f6a1aeb742b3 100644 --- a/arch/ia64/kernel/unaligned.c +++ b/arch/ia64/kernel/unaligned.c | |||
@@ -1488,16 +1488,19 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs) | |||
1488 | case LDFA_OP: | 1488 | case LDFA_OP: |
1489 | case LDFCCLR_OP: | 1489 | case LDFCCLR_OP: |
1490 | case LDFCNC_OP: | 1490 | case LDFCNC_OP: |
1491 | case LDF_IMM_OP: | ||
1492 | case LDFA_IMM_OP: | ||
1493 | case LDFCCLR_IMM_OP: | ||
1494 | case LDFCNC_IMM_OP: | ||
1495 | if (u.insn.x) | 1491 | if (u.insn.x) |
1496 | ret = emulate_load_floatpair(ifa, u.insn, regs); | 1492 | ret = emulate_load_floatpair(ifa, u.insn, regs); |
1497 | else | 1493 | else |
1498 | ret = emulate_load_float(ifa, u.insn, regs); | 1494 | ret = emulate_load_float(ifa, u.insn, regs); |
1499 | break; | 1495 | break; |
1500 | 1496 | ||
1497 | case LDF_IMM_OP: | ||
1498 | case LDFA_IMM_OP: | ||
1499 | case LDFCCLR_IMM_OP: | ||
1500 | case LDFCNC_IMM_OP: | ||
1501 | ret = emulate_load_float(ifa, u.insn, regs); | ||
1502 | break; | ||
1503 | |||
1501 | case STF_OP: | 1504 | case STF_OP: |
1502 | case STF_IMM_OP: | 1505 | case STF_IMM_OP: |
1503 | ret = emulate_store_float(ifa, u.insn, regs); | 1506 | ret = emulate_store_float(ifa, u.insn, regs); |
diff --git a/arch/ia64/kernel/uncached.c b/arch/ia64/kernel/uncached.c index a7be4f203420..2a90c32024f4 100644 --- a/arch/ia64/kernel/uncached.c +++ b/arch/ia64/kernel/uncached.c | |||
@@ -118,7 +118,7 @@ static int uncached_add_chunk(struct uncached_pool *uc_pool, int nid) | |||
118 | for (i = 0; i < (IA64_GRANULE_SIZE / PAGE_SIZE); i++) | 118 | for (i = 0; i < (IA64_GRANULE_SIZE / PAGE_SIZE); i++) |
119 | SetPageUncached(&page[i]); | 119 | SetPageUncached(&page[i]); |
120 | 120 | ||
121 | flush_tlb_kernel_range(uc_addr, uc_adddr + IA64_GRANULE_SIZE); | 121 | flush_tlb_kernel_range(uc_addr, uc_addr + IA64_GRANULE_SIZE); |
122 | 122 | ||
123 | status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL); | 123 | status = ia64_pal_prefetch_visibility(PAL_VISIBILITY_PHYSICAL); |
124 | if (status == PAL_VISIBILITY_OK_REMOTE_NEEDED) { | 124 | if (status == PAL_VISIBILITY_OK_REMOTE_NEEDED) { |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 00232b4357ba..80622acc95de 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
@@ -27,8 +27,8 @@ SECTIONS | |||
27 | { | 27 | { |
28 | /* Sections to be discarded */ | 28 | /* Sections to be discarded */ |
29 | /DISCARD/ : { | 29 | /DISCARD/ : { |
30 | *(.exit.text) | 30 | EXIT_TEXT |
31 | *(.exit.data) | 31 | EXIT_DATA |
32 | *(.exitcall.exit) | 32 | *(.exitcall.exit) |
33 | *(.IA_64.unwind.exit.text) | 33 | *(.IA_64.unwind.exit.text) |
34 | *(.IA_64.unwind_info.exit.text) | 34 | *(.IA_64.unwind_info.exit.text) |
@@ -119,12 +119,12 @@ SECTIONS | |||
119 | .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) | 119 | .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) |
120 | { | 120 | { |
121 | _sinittext = .; | 121 | _sinittext = .; |
122 | *(.init.text) | 122 | INIT_TEXT |
123 | _einittext = .; | 123 | _einittext = .; |
124 | } | 124 | } |
125 | 125 | ||
126 | .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) | 126 | .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) |
127 | { *(.init.data) } | 127 | { INIT_DATA } |
128 | 128 | ||
129 | #ifdef CONFIG_BLK_DEV_INITRD | 129 | #ifdef CONFIG_BLK_DEV_INITRD |
130 | .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) | 130 | .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) |
@@ -240,11 +240,12 @@ SECTIONS | |||
240 | .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) | 240 | .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) |
241 | { *(.sdata) *(.sdata1) *(.srdata) } | 241 | { *(.sdata) *(.sdata1) *(.srdata) } |
242 | _edata = .; | 242 | _edata = .; |
243 | _bss = .; | 243 | __bss_start = .; |
244 | .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) | 244 | .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) |
245 | { *(.sbss) *(.scommon) } | 245 | { *(.sbss) *(.scommon) } |
246 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) | 246 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) |
247 | { *(.bss) *(COMMON) } | 247 | { *(.bss) *(COMMON) } |
248 | __bss_stop = .; | ||
248 | 249 | ||
249 | _end = .; | 250 | _end = .; |
250 | 251 | ||
diff --git a/arch/ia64/lib/Makefile b/arch/ia64/lib/Makefile index 46edf8444c7e..98771e2a78af 100644 --- a/arch/ia64/lib/Makefile +++ b/arch/ia64/lib/Makefile | |||
@@ -11,8 +11,8 @@ lib-y := __divsi3.o __udivsi3.o __modsi3.o __umodsi3.o \ | |||
11 | flush.o ip_fast_csum.o do_csum.o \ | 11 | flush.o ip_fast_csum.o do_csum.o \ |
12 | memset.o strlen.o xor.o | 12 | memset.o strlen.o xor.o |
13 | 13 | ||
14 | lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o | 14 | obj-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o |
15 | lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o | 15 | obj-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o |
16 | lib-$(CONFIG_PERFMON) += carta_random.o | 16 | lib-$(CONFIG_PERFMON) += carta_random.o |
17 | 17 | ||
18 | AFLAGS___divdi3.o = | 18 | AFLAGS___divdi3.o = |
diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c index 1682fc639038..655da240d13c 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c | |||
@@ -10,6 +10,7 @@ | |||
10 | * IPI based ptc implementation and A-step IPI implementation. | 10 | * IPI based ptc implementation and A-step IPI implementation. |
11 | * Rohit Seth <rohit.seth@intel.com> | 11 | * Rohit Seth <rohit.seth@intel.com> |
12 | * Ken Chen <kenneth.w.chen@intel.com> | 12 | * Ken Chen <kenneth.w.chen@intel.com> |
13 | * Christophe de Dinechin <ddd@hp.com>: Avoid ptc.e on memory allocation | ||
13 | */ | 14 | */ |
14 | #include <linux/module.h> | 15 | #include <linux/module.h> |
15 | #include <linux/init.h> | 16 | #include <linux/init.h> |
@@ -89,9 +90,16 @@ ia64_global_tlb_purge (struct mm_struct *mm, unsigned long start, | |||
89 | { | 90 | { |
90 | static DEFINE_SPINLOCK(ptcg_lock); | 91 | static DEFINE_SPINLOCK(ptcg_lock); |
91 | 92 | ||
92 | if (mm != current->active_mm || !current->mm) { | 93 | struct mm_struct *active_mm = current->active_mm; |
93 | flush_tlb_all(); | 94 | |
94 | return; | 95 | if (mm != active_mm) { |
96 | /* Restore region IDs for mm */ | ||
97 | if (mm && active_mm) { | ||
98 | activate_context(mm); | ||
99 | } else { | ||
100 | flush_tlb_all(); | ||
101 | return; | ||
102 | } | ||
95 | } | 103 | } |
96 | 104 | ||
97 | /* HW requires global serialization of ptc.ga. */ | 105 | /* HW requires global serialization of ptc.ga. */ |
@@ -107,6 +115,10 @@ ia64_global_tlb_purge (struct mm_struct *mm, unsigned long start, | |||
107 | } while (start < end); | 115 | } while (start < end); |
108 | } | 116 | } |
109 | spin_unlock(&ptcg_lock); | 117 | spin_unlock(&ptcg_lock); |
118 | |||
119 | if (mm != active_mm) { | ||
120 | activate_context(active_mm); | ||
121 | } | ||
110 | } | 122 | } |
111 | 123 | ||
112 | void | 124 | void |
@@ -180,7 +192,7 @@ ia64_tlb_init (void) | |||
180 | long status; | 192 | long status; |
181 | 193 | ||
182 | if ((status = ia64_pal_vm_page_size(&tr_pgbits, &purge.mask)) != 0) { | 194 | if ((status = ia64_pal_vm_page_size(&tr_pgbits, &purge.mask)) != 0) { |
183 | printk(KERN_ERR "PAL_VM_PAGE_SIZE failed with status=%ld;" | 195 | printk(KERN_ERR "PAL_VM_PAGE_SIZE failed with status=%ld; " |
184 | "defaulting to architected purge page-sizes.\n", status); | 196 | "defaulting to architected purge page-sizes.\n", status); |
185 | purge.mask = 0x115557000UL; | 197 | purge.mask = 0x115557000UL; |
186 | } | 198 | } |
diff --git a/arch/ia64/scripts/unwcheck.py b/arch/ia64/scripts/unwcheck.py index c27849889e19..c27849889e19 100755..100644 --- a/arch/ia64/scripts/unwcheck.py +++ b/arch/ia64/scripts/unwcheck.py | |||
diff --git a/arch/ia64/sn/kernel/bte.c b/arch/ia64/sn/kernel/bte.c index b362d6d6a8c8..9456d4034024 100644 --- a/arch/ia64/sn/kernel/bte.c +++ b/arch/ia64/sn/kernel/bte.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved. | 6 | * Copyright (c) 2000-2007 Silicon Graphics, Inc. All Rights Reserved. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/module.h> | 9 | #include <linux/module.h> |
@@ -227,7 +227,7 @@ retry_bteop: | |||
227 | BTE_LNSTAT_LOAD(bte), *bte->most_rcnt_na)); | 227 | BTE_LNSTAT_LOAD(bte), *bte->most_rcnt_na)); |
228 | 228 | ||
229 | if (transfer_stat & IBLS_ERROR) { | 229 | if (transfer_stat & IBLS_ERROR) { |
230 | bte_status = transfer_stat & ~IBLS_ERROR; | 230 | bte_status = BTE_GET_ERROR_STATUS(transfer_stat); |
231 | } else { | 231 | } else { |
232 | bte_status = BTE_SUCCESS; | 232 | bte_status = BTE_SUCCESS; |
233 | } | 233 | } |
diff --git a/arch/ia64/sn/kernel/bte_error.c b/arch/ia64/sn/kernel/bte_error.c index 27c5936ccfe9..4cb09f3f1efc 100644 --- a/arch/ia64/sn/kernel/bte_error.c +++ b/arch/ia64/sn/kernel/bte_error.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. | 6 | * Copyright (c) 2000-2007 Silicon Graphics, Inc. All Rights Reserved. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/types.h> | 9 | #include <linux/types.h> |
@@ -148,7 +148,11 @@ int shub2_bte_error_handler(unsigned long _nodepda) | |||
148 | for (i = 0; i < BTES_PER_NODE; i++) { | 148 | for (i = 0; i < BTES_PER_NODE; i++) { |
149 | bte = &err_nodepda->bte_if[i]; | 149 | bte = &err_nodepda->bte_if[i]; |
150 | status = BTE_LNSTAT_LOAD(bte); | 150 | status = BTE_LNSTAT_LOAD(bte); |
151 | if ((status & IBLS_ERROR) || !(status & IBLS_BUSY)) | 151 | if (status & IBLS_ERROR) { |
152 | bte->bh_error = BTE_SHUB2_ERROR(status); | ||
153 | continue; | ||
154 | } | ||
155 | if (!(status & IBLS_BUSY)) | ||
152 | continue; | 156 | continue; |
153 | mod_timer(recovery_timer, jiffies + (HZ * 5)); | 157 | mod_timer(recovery_timer, jiffies + (HZ * 5)); |
154 | BTE_PRINTK(("eh:%p:%d Marked Giving up\n", err_nodepda, | 158 | BTE_PRINTK(("eh:%p:%d Marked Giving up\n", err_nodepda, |
diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c index 4594770e685a..c4eb84f9e781 100644 --- a/arch/ia64/sn/kernel/io_common.c +++ b/arch/ia64/sn/kernel/io_common.c | |||
@@ -347,7 +347,7 @@ sn_common_bus_fixup(struct pci_bus *bus, | |||
347 | if (controller->node >= num_online_nodes()) { | 347 | if (controller->node >= num_online_nodes()) { |
348 | struct pcibus_bussoft *b = SN_PCIBUS_BUSSOFT(bus); | 348 | struct pcibus_bussoft *b = SN_PCIBUS_BUSSOFT(bus); |
349 | 349 | ||
350 | printk(KERN_WARNING "Device ASIC=%u XID=%u PBUSNUM=%u" | 350 | printk(KERN_WARNING "Device ASIC=%u XID=%u PBUSNUM=%u " |
351 | "L_IO=%lx L_MEM=%lx BASE=%lx\n", | 351 | "L_IO=%lx L_MEM=%lx BASE=%lx\n", |
352 | b->bs_asic_type, b->bs_xid, b->bs_persist_busnum, | 352 | b->bs_asic_type, b->bs_xid, b->bs_persist_busnum, |
353 | b->bs_legacy_io, b->bs_legacy_mem, b->bs_base); | 353 | b->bs_legacy_io, b->bs_legacy_mem, b->bs_base); |
@@ -545,19 +545,18 @@ sn_io_late_init(void) | |||
545 | nasid = NASID_GET(bussoft->bs_base); | 545 | nasid = NASID_GET(bussoft->bs_base); |
546 | cnode = nasid_to_cnodeid(nasid); | 546 | cnode = nasid_to_cnodeid(nasid); |
547 | if ((bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) || | 547 | if ((bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) || |
548 | (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE)) { | 548 | (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE) || |
549 | /* TIO PCI Bridge: find nearest node with CPUs */ | 549 | (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_PIC)) { |
550 | /* PCI Bridge: find nearest node with CPUs */ | ||
550 | int e = sn_hwperf_get_nearest_node(cnode, NULL, | 551 | int e = sn_hwperf_get_nearest_node(cnode, NULL, |
551 | &near_cnode); | 552 | &near_cnode); |
552 | if (e < 0) { | 553 | if (e < 0) { |
553 | near_cnode = (cnodeid_t)-1; /* use any node */ | 554 | near_cnode = (cnodeid_t)-1; /* use any node */ |
554 | printk(KERN_WARNING "pcibr_bus_fixup: failed " | 555 | printk(KERN_WARNING "sn_io_late_init: failed " |
555 | "to find near node with CPUs to TIO " | 556 | "to find near node with CPUs for " |
556 | "node %d, err=%d\n", cnode, e); | 557 | "node %d, err=%d\n", cnode, e); |
557 | } | 558 | } |
558 | PCI_CONTROLLER(bus)->node = near_cnode; | 559 | PCI_CONTROLLER(bus)->node = near_cnode; |
559 | } else if (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_PIC) { | ||
560 | PCI_CONTROLLER(bus)->node = cnode; | ||
561 | } | 560 | } |
562 | } | 561 | } |
563 | 562 | ||
diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index 1f38a3a68390..bb1d24929640 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c | |||
@@ -64,7 +64,6 @@ extern void sn_timer_init(void); | |||
64 | extern unsigned long last_time_offset; | 64 | extern unsigned long last_time_offset; |
65 | extern void (*ia64_mark_idle) (int); | 65 | extern void (*ia64_mark_idle) (int); |
66 | extern void snidle(int); | 66 | extern void snidle(int); |
67 | extern unsigned long long (*ia64_printk_clock)(void); | ||
68 | 67 | ||
69 | unsigned long sn_rtc_cycles_per_second; | 68 | unsigned long sn_rtc_cycles_per_second; |
70 | EXPORT_SYMBOL(sn_rtc_cycles_per_second); | 69 | EXPORT_SYMBOL(sn_rtc_cycles_per_second); |
@@ -360,14 +359,6 @@ sn_scan_pcdp(void) | |||
360 | 359 | ||
361 | static unsigned long sn2_rtc_initial; | 360 | static unsigned long sn2_rtc_initial; |
362 | 361 | ||
363 | static unsigned long long ia64_sn2_printk_clock(void) | ||
364 | { | ||
365 | unsigned long rtc_now = rtc_time(); | ||
366 | |||
367 | return (rtc_now - sn2_rtc_initial) * | ||
368 | (1000000000 / sn_rtc_cycles_per_second); | ||
369 | } | ||
370 | |||
371 | /** | 362 | /** |
372 | * sn_setup - SN platform setup routine | 363 | * sn_setup - SN platform setup routine |
373 | * @cmdline_p: kernel command line | 364 | * @cmdline_p: kernel command line |
@@ -468,8 +459,6 @@ void __init sn_setup(char **cmdline_p) | |||
468 | 459 | ||
469 | platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR; | 460 | platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR; |
470 | 461 | ||
471 | ia64_printk_clock = ia64_sn2_printk_clock; | ||
472 | |||
473 | printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF); | 462 | printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF); |
474 | 463 | ||
475 | /* | 464 | /* |
diff --git a/arch/ia64/sn/kernel/xp_nofault.S b/arch/ia64/sn/kernel/xp_nofault.S index 54e8973b6e99..98e7c7dbfdd8 100644 --- a/arch/ia64/sn/kernel/xp_nofault.S +++ b/arch/ia64/sn/kernel/xp_nofault.S | |||
@@ -3,7 +3,7 @@ | |||
3 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * for more details. | 4 | * for more details. |
5 | * | 5 | * |
6 | * Copyright (c) 2004-2005 Silicon Graphics, Inc. All Rights Reserved. | 6 | * Copyright (c) 2004-2007 Silicon Graphics, Inc. All Rights Reserved. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | 9 | ||
@@ -14,6 +14,11 @@ | |||
14 | * PIO read fails, the MCA handler will force the error to look | 14 | * PIO read fails, the MCA handler will force the error to look |
15 | * corrected and vector to the xp_error_PIOR which will return an error. | 15 | * corrected and vector to the xp_error_PIOR which will return an error. |
16 | * | 16 | * |
17 | * The definition of "consumption" and the time it takes for an MCA | ||
18 | * to surface is processor implementation specific. This code | ||
19 | * is sufficient on Itanium through the Montvale processor family. | ||
20 | * It may need to be adjusted for future processor implementations. | ||
21 | * | ||
17 | * extern int xp_nofault_PIOR(void *remote_register); | 22 | * extern int xp_nofault_PIOR(void *remote_register); |
18 | */ | 23 | */ |
19 | 24 | ||
@@ -22,11 +27,10 @@ xp_nofault_PIOR: | |||
22 | mov r8=r0 // Stage a success return value | 27 | mov r8=r0 // Stage a success return value |
23 | ld8.acq r9=[r32];; // PIO Read the specified register | 28 | ld8.acq r9=[r32];; // PIO Read the specified register |
24 | adds r9=1,r9;; // Add to force consumption | 29 | adds r9=1,r9;; // Add to force consumption |
25 | or r9=r9,r9;; // Or to force consumption | 30 | srlz.i;; // Allow time for MCA to surface |
26 | br.ret.sptk.many b0;; // Return success | 31 | br.ret.sptk.many b0;; // Return success |
27 | 32 | ||
28 | .global xp_error_PIOR | 33 | .global xp_error_PIOR |
29 | xp_error_PIOR: | 34 | xp_error_PIOR: |
30 | mov r8=1 // Return value of 1 | 35 | mov r8=1 // Return value of 1 |
31 | br.ret.sptk.many b0;; // Return failure | 36 | br.ret.sptk.many b0;; // Return failure |
32 | |||
diff --git a/arch/ia64/sn/pci/tioce_provider.c b/arch/ia64/sn/pci/tioce_provider.c index cee9379d44e0..e1a3e19d3d9c 100644 --- a/arch/ia64/sn/pci/tioce_provider.c +++ b/arch/ia64/sn/pci/tioce_provider.c | |||
@@ -41,7 +41,7 @@ | |||
41 | * } else | 41 | * } else |
42 | * do desired mmr access | 42 | * do desired mmr access |
43 | * | 43 | * |
44 | * According to hw, we can use reads instead of writes to the above addres | 44 | * According to hw, we can use reads instead of writes to the above address |
45 | * | 45 | * |
46 | * Note this WAR can only to be used for accessing internal MMR's in the | 46 | * Note this WAR can only to be used for accessing internal MMR's in the |
47 | * TIOCE Coretalk Address Range 0x0 - 0x07ff_ffff. This includes the | 47 | * TIOCE Coretalk Address Range 0x0 - 0x07ff_ffff. This includes the |