{
int cpu, i;
- for_each_online_cpu(cpu) {
+ for (cpu = 0; cpu <= NR_CPUS; cpu++) {
struct slice_data *si = cpu_data[cpu].data;
+ if (!cpu_online(cpu))
+ continue;
+
for (i = BASE_PCI_IRQ; i < LEVELS_PER_SLICE; i++)
if (si->level_to_irq[i] == irq) {
*cpunum = cpu;
* Kanoj 05.13.00
*/
-static void ip27_do_irq_mask0(struct pt_regs *regs)
+void ip27_do_irq_mask0(struct pt_regs *regs)
{
int irq, swlevel;
hubreg_t pend0, mask0;
LOCAL_HUB_L(PI_INT_PEND0);
}
-static void ip27_do_irq_mask1(struct pt_regs *regs)
+void ip27_do_irq_mask1(struct pt_regs *regs)
{
int irq, swlevel;
hubreg_t pend1, mask1;
LOCAL_HUB_L(PI_INT_PEND1);
}
-static void ip27_prof_timer(struct pt_regs *regs)
+void ip27_prof_timer(struct pt_regs *regs)
{
panic("CPU %d got a profiling interrupt", smp_processor_id());
}
-static void ip27_hub_error(struct pt_regs *regs)
+void ip27_hub_error(struct pt_regs *regs)
{
panic("CPU %d got a hub error interrupt", smp_processor_id());
}
return irq;
}
-extern void ip27_rt_timer_interrupt(struct pt_regs *regs);
-
-asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
-{
- unsigned long pending = read_c0_cause() & read_c0_status();
-
- if (pending & CAUSEF_IP4)
- ip27_rt_timer_interrupt(regs);
- else if (pending & CAUSEF_IP2) /* PI_INT_PEND_0 or CC_PEND_{A|B} */
- ip27_do_irq_mask0(regs);
- else if (pending & CAUSEF_IP3) /* PI_INT_PEND_1 */
- ip27_do_irq_mask1(regs);
- else if (pending & CAUSEF_IP5)
- ip27_prof_timer(regs);
- else if (pending & CAUSEF_IP6)
- ip27_hub_error(regs);
-}
-
void __init arch_init_irq(void)
{
+ set_except_vector(0, ip27_irq);
}
void install_ipi(void)