On Tue, May 18, 2004 at 11:45:19AM -0700, Jun Sun wrote: > > Like others suggested, this is not the right fix. flush_page_to_ram() > is correctly nullified. Its job should be done somewhere else > by other routines. > > Here are a couple of random ideas for finding the true root cause: > We know what the true root cause is :-) IDE PIO fills the D-cache with the read data (write allocate) as it copies it to the page cache. The kernel maps the page cache page into user space ... BANG! possible D-cache alias. The kernel doesn't bother flushing the page cache page from the D-cache as it's never accessed at it's page cache address. The current fix in the Cobalt patches (2.4 & 2.6) just flushes the read data out of the D-cache after every IDE insw()/insl(). This is the least intrusive fix. Some Sparc machines also see this problem. P.