Messages in this thread | | | Date | Fri, 4 Oct 2002 19:00:58 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: oops in bk pull (oct 03) |
| |
On Fri, 4 Oct 2002, Linus Torvalds wrote: > > I think that is the real issue. We're mapping something - probably a host > bridge - at address 0, and then accessing RAM (which is also is mapped at > PCI address 0) and the host bridge is unhappy. > > So excluding the change is probably the right thing to do - it's just > fundamentally buggy to blindly put a base register at zero.
The more I think about this, the more convinced I am this is the case. We just _mustn't_ set up a live PCI window at address 0, and expect it to not cause confusion.
Also, we've seen before that we must not blindly disable a PCI window either, since that will kill the system when the host bridge is disabled and there is any pending DMA, for example (*). We saw that earlier in the 2.4.x tree - some host bridges will just ignore the disable (which means that then we'd trigger the zero-base bug), and others will honour the disable (which in turn will cause the DMA and other random problems).
This is all probably dependently on host bridge / MCH behaviour, so it probably works fine on 90%+ of all machines, but clearly breaks enough to not be a viable approach in general.
Ergo, the patch that looked so simple at first glance was really broken for a number of really subtle reasons.
Linus
(*) And pending DMA is actually _normal_ on PC's at early bootup when we enumerate the PCI system - it's how USB keyboard and mouse emulation is done, together with SMI support in the BIOS.
- 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/
| |