diff options
Diffstat (limited to 'arch')
45 files changed, 211 insertions, 134 deletions
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/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/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/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/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/setup.c b/arch/ia64/kernel/setup.c index 2b3751eef5ce..4ac2b1f1bd3b 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -95,7 +95,6 @@ static struct resource bss_resource = { | |||
95 | .name = "Kernel bss", | 95 | .name = "Kernel bss", |
96 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM | 96 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM |
97 | }; | 97 | }; |
98 | extern char _text[], _end[], _etext[], _edata[], _bss[]; | ||
99 | 98 | ||
100 | unsigned long ia64_max_cacheline_size; | 99 | unsigned long ia64_max_cacheline_size; |
101 | 100 | ||
@@ -206,7 +205,7 @@ static int __init register_memory(void) | |||
206 | code_resource.end = ia64_tpa(_etext) - 1; | 205 | code_resource.end = ia64_tpa(_etext) - 1; |
207 | data_resource.start = ia64_tpa(_etext); | 206 | data_resource.start = ia64_tpa(_etext); |
208 | data_resource.end = ia64_tpa(_edata) - 1; | 207 | data_resource.end = ia64_tpa(_edata) - 1; |
209 | bss_resource.start = ia64_tpa(_bss); | 208 | bss_resource.start = ia64_tpa(__bss_start); |
210 | bss_resource.end = ia64_tpa(_end) - 1; | 209 | bss_resource.end = ia64_tpa(_end) - 1; |
211 | efi_initialize_iomem_resources(&code_resource, &data_resource, | 210 | efi_initialize_iomem_resources(&code_resource, &data_resource, |
212 | &bss_resource); | 211 | &bss_resource); |
diff --git a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c index cdb64cc4d9c8..4c730099d58f 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); |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 00232b4357ba..757e419ebcf8 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
@@ -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..cef164729db7 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c | |||
@@ -180,7 +180,7 @@ ia64_tlb_init (void) | |||
180 | long status; | 180 | long status; |
181 | 181 | ||
182 | if ((status = ia64_pal_vm_page_size(&tr_pgbits, &purge.mask)) != 0) { | 182 | if ((status = ia64_pal_vm_page_size(&tr_pgbits, &purge.mask)) != 0) { |
183 | printk(KERN_ERR "PAL_VM_PAGE_SIZE failed with status=%ld;" | 183 | printk(KERN_ERR "PAL_VM_PAGE_SIZE failed with status=%ld; " |
184 | "defaulting to architected purge page-sizes.\n", status); | 184 | "defaulting to architected purge page-sizes.\n", status); |
185 | purge.mask = 0x115557000UL; | 185 | purge.mask = 0x115557000UL; |
186 | } | 186 | } |
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/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/mips/au1000/Kconfig b/arch/mips/au1000/Kconfig index 05d1354aad3a..1fe97cccead1 100644 --- a/arch/mips/au1000/Kconfig +++ b/arch/mips/au1000/Kconfig | |||
@@ -7,7 +7,6 @@ config MIPS_MTX1 | |||
7 | bool "4G Systems MTX-1 board" | 7 | bool "4G Systems MTX-1 board" |
8 | select DMA_NONCOHERENT | 8 | select DMA_NONCOHERENT |
9 | select HW_HAS_PCI | 9 | select HW_HAS_PCI |
10 | select RESOURCES_64BIT if PCI | ||
11 | select SOC_AU1500 | 10 | select SOC_AU1500 |
12 | select SYS_SUPPORTS_LITTLE_ENDIAN | 11 | select SYS_SUPPORTS_LITTLE_ENDIAN |
13 | 12 | ||
@@ -22,7 +21,6 @@ config MIPS_DB1000 | |||
22 | select SOC_AU1000 | 21 | select SOC_AU1000 |
23 | select DMA_NONCOHERENT | 22 | select DMA_NONCOHERENT |
24 | select HW_HAS_PCI | 23 | select HW_HAS_PCI |
25 | select RESOURCES_64BIT if PCI | ||
26 | select SYS_SUPPORTS_LITTLE_ENDIAN | 24 | select SYS_SUPPORTS_LITTLE_ENDIAN |
27 | 25 | ||
28 | config MIPS_DB1100 | 26 | config MIPS_DB1100 |
@@ -44,7 +42,6 @@ config MIPS_DB1500 | |||
44 | select DMA_NONCOHERENT | 42 | select DMA_NONCOHERENT |
45 | select HW_HAS_PCI | 43 | select HW_HAS_PCI |
46 | select MIPS_DISABLE_OBSOLETE_IDE | 44 | select MIPS_DISABLE_OBSOLETE_IDE |
47 | select RESOURCES_64BIT if PCI | ||
48 | select SYS_SUPPORTS_BIG_ENDIAN | 45 | select SYS_SUPPORTS_BIG_ENDIAN |
49 | select SYS_SUPPORTS_LITTLE_ENDIAN | 46 | select SYS_SUPPORTS_LITTLE_ENDIAN |
50 | 47 | ||
@@ -54,7 +51,6 @@ config MIPS_DB1550 | |||
54 | select HW_HAS_PCI | 51 | select HW_HAS_PCI |
55 | select DMA_NONCOHERENT | 52 | select DMA_NONCOHERENT |
56 | select MIPS_DISABLE_OBSOLETE_IDE | 53 | select MIPS_DISABLE_OBSOLETE_IDE |
57 | select RESOURCES_64BIT if PCI | ||
58 | select SYS_SUPPORTS_LITTLE_ENDIAN | 54 | select SYS_SUPPORTS_LITTLE_ENDIAN |
59 | 55 | ||
60 | config MIPS_MIRAGE | 56 | config MIPS_MIRAGE |
@@ -68,7 +64,6 @@ config MIPS_PB1000 | |||
68 | select SOC_AU1000 | 64 | select SOC_AU1000 |
69 | select DMA_NONCOHERENT | 65 | select DMA_NONCOHERENT |
70 | select HW_HAS_PCI | 66 | select HW_HAS_PCI |
71 | select RESOURCES_64BIT if PCI | ||
72 | select SWAP_IO_SPACE | 67 | select SWAP_IO_SPACE |
73 | select SYS_SUPPORTS_LITTLE_ENDIAN | 68 | select SYS_SUPPORTS_LITTLE_ENDIAN |
74 | 69 | ||
@@ -77,7 +72,6 @@ config MIPS_PB1100 | |||
77 | select SOC_AU1100 | 72 | select SOC_AU1100 |
78 | select DMA_NONCOHERENT | 73 | select DMA_NONCOHERENT |
79 | select HW_HAS_PCI | 74 | select HW_HAS_PCI |
80 | select RESOURCES_64BIT if PCI | ||
81 | select SWAP_IO_SPACE | 75 | select SWAP_IO_SPACE |
82 | select SYS_SUPPORTS_LITTLE_ENDIAN | 76 | select SYS_SUPPORTS_LITTLE_ENDIAN |
83 | 77 | ||
@@ -86,7 +80,6 @@ config MIPS_PB1200 | |||
86 | select SOC_AU1200 | 80 | select SOC_AU1200 |
87 | select DMA_NONCOHERENT | 81 | select DMA_NONCOHERENT |
88 | select MIPS_DISABLE_OBSOLETE_IDE | 82 | select MIPS_DISABLE_OBSOLETE_IDE |
89 | select RESOURCES_64BIT if PCI | ||
90 | select SYS_SUPPORTS_LITTLE_ENDIAN | 83 | select SYS_SUPPORTS_LITTLE_ENDIAN |
91 | 84 | ||
92 | config MIPS_PB1500 | 85 | config MIPS_PB1500 |
@@ -94,7 +87,6 @@ config MIPS_PB1500 | |||
94 | select SOC_AU1500 | 87 | select SOC_AU1500 |
95 | select DMA_NONCOHERENT | 88 | select DMA_NONCOHERENT |
96 | select HW_HAS_PCI | 89 | select HW_HAS_PCI |
97 | select RESOURCES_64BIT if PCI | ||
98 | select SYS_SUPPORTS_LITTLE_ENDIAN | 90 | select SYS_SUPPORTS_LITTLE_ENDIAN |
99 | 91 | ||
100 | config MIPS_PB1550 | 92 | config MIPS_PB1550 |
@@ -103,7 +95,6 @@ config MIPS_PB1550 | |||
103 | select DMA_NONCOHERENT | 95 | select DMA_NONCOHERENT |
104 | select HW_HAS_PCI | 96 | select HW_HAS_PCI |
105 | select MIPS_DISABLE_OBSOLETE_IDE | 97 | select MIPS_DISABLE_OBSOLETE_IDE |
106 | select RESOURCES_64BIT if PCI | ||
107 | select SYS_SUPPORTS_LITTLE_ENDIAN | 98 | select SYS_SUPPORTS_LITTLE_ENDIAN |
108 | 99 | ||
109 | config MIPS_XXS1500 | 100 | config MIPS_XXS1500 |
diff --git a/arch/mips/au1000/common/pci.c b/arch/mips/au1000/common/pci.c index 9be99a68932a..6fa70a36a250 100644 --- a/arch/mips/au1000/common/pci.c +++ b/arch/mips/au1000/common/pci.c | |||
@@ -39,15 +39,15 @@ | |||
39 | 39 | ||
40 | /* TBD */ | 40 | /* TBD */ |
41 | static struct resource pci_io_resource = { | 41 | static struct resource pci_io_resource = { |
42 | .start = (resource_size_t)PCI_IO_START, | 42 | .start = PCI_IO_START, |
43 | .end = (resource_size_t)PCI_IO_END, | 43 | .end = PCI_IO_END, |
44 | .name = "PCI IO space", | 44 | .name = "PCI IO space", |
45 | .flags = IORESOURCE_IO | 45 | .flags = IORESOURCE_IO |
46 | }; | 46 | }; |
47 | 47 | ||
48 | static struct resource pci_mem_resource = { | 48 | static struct resource pci_mem_resource = { |
49 | .start = (resource_size_t)PCI_MEM_START, | 49 | .start = PCI_MEM_START, |
50 | .end = (resource_size_t)PCI_MEM_END, | 50 | .end = PCI_MEM_END, |
51 | .name = "PCI memory space", | 51 | .name = "PCI memory space", |
52 | .flags = IORESOURCE_MEM | 52 | .flags = IORESOURCE_MEM |
53 | }; | 53 | }; |
diff --git a/arch/mips/au1000/common/setup.c b/arch/mips/au1000/common/setup.c index a90d425d4651..d885e3848ec6 100644 --- a/arch/mips/au1000/common/setup.c +++ b/arch/mips/au1000/common/setup.c | |||
@@ -137,12 +137,11 @@ phys_t __fixup_bigphys_addr(phys_t phys_addr, phys_t size) | |||
137 | 137 | ||
138 | #ifdef CONFIG_PCI | 138 | #ifdef CONFIG_PCI |
139 | { | 139 | { |
140 | u32 start, end; | 140 | u32 start = (u32)Au1500_PCI_MEM_START; |
141 | u32 end = (u32)Au1500_PCI_MEM_END; | ||
141 | 142 | ||
142 | start = (u32)Au1500_PCI_MEM_START; | 143 | /* Check for PCI memory window */ |
143 | end = (u32)Au1500_PCI_MEM_END; | 144 | if (phys_addr >= start && (phys_addr + size - 1) <= end) |
144 | /* check for pci memory window */ | ||
145 | if ((phys_addr >= start) && ((phys_addr + size) < end)) | ||
146 | return (phys_t) | 145 | return (phys_t) |
147 | ((phys_addr - start) + Au1500_PCI_MEM_START); | 146 | ((phys_addr - start) + Au1500_PCI_MEM_START); |
148 | } | 147 | } |
diff --git a/arch/mips/cobalt/time.c b/arch/mips/cobalt/time.c index fa819fccd5db..4a570e7145fe 100644 --- a/arch/mips/cobalt/time.c +++ b/arch/mips/cobalt/time.c | |||
@@ -27,9 +27,28 @@ | |||
27 | 27 | ||
28 | void __init plat_time_init(void) | 28 | void __init plat_time_init(void) |
29 | { | 29 | { |
30 | u32 start, end; | ||
31 | int i = HZ / 10; | ||
32 | |||
30 | setup_pit_timer(); | 33 | setup_pit_timer(); |
31 | 34 | ||
32 | gt641xx_set_base_clock(GT641XX_BASE_CLOCK); | 35 | gt641xx_set_base_clock(GT641XX_BASE_CLOCK); |
33 | 36 | ||
34 | mips_timer_state = gt641xx_timer0_state; | 37 | /* |
38 | * MIPS counter frequency is measured during a 100msec interval | ||
39 | * using GT64111 timer0. | ||
40 | */ | ||
41 | while (!gt641xx_timer0_state()) | ||
42 | ; | ||
43 | |||
44 | start = read_c0_count(); | ||
45 | |||
46 | while (i--) | ||
47 | while (!gt641xx_timer0_state()) | ||
48 | ; | ||
49 | |||
50 | end = read_c0_count(); | ||
51 | |||
52 | mips_hpt_frequency = (end - start) * 10; | ||
53 | printk(KERN_INFO "MIPS counter frequency %dHz\n", mips_hpt_frequency); | ||
35 | } | 54 | } |
diff --git a/arch/mips/configs/bigsur_defconfig b/arch/mips/configs/bigsur_defconfig index 80b0c99c2cfb..3c70c9d16d01 100644 --- a/arch/mips/configs/bigsur_defconfig +++ b/arch/mips/configs/bigsur_defconfig | |||
@@ -76,9 +76,13 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y | |||
76 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 76 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
77 | CONFIG_GENERIC_HWEIGHT=y | 77 | CONFIG_GENERIC_HWEIGHT=y |
78 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 78 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
79 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
79 | CONFIG_GENERIC_TIME=y | 80 | CONFIG_GENERIC_TIME=y |
81 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
80 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 82 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
81 | # CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set | 83 | # CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set |
84 | CONFIG_CEVT_BCM1480=y | ||
85 | CONFIG_CSRC_BCM1480=y | ||
82 | CONFIG_DMA_COHERENT=y | 86 | CONFIG_DMA_COHERENT=y |
83 | CONFIG_CPU_BIG_ENDIAN=y | 87 | CONFIG_CPU_BIG_ENDIAN=y |
84 | # CONFIG_CPU_LITTLE_ENDIAN is not set | 88 | # CONFIG_CPU_LITTLE_ENDIAN is not set |
@@ -91,6 +95,11 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5 | |||
91 | # | 95 | # |
92 | # CPU selection | 96 | # CPU selection |
93 | # | 97 | # |
98 | CONFIG_TICK_ONESHOT=y | ||
99 | CONFIG_NO_HZ=y | ||
100 | CONFIG_HIGH_RES_TIMERS=y | ||
101 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
102 | # CONFIG_CPU_LOONGSON2 is not set | ||
94 | # CONFIG_CPU_MIPS32_R1 is not set | 103 | # CONFIG_CPU_MIPS32_R1 is not set |
95 | # CONFIG_CPU_MIPS32_R2 is not set | 104 | # CONFIG_CPU_MIPS32_R2 is not set |
96 | # CONFIG_CPU_MIPS64_R1 is not set | 105 | # CONFIG_CPU_MIPS64_R1 is not set |
diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig index fbd2d802fdfd..4b7e43c9f69a 100644 --- a/arch/mips/configs/malta_defconfig +++ b/arch/mips/configs/malta_defconfig | |||
@@ -49,10 +49,13 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y | |||
49 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 49 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
50 | CONFIG_GENERIC_HWEIGHT=y | 50 | CONFIG_GENERIC_HWEIGHT=y |
51 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 51 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
52 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
52 | CONFIG_GENERIC_TIME=y | 53 | CONFIG_GENERIC_TIME=y |
54 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
53 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 55 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y |
54 | # CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set | 56 | # CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set |
55 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | 57 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
58 | CONFIG_CEVT_R4K=y | ||
56 | CONFIG_DMA_NONCOHERENT=y | 59 | CONFIG_DMA_NONCOHERENT=y |
57 | CONFIG_DMA_NEED_PCI_MAP_STATE=y | 60 | CONFIG_DMA_NEED_PCI_MAP_STATE=y |
58 | CONFIG_EARLY_PRINTK=y | 61 | CONFIG_EARLY_PRINTK=y |
@@ -76,6 +79,10 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5 | |||
76 | # | 79 | # |
77 | # CPU selection | 80 | # CPU selection |
78 | # | 81 | # |
82 | CONFIG_TICK_ONESHOT=y | ||
83 | CONFIG_NO_HZ=y | ||
84 | CONFIG_HIGH_RES_TIMERS=y | ||
85 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
79 | # CONFIG_CPU_LOONGSON2 is not set | 86 | # CONFIG_CPU_LOONGSON2 is not set |
80 | # CONFIG_CPU_MIPS32_R1 is not set | 87 | # CONFIG_CPU_MIPS32_R1 is not set |
81 | CONFIG_CPU_MIPS32_R2=y | 88 | CONFIG_CPU_MIPS32_R2=y |
@@ -253,6 +260,7 @@ CONFIG_HW_HAS_PCI=y | |||
253 | CONFIG_PCI=y | 260 | CONFIG_PCI=y |
254 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 261 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
255 | CONFIG_MMU=y | 262 | CONFIG_MMU=y |
263 | CONFIG_I8253=y | ||
256 | 264 | ||
257 | # | 265 | # |
258 | # PCCARD (PCMCIA/CardBus) support | 266 | # PCCARD (PCMCIA/CardBus) support |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index 11cb264f59ce..2c09a442e5e5 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
@@ -77,9 +77,8 @@ void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp) | |||
77 | unsigned long status; | 77 | unsigned long status; |
78 | 78 | ||
79 | /* New thread loses kernel privileges. */ | 79 | /* New thread loses kernel privileges. */ |
80 | status = regs->cp0_status & ~(ST0_CU0|ST0_CU1|KU_MASK); | 80 | status = regs->cp0_status & ~(ST0_CU0|ST0_CU1|ST0_FR|KU_MASK); |
81 | #ifdef CONFIG_64BIT | 81 | #ifdef CONFIG_64BIT |
82 | status &= ~ST0_FR; | ||
83 | status |= test_thread_flag(TIF_32BIT_REGS) ? 0 : ST0_FR; | 82 | status |= test_thread_flag(TIF_32BIT_REGS) ? 0 : ST0_FR; |
84 | #endif | 83 | #endif |
85 | status |= KU_USER; | 84 | status |= KU_USER; |
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c index 52075426c373..1ecfbb7eba6c 100644 --- a/arch/mips/kernel/time.c +++ b/arch/mips/kernel/time.c | |||
@@ -109,10 +109,6 @@ void __cpuinit clockevent_set_clock(struct clock_event_device *cd, | |||
109 | cd->mult = (u32) temp; | 109 | cd->mult = (u32) temp; |
110 | } | 110 | } |
111 | 111 | ||
112 | void __init __weak plat_time_init(void) | ||
113 | { | ||
114 | } | ||
115 | |||
116 | /* | 112 | /* |
117 | * This function exists in order to cause an error due to a duplicate | 113 | * This function exists in order to cause an error due to a duplicate |
118 | * definition if platform code should have its own implementation. The hook | 114 | * definition if platform code should have its own implementation. The hook |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 23e73d0650a3..fcae66752972 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -1317,12 +1317,12 @@ void __init per_cpu_trap_init(void) | |||
1317 | #endif | 1317 | #endif |
1318 | if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV) | 1318 | if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV) |
1319 | status_set |= ST0_XX; | 1319 | status_set |= ST0_XX; |
1320 | if (cpu_has_dsp) | ||
1321 | status_set |= ST0_MX; | ||
1322 | |||
1320 | change_c0_status(ST0_CU|ST0_MX|ST0_RE|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX, | 1323 | change_c0_status(ST0_CU|ST0_MX|ST0_RE|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX, |
1321 | status_set); | 1324 | status_set); |
1322 | 1325 | ||
1323 | if (cpu_has_dsp) | ||
1324 | set_c0_status(ST0_MX); | ||
1325 | |||
1326 | #ifdef CONFIG_CPU_MIPSR2 | 1326 | #ifdef CONFIG_CPU_MIPSR2 |
1327 | if (cpu_has_mips_r2) { | 1327 | if (cpu_has_mips_r2) { |
1328 | unsigned int enable = 0x0000000f; | 1328 | unsigned int enable = 0x0000000f; |
diff --git a/arch/mips/mips-boards/generic/display.c b/arch/mips/mips-boards/generic/display.c index 5d600054090a..2a0057cfc30d 100644 --- a/arch/mips/mips-boards/generic/display.c +++ b/arch/mips/mips-boards/generic/display.c | |||
@@ -37,9 +37,9 @@ void mips_display_message(const char *str) | |||
37 | 37 | ||
38 | for (i = 0; i <= 14; i=i+2) { | 38 | for (i = 0; i <= 14; i=i+2) { |
39 | if (*str) | 39 | if (*str) |
40 | writel(*str++, display + i); | 40 | __raw_writel(*str++, display + i); |
41 | else | 41 | else |
42 | writel(' ', display + i); | 42 | __raw_writel(' ', display + i); |
43 | } | 43 | } |
44 | } | 44 | } |
45 | 45 | ||
diff --git a/arch/mips/mips-boards/generic/memory.c b/arch/mips/mips-boards/generic/memory.c index dc272c188233..2c5c27c8e86d 100644 --- a/arch/mips/mips-boards/generic/memory.c +++ b/arch/mips/mips-boards/generic/memory.c | |||
@@ -169,6 +169,7 @@ void __init prom_meminit(void) | |||
169 | 169 | ||
170 | void __init prom_free_prom_memory(void) | 170 | void __init prom_free_prom_memory(void) |
171 | { | 171 | { |
172 | #if 0 /* for now ... */ | ||
172 | unsigned long addr; | 173 | unsigned long addr; |
173 | int i; | 174 | int i; |
174 | 175 | ||
@@ -180,4 +181,5 @@ void __init prom_free_prom_memory(void) | |||
180 | free_init_pages("prom memory", | 181 | free_init_pages("prom memory", |
181 | addr, addr + boot_mem_map.map[i].size); | 182 | addr, addr + boot_mem_map.map[i].size); |
182 | } | 183 | } |
184 | #endif | ||
183 | } | 185 | } |
diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c index 589b745d822a..6e6981fd7934 100644 --- a/arch/mips/pci/pci.c +++ b/arch/mips/pci/pci.c | |||
@@ -242,6 +242,8 @@ static void pcibios_fixup_device_resources(struct pci_dev *dev, | |||
242 | for (i = 0; i < PCI_NUM_RESOURCES; i++) { | 242 | for (i = 0; i < PCI_NUM_RESOURCES; i++) { |
243 | if (!dev->resource[i].start) | 243 | if (!dev->resource[i].start) |
244 | continue; | 244 | continue; |
245 | if (dev->resource[i].flags & IORESOURCE_PCI_FIXED) | ||
246 | continue; | ||
245 | if (dev->resource[i].flags & IORESOURCE_IO) | 247 | if (dev->resource[i].flags & IORESOURCE_IO) |
246 | offset = hose->io_offset; | 248 | offset = hose->io_offset; |
247 | else if (dev->resource[i].flags & IORESOURCE_MEM) | 249 | else if (dev->resource[i].flags & IORESOURCE_MEM) |
diff --git a/arch/mips/qemu/q-irq.c b/arch/mips/qemu/q-irq.c index 11f984767880..7df36dbe65c7 100644 --- a/arch/mips/qemu/q-irq.c +++ b/arch/mips/qemu/q-irq.c | |||
@@ -33,5 +33,5 @@ void __init arch_init_irq(void) | |||
33 | 33 | ||
34 | mips_cpu_irq_init(); | 34 | mips_cpu_irq_init(); |
35 | init_i8259_irqs(); | 35 | init_i8259_irqs(); |
36 | set_c0_status(0x8400); | 36 | set_c0_status(0x400); |
37 | } | 37 | } |
diff --git a/arch/powerpc/configs/mpc8272_ads_defconfig b/arch/powerpc/configs/mpc8272_ads_defconfig index a31b7a030a6b..5eae305215dc 100644 --- a/arch/powerpc/configs/mpc8272_ads_defconfig +++ b/arch/powerpc/configs/mpc8272_ads_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.24-rc4 | 3 | # Linux kernel version: 2.6.24-rc5 |
4 | # Thu Dec 6 16:48:30 2007 | 4 | # Thu Dec 13 22:40:57 2007 |
5 | # | 5 | # |
6 | # CONFIG_PPC64 is not set | 6 | # CONFIG_PPC64 is not set |
7 | 7 | ||
@@ -491,7 +491,7 @@ CONFIG_MII=y | |||
491 | CONFIG_FS_ENET=y | 491 | CONFIG_FS_ENET=y |
492 | # CONFIG_FS_ENET_HAS_SCC is not set | 492 | # CONFIG_FS_ENET_HAS_SCC is not set |
493 | CONFIG_FS_ENET_HAS_FCC=y | 493 | CONFIG_FS_ENET_HAS_FCC=y |
494 | # CONFIG_FS_ENET_MDIO_FCC is not set | 494 | CONFIG_FS_ENET_MDIO_FCC=y |
495 | CONFIG_NETDEV_1000=y | 495 | CONFIG_NETDEV_1000=y |
496 | # CONFIG_ACENIC is not set | 496 | # CONFIG_ACENIC is not set |
497 | # CONFIG_DL2K is not set | 497 | # CONFIG_DL2K is not set |
diff --git a/arch/powerpc/configs/pq2fads_defconfig b/arch/powerpc/configs/pq2fads_defconfig index 142d206d6870..a3bfbb65a933 100644 --- a/arch/powerpc/configs/pq2fads_defconfig +++ b/arch/powerpc/configs/pq2fads_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.24-rc4 | 3 | # Linux kernel version: 2.6.24-rc5 |
4 | # Thu Dec 6 16:49:09 2007 | 4 | # Thu Dec 13 22:39:18 2007 |
5 | # | 5 | # |
6 | # CONFIG_PPC64 is not set | 6 | # CONFIG_PPC64 is not set |
7 | 7 | ||
@@ -548,7 +548,7 @@ CONFIG_MII=y | |||
548 | CONFIG_FS_ENET=y | 548 | CONFIG_FS_ENET=y |
549 | # CONFIG_FS_ENET_HAS_SCC is not set | 549 | # CONFIG_FS_ENET_HAS_SCC is not set |
550 | CONFIG_FS_ENET_HAS_FCC=y | 550 | CONFIG_FS_ENET_HAS_FCC=y |
551 | # CONFIG_FS_ENET_MDIO_FCC is not set | 551 | CONFIG_FS_ENET_MDIO_FCC=y |
552 | CONFIG_NETDEV_1000=y | 552 | CONFIG_NETDEV_1000=y |
553 | # CONFIG_ACENIC is not set | 553 | # CONFIG_ACENIC is not set |
554 | # CONFIG_DL2K is not set | 554 | # CONFIG_DL2K is not set |
diff --git a/arch/powerpc/configs/ps3_defconfig b/arch/powerpc/configs/ps3_defconfig index 5bd547ecd60a..0b5469fb6e0f 100644 --- a/arch/powerpc/configs/ps3_defconfig +++ b/arch/powerpc/configs/ps3_defconfig | |||
@@ -157,7 +157,7 @@ CONFIG_PS3_HTAB_SIZE=20 | |||
157 | CONFIG_PS3_USE_LPAR_ADDR=y | 157 | CONFIG_PS3_USE_LPAR_ADDR=y |
158 | CONFIG_PS3_VUART=y | 158 | CONFIG_PS3_VUART=y |
159 | CONFIG_PS3_PS3AV=y | 159 | CONFIG_PS3_PS3AV=y |
160 | CONFIG_PS3_SYS_MANAGER=m | 160 | CONFIG_PS3_SYS_MANAGER=y |
161 | CONFIG_PS3_STORAGE=y | 161 | CONFIG_PS3_STORAGE=y |
162 | CONFIG_PS3_DISK=y | 162 | CONFIG_PS3_DISK=y |
163 | CONFIG_PS3_ROM=y | 163 | CONFIG_PS3_ROM=y |
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c index c6b1aa3efbb9..13ebeb2d71e6 100644 --- a/arch/powerpc/kernel/ppc_ksyms.c +++ b/arch/powerpc/kernel/ppc_ksyms.c | |||
@@ -45,10 +45,6 @@ | |||
45 | #include <asm/signal.h> | 45 | #include <asm/signal.h> |
46 | #include <asm/dcr.h> | 46 | #include <asm/dcr.h> |
47 | 47 | ||
48 | #ifdef CONFIG_8xx | ||
49 | #include <asm/commproc.h> | ||
50 | #endif | ||
51 | |||
52 | #ifdef CONFIG_PPC64 | 48 | #ifdef CONFIG_PPC64 |
53 | EXPORT_SYMBOL(local_irq_restore); | 49 | EXPORT_SYMBOL(local_irq_restore); |
54 | #endif | 50 | #endif |
@@ -172,14 +168,6 @@ EXPORT_SYMBOL(console_drivers); | |||
172 | EXPORT_SYMBOL(cacheable_memcpy); | 168 | EXPORT_SYMBOL(cacheable_memcpy); |
173 | #endif | 169 | #endif |
174 | 170 | ||
175 | #ifdef CONFIG_8xx | ||
176 | EXPORT_SYMBOL(cpm_install_handler); | ||
177 | EXPORT_SYMBOL(cpm_free_handler); | ||
178 | #endif /* CONFIG_8xx */ | ||
179 | #if defined(CONFIG_8xx) | ||
180 | EXPORT_SYMBOL(__res); | ||
181 | #endif | ||
182 | |||
183 | #ifdef CONFIG_PPC32 | 171 | #ifdef CONFIG_PPC32 |
184 | EXPORT_SYMBOL(next_mmu_context); | 172 | EXPORT_SYMBOL(next_mmu_context); |
185 | EXPORT_SYMBOL(set_context); | 173 | EXPORT_SYMBOL(set_context); |
diff --git a/arch/powerpc/math-emu/op-2.h b/arch/powerpc/math-emu/op-2.h index b9b06b4c6ea1..7d6f17cc2929 100644 --- a/arch/powerpc/math-emu/op-2.h +++ b/arch/powerpc/math-emu/op-2.h | |||
@@ -59,7 +59,8 @@ | |||
59 | else \ | 59 | else \ |
60 | { \ | 60 | { \ |
61 | X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE) | \ | 61 | X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE) | \ |
62 | (((X##_f1 << (sz - (N))) | X##_f0) != 0)); \ | 62 | (((X##_f1 << (2 * _FP_W_TYPE_SIZE - (N))) | \ |
63 | X##_f0) != 0)); \ | ||
63 | X##_f1 = 0; \ | 64 | X##_f1 = 0; \ |
64 | } \ | 65 | } \ |
65 | } while (0) | 66 | } while (0) |
diff --git a/arch/powerpc/platforms/chrp/pci.c b/arch/powerpc/platforms/chrp/pci.c index e43465d34d29..0340a342f772 100644 --- a/arch/powerpc/platforms/chrp/pci.c +++ b/arch/powerpc/platforms/chrp/pci.c | |||
@@ -317,8 +317,12 @@ chrp_find_bridges(void) | |||
317 | /* SL82C105 IDE Control/Status Register */ | 317 | /* SL82C105 IDE Control/Status Register */ |
318 | #define SL82C105_IDECSR 0x40 | 318 | #define SL82C105_IDECSR 0x40 |
319 | 319 | ||
320 | /* Fixup for Winbond ATA quirk, required for briq */ | 320 | /* Fixup for Winbond ATA quirk, required for briq mostly because the |
321 | void chrp_pci_fixup_winbond_ata(struct pci_dev *sl82c105) | 321 | * 8259 is configured for level sensitive IRQ 14 and so wants the |
322 | * ATA controller to be set to fully native mode or bad things | ||
323 | * will happen. | ||
324 | */ | ||
325 | static void __devinit chrp_pci_fixup_winbond_ata(struct pci_dev *sl82c105) | ||
322 | { | 326 | { |
323 | u8 progif; | 327 | u8 progif; |
324 | 328 | ||
@@ -334,10 +338,15 @@ void chrp_pci_fixup_winbond_ata(struct pci_dev *sl82c105) | |||
334 | sl82c105->class |= 0x05; | 338 | sl82c105->class |= 0x05; |
335 | /* Disable SL82C105 second port */ | 339 | /* Disable SL82C105 second port */ |
336 | pci_write_config_word(sl82c105, SL82C105_IDECSR, 0x0003); | 340 | pci_write_config_word(sl82c105, SL82C105_IDECSR, 0x0003); |
341 | /* Clear IO BARs, they will be reassigned */ | ||
342 | pci_write_config_dword(sl82c105, PCI_BASE_ADDRESS_0, 0); | ||
343 | pci_write_config_dword(sl82c105, PCI_BASE_ADDRESS_1, 0); | ||
344 | pci_write_config_dword(sl82c105, PCI_BASE_ADDRESS_2, 0); | ||
345 | pci_write_config_dword(sl82c105, PCI_BASE_ADDRESS_3, 0); | ||
337 | } | 346 | } |
338 | } | 347 | } |
339 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105, | 348 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105, |
340 | chrp_pci_fixup_winbond_ata); | 349 | chrp_pci_fixup_winbond_ata); |
341 | 350 | ||
342 | /* Pegasos2 firmware version 20040810 configures the built-in IDE controller | 351 | /* Pegasos2 firmware version 20040810 configures the built-in IDE controller |
343 | * in legacy mode, but sets the PCI registers to PCI native mode. | 352 | * in legacy mode, but sets the PCI registers to PCI native mode. |
@@ -345,7 +354,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105, | |||
345 | * mode as well. The same fixup must be done to the class-code property in | 354 | * mode as well. The same fixup must be done to the class-code property in |
346 | * the IDE node /pci@80000000/ide@C,1 | 355 | * the IDE node /pci@80000000/ide@C,1 |
347 | */ | 356 | */ |
348 | static void chrp_pci_fixup_vt8231_ata(struct pci_dev *viaide) | 357 | static void __devinit chrp_pci_fixup_vt8231_ata(struct pci_dev *viaide) |
349 | { | 358 | { |
350 | u8 progif; | 359 | u8 progif; |
351 | struct pci_dev *viaisa; | 360 | struct pci_dev *viaisa; |
@@ -366,4 +375,4 @@ static void chrp_pci_fixup_vt8231_ata(struct pci_dev *viaide) | |||
366 | 375 | ||
367 | pci_dev_put(viaisa); | 376 | pci_dev_put(viaisa); |
368 | } | 377 | } |
369 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, chrp_pci_fixup_vt8231_ata); | 378 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, chrp_pci_fixup_vt8231_ata); |
diff --git a/arch/powerpc/platforms/iseries/lpevents.c b/arch/powerpc/platforms/iseries/lpevents.c index 34bdbbe3ce59..275f49449839 100644 --- a/arch/powerpc/platforms/iseries/lpevents.c +++ b/arch/powerpc/platforms/iseries/lpevents.c | |||
@@ -121,6 +121,7 @@ void process_hvlpevents(void) | |||
121 | { | 121 | { |
122 | struct HvLpEvent * event; | 122 | struct HvLpEvent * event; |
123 | 123 | ||
124 | restart: | ||
124 | /* If we have recursed, just return */ | 125 | /* If we have recursed, just return */ |
125 | if (!spin_trylock(&hvlpevent_queue.hq_lock)) | 126 | if (!spin_trylock(&hvlpevent_queue.hq_lock)) |
126 | return; | 127 | return; |
@@ -146,8 +147,20 @@ void process_hvlpevents(void) | |||
146 | if (event->xType < HvLpEvent_Type_NumTypes && | 147 | if (event->xType < HvLpEvent_Type_NumTypes && |
147 | lpEventHandler[event->xType]) | 148 | lpEventHandler[event->xType]) |
148 | lpEventHandler[event->xType](event); | 149 | lpEventHandler[event->xType](event); |
149 | else | 150 | else { |
150 | printk(KERN_INFO "Unexpected Lp Event type=%d\n", event->xType ); | 151 | u8 type = event->xType; |
152 | |||
153 | /* | ||
154 | * Don't printk in the spinlock as printk | ||
155 | * may require ack events form the HV to send | ||
156 | * any characters there. | ||
157 | */ | ||
158 | hvlpevent_clear_valid(event); | ||
159 | spin_unlock(&hvlpevent_queue.hq_lock); | ||
160 | printk(KERN_INFO | ||
161 | "Unexpected Lp Event type=%d\n", type); | ||
162 | goto restart; | ||
163 | } | ||
151 | 164 | ||
152 | hvlpevent_clear_valid(event); | 165 | hvlpevent_clear_valid(event); |
153 | } else if (hvlpevent_queue.hq_overflow_pending) | 166 | } else if (hvlpevent_queue.hq_overflow_pending) |
diff --git a/arch/powerpc/platforms/powermac/pci.c b/arch/powerpc/platforms/powermac/pci.c index ec49099830d5..f852ae3e0ee4 100644 --- a/arch/powerpc/platforms/powermac/pci.c +++ b/arch/powerpc/platforms/powermac/pci.c | |||
@@ -1243,15 +1243,22 @@ void pmac_pci_fixup_pciata(struct pci_dev* dev) | |||
1243 | good: | 1243 | good: |
1244 | pci_read_config_byte(dev, PCI_CLASS_PROG, &progif); | 1244 | pci_read_config_byte(dev, PCI_CLASS_PROG, &progif); |
1245 | if ((progif & 5) != 5) { | 1245 | if ((progif & 5) != 5) { |
1246 | printk(KERN_INFO "Forcing PCI IDE into native mode: %s\n", | 1246 | printk(KERN_INFO "PCI: %s Forcing PCI IDE into native mode\n", |
1247 | pci_name(dev)); | 1247 | pci_name(dev)); |
1248 | (void) pci_write_config_byte(dev, PCI_CLASS_PROG, progif|5); | 1248 | (void) pci_write_config_byte(dev, PCI_CLASS_PROG, progif|5); |
1249 | if (pci_read_config_byte(dev, PCI_CLASS_PROG, &progif) || | 1249 | if (pci_read_config_byte(dev, PCI_CLASS_PROG, &progif) || |
1250 | (progif & 5) != 5) | 1250 | (progif & 5) != 5) |
1251 | printk(KERN_ERR "Rewrite of PROGIF failed !\n"); | 1251 | printk(KERN_ERR "Rewrite of PROGIF failed !\n"); |
1252 | else { | ||
1253 | /* Clear IO BARs, they will be reassigned */ | ||
1254 | pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0); | ||
1255 | pci_write_config_dword(dev, PCI_BASE_ADDRESS_1, 0); | ||
1256 | pci_write_config_dword(dev, PCI_BASE_ADDRESS_2, 0); | ||
1257 | pci_write_config_dword(dev, PCI_BASE_ADDRESS_3, 0); | ||
1258 | } | ||
1252 | } | 1259 | } |
1253 | } | 1260 | } |
1254 | DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, pmac_pci_fixup_pciata); | 1261 | DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, pmac_pci_fixup_pciata); |
1255 | #endif | 1262 | #endif |
1256 | 1263 | ||
1257 | /* | 1264 | /* |
diff --git a/arch/powerpc/platforms/ps3/Kconfig b/arch/powerpc/platforms/ps3/Kconfig index 67144d1d1405..298f1c9679fb 100644 --- a/arch/powerpc/platforms/ps3/Kconfig +++ b/arch/powerpc/platforms/ps3/Kconfig | |||
@@ -91,7 +91,7 @@ config PS3_SYS_MANAGER | |||
91 | depends on PPC_PS3 | 91 | depends on PPC_PS3 |
92 | tristate "PS3 System Manager driver" if PS3_ADVANCED | 92 | tristate "PS3 System Manager driver" if PS3_ADVANCED |
93 | select PS3_VUART | 93 | select PS3_VUART |
94 | default m | 94 | default y |
95 | help | 95 | help |
96 | Include support for the PS3 System Manager. | 96 | Include support for the PS3 System Manager. |
97 | 97 | ||
diff --git a/arch/powerpc/sysdev/cpm2_common.c b/arch/powerpc/sysdev/cpm2_common.c index 859362fecb7c..c1d824032020 100644 --- a/arch/powerpc/sysdev/cpm2_common.c +++ b/arch/powerpc/sysdev/cpm2_common.c | |||
@@ -61,8 +61,7 @@ cpm2_map_t __iomem *cpm2_immr; | |||
61 | of space for CPM as it is larger | 61 | of space for CPM as it is larger |
62 | than on PQ2 */ | 62 | than on PQ2 */ |
63 | 63 | ||
64 | void | 64 | void __init cpm2_reset(void) |
65 | cpm2_reset(void) | ||
66 | { | 65 | { |
67 | #ifdef CONFIG_PPC_85xx | 66 | #ifdef CONFIG_PPC_85xx |
68 | cpm2_immr = ioremap(CPM_MAP_ADDR, CPM_MAP_SIZE); | 67 | cpm2_immr = ioremap(CPM_MAP_ADDR, CPM_MAP_SIZE); |
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S index c9b0d7af64ae..ea257e828364 100644 --- a/arch/sparc64/kernel/entry.S +++ b/arch/sparc64/kernel/entry.S | |||
@@ -2593,3 +2593,15 @@ sun4v_mmustat_info: | |||
2593 | retl | 2593 | retl |
2594 | nop | 2594 | nop |
2595 | .size sun4v_mmustat_info, .-sun4v_mmustat_info | 2595 | .size sun4v_mmustat_info, .-sun4v_mmustat_info |
2596 | |||
2597 | .globl sun4v_mmu_demap_all | ||
2598 | .type sun4v_mmu_demap_all,#function | ||
2599 | sun4v_mmu_demap_all: | ||
2600 | clr %o0 | ||
2601 | clr %o1 | ||
2602 | mov HV_MMU_ALL, %o2 | ||
2603 | mov HV_FAST_MMU_DEMAP_ALL, %o5 | ||
2604 | ta HV_FAST_TRAP | ||
2605 | retl | ||
2606 | nop | ||
2607 | .size sun4v_mmu_demap_all, .-sun4v_mmu_demap_all | ||
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index 894b506f9636..c39944927f1a 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c | |||
@@ -476,7 +476,7 @@ static inline void spitfire_xcall_deliver(u64 data0, u64 data1, u64 data2, cpuma | |||
476 | */ | 476 | */ |
477 | static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask) | 477 | static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask) |
478 | { | 478 | { |
479 | u64 pstate, ver; | 479 | u64 pstate, ver, busy_mask; |
480 | int nack_busy_id, is_jbus, need_more; | 480 | int nack_busy_id, is_jbus, need_more; |
481 | 481 | ||
482 | if (cpus_empty(mask)) | 482 | if (cpus_empty(mask)) |
@@ -508,14 +508,20 @@ retry: | |||
508 | "i" (ASI_INTR_W)); | 508 | "i" (ASI_INTR_W)); |
509 | 509 | ||
510 | nack_busy_id = 0; | 510 | nack_busy_id = 0; |
511 | busy_mask = 0; | ||
511 | { | 512 | { |
512 | int i; | 513 | int i; |
513 | 514 | ||
514 | for_each_cpu_mask(i, mask) { | 515 | for_each_cpu_mask(i, mask) { |
515 | u64 target = (i << 14) | 0x70; | 516 | u64 target = (i << 14) | 0x70; |
516 | 517 | ||
517 | if (!is_jbus) | 518 | if (is_jbus) { |
519 | busy_mask |= (0x1UL << (i * 2)); | ||
520 | } else { | ||
518 | target |= (nack_busy_id << 24); | 521 | target |= (nack_busy_id << 24); |
522 | busy_mask |= (0x1UL << | ||
523 | (nack_busy_id * 2)); | ||
524 | } | ||
519 | __asm__ __volatile__( | 525 | __asm__ __volatile__( |
520 | "stxa %%g0, [%0] %1\n\t" | 526 | "stxa %%g0, [%0] %1\n\t" |
521 | "membar #Sync\n\t" | 527 | "membar #Sync\n\t" |
@@ -531,15 +537,16 @@ retry: | |||
531 | 537 | ||
532 | /* Now, poll for completion. */ | 538 | /* Now, poll for completion. */ |
533 | { | 539 | { |
534 | u64 dispatch_stat; | 540 | u64 dispatch_stat, nack_mask; |
535 | long stuck; | 541 | long stuck; |
536 | 542 | ||
537 | stuck = 100000 * nack_busy_id; | 543 | stuck = 100000 * nack_busy_id; |
544 | nack_mask = busy_mask << 1; | ||
538 | do { | 545 | do { |
539 | __asm__ __volatile__("ldxa [%%g0] %1, %0" | 546 | __asm__ __volatile__("ldxa [%%g0] %1, %0" |
540 | : "=r" (dispatch_stat) | 547 | : "=r" (dispatch_stat) |
541 | : "i" (ASI_INTR_DISPATCH_STAT)); | 548 | : "i" (ASI_INTR_DISPATCH_STAT)); |
542 | if (dispatch_stat == 0UL) { | 549 | if (!(dispatch_stat & (busy_mask | nack_mask))) { |
543 | __asm__ __volatile__("wrpr %0, 0x0, %%pstate" | 550 | __asm__ __volatile__("wrpr %0, 0x0, %%pstate" |
544 | : : "r" (pstate)); | 551 | : : "r" (pstate)); |
545 | if (unlikely(need_more)) { | 552 | if (unlikely(need_more)) { |
@@ -556,12 +563,12 @@ retry: | |||
556 | } | 563 | } |
557 | if (!--stuck) | 564 | if (!--stuck) |
558 | break; | 565 | break; |
559 | } while (dispatch_stat & 0x5555555555555555UL); | 566 | } while (dispatch_stat & busy_mask); |
560 | 567 | ||
561 | __asm__ __volatile__("wrpr %0, 0x0, %%pstate" | 568 | __asm__ __volatile__("wrpr %0, 0x0, %%pstate" |
562 | : : "r" (pstate)); | 569 | : : "r" (pstate)); |
563 | 570 | ||
564 | if ((dispatch_stat & ~(0x5555555555555555UL)) == 0) { | 571 | if (dispatch_stat & busy_mask) { |
565 | /* Busy bits will not clear, continue instead | 572 | /* Busy bits will not clear, continue instead |
566 | * of freezing up on this cpu. | 573 | * of freezing up on this cpu. |
567 | */ | 574 | */ |
diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c index e18ccf85224f..fbeb55d71e76 100644 --- a/arch/sparc64/mm/init.c +++ b/arch/sparc64/mm/init.c | |||
@@ -1133,14 +1133,9 @@ static void __init mark_kpte_bitmap(unsigned long start, unsigned long end) | |||
1133 | } | 1133 | } |
1134 | } | 1134 | } |
1135 | 1135 | ||
1136 | static void __init kernel_physical_mapping_init(void) | 1136 | static void __init init_kpte_bitmap(void) |
1137 | { | 1137 | { |
1138 | unsigned long i; | 1138 | unsigned long i; |
1139 | #ifdef CONFIG_DEBUG_PAGEALLOC | ||
1140 | unsigned long mem_alloced = 0UL; | ||
1141 | #endif | ||
1142 | |||
1143 | read_obp_memory("reg", &pall[0], &pall_ents); | ||
1144 | 1139 | ||
1145 | for (i = 0; i < pall_ents; i++) { | 1140 | for (i = 0; i < pall_ents; i++) { |
1146 | unsigned long phys_start, phys_end; | 1141 | unsigned long phys_start, phys_end; |
@@ -1149,14 +1144,24 @@ static void __init kernel_physical_mapping_init(void) | |||
1149 | phys_end = phys_start + pall[i].reg_size; | 1144 | phys_end = phys_start + pall[i].reg_size; |
1150 | 1145 | ||
1151 | mark_kpte_bitmap(phys_start, phys_end); | 1146 | mark_kpte_bitmap(phys_start, phys_end); |
1147 | } | ||
1148 | } | ||
1152 | 1149 | ||
1150 | static void __init kernel_physical_mapping_init(void) | ||
1151 | { | ||
1153 | #ifdef CONFIG_DEBUG_PAGEALLOC | 1152 | #ifdef CONFIG_DEBUG_PAGEALLOC |
1153 | unsigned long i, mem_alloced = 0UL; | ||
1154 | |||
1155 | for (i = 0; i < pall_ents; i++) { | ||
1156 | unsigned long phys_start, phys_end; | ||
1157 | |||
1158 | phys_start = pall[i].phys_addr; | ||
1159 | phys_end = phys_start + pall[i].reg_size; | ||
1160 | |||
1154 | mem_alloced += kernel_map_range(phys_start, phys_end, | 1161 | mem_alloced += kernel_map_range(phys_start, phys_end, |
1155 | PAGE_KERNEL); | 1162 | PAGE_KERNEL); |
1156 | #endif | ||
1157 | } | 1163 | } |
1158 | 1164 | ||
1159 | #ifdef CONFIG_DEBUG_PAGEALLOC | ||
1160 | printk("Allocated %ld bytes for kernel page tables.\n", | 1165 | printk("Allocated %ld bytes for kernel page tables.\n", |
1161 | mem_alloced); | 1166 | mem_alloced); |
1162 | 1167 | ||
@@ -1398,6 +1403,10 @@ void __init paging_init(void) | |||
1398 | 1403 | ||
1399 | inherit_prom_mappings(); | 1404 | inherit_prom_mappings(); |
1400 | 1405 | ||
1406 | read_obp_memory("reg", &pall[0], &pall_ents); | ||
1407 | |||
1408 | init_kpte_bitmap(); | ||
1409 | |||
1401 | /* Ok, we can use our TLB miss and window trap handlers safely. */ | 1410 | /* Ok, we can use our TLB miss and window trap handlers safely. */ |
1402 | setup_tba(); | 1411 | setup_tba(); |
1403 | 1412 | ||
@@ -1904,7 +1913,9 @@ void __flush_tlb_all(void) | |||
1904 | "wrpr %0, %1, %%pstate" | 1913 | "wrpr %0, %1, %%pstate" |
1905 | : "=r" (pstate) | 1914 | : "=r" (pstate) |
1906 | : "i" (PSTATE_IE)); | 1915 | : "i" (PSTATE_IE)); |
1907 | if (tlb_type == spitfire) { | 1916 | if (tlb_type == hypervisor) { |
1917 | sun4v_mmu_demap_all(); | ||
1918 | } else if (tlb_type == spitfire) { | ||
1908 | for (i = 0; i < 64; i++) { | 1919 | for (i = 0; i < 64; i++) { |
1909 | /* Spitfire Errata #32 workaround */ | 1920 | /* Spitfire Errata #32 workaround */ |
1910 | /* NOTE: Always runs on spitfire, so no | 1921 | /* NOTE: Always runs on spitfire, so no |
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c index 73681f14f9fc..3c6c44ca1ffa 100644 --- a/arch/um/drivers/net_kern.c +++ b/arch/um/drivers/net_kern.c | |||
@@ -98,10 +98,10 @@ static int uml_net_rx(struct net_device *dev) | |||
98 | if (pkt_len > 0) { | 98 | if (pkt_len > 0) { |
99 | skb_trim(skb, pkt_len); | 99 | skb_trim(skb, pkt_len); |
100 | skb->protocol = (*lp->protocol)(skb); | 100 | skb->protocol = (*lp->protocol)(skb); |
101 | netif_rx(skb); | ||
102 | 101 | ||
103 | lp->stats.rx_bytes += skb->len; | 102 | lp->stats.rx_bytes += skb->len; |
104 | lp->stats.rx_packets++; | 103 | lp->stats.rx_packets++; |
104 | netif_rx(skb); | ||
105 | return pkt_len; | 105 | return pkt_len; |
106 | } | 106 | } |
107 | 107 | ||
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 94c39aaf695f..b6af3ea43c73 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -1131,7 +1131,7 @@ asmlinkage void __init xen_start_kernel(void) | |||
1131 | if (!xen_start_info) | 1131 | if (!xen_start_info) |
1132 | return; | 1132 | return; |
1133 | 1133 | ||
1134 | BUG_ON(memcmp(xen_start_info->magic, "xen-3.0", 7) != 0); | 1134 | BUG_ON(memcmp(xen_start_info->magic, "xen-3", 5) != 0); |
1135 | 1135 | ||
1136 | /* Install Xen paravirt ops */ | 1136 | /* Install Xen paravirt ops */ |
1137 | pv_info = xen_info; | 1137 | pv_info = xen_info; |
diff --git a/arch/xtensa/platform-iss/network.c b/arch/xtensa/platform-iss/network.c index b61fb36674e7..f21b9b0899a8 100644 --- a/arch/xtensa/platform-iss/network.c +++ b/arch/xtensa/platform-iss/network.c | |||
@@ -393,11 +393,11 @@ static int iss_net_rx(struct net_device *dev) | |||
393 | if (pkt_len > 0) { | 393 | if (pkt_len > 0) { |
394 | skb_trim(skb, pkt_len); | 394 | skb_trim(skb, pkt_len); |
395 | skb->protocol = lp->tp.protocol(skb); | 395 | skb->protocol = lp->tp.protocol(skb); |
396 | // netif_rx(skb); | ||
397 | netif_rx_ni(skb); | ||
398 | 396 | ||
399 | lp->stats.rx_bytes += skb->len; | 397 | lp->stats.rx_bytes += skb->len; |
400 | lp->stats.rx_packets++; | 398 | lp->stats.rx_packets++; |
399 | // netif_rx(skb); | ||
400 | netif_rx_ni(skb); | ||
401 | return pkt_len; | 401 | return pkt_len; |
402 | } | 402 | } |
403 | kfree_skb(skb); | 403 | kfree_skb(skb); |