Subject: CVS commit: syssrc
To: None <source-changes@netbsd.org>
From: Wayne Knowles <wdk@netbsd.org>
List: source-changes
Date: 08/29/2000 11:24:07
Module Name:	syssrc
Committed By:	wdk
Date:		Tue Aug 29 08:24:07 UTC 2000

Modified Files:
	syssrc/sys/arch/mipsco/obio: asc.c

Log Message:
Fix an obscure bug with dump corrupting files during raw reads.

If the DMA chaning interrupt couldn't be serviced immediately (higher spl
level when kernel doing something else) a few microseconds later the NCR
controller will fill its FIFO and also interrupt the CPU.

The SCSI interrupt sees the terminal count has been reached, calls
asc_dma_intr to finish the job off.   The FIFO cannot be flushed because
the block count hasn't been setup for the last dma segment (DMA chaining
still wasn't serviced).

Since the NCR 53c94 FIFO is only 16 bytes in size, any short DMA in this
size combined with the machine 'doing something else' causes the problem
to occur.

Servicing the DMA chaining interrupt before the NCR SCSI interrupt solves
this problem.

Add tests to ensure the DMA FIFO has been flushed correctly at the end of
each DMA operation just to be on the safe side.


To generate a diff of this commit:
cvs rdiff -r1.3 -r1.4 syssrc/sys/arch/mipsco/obio/asc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.