summaryrefslogtreecommitdiffstats
path: root/sys/dev/sym
diff options
context:
space:
mode:
authorse <se@FreeBSD.org>2009-10-31 17:06:36 +0000
committerse <se@FreeBSD.org>2009-10-31 17:06:36 +0000
commitb44c3ebbbe706bb08a658e72f84bd610e718d00e (patch)
tree3d847f5ec9ef3d377c33396ccb9e742c3c241f9d /sys/dev/sym
parent6fe1e3e06af7b0dbd335e49d4a76da6b571a7628 (diff)
downloadFreeBSD-src-b44c3ebbbe706bb08a658e72f84bd610e718d00e.zip
FreeBSD-src-b44c3ebbbe706bb08a658e72f84bd610e718d00e.tar.gz
While certain supported Symbios/LSI SCSI chips (532c896, 53c1000, 53c1010)
do support 64bit addresses, the current SCRIPTS code supports only 32bit addresses causing data corruption for buffer addresses >4GB. This problem affects 64bit machines with more than 4GB RAM or amd64 with 4GB and memory hole remapping. Work-around this problem with a bus_dma tag that requests bounce-buffers for addresses >4GB. This causes some overhead, but given the maximum SCSI bus speed of 160MB/s compared, the effect should hardly be noticeable. The problem was reported by Mike Watters (mike at mwatters net) who also verified that this fix cures the problem. Since this change is a NOOP on systems with less than 4GB RAM and fixes data corruption (in RAM and on disk) on systems with more than 4GB, I hope that this change is accepted for 8.0. MFC after: 3 days (pending approval)
Diffstat (limited to 'sys/dev/sym')
-rw-r--r--sys/dev/sym/sym_hipd.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/dev/sym/sym_hipd.c b/sys/dev/sym/sym_hipd.c
index ab74a55..a43c816 100644
--- a/sys/dev/sym/sym_hipd.c
+++ b/sys/dev/sym/sym_hipd.c
@@ -8582,7 +8582,7 @@ sym_pci_attach(device_t dev)
* Allocate a tag for the DMA of user data.
*/
if (bus_dma_tag_create(np->bus_dmat, 1, (1<<24),
- BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR,
NULL, NULL,
BUS_SPACE_MAXSIZE, SYM_CONF_MAX_SG,
(1<<24), 0, busdma_lock_mutex, &np->mtx,
OpenPOWER on IntegriCloud