Subject: CVS commit: src/sys/dev/ic
To: None <source-changes@NetBSD.org>
From: David Young <dyoung@netbsd.org>
List: source-changes
Date: 04/12/2007 06:14:47
Module Name:	src
Committed By:	dyoung
Date:		Thu Apr 12 06:14:47 UTC 2007

Modified Files:
	src/sys/dev/ic: gem.c gemreg.h

Log Message:
Make the members of the descriptors volatile, because the NIC and
the host share them.

Before breaking out of the loop over descriptors in gem_rint(),
DMA-resynchronize the first Rx descriptor we found that does not
belong to the host.  We must avoid a cached descriptor "covering"
a descriptor in RAM, because the cached descriptor may say that
the descriptor still belongs to the NIC, when that is not true,
and the driver will hang.

XXX I believe this driver only works by luck on hosts that both
XXX have a cacheline size greater than the size of a descriptor
XXX (16 bytes) and lack DMA/cache coherency.  I need to add some
XXX trickery to make sure that we don't scribble over the NIC's
XXX changes to a descriptor when we flush a cached descriptor to
XXX RAM with bus_dmamap_sync(9).


To generate a diff of this commit:
cvs rdiff -r1.55 -r1.56 src/sys/dev/ic/gem.c
cvs rdiff -r1.9 -r1.10 src/sys/dev/ic/gemreg.h

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