Subject: [PATCH] Cobalt interrupthandler fix

From: Karsten Merker <[email-masked]>
Date: Fri, 24 Jan 2003 15:15:24 +0100

Hallo,

the Cobalt NASRaQ (as well as other RaQ models) has the problem of freezing
when there is activity on the serial port and on the ethernet at the same
time. Peter de Schrijver has tracked this down to a bug in the interrupt
handler. The handler currently does not check whether an interrupt is masked
and calls the handling routine for _every_ interrupt, not only for those
that are not masked out currently.

The following patch fixes this. Ralf, could you please apply the fix
to the CVS?

Regards,
Karsten
-- 
#include <standard_disclaimer>
Nach Paragraph 28 Abs. 3 Bundesdatenschutzgesetz widerspreche ich der Nutzung
oder Uebermittlung meiner Daten fuer Werbezwecke oder fuer die Markt- oder
Meinungsforschung.
diff -Nur linux/arch/mips/cobalt/int-handler.S linux-cobalt/arch/mips/cobalt/int-handler.S
--- linux/arch/mips/cobalt/int-handler.S	Fri Sep 13 21:21:58 2002
+++ linux-cobalt/arch/mips/cobalt/int-handler.S	Tue Dec 31 22:26:18 2002
@@ -30,7 +30,9 @@
 		/*
 		 * Get pending Interrupts
 		 */
-		mfc0	s0,CP0_CAUSE	# get irq mask
+		mfc0	s0,CP0_CAUSE	# get raw irq status
+		mfc0	a0,CP0_STATUS	# get irq mask
+		and	s0,s0,a0	# compute masked irq status
 
 		andi	a0,s0,CAUSEF_IP2	/* Check for Galileo timer */
 		beq	a0,zero,1f

---

From: Liam Davies <[email-masked]>
Date: Tue, 28 Jan 2003 10:51:46 +1000

> The following patch fixes this. Ralf, could you please apply the fix
Good find, applied to CVS. The patch works great here!

Liam