Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6

* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6:
[IA64] Fix iosapic interrupt delivery mode for CPE
[IA64] kprobe: make kreturn probe handler stack unwind correct
[IA64] operator priority fix in acpi_map_lsapic()
[IA64] Add missing "space" to concatenated strings
[IA64] make full use of macro efi_md_size
[IA64] rename _bss to __bss_start
[IA64] SGI Altix : fix bug in sn_io_late_init()
[IA64] iosapic cleanup
[IA64] signal : fix missing error checkings
[IA64] export copy_page() to modules
[IA64] don't assume that unwcheck.py is executable
[IA64] increase .data.patch offset

+56 -53
+1 -1
arch/ia64/Makefile
··· 77 77 $(Q)$(MAKE) $(build)=$(boot) $@ 78 78 79 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 82 archclean: 83 83 $(Q)$(MAKE) $(clean)=$(boot)
+1 -1
arch/ia64/hp/sim/boot/Makefile
··· 33 33 LDFLAGS_bootloader = -static -T 34 34 35 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 37 $(call if_changed,ld)
+2 -1
arch/ia64/hp/sim/boot/bootloader.lds
··· 22 22 .sdata : { *(.sdata) } 23 23 _edata = .; 24 24 25 - _bss = .; 25 + __bss_start = .; 26 26 .sbss : { *(.sbss) *(.scommon) } 27 27 .bss : { *(.bss) *(COMMON) } 28 28 . = ALIGN(64 / 8); 29 + __bss_stop = .; 29 30 _end = . ; 30 31 31 32 /* Stabs debugging sections. */
+1 -1
arch/ia64/kernel/acpi.c
··· 860 860 lsapic = (struct acpi_madt_local_sapic *)obj->buffer.pointer; 861 861 862 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 864 kfree(buffer.pointer); 865 865 return -EINVAL; 866 866 }
+5 -5
arch/ia64/kernel/efi.c
··· 370 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 374 panic("Woah! PAL code size bigger than a granule!"); 375 375 376 376 #if EFI_DEBUG ··· 378 378 379 379 printk(KERN_INFO "CPU %d: mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n", 380 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 382 vaddr & mask, (vaddr & mask) + IA64_GRANULE_SIZE); 383 383 #endif 384 384 return __va(md->phys_addr); ··· 523 523 md = p; 524 524 printk("mem%02u: type=%u, attr=0x%lx, range=[0x%016lx-0x%016lx) (%luMB)\n", 525 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 527 md->num_pages >> (20 - EFI_PAGE_SHIFT)); 528 528 } 529 529 } ··· 656 656 for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) { 657 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 660 return md; 661 661 } 662 662 return NULL; ··· 1158 1158 1159 1159 res->name = name; 1160 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 1162 res->flags = flags; 1163 1163 1164 1164 if (insert_resource(&iomem_resource, res) < 0)
+1 -1
arch/ia64/kernel/gate.lds.S
··· 30 30 * the dynamic symbol table et al. If this amount is insufficient, 31 31 * ld -shared will barf. Just increase it here. 32 32 */ 33 - . = GATE_ADDR + 0x500; 33 + . = GATE_ADDR + 0x600; 34 34 35 35 .data.patch : { 36 36 __start_gate_mckinley_e9_patchlist = .;
+3
arch/ia64/kernel/ia64_ksyms.c
··· 63 63 EXPORT_SYMBOL(__moddi3); 64 64 EXPORT_SYMBOL(__umoddi3); 65 65 66 + #include <asm/page.h> 67 + EXPORT_SYMBOL(copy_page); 68 + 66 69 #if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE) 67 70 extern void xor_ia64_2(void); 68 71 extern void xor_ia64_3(void);
+4 -17
arch/ia64/kernel/iosapic.c
··· 199 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 202 int 216 203 gsi_to_irq (unsigned int gsi) 217 204 { ··· 416 429 #define iosapic_disable_level_irq mask_irq 417 430 #define iosapic_ack_level_irq nop 418 431 419 - struct irq_chip irq_type_iosapic_level = { 432 + static struct irq_chip irq_type_iosapic_level = { 420 433 .name = "IO-SAPIC-level", 421 434 .startup = iosapic_startup_level_irq, 422 435 .shutdown = iosapic_shutdown_level_irq, ··· 465 478 #define iosapic_disable_edge_irq nop 466 479 #define iosapic_end_edge_irq nop 467 480 468 - struct irq_chip irq_type_iosapic_edge = { 481 + static struct irq_chip irq_type_iosapic_edge = { 469 482 .name = "IO-SAPIC-edge", 470 483 .startup = iosapic_startup_edge_irq, 471 484 .shutdown = iosapic_disable_edge_irq, ··· 478 491 .set_affinity = iosapic_set_affinity 479 492 }; 480 493 481 - unsigned int 494 + static unsigned int 482 495 iosapic_version (char __iomem *addr) 483 496 { 484 497 /* ··· 925 938 case ACPI_INTERRUPT_CPEI: 926 939 irq = vector = IA64_CPE_VECTOR; 927 940 BUG_ON(bind_irq_vector(irq, vector, CPU_MASK_ALL)); 928 - delivery = IOSAPIC_LOWEST_PRIORITY; 941 + delivery = IOSAPIC_FIXED; 929 942 mask = 1; 930 943 break; 931 944 default:
+22 -7
arch/ia64/kernel/kprobes.c
··· 182 182 qp = kprobe_inst & 0x3f; 183 183 if (is_cmp_ctype_unc_inst(template, slot, major_opcode, kprobe_inst)) { 184 184 if (slot == 1 && qp) { 185 - printk(KERN_WARNING "Kprobes on cmp unc" 186 - "instruction on slot 1 at <0x%lx>" 185 + printk(KERN_WARNING "Kprobes on cmp unc " 186 + "instruction on slot 1 at <0x%lx> " 187 187 "is not supported\n", addr); 188 188 return -EINVAL; 189 189 ··· 221 221 * bit 12 to be equal to 1 222 222 */ 223 223 if (slot == 1 && qp) { 224 - printk(KERN_WARNING "Kprobes on test bit" 225 - "instruction on slot at <0x%lx>" 224 + printk(KERN_WARNING "Kprobes on test bit " 225 + "instruction on slot at <0x%lx> " 226 226 "is not supported\n", addr); 227 227 return -EINVAL; 228 228 } ··· 242 242 */ 243 243 int x6=(kprobe_inst >> 27) & 0x3F; 244 244 if ((x6 == 0x10) || (x6 == 0x11)) { 245 - printk(KERN_WARNING "Kprobes on" 245 + printk(KERN_WARNING "Kprobes on " 246 246 "Indirect Predict is not supported\n"); 247 247 return -EINVAL; 248 248 } ··· 435 435 /* another task is sharing our hash bucket */ 436 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 455 if (ri->rp && ri->rp->handler) 439 456 ri->rp->handler(ri, regs); 440 457 ··· 468 451 } 469 452 470 453 kretprobe_assert(ri, orig_ret_address, trampoline_address); 471 - 472 - regs->cr_iip = orig_ret_address; 473 454 474 455 reset_current_kprobe(); 475 456 spin_unlock_irqrestore(&kretprobe_lock, flags);
+1 -2
arch/ia64/kernel/setup.c
··· 95 95 .name = "Kernel bss", 96 96 .flags = IORESOURCE_BUSY | IORESOURCE_MEM 97 97 }; 98 - extern char _text[], _end[], _etext[], _edata[], _bss[]; 99 98 100 99 unsigned long ia64_max_cacheline_size; 101 100 ··· 205 206 code_resource.end = ia64_tpa(_etext) - 1; 206 207 data_resource.start = ia64_tpa(_etext); 207 208 data_resource.end = ia64_tpa(_edata) - 1; 208 - bss_resource.start = ia64_tpa(_bss); 209 + bss_resource.start = ia64_tpa(__bss_start); 209 210 bss_resource.end = ia64_tpa(_end) - 1; 210 211 efi_initialize_iomem_resources(&code_resource, &data_resource, 211 212 &bss_resource);
+4 -4
arch/ia64/kernel/signal.c
··· 98 98 if ((flags & IA64_SC_FLAG_FPH_VALID) != 0) { 99 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 102 psr->mfh = 0; /* drop signal handler's fph contents... */ 103 103 preempt_disable(); 104 104 if (psr->dfh) ··· 244 244 setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratch *scr) 245 245 { 246 246 unsigned long flags = 0, ifs, cfm, nat; 247 - long err; 247 + long err = 0; 248 248 249 249 ifs = scr->pt.cr_ifs; 250 250 ··· 257 257 ia64_flush_fph(current); 258 258 if ((current->thread.flags & IA64_THREAD_FPH_VALID)) { 259 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 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 266 err |= __put_user(nat, &sc->sc_nat); 267 267 err |= PUT_SIGSET(mask, &sc->sc_mask); 268 268 err |= __put_user(cfm, &sc->sc_cfm);
+2 -1
arch/ia64/kernel/vmlinux.lds.S
··· 240 240 .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) 241 241 { *(.sdata) *(.sdata1) *(.srdata) } 242 242 _edata = .; 243 - _bss = .; 243 + __bss_start = .; 244 244 .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) 245 245 { *(.sbss) *(.scommon) } 246 246 .bss : AT(ADDR(.bss) - LOAD_OFFSET) 247 247 { *(.bss) *(COMMON) } 248 + __bss_stop = .; 248 249 249 250 _end = .; 250 251
+2 -2
arch/ia64/lib/Makefile
··· 11 11 flush.o ip_fast_csum.o do_csum.o \ 12 12 memset.o strlen.o xor.o 13 13 14 - lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o 15 - lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o 14 + obj-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o 15 + obj-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o 16 16 lib-$(CONFIG_PERFMON) += carta_random.o 17 17 18 18 AFLAGS___divdi3.o =
+1 -1
arch/ia64/mm/tlb.c
··· 180 180 long status; 181 181 182 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 184 "defaulting to architected purge page-sizes.\n", status); 185 185 purge.mask = 0x115557000UL; 186 186 }
arch/ia64/scripts/unwcheck.py
+6 -7
arch/ia64/sn/kernel/io_common.c
··· 347 347 if (controller->node >= num_online_nodes()) { 348 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 351 "L_IO=%lx L_MEM=%lx BASE=%lx\n", 352 352 b->bs_asic_type, b->bs_xid, b->bs_persist_busnum, 353 353 b->bs_legacy_io, b->bs_legacy_mem, b->bs_base); ··· 545 545 nasid = NASID_GET(bussoft->bs_base); 546 546 cnode = nasid_to_cnodeid(nasid); 547 547 if ((bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) || 548 - (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE)) { 549 - /* TIO PCI Bridge: find nearest node with CPUs */ 548 + (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE) || 549 + (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_PIC)) { 550 + /* PCI Bridge: find nearest node with CPUs */ 550 551 int e = sn_hwperf_get_nearest_node(cnode, NULL, 551 552 &near_cnode); 552 553 if (e < 0) { 553 554 near_cnode = (cnodeid_t)-1; /* use any node */ 554 - printk(KERN_WARNING "pcibr_bus_fixup: failed " 555 - "to find near node with CPUs to TIO " 555 + printk(KERN_WARNING "sn_io_late_init: failed " 556 + "to find near node with CPUs for " 556 557 "node %d, err=%d\n", cnode, e); 557 558 } 558 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
-2
include/asm-ia64/iosapic.h
··· 80 80 #else 81 81 #define iosapic_remove(gsi_base) (-EINVAL) 82 82 #endif /* CONFIG_HOTPLUG */ 83 - extern int gsi_to_vector (unsigned int gsi); 84 83 extern int gsi_to_irq (unsigned int gsi); 85 84 extern int iosapic_register_intr (unsigned int gsi, unsigned long polarity, 86 85 unsigned long trigger); ··· 93 94 u16 eid, u16 id, 94 95 unsigned long polarity, 95 96 unsigned long trigger); 96 - extern unsigned int iosapic_version (char __iomem *addr); 97 97 98 98 #ifdef CONFIG_NUMA 99 99 extern void __devinit map_iosapic_to_node (unsigned int, int);