Merge commit 'v2.6.29-rc4' into core/percpu
Conflicts: arch/x86/mach-voyager/voyager_smp.c arch/x86/mm/fault.c
This commit is contained in:
commit
249d51b53a
586 changed files with 9676 additions and 5825 deletions
|
@ -196,6 +196,11 @@ int show_interrupts(struct seq_file *p, void *v)
|
|||
seq_putc(p, '\n');
|
||||
skip:
|
||||
spin_unlock_irqrestore(&irq_desc[i].lock, flags);
|
||||
} else if (i == NR_IRQS) {
|
||||
seq_printf(p, "NMI: ");
|
||||
for_each_online_cpu(j)
|
||||
seq_printf(p, "%10u ", cpu_data(j).__nmi_count);
|
||||
seq_printf(p, " Non-maskable interrupts\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -779,69 +784,6 @@ void do_softirq(void)
|
|||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
static void unhandled_perf_irq(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long pcr, pic;
|
||||
|
||||
read_pcr(pcr);
|
||||
read_pic(pic);
|
||||
|
||||
write_pcr(0);
|
||||
|
||||
printk(KERN_EMERG "CPU %d: Got unexpected perf counter IRQ.\n",
|
||||
smp_processor_id());
|
||||
printk(KERN_EMERG "CPU %d: PCR[%016lx] PIC[%016lx]\n",
|
||||
smp_processor_id(), pcr, pic);
|
||||
}
|
||||
|
||||
/* Almost a direct copy of the powerpc PMC code. */
|
||||
static DEFINE_SPINLOCK(perf_irq_lock);
|
||||
static void *perf_irq_owner_caller; /* mostly for debugging */
|
||||
static void (*perf_irq)(struct pt_regs *regs) = unhandled_perf_irq;
|
||||
|
||||
/* Invoked from level 15 PIL handler in trap table. */
|
||||
void perfctr_irq(int irq, struct pt_regs *regs)
|
||||
{
|
||||
clear_softint(1 << irq);
|
||||
perf_irq(regs);
|
||||
}
|
||||
|
||||
int register_perfctr_intr(void (*handler)(struct pt_regs *))
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!handler)
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock(&perf_irq_lock);
|
||||
if (perf_irq != unhandled_perf_irq) {
|
||||
printk(KERN_WARNING "register_perfctr_intr: "
|
||||
"perf IRQ busy (reserved by caller %p)\n",
|
||||
perf_irq_owner_caller);
|
||||
ret = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
perf_irq_owner_caller = __builtin_return_address(0);
|
||||
perf_irq = handler;
|
||||
|
||||
ret = 0;
|
||||
out:
|
||||
spin_unlock(&perf_irq_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(register_perfctr_intr);
|
||||
|
||||
void release_perfctr_intr(void (*handler)(struct pt_regs *))
|
||||
{
|
||||
spin_lock(&perf_irq_lock);
|
||||
perf_irq_owner_caller = NULL;
|
||||
perf_irq = unhandled_perf_irq;
|
||||
spin_unlock(&perf_irq_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(release_perfctr_intr);
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
void fixup_irqs(void)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue