Module Name: src
Committed By: tls
Date: Sun Dec 2 05:46:04 UTC 2012
Modified Files:
src/sys/dev/pci [tls-maxphys]: arcmsr.c arcmsrvar.h
Log Message:
Areca controller maximum-transfer size limits -- looked up in FreeBSD
driver.
Actually exporting the per-volume transfer size for this driver will
be quite hard; the controller firmware shows the host the configured
volumes when the host probes the controller's "scsibus", and we can't
really associate them with particular RAID volumes until later. I think
we will have to intercept the SCSI inquiry commands -- yuck.
To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.30.12.1 src/sys/dev/pci/arcmsr.c
cvs rdiff -u -r1.14 -r1.14.12.1 src/sys/dev/pci/arcmsrvar.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/arcmsr.c
diff -u src/sys/dev/pci/arcmsr.c:1.30 src/sys/dev/pci/arcmsr.c:1.30.12.1
--- src/sys/dev/pci/arcmsr.c:1.30 Mon Jun 20 22:03:16 2011
+++ src/sys/dev/pci/arcmsr.c Sun Dec 2 05:46:03 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: arcmsr.c,v 1.30 2011/06/20 22:03:16 pgoyette Exp $ */
+/* $NetBSD: arcmsr.c,v 1.30.12.1 2012/12/02 05:46:03 tls Exp $ */
/* $OpenBSD: arc.c,v 1.68 2007/10/27 03:28:27 dlg Exp $ */
/*
@@ -21,7 +21,7 @@
#include "bio.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arcmsr.c,v 1.30 2011/06/20 22:03:16 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arcmsr.c,v 1.30.12.1 2012/12/02 05:46:03 tls Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -259,8 +259,8 @@ arc_shutdown(device_t self, int how)
static void
arc_minphys(struct buf *bp)
{
- if (bp->b_bcount > MAXPHYS)
- bp->b_bcount = MAXPHYS;
+ if (bp->b_bcount > ARC_MAX_XFER)
+ bp->b_bcount = ARC_MAX_XFER;
minphys(bp);
}
@@ -2091,8 +2091,9 @@ arc_alloc_ccbs(device_t self)
for (i = 0; i < sc->sc_req_count; i++) {
ccb = &sc->sc_ccbs[i];
- if (bus_dmamap_create(sc->sc_dmat, MAXPHYS, ARC_SGL_MAXLEN,
- MAXPHYS, 0, 0, &ccb->ccb_dmamap) != 0) {
+ if (bus_dmamap_create(sc->sc_dmat, ARC_MAX_XFER,
+ ARC_SGL_MAXLEN, ARC_MAX_XFER,
+ 0, 0, &ccb->ccb_dmamap) != 0) {
aprint_error_dev(self,
"unable to create dmamap for ccb %d\n", i);
goto free_maps;
Index: src/sys/dev/pci/arcmsrvar.h
diff -u src/sys/dev/pci/arcmsrvar.h:1.14 src/sys/dev/pci/arcmsrvar.h:1.14.12.1
--- src/sys/dev/pci/arcmsrvar.h:1.14 Mon Jun 20 13:26:58 2011
+++ src/sys/dev/pci/arcmsrvar.h Sun Dec 2 05:46:03 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: arcmsrvar.h,v 1.14 2011/06/20 13:26:58 pgoyette Exp $ */
+/* $NetBSD: arcmsrvar.h,v 1.14.12.1 2012/12/02 05:46:03 tls Exp $ */
/* Derived from $OpenBSD: arc.c,v 1.68 2007/10/27 03:28:27 dlg Exp $ */
/*
@@ -127,7 +127,10 @@ struct arc_sge {
#define ARC_MAX_TARGET 16
#define ARC_MAX_LUN 8
#define ARC_MAX_IOCMDLEN 512
+#define ARC_MAX_XFER_BLOCKS 4096
#define ARC_BLOCKSIZE 512
+#define ARC_MAX_XFER (MIN(MACHINE_MAXPHYS, \
+ ARC_MAX_XFER_BLOCKS * ARC_BLOCKSIZE))
/*
* the firmware deals with up to 256 or 512 byte command frames.