> are you sure timer interrupts are processed while you are waiting for the
> timeout to expire? I'd suggest to put a:
>
> printk("<%d>", irq);
>
> into arch/i386/kernel/irq.c:do_IRQ().
Until the call of interruptible_sleep_on_timeout(), timer interrupts
were processed. Right after the call no more output is made.
> So you can see what kind of
> interrupt traffic there is while the device initializes and you are
> waiting for it to generate an interrupt.
I use the function only for a short delay (switch on the device's reset,
wait and switch it off again), so the device even does not generate a
PCI interrupt.
In the time inbetween I have traced the problem: Inside the sleep_on()
functions there is the macro SLEEP_ON_HEAD containing the call
wq_write_lock_irqsave(), where the error happens. This is a macro, too,
which at last expands to
__asm__ __volatile__("pushfl ; popl %0":"=g" (x): /* no input */)
(x ist the variable where the IRQ flags are stored)
I'm not familiar with x86 assembler; is it possible that something can
go wrong here?
bye, Norbert
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/