aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/aacraid
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/aacraid')
-rw-r--r--sys/dev/aacraid/aacraid.c4
-rw-r--r--sys/dev/aacraid/aacraid_cam.c2
-rw-r--r--sys/dev/aacraid/aacraid_var.h8
3 files changed, 11 insertions, 3 deletions
diff --git a/sys/dev/aacraid/aacraid.c b/sys/dev/aacraid/aacraid.c
index 65c585269b78..51a633e70515 100644
--- a/sys/dev/aacraid/aacraid.c
+++ b/sys/dev/aacraid/aacraid.c
@@ -579,7 +579,7 @@ aac_alloc(struct aac_softc *sc)
BUS_SPACE_MAXADDR_32BIT, /* lowaddr */
BUS_SPACE_MAXADDR, /* highaddr */
NULL, NULL, /* filter, filterarg */
- sc->aac_max_sectors << 9, /* maxsize */
+ AAC_MAXIO_SIZE(sc), /* maxsize */
sc->aac_sg_tablesize, /* nsegments */
BUS_SPACE_MAXSIZE_32BIT, /* maxsegsize */
BUS_DMA_ALLOCNOW, /* flags */
@@ -1807,7 +1807,7 @@ aac_init(struct aac_softc *sc)
}
ip->MaxIoCommands = sc->aac_max_fibs;
- ip->MaxIoSize = sc->aac_max_sectors << 9;
+ ip->MaxIoSize = AAC_MAXIO_SIZE(sc);
ip->MaxFibSize = sc->aac_max_fib_size;
aac_adapter_init_tole(ip);
diff --git a/sys/dev/aacraid/aacraid_cam.c b/sys/dev/aacraid/aacraid_cam.c
index 48da7e8d757f..9c73248472bd 100644
--- a/sys/dev/aacraid/aacraid_cam.c
+++ b/sys/dev/aacraid/aacraid_cam.c
@@ -1011,7 +1011,7 @@ aac_cam_action(struct cam_sim *sim, union ccb *ccb)
cpi->max_lun = 7; /* Per the controller spec */
cpi->initiator_id = camsc->inf->InitiatorBusId;
cpi->bus_id = camsc->inf->BusNumber;
- cpi->maxio = sc->aac_max_sectors << 9;
+ cpi->maxio = AAC_MAXIO_SIZE(sc);
/*
* Resetting via the passthrough or parallel bus scan
diff --git a/sys/dev/aacraid/aacraid_var.h b/sys/dev/aacraid/aacraid_var.h
index 4fed21b1356b..bbafdafb8840 100644
--- a/sys/dev/aacraid/aacraid_var.h
+++ b/sys/dev/aacraid/aacraid_var.h
@@ -471,6 +471,14 @@ struct aac_softc
};
/*
+ * Max. I/O size in bytes.
+ * Reserve one page for the DMA subsystem, that may need it when the
+ * I/O buffer is not page aligned.
+ */
+#define AAC_MAXIO_SIZE(sc) MIN(((sc)->aac_max_sectors << 9) - PAGE_SIZE, \
+ maxphys)
+
+/*
* Event callback mechanism for the driver
*/
#define AAC_EVENT_NONE 0x00