[parisc-linux] kernel panic

Grant Grundler grundler@puffin.external.hp.com
Wed, 23 May 2001 12:59:57 -0600


John Marvin wrote:
...
> OK, the problem is that you are getting into a interrupt loop.
> I see the following repeated sequence on the stack:
> 
> 	intr_extint         <-----------+
> 	do_irq_mask                     |
> 	do_irq                          |
> 	dino_isr                        |
> 	sym53c8xx_intr                  |
> 	scsi_old_done                   |
> 	rw_intr                         |
> 	scsi_io_completion              |
> 	__scsi_end_request              |
> 	scsi_queue_next_request         |
> 	scsi_request_fn                 |
> 	scsi_dispatch_cmd               |
> 	<NEXT INTERRUPT>    >-----------+

Uh oh. that's a bug. From irq.c:do_irq_mask() 

...
                mask_irq(irq_num);
                do_irq(&region->action[irq], irq_num, regs);
                unmask_irq(irq_num);
...

So it shouldn't be possible to take another interrupt
while in do_irq().

...
> to Richard Hirst, and he said a later version of the sym53c8xx driver
> processes things differently (using scsi_done instead of scsi_old_done)
> so that this shouldn't happen. However, I believe it shouldn't be
> happening anyway, because we should be preventing the isr from being
> re-entered in the general irq handling code.

Exactly. But if the driver is mucking with IRQ enable/disable,
does that mean the enable/disable code has to keep reference counts?
Don't recall any archs doing that when we did the initial implementation. 

grant

Grant Grundler
parisc-linux {PCI|IOMMU|SMP} hacker
+1.408.447.7253