diff options
author | mav <mav@FreeBSD.org> | 2013-03-28 11:24:30 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2013-03-28 11:24:30 +0000 |
commit | 674a0b97f5232c5275bfd0394620e7809315c694 (patch) | |
tree | 2e2f4030077a140b2312d09686472e3e8e4c7227 /sys/dev/mps | |
parent | e2bc9dfbfd90d8c2a252f94a9b6c5e48641993b7 (diff) | |
download | FreeBSD-src-674a0b97f5232c5275bfd0394620e7809315c694.zip FreeBSD-src-674a0b97f5232c5275bfd0394620e7809315c694.tar.gz |
Except one case mps(4) driver does not touch the data and works well with
unmapped I/O. That one exception is access to INQUIRY VPD request result.
Those requests are never unmapped now, but to be safe add respective check
there and allow unmapped I/O for the SIM by setting PIM_UNMAPPED flag.
Diffstat (limited to 'sys/dev/mps')
-rw-r--r-- | sys/dev/mps/mps_sas.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/dev/mps/mps_sas.c b/sys/dev/mps/mps_sas.c index 0d8342e..5da19ae 100644 --- a/sys/dev/mps/mps_sas.c +++ b/sys/dev/mps/mps_sas.c @@ -914,7 +914,7 @@ mpssas_action(struct cam_sim *sim, union ccb *ccb) cpi->version_num = 1; cpi->hba_inquiry = PI_SDTR_ABLE|PI_TAG_ABLE|PI_WIDE_16; cpi->target_sprt = 0; - cpi->hba_misc = PIM_NOBUSRESET; + cpi->hba_misc = PIM_NOBUSRESET | PIM_UNMAPPED; cpi->hba_eng_cnt = 0; cpi->max_target = sassc->sc->facts->MaxTargets - 1; cpi->max_lun = 255; @@ -2238,6 +2238,7 @@ mpssas_scsiio_complete(struct mps_softc *sc, struct mps_command *cm) if ((csio->cdb_io.cdb_bytes[0] == INQUIRY) && (csio->cdb_io.cdb_bytes[1] & SI_EVPD) && (csio->cdb_io.cdb_bytes[2] == SVPD_SUPPORTED_PAGE_LIST) && + ((csio->ccb_h.flags & CAM_DATA_MASK) == CAM_DATA_VADDR) && (csio->data_ptr != NULL) && (((uint8_t *)cm->cm_data)[0] == T_SEQUENTIAL) && (sc->control_TLR) && (sc->mapping_table[csio->ccb_h.target_id].device_info & |