aaa3f11967
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. |
||
---|---|---|
bin | ||
crypto | ||
dist | ||
distrib | ||
etc | ||
games | ||
gnu | ||
include | ||
lib | ||
libexec | ||
regress | ||
sbin | ||
share | ||
sys | ||
usr.bin | ||
usr.sbin | ||
Makefile | ||
Makefile.inc | ||
UPDATING |