Subject: panic from aha driver after "error loading dma map"..
To: None <thorpej@NetBSD.ORG>
From: Bill Sommerfeld <sommerfeld@orchard.east-arlington.ma.us>
List: port-i386
Date: 06/16/1997 09:51:19
On Saturday, I built a 1.2G kernel; I booted it yesterday on my system
(486/33 with 32M of memory, and 2 IDE drives and one SCSI drive
connected through an AHA).

Last night, I left a "make build" running overnight.

This morning, I woke up to find the system crashed, with the following
(approximate) panic message:

aha0: aha_scsi_cmd, error 22 loading dma map
vm_fault(0xf8276000, 0xf8970000, 3, 0)
kernel page fault trap, code=0
stopped at bcopy+1a:   repe movsl (%esi),%es:(%edi)

"error 22" would appear to be EINVAL.

%edi contained 0xf8970000, which is the address mentioned in the vm_fault..

the traceback was:
	bcopy+1a
	aha_done+0x3f
	aha_finish_ccbs+0xde
	aha_intr+0x73

Assuming I'm reading the disassembly correctly, the fault occurred in
a bcopy called bus_dmamap_sync from around line 772 of
sys/dev/ic/aha.c:

		bus_dmamap_sync(dmat, ccb->dmamap_xfer,
		    (xs->flags & SCSI_DATA_IN) ? BUS_DMASYNC_POSTREAD :
		    BUS_DMASYNC_POSTWRITE);

As best I can tell, the only thing in the i386 isa dmamap code which
can return EINVAL is _isa_dma_check_buffer(); I'm not quite familiar
enough with the code to figure out how that return value could have
gotten there.

Any clues?

					- Bill