git: fefb98000ee0 - stable/12 - ocs_fc: Increase maximum supported SG elements to support larger transfer sizes.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 17 Dec 2021 10:03:50 UTC
The branch stable/12 has been updated by ram: URL: https://cgit.FreeBSD.org/src/commit/?id=fefb98000ee05615900cb0fa0ac0e16bfba630ee commit fefb98000ee05615900cb0fa0ac0e16bfba630ee Author: Ram Kishore Vegesna <ram@FreeBSD.org> AuthorDate: 2021-09-24 09:05:03 +0000 Commit: Ram Kishore Vegesna <ram@FreeBSD.org> CommitDate: 2021-12-17 09:57:49 +0000 ocs_fc: Increase maximum supported SG elements to support larger transfer sizes. Reported by: ken@kdm.org Reviewed by: mav, ken (cherry picked from commit 322dbb8ce8f63fd6f542309fd38324664ce8dd3f) --- sys/dev/ocs_fc/ocs_cam.c | 14 +++++++++----- sys/dev/ocs_fc/ocs_device.h | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/sys/dev/ocs_fc/ocs_cam.c b/sys/dev/ocs_fc/ocs_cam.c index 9f7b44dc2128..5f0d282477c9 100644 --- a/sys/dev/ocs_fc/ocs_cam.c +++ b/sys/dev/ocs_fc/ocs_cam.c @@ -1701,7 +1701,7 @@ ocs_target_io(struct ocs_softc *ocs, union ccb *ccb) rc = ocs_scsi_send_resp(io, 0, &resp, ocs_scsi_target_io_cb, ccb); } else if (xferlen != 0) { - ocs_scsi_sgl_t sgl[OCS_FC_MAX_SGL]; + ocs_scsi_sgl_t *sgl; int32_t sgl_count = 0; io->tgt_io.state = OCS_CAM_IO_DATA; @@ -1709,7 +1709,9 @@ ocs_target_io(struct ocs_softc *ocs, union ccb *ccb) if (sendstatus) io->tgt_io.sendresp = 1; - sgl_count = ocs_build_scsi_sgl(ocs, ccb, io, sgl, ARRAY_SIZE(sgl)); + sgl = io->sgl; + + sgl_count = ocs_build_scsi_sgl(ocs, ccb, io, sgl, io->sgl_allocated); if (sgl_count > 0) { if (cam_dir == CAM_DIR_IN) { rc = ocs_scsi_send_rd_data(io, 0, NULL, sgl, @@ -1783,7 +1785,7 @@ ocs_initiator_io(struct ocs_softc *ocs, union ccb *ccb) struct ccb_hdr *ccb_h = &csio->ccb_h; ocs_node_t *node = NULL; ocs_io_t *io = NULL; - ocs_scsi_sgl_t sgl[OCS_FC_MAX_SGL]; + ocs_scsi_sgl_t *sgl; int32_t flags, sgl_count; ocs_fcport *fcp = NULL; @@ -1830,8 +1832,9 @@ ocs_initiator_io(struct ocs_softc *ocs, union ccb *ccb) csio->ccb_h.ccb_ocs_ptr = ocs; csio->ccb_h.ccb_io_ptr = io; + sgl = io->sgl; - sgl_count = ocs_build_scsi_sgl(ocs, ccb, io, sgl, ARRAY_SIZE(sgl)); + sgl_count = ocs_build_scsi_sgl(ocs, ccb, io, sgl, io->sgl_allocated); if (sgl_count < 0) { ocs_scsi_io_free(io); device_printf(ocs->dev, "%s: building SGL failed\n", __func__); @@ -2070,7 +2073,8 @@ ocs_action(struct cam_sim *sim, union ccb *ccb) /* Calculate the max IO supported * Worst case would be an OS page per SGL entry */ - cpi->maxio = PAGE_SIZE * + + cpi->maxio = PAGE_SIZE * (ocs_scsi_get_property(ocs, OCS_SCSI_MAX_SGL) - 1); strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN); diff --git a/sys/dev/ocs_fc/ocs_device.h b/sys/dev/ocs_fc/ocs_device.h index 337737aeb944..906b8432bb36 100644 --- a/sys/dev/ocs_fc/ocs_device.h +++ b/sys/dev/ocs_fc/ocs_device.h @@ -56,7 +56,7 @@ * @brief Defines the number of SGLs allocated on each IO object */ #ifndef OCS_FC_MAX_SGL -#define OCS_FC_MAX_SGL 128 +#define OCS_FC_MAX_SGL 256 #endif