Re: QUESTION: Network hangs with BP6 and 2.4.x kernels, hardware

Linus Torvalds
2001-01-13T00:49:30Z

On Sat, 13 Jan 2001, Alan Cox wrote:

> > interrupt_handler()
> > {
> > status = readl(dev->status);
> > if (status & MY_IRQ_DISABLE)
> > return;
>
> Unfortunately on the 8390 the IRQ statud register is on page 0. The code
> on the other CPU might not be on page 0. That means we can't even safely
> check if there is an irq pending or clear it down (bad news on ne2k-pci)
> without getting that lock.

Alan.

THINK.

The "synchronous channel" can be _memory_. I just used the above as an
example of using a synchronous channel to make sure that the asynchronous
buses aren't screwing us.

You only need one bit of synchronous information. The example used the
very same bit that the irq flag on the device is anyway - which works on a
lot of devices simply because they need to read the status flags anyway
in order to handle the interrupt.

But if you have problems with that, just use an atomic flag off
"dev->private" instead. Big deal.

Linus