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