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
This commit is contained in:
commit
437105f2a7
|
@ -77,7 +77,7 @@ vmlinux.gz: vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(boot) $@
|
$(Q)$(MAKE) $(build)=$(boot) $@
|
||||||
|
|
||||||
unwcheck: vmlinux
|
unwcheck: vmlinux
|
||||||
-$(Q)READELF=$(READELF) $(srctree)/arch/ia64/scripts/unwcheck.py $<
|
-$(Q)READELF=$(READELF) python $(srctree)/arch/ia64/scripts/unwcheck.py $<
|
||||||
|
|
||||||
archclean:
|
archclean:
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
$(Q)$(MAKE) $(clean)=$(boot)
|
||||||
|
|
|
@ -33,5 +33,5 @@ $(obj)/vmlinux.bin: vmlinux FORCE
|
||||||
LDFLAGS_bootloader = -static -T
|
LDFLAGS_bootloader = -static -T
|
||||||
|
|
||||||
$(obj)/bootloader: $(src)/bootloader.lds $(obj)/bootloader.o $(obj)/boot_head.o $(obj)/fw-emu.o \
|
$(obj)/bootloader: $(src)/bootloader.lds $(obj)/bootloader.o $(obj)/boot_head.o $(obj)/fw-emu.o \
|
||||||
lib/lib.a arch/ia64/lib/lib.a FORCE
|
lib/lib.a arch/ia64/lib/built-in.o arch/ia64/lib/lib.a FORCE
|
||||||
$(call if_changed,ld)
|
$(call if_changed,ld)
|
||||||
|
|
|
@ -22,10 +22,11 @@ SECTIONS
|
||||||
.sdata : { *(.sdata) }
|
.sdata : { *(.sdata) }
|
||||||
_edata = .;
|
_edata = .;
|
||||||
|
|
||||||
_bss = .;
|
__bss_start = .;
|
||||||
.sbss : { *(.sbss) *(.scommon) }
|
.sbss : { *(.sbss) *(.scommon) }
|
||||||
.bss : { *(.bss) *(COMMON) }
|
.bss : { *(.bss) *(COMMON) }
|
||||||
. = ALIGN(64 / 8);
|
. = ALIGN(64 / 8);
|
||||||
|
__bss_stop = .;
|
||||||
_end = . ;
|
_end = . ;
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
/* Stabs debugging sections. */
|
||||||
|
|
|
@ -860,7 +860,7 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu)
|
||||||
lsapic = (struct acpi_madt_local_sapic *)obj->buffer.pointer;
|
lsapic = (struct acpi_madt_local_sapic *)obj->buffer.pointer;
|
||||||
|
|
||||||
if ((lsapic->header.type != ACPI_MADT_TYPE_LOCAL_SAPIC) ||
|
if ((lsapic->header.type != ACPI_MADT_TYPE_LOCAL_SAPIC) ||
|
||||||
(!lsapic->lapic_flags & ACPI_MADT_ENABLED)) {
|
(!(lsapic->lapic_flags & ACPI_MADT_ENABLED))) {
|
||||||
kfree(buffer.pointer);
|
kfree(buffer.pointer);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -370,7 +370,7 @@ efi_get_pal_addr (void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (md->num_pages << EFI_PAGE_SHIFT > IA64_GRANULE_SIZE)
|
if (efi_md_size(md) > IA64_GRANULE_SIZE)
|
||||||
panic("Woah! PAL code size bigger than a granule!");
|
panic("Woah! PAL code size bigger than a granule!");
|
||||||
|
|
||||||
#if EFI_DEBUG
|
#if EFI_DEBUG
|
||||||
|
@ -378,7 +378,7 @@ efi_get_pal_addr (void)
|
||||||
|
|
||||||
printk(KERN_INFO "CPU %d: mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n",
|
printk(KERN_INFO "CPU %d: mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n",
|
||||||
smp_processor_id(), md->phys_addr,
|
smp_processor_id(), md->phys_addr,
|
||||||
md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT),
|
md->phys_addr + efi_md_size(md),
|
||||||
vaddr & mask, (vaddr & mask) + IA64_GRANULE_SIZE);
|
vaddr & mask, (vaddr & mask) + IA64_GRANULE_SIZE);
|
||||||
#endif
|
#endif
|
||||||
return __va(md->phys_addr);
|
return __va(md->phys_addr);
|
||||||
|
@ -523,7 +523,7 @@ efi_init (void)
|
||||||
md = p;
|
md = p;
|
||||||
printk("mem%02u: type=%u, attr=0x%lx, range=[0x%016lx-0x%016lx) (%luMB)\n",
|
printk("mem%02u: type=%u, attr=0x%lx, range=[0x%016lx-0x%016lx) (%luMB)\n",
|
||||||
i, md->type, md->attribute, md->phys_addr,
|
i, md->type, md->attribute, md->phys_addr,
|
||||||
md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT),
|
md->phys_addr + efi_md_size(md),
|
||||||
md->num_pages >> (20 - EFI_PAGE_SHIFT));
|
md->num_pages >> (20 - EFI_PAGE_SHIFT));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -656,7 +656,7 @@ efi_memory_descriptor (unsigned long phys_addr)
|
||||||
for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
|
for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
|
||||||
md = p;
|
md = p;
|
||||||
|
|
||||||
if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT))
|
if (phys_addr - md->phys_addr < efi_md_size(md))
|
||||||
return md;
|
return md;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1158,7 +1158,7 @@ efi_initialize_iomem_resources(struct resource *code_resource,
|
||||||
|
|
||||||
res->name = name;
|
res->name = name;
|
||||||
res->start = md->phys_addr;
|
res->start = md->phys_addr;
|
||||||
res->end = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1;
|
res->end = md->phys_addr + efi_md_size(md) - 1;
|
||||||
res->flags = flags;
|
res->flags = flags;
|
||||||
|
|
||||||
if (insert_resource(&iomem_resource, res) < 0)
|
if (insert_resource(&iomem_resource, res) < 0)
|
||||||
|
|
|
@ -30,7 +30,7 @@ SECTIONS
|
||||||
* the dynamic symbol table et al. If this amount is insufficient,
|
* the dynamic symbol table et al. If this amount is insufficient,
|
||||||
* ld -shared will barf. Just increase it here.
|
* ld -shared will barf. Just increase it here.
|
||||||
*/
|
*/
|
||||||
. = GATE_ADDR + 0x500;
|
. = GATE_ADDR + 0x600;
|
||||||
|
|
||||||
.data.patch : {
|
.data.patch : {
|
||||||
__start_gate_mckinley_e9_patchlist = .;
|
__start_gate_mckinley_e9_patchlist = .;
|
||||||
|
|
|
@ -63,6 +63,9 @@ EXPORT_SYMBOL(__udivdi3);
|
||||||
EXPORT_SYMBOL(__moddi3);
|
EXPORT_SYMBOL(__moddi3);
|
||||||
EXPORT_SYMBOL(__umoddi3);
|
EXPORT_SYMBOL(__umoddi3);
|
||||||
|
|
||||||
|
#include <asm/page.h>
|
||||||
|
EXPORT_SYMBOL(copy_page);
|
||||||
|
|
||||||
#if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE)
|
#if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE)
|
||||||
extern void xor_ia64_2(void);
|
extern void xor_ia64_2(void);
|
||||||
extern void xor_ia64_3(void);
|
extern void xor_ia64_3(void);
|
||||||
|
|
|
@ -199,19 +199,6 @@ static inline int __gsi_to_irq(unsigned int gsi)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Translate GSI number to the corresponding IA-64 interrupt vector. If no
|
|
||||||
* entry exists, return -1.
|
|
||||||
*/
|
|
||||||
inline int
|
|
||||||
gsi_to_vector (unsigned int gsi)
|
|
||||||
{
|
|
||||||
int irq = __gsi_to_irq(gsi);
|
|
||||||
if (check_irq_used(irq) < 0)
|
|
||||||
return -1;
|
|
||||||
return irq_to_vector(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
gsi_to_irq (unsigned int gsi)
|
gsi_to_irq (unsigned int gsi)
|
||||||
{
|
{
|
||||||
|
@ -429,7 +416,7 @@ iosapic_end_level_irq (unsigned int irq)
|
||||||
#define iosapic_disable_level_irq mask_irq
|
#define iosapic_disable_level_irq mask_irq
|
||||||
#define iosapic_ack_level_irq nop
|
#define iosapic_ack_level_irq nop
|
||||||
|
|
||||||
struct irq_chip irq_type_iosapic_level = {
|
static struct irq_chip irq_type_iosapic_level = {
|
||||||
.name = "IO-SAPIC-level",
|
.name = "IO-SAPIC-level",
|
||||||
.startup = iosapic_startup_level_irq,
|
.startup = iosapic_startup_level_irq,
|
||||||
.shutdown = iosapic_shutdown_level_irq,
|
.shutdown = iosapic_shutdown_level_irq,
|
||||||
|
@ -478,7 +465,7 @@ iosapic_ack_edge_irq (unsigned int irq)
|
||||||
#define iosapic_disable_edge_irq nop
|
#define iosapic_disable_edge_irq nop
|
||||||
#define iosapic_end_edge_irq nop
|
#define iosapic_end_edge_irq nop
|
||||||
|
|
||||||
struct irq_chip irq_type_iosapic_edge = {
|
static struct irq_chip irq_type_iosapic_edge = {
|
||||||
.name = "IO-SAPIC-edge",
|
.name = "IO-SAPIC-edge",
|
||||||
.startup = iosapic_startup_edge_irq,
|
.startup = iosapic_startup_edge_irq,
|
||||||
.shutdown = iosapic_disable_edge_irq,
|
.shutdown = iosapic_disable_edge_irq,
|
||||||
|
@ -491,7 +478,7 @@ struct irq_chip irq_type_iosapic_edge = {
|
||||||
.set_affinity = iosapic_set_affinity
|
.set_affinity = iosapic_set_affinity
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int
|
static unsigned int
|
||||||
iosapic_version (char __iomem *addr)
|
iosapic_version (char __iomem *addr)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -938,7 +925,7 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
|
||||||
case ACPI_INTERRUPT_CPEI:
|
case ACPI_INTERRUPT_CPEI:
|
||||||
irq = vector = IA64_CPE_VECTOR;
|
irq = vector = IA64_CPE_VECTOR;
|
||||||
BUG_ON(bind_irq_vector(irq, vector, CPU_MASK_ALL));
|
BUG_ON(bind_irq_vector(irq, vector, CPU_MASK_ALL));
|
||||||
delivery = IOSAPIC_LOWEST_PRIORITY;
|
delivery = IOSAPIC_FIXED;
|
||||||
mask = 1;
|
mask = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -182,8 +182,8 @@ static int __kprobes unsupported_inst(uint template, uint slot,
|
||||||
qp = kprobe_inst & 0x3f;
|
qp = kprobe_inst & 0x3f;
|
||||||
if (is_cmp_ctype_unc_inst(template, slot, major_opcode, kprobe_inst)) {
|
if (is_cmp_ctype_unc_inst(template, slot, major_opcode, kprobe_inst)) {
|
||||||
if (slot == 1 && qp) {
|
if (slot == 1 && qp) {
|
||||||
printk(KERN_WARNING "Kprobes on cmp unc"
|
printk(KERN_WARNING "Kprobes on cmp unc "
|
||||||
"instruction on slot 1 at <0x%lx>"
|
"instruction on slot 1 at <0x%lx> "
|
||||||
"is not supported\n", addr);
|
"is not supported\n", addr);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
@ -221,8 +221,8 @@ static int __kprobes unsupported_inst(uint template, uint slot,
|
||||||
* bit 12 to be equal to 1
|
* bit 12 to be equal to 1
|
||||||
*/
|
*/
|
||||||
if (slot == 1 && qp) {
|
if (slot == 1 && qp) {
|
||||||
printk(KERN_WARNING "Kprobes on test bit"
|
printk(KERN_WARNING "Kprobes on test bit "
|
||||||
"instruction on slot at <0x%lx>"
|
"instruction on slot at <0x%lx> "
|
||||||
"is not supported\n", addr);
|
"is not supported\n", addr);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -242,7 +242,7 @@ static int __kprobes unsupported_inst(uint template, uint slot,
|
||||||
*/
|
*/
|
||||||
int x6=(kprobe_inst >> 27) & 0x3F;
|
int x6=(kprobe_inst >> 27) & 0x3F;
|
||||||
if ((x6 == 0x10) || (x6 == 0x11)) {
|
if ((x6 == 0x10) || (x6 == 0x11)) {
|
||||||
printk(KERN_WARNING "Kprobes on"
|
printk(KERN_WARNING "Kprobes on "
|
||||||
"Indirect Predict is not supported\n");
|
"Indirect Predict is not supported\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -430,6 +430,23 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
|
||||||
* real return address, and all the rest will point to
|
* real return address, and all the rest will point to
|
||||||
* kretprobe_trampoline
|
* kretprobe_trampoline
|
||||||
*/
|
*/
|
||||||
|
hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
|
||||||
|
if (ri->task != current)
|
||||||
|
/* another task is sharing our hash bucket */
|
||||||
|
continue;
|
||||||
|
|
||||||
|
orig_ret_address = (unsigned long)ri->ret_addr;
|
||||||
|
if (orig_ret_address != trampoline_address)
|
||||||
|
/*
|
||||||
|
* This is the real return address. Any other
|
||||||
|
* instances associated with this task are for
|
||||||
|
* other calls deeper on the call stack
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
regs->cr_iip = orig_ret_address;
|
||||||
|
|
||||||
hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
|
hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
|
||||||
if (ri->task != current)
|
if (ri->task != current)
|
||||||
/* another task is sharing our hash bucket */
|
/* another task is sharing our hash bucket */
|
||||||
|
@ -452,8 +469,6 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
|
||||||
|
|
||||||
kretprobe_assert(ri, orig_ret_address, trampoline_address);
|
kretprobe_assert(ri, orig_ret_address, trampoline_address);
|
||||||
|
|
||||||
regs->cr_iip = orig_ret_address;
|
|
||||||
|
|
||||||
reset_current_kprobe();
|
reset_current_kprobe();
|
||||||
spin_unlock_irqrestore(&kretprobe_lock, flags);
|
spin_unlock_irqrestore(&kretprobe_lock, flags);
|
||||||
preempt_enable_no_resched();
|
preempt_enable_no_resched();
|
||||||
|
|
|
@ -95,7 +95,6 @@ static struct resource bss_resource = {
|
||||||
.name = "Kernel bss",
|
.name = "Kernel bss",
|
||||||
.flags = IORESOURCE_BUSY | IORESOURCE_MEM
|
.flags = IORESOURCE_BUSY | IORESOURCE_MEM
|
||||||
};
|
};
|
||||||
extern char _text[], _end[], _etext[], _edata[], _bss[];
|
|
||||||
|
|
||||||
unsigned long ia64_max_cacheline_size;
|
unsigned long ia64_max_cacheline_size;
|
||||||
|
|
||||||
|
@ -206,7 +205,7 @@ static int __init register_memory(void)
|
||||||
code_resource.end = ia64_tpa(_etext) - 1;
|
code_resource.end = ia64_tpa(_etext) - 1;
|
||||||
data_resource.start = ia64_tpa(_etext);
|
data_resource.start = ia64_tpa(_etext);
|
||||||
data_resource.end = ia64_tpa(_edata) - 1;
|
data_resource.end = ia64_tpa(_edata) - 1;
|
||||||
bss_resource.start = ia64_tpa(_bss);
|
bss_resource.start = ia64_tpa(__bss_start);
|
||||||
bss_resource.end = ia64_tpa(_end) - 1;
|
bss_resource.end = ia64_tpa(_end) - 1;
|
||||||
efi_initialize_iomem_resources(&code_resource, &data_resource,
|
efi_initialize_iomem_resources(&code_resource, &data_resource,
|
||||||
&bss_resource);
|
&bss_resource);
|
||||||
|
|
|
@ -98,7 +98,7 @@ restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr)
|
||||||
if ((flags & IA64_SC_FLAG_FPH_VALID) != 0) {
|
if ((flags & IA64_SC_FLAG_FPH_VALID) != 0) {
|
||||||
struct ia64_psr *psr = ia64_psr(&scr->pt);
|
struct ia64_psr *psr = ia64_psr(&scr->pt);
|
||||||
|
|
||||||
__copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16);
|
err |= __copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16);
|
||||||
psr->mfh = 0; /* drop signal handler's fph contents... */
|
psr->mfh = 0; /* drop signal handler's fph contents... */
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
if (psr->dfh)
|
if (psr->dfh)
|
||||||
|
@ -244,7 +244,7 @@ static long
|
||||||
setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratch *scr)
|
setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratch *scr)
|
||||||
{
|
{
|
||||||
unsigned long flags = 0, ifs, cfm, nat;
|
unsigned long flags = 0, ifs, cfm, nat;
|
||||||
long err;
|
long err = 0;
|
||||||
|
|
||||||
ifs = scr->pt.cr_ifs;
|
ifs = scr->pt.cr_ifs;
|
||||||
|
|
||||||
|
@ -257,12 +257,12 @@ setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratc
|
||||||
ia64_flush_fph(current);
|
ia64_flush_fph(current);
|
||||||
if ((current->thread.flags & IA64_THREAD_FPH_VALID)) {
|
if ((current->thread.flags & IA64_THREAD_FPH_VALID)) {
|
||||||
flags |= IA64_SC_FLAG_FPH_VALID;
|
flags |= IA64_SC_FLAG_FPH_VALID;
|
||||||
__copy_to_user(&sc->sc_fr[32], current->thread.fph, 96*16);
|
err = __copy_to_user(&sc->sc_fr[32], current->thread.fph, 96*16);
|
||||||
}
|
}
|
||||||
|
|
||||||
nat = ia64_get_scratch_nat_bits(&scr->pt, scr->scratch_unat);
|
nat = ia64_get_scratch_nat_bits(&scr->pt, scr->scratch_unat);
|
||||||
|
|
||||||
err = __put_user(flags, &sc->sc_flags);
|
err |= __put_user(flags, &sc->sc_flags);
|
||||||
err |= __put_user(nat, &sc->sc_nat);
|
err |= __put_user(nat, &sc->sc_nat);
|
||||||
err |= PUT_SIGSET(mask, &sc->sc_mask);
|
err |= PUT_SIGSET(mask, &sc->sc_mask);
|
||||||
err |= __put_user(cfm, &sc->sc_cfm);
|
err |= __put_user(cfm, &sc->sc_cfm);
|
||||||
|
|
|
@ -240,11 +240,12 @@ SECTIONS
|
||||||
.sdata : AT(ADDR(.sdata) - LOAD_OFFSET)
|
.sdata : AT(ADDR(.sdata) - LOAD_OFFSET)
|
||||||
{ *(.sdata) *(.sdata1) *(.srdata) }
|
{ *(.sdata) *(.sdata1) *(.srdata) }
|
||||||
_edata = .;
|
_edata = .;
|
||||||
_bss = .;
|
__bss_start = .;
|
||||||
.sbss : AT(ADDR(.sbss) - LOAD_OFFSET)
|
.sbss : AT(ADDR(.sbss) - LOAD_OFFSET)
|
||||||
{ *(.sbss) *(.scommon) }
|
{ *(.sbss) *(.scommon) }
|
||||||
.bss : AT(ADDR(.bss) - LOAD_OFFSET)
|
.bss : AT(ADDR(.bss) - LOAD_OFFSET)
|
||||||
{ *(.bss) *(COMMON) }
|
{ *(.bss) *(COMMON) }
|
||||||
|
__bss_stop = .;
|
||||||
|
|
||||||
_end = .;
|
_end = .;
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,8 @@ lib-y := __divsi3.o __udivsi3.o __modsi3.o __umodsi3.o \
|
||||||
flush.o ip_fast_csum.o do_csum.o \
|
flush.o ip_fast_csum.o do_csum.o \
|
||||||
memset.o strlen.o xor.o
|
memset.o strlen.o xor.o
|
||||||
|
|
||||||
lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o
|
obj-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o
|
||||||
lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o
|
obj-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o
|
||||||
lib-$(CONFIG_PERFMON) += carta_random.o
|
lib-$(CONFIG_PERFMON) += carta_random.o
|
||||||
|
|
||||||
AFLAGS___divdi3.o =
|
AFLAGS___divdi3.o =
|
||||||
|
|
|
@ -180,7 +180,7 @@ ia64_tlb_init (void)
|
||||||
long status;
|
long status;
|
||||||
|
|
||||||
if ((status = ia64_pal_vm_page_size(&tr_pgbits, &purge.mask)) != 0) {
|
if ((status = ia64_pal_vm_page_size(&tr_pgbits, &purge.mask)) != 0) {
|
||||||
printk(KERN_ERR "PAL_VM_PAGE_SIZE failed with status=%ld;"
|
printk(KERN_ERR "PAL_VM_PAGE_SIZE failed with status=%ld; "
|
||||||
"defaulting to architected purge page-sizes.\n", status);
|
"defaulting to architected purge page-sizes.\n", status);
|
||||||
purge.mask = 0x115557000UL;
|
purge.mask = 0x115557000UL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -347,7 +347,7 @@ sn_common_bus_fixup(struct pci_bus *bus,
|
||||||
if (controller->node >= num_online_nodes()) {
|
if (controller->node >= num_online_nodes()) {
|
||||||
struct pcibus_bussoft *b = SN_PCIBUS_BUSSOFT(bus);
|
struct pcibus_bussoft *b = SN_PCIBUS_BUSSOFT(bus);
|
||||||
|
|
||||||
printk(KERN_WARNING "Device ASIC=%u XID=%u PBUSNUM=%u"
|
printk(KERN_WARNING "Device ASIC=%u XID=%u PBUSNUM=%u "
|
||||||
"L_IO=%lx L_MEM=%lx BASE=%lx\n",
|
"L_IO=%lx L_MEM=%lx BASE=%lx\n",
|
||||||
b->bs_asic_type, b->bs_xid, b->bs_persist_busnum,
|
b->bs_asic_type, b->bs_xid, b->bs_persist_busnum,
|
||||||
b->bs_legacy_io, b->bs_legacy_mem, b->bs_base);
|
b->bs_legacy_io, b->bs_legacy_mem, b->bs_base);
|
||||||
|
@ -545,19 +545,18 @@ sn_io_late_init(void)
|
||||||
nasid = NASID_GET(bussoft->bs_base);
|
nasid = NASID_GET(bussoft->bs_base);
|
||||||
cnode = nasid_to_cnodeid(nasid);
|
cnode = nasid_to_cnodeid(nasid);
|
||||||
if ((bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) ||
|
if ((bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) ||
|
||||||
(bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE)) {
|
(bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE) ||
|
||||||
/* TIO PCI Bridge: find nearest node with CPUs */
|
(bussoft->bs_asic_type == PCIIO_ASIC_TYPE_PIC)) {
|
||||||
|
/* PCI Bridge: find nearest node with CPUs */
|
||||||
int e = sn_hwperf_get_nearest_node(cnode, NULL,
|
int e = sn_hwperf_get_nearest_node(cnode, NULL,
|
||||||
&near_cnode);
|
&near_cnode);
|
||||||
if (e < 0) {
|
if (e < 0) {
|
||||||
near_cnode = (cnodeid_t)-1; /* use any node */
|
near_cnode = (cnodeid_t)-1; /* use any node */
|
||||||
printk(KERN_WARNING "pcibr_bus_fixup: failed "
|
printk(KERN_WARNING "sn_io_late_init: failed "
|
||||||
"to find near node with CPUs to TIO "
|
"to find near node with CPUs for "
|
||||||
"node %d, err=%d\n", cnode, e);
|
"node %d, err=%d\n", cnode, e);
|
||||||
}
|
}
|
||||||
PCI_CONTROLLER(bus)->node = near_cnode;
|
PCI_CONTROLLER(bus)->node = near_cnode;
|
||||||
} else if (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_PIC) {
|
|
||||||
PCI_CONTROLLER(bus)->node = cnode;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,6 @@ extern int iosapic_remove (unsigned int gsi_base);
|
||||||
#else
|
#else
|
||||||
#define iosapic_remove(gsi_base) (-EINVAL)
|
#define iosapic_remove(gsi_base) (-EINVAL)
|
||||||
#endif /* CONFIG_HOTPLUG */
|
#endif /* CONFIG_HOTPLUG */
|
||||||
extern int gsi_to_vector (unsigned int gsi);
|
|
||||||
extern int gsi_to_irq (unsigned int gsi);
|
extern int gsi_to_irq (unsigned int gsi);
|
||||||
extern int iosapic_register_intr (unsigned int gsi, unsigned long polarity,
|
extern int iosapic_register_intr (unsigned int gsi, unsigned long polarity,
|
||||||
unsigned long trigger);
|
unsigned long trigger);
|
||||||
|
@ -94,7 +93,6 @@ extern int __init iosapic_register_platform_intr (u32 int_type,
|
||||||
u16 eid, u16 id,
|
u16 eid, u16 id,
|
||||||
unsigned long polarity,
|
unsigned long polarity,
|
||||||
unsigned long trigger);
|
unsigned long trigger);
|
||||||
extern unsigned int iosapic_version (char __iomem *addr);
|
|
||||||
|
|
||||||
#ifdef CONFIG_NUMA
|
#ifdef CONFIG_NUMA
|
||||||
extern void __devinit map_iosapic_to_node (unsigned int, int);
|
extern void __devinit map_iosapic_to_node (unsigned int, int);
|
||||||
|
|
Loading…
Reference in New Issue