Re: esp scsi problem on shutdown - sunhme related?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: David Miller <davem@xxxxxxxxxxxxx>
Date: Wed, 04 Mar 2009 04:09:58 -0800 (PST)

> I'm not exactly sure how I'll fix this.  I'll try to come
> up with a scheme and post a patch for you to test tomorrow.

I lied :-)  I think the following simple approach might
work.

Can you give it a try?

Thanks!

diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index e289376..e1a40b3 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -325,15 +325,12 @@ static void sun4u_set_affinity(unsigned int virt_irq,
 
 static void sun4u_irq_disable(unsigned int virt_irq)
 {
-	struct irq_handler_data *data = get_irq_chip_data(virt_irq);
-
-	if (likely(data)) {
-		unsigned long imap = data->imap;
-		unsigned long tmp = upa_readq(imap);
-
-		tmp &= ~IMAP_VALID;
-		upa_writeq(tmp, imap);
-	}
+	/* Don't do anything.  The desc->status check for
+	 * IRQ_DISABLED in handler_irq() will skip the
+	 * handler call and that will leave the interrupt
+	 * in the sent state.  The next ->enable() call will
+	 * hit the ICLR register to reset the state machine.
+	 */
 }
 
 static void sun4u_irq_eoi(unsigned int virt_irq)
@@ -746,7 +743,8 @@ void handler_irq(int irq, struct pt_regs *regs)
 
 		desc = irq_desc + virt_irq;
 
-		desc->handle_irq(virt_irq, desc);
+		if (!(desc->status & IRQ_DISABLED))
+			desc->handle_irq(virt_irq, desc);
 
 		bucket_pa = next_pa;
 	}
--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Development]     [DCCP]     [Linux ARM Development]     [Linux]     [Photo]     [Yosemite Help]     [Linux ARM Kernel]     [Linux SCSI]     [Linux x86_64]     [Linux Hams]

  Powered by Linux