hi, >/************************************************************************************/ >/* Why am I not returning from the following >call? */ >/************************************************************************************/ > > printk("*** SP 1 irq: %d***\n", irq); > if (i8259A_irq_real(irq)) > /* > * oops, the IRQ _is_ in service according to the > * 8259A - not spurious, go handle it. > */ > printk("*** SP 2 ***\n"); > goto handle_real_irq; do you really mean it? the goto is unconditional now? but your output susgest that i8259A_irq_real never return true > > { > static int spurious_irq_mask = 0; > > printk("*** SP 3 ***\n"); > > /* > * At this point we can be sure the IRQ is spurious, > * lets ACK and report it. [once per IRQ] > */ > printk("*** SP 4 ***\n"); > > if (!(spurious_irq_mask & irqmask)) { > printk("spurious 8259A interrupt: IRQ%d.\n", irq); > spurious_irq_mask |= irqmask; > } > printk("*** SP 5 ***\n"); > > irq_err_count++; > /* > * Theoretically we do not have to handle this IRQ, > * but in Linux this does not cause problems and is > * simpler for us. > */ > printk("*** SP 6 ***\n"); > > goto handle_real_irq; > } >} > > >Thanks in advance for any advice... > >-- >Scott A. McConnell Regards Zhang Fuxin fxzhang@ict.ac.cn