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
|