Is anyone else having trouble with NFS root on
the 2.4.0 kernel? It won't come up with the
KSEG0 cache on unless I pepper the network driver
with flush calls.
That's expected for most old network drivers that don't yet use the
new PCI DMA API documented in Documentation/DMA-mapping.txt.
What driver is this?
Both the stock 2.4.0 tulip and eepro100 drivers. The
problem doesn't happen when I go back to 2.3.99pre8.
In the tulip driver, both the rx and tx ring descriptors
are adjusted with pci_alloc_consistent() and are only
touched through KSEG1.
But I must be totally clueless because in both kernels
tulip_rx() calls pci_unmap_single() which does nothing.
But the skb data pointers all point to KSEG0. With
cache on, how in the world will the kernel be able to
see what just got DMA'd into the skb?
Another thing that has been haunting me is that
in 2.3.99pre8, kmalloc() has and #ifdef __mips__ that
flushes the cache and bumps the address up to KSEG1.
This is gone in 2.4.0, but from what I can tell, this
case didn't happen for skb allocations (i.e. dev_alloc_skb)
because they only set GFP_ATOMIC, and not GFP_DMA.