diff -urN linux.old/arch/mips/bcm947xx/sbmips.c linux.dev/arch/mips/bcm947xx/sbmips.c
--- linux.old/arch/mips/bcm947xx/sbmips.c 1970-01-01 01:00:00.000000000 +0100
+++ linux.dev/arch/mips/bcm947xx/sbmips.c 2006-05-02 04:43:13.000000000 +0200
diff -urN linux.old/arch/mips/bcm947xx/sbmips.c linux.dev/arch/mips/bcm947xx/sbmips.c
--- linux.old/arch/mips/bcm947xx/sbmips.c 1970-01-01 01:00:00.000000000 +0100
+++ linux.dev/arch/mips/bcm947xx/sbmips.c 2006-05-02 04:43:13.000000000 +0200
+/*
+ * BCM47XX Sonics SiliconBackplane MIPS core routines
+ *
+/*
+ * BCM47XX Sonics SiliconBackplane MIPS core routines
+ *
+ * Returns the MIPS IRQ assignment of the current core. If unassigned,
+ * 0 is returned.
+ */
+ * Returns the MIPS IRQ assignment of the current core. If unassigned,
+ * 0 is returned.
+ */
-+static uint
-+sb_getirq(sb_t *sbh)
++uint
++sb_irq(sb_t *sbh)
+{
+ osl_t *osh;
+ uint idx;
+{
+ osl_t *osh;
+ uint idx;
-+/*
-+ * Return the MIPS IRQ assignment of the current core. If necessary
-+ * map cores sharing the MIPS hw IRQ0 to virtual dedicated OS IRQs.
-+ */
-+uint
-+sb_irq(sb_t *sbh)
-+{
-+ uint irq = sb_getirq(sbh);
-+ if (irq == 0 && shirq_map_base)
-+ irq = sb_getflag(sbh) + shirq_map_base;
-+ return irq;
-+}
-+
+/* Clears the specified MIPS IRQ. */
+static void
+BCMINITFN(sb_clearirq)(sb_t *sbh, uint irq)
+/* Clears the specified MIPS IRQ. */
+static void
+BCMINITFN(sb_clearirq)(sb_t *sbh, uint irq)
+ regs = sb_setcore(sbh, coreid, coreunit);
+ ASSERT(regs);
+ flag = sb_getflag(sbh);
+ regs = sb_setcore(sbh, coreid, coreunit);
+ ASSERT(regs);
+ flag = sb_getflag(sbh);
-+ oldirq = sb_getirq(sbh);
+ if (oldirq)
+ sb_clearirq(sbh, oldirq);
+
+ if (oldirq)
+ sb_clearirq(sbh, oldirq);
+