Date: Thu, 27 Dec 2012 02:02:23 +0000 (UTC) From: Jeff Roberson <jeff@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r244725 - in projects/physbio/sys: dev/arcmsr dev/ciss dev/hpt27xx dev/hptmv dev/hptrr dev/siis dev/twa kern powerpc/powerpc Message-ID: <201212270202.qBR22NbB084813@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jeff Date: Thu Dec 27 02:02:23 2012 New Revision: 244725 URL: http://svnweb.freebsd.org/changeset/base/244725 Log: - Correct bugs discovered in review by Alexander Kabaev Sponsored by: EMC / Isilon Storage Division Modified: projects/physbio/sys/dev/arcmsr/arcmsr.c projects/physbio/sys/dev/ciss/ciss.c projects/physbio/sys/dev/hpt27xx/osm_bsd.c projects/physbio/sys/dev/hptmv/entry.c projects/physbio/sys/dev/hptrr/hptrr_osm_bsd.c projects/physbio/sys/dev/siis/siis.c projects/physbio/sys/dev/twa/tw_osl_cam.c projects/physbio/sys/kern/subr_busdma.c projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Modified: projects/physbio/sys/dev/arcmsr/arcmsr.c ============================================================================== --- projects/physbio/sys/dev/arcmsr/arcmsr.c Thu Dec 27 01:43:35 2012 (r244724) +++ projects/physbio/sys/dev/arcmsr/arcmsr.c Thu Dec 27 02:02:23 2012 (r244725) @@ -2100,7 +2100,7 @@ static int arcmsr_iop_message_xfer(struc (u_int32_t ) pccb->csio.cdb_io.cdb_bytes[8]; /* 4 bytes: Areca io control code */ /* XXX Does not handle alternate data formats. */ - if ((pccb->ccb_h.flags & CAM_DATA_MASK) != CAM_DATA_VADDR) { + if ((pccb->ccb_h.flags & CAM_DATA_MASK) == CAM_DATA_VADDR) { buffer = pccb->csio.data_ptr; transfer_len = pccb->csio.dxfer_len; } else { Modified: projects/physbio/sys/dev/ciss/ciss.c ============================================================================== --- projects/physbio/sys/dev/ciss/ciss.c Thu Dec 27 01:43:35 2012 (r244724) +++ projects/physbio/sys/dev/ciss/ciss.c Thu Dec 27 02:02:23 2012 (r244725) @@ -3093,17 +3093,16 @@ ciss_cam_action_io(struct cam_sim *sim, cc->cdb.type = CISS_CDB_TYPE_COMMAND; cc->cdb.attribute = CISS_CDB_ATTRIBUTE_SIMPLE; /* XXX ordered tags? */ if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT) { - cr->cr_flags = CISS_REQ_DATAOUT; + cr->cr_flags = CISS_REQ_DATAOUT | CISS_REQ_CCB; cc->cdb.direction = CISS_CDB_DIRECTION_WRITE; } else if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) { - cr->cr_flags = CISS_REQ_DATAIN; + cr->cr_flags = CISS_REQ_DATAIN | CISS_REQ_CCB; cc->cdb.direction = CISS_CDB_DIRECTION_READ; } else { cr->cr_data = NULL; cr->cr_flags = 0; cc->cdb.direction = CISS_CDB_DIRECTION_NONE; } - cr->cr_flags |= CISS_REQ_CCB; cc->cdb.timeout = (csio->ccb_h.timeout / 1000) + 1; if (csio->ccb_h.flags & CAM_CDB_POINTER) { bcopy(csio->cdb_io.cdb_ptr, &cc->cdb.cdb[0], csio->cdb_len); Modified: projects/physbio/sys/dev/hpt27xx/osm_bsd.c ============================================================================== --- projects/physbio/sys/dev/hpt27xx/osm_bsd.c Thu Dec 27 01:43:35 2012 (r244724) +++ projects/physbio/sys/dev/hpt27xx/osm_bsd.c Thu Dec 27 02:02:23 2012 (r244725) @@ -492,19 +492,22 @@ static void hpt_io_dmamap_callback(void HPT_ASSERT(nsegs<=os_max_sg_descriptors); - for (idx = 0; idx < nsegs; idx++, psg++) { - psg->addr.bus = segs[idx].ds_addr; - psg->size = segs[idx].ds_len; - psg->eot = 0; - } - if (nsegs) + if (nsegs != 0) { + for (idx = 0; idx < nsegs; idx++, psg++) { + psg->addr.bus = segs[idx].ds_addr; + psg->size = segs[idx].ds_len; + psg->eot = 0; + } psg[-1].eot = 1; - if (pCmd->flags.data_in) { - bus_dmamap_sync(ext->vbus_ext->io_dmat, ext->dma_map, BUS_DMASYNC_PREREAD); - } - else if (pCmd->flags.data_out) { - bus_dmamap_sync(ext->vbus_ext->io_dmat, ext->dma_map, BUS_DMASYNC_PREWRITE); + if (pCmd->flags.data_in) { + bus_dmamap_sync(ext->vbus_ext->io_dmat, ext->dma_map, + BUS_DMASYNC_PREREAD); + } + else if (pCmd->flags.data_out) { + bus_dmamap_sync(ext->vbus_ext->io_dmat, ext->dma_map, + BUS_DMASYNC_PREWRITE); + } } ext->ccb->ccb_h.timeout_ch = timeout(hpt_timeout, pCmd, HPT_OSM_TIMEOUT); Modified: projects/physbio/sys/dev/hptmv/entry.c ============================================================================== --- projects/physbio/sys/dev/hptmv/entry.c Thu Dec 27 01:43:35 2012 (r244724) +++ projects/physbio/sys/dev/hptmv/entry.c Thu Dec 27 02:02:23 2012 (r244725) @@ -2737,21 +2737,23 @@ hpt_io_dmamap_callback(void *arg, bus_dm HPT_ASSERT(nsegs<= MAX_SG_DESCRIPTORS); - for (idx = 0; idx < nsegs; idx++, psg++) { - psg->dSgAddress = (ULONG_PTR)(UCHAR *)segs[idx].ds_addr; - psg->wSgSize = segs[idx].ds_len; - psg->wSgFlag = (idx == nsegs-1)? SG_FLAG_EOT: 0; -/* KdPrint(("psg[%d]:add=%p,size=%x,flag=%x\n", idx, psg->dSgAddress,psg->wSgSize,psg->wSgFlag)); */ - } - if (nsegs) { - /* psg[-1].wSgFlag = SG_FLAG_EOT; */ - } - - if (pCmd->cf_data_in) { - bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map, BUS_DMASYNC_PREREAD); - } - else if (pCmd->cf_data_out) { - bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map, BUS_DMASYNC_PREWRITE); + if (nsegs != 0) { + for (idx = 0; idx < nsegs; idx++, psg++) { + psg->dSgAddress = (ULONG_PTR)(UCHAR *)segs[idx].ds_addr; + psg->wSgSize = segs[idx].ds_len; + psg->wSgFlag = (idx == nsegs-1)? SG_FLAG_EOT: 0; + /* KdPrint(("psg[%d]:add=%p,size=%x,flag=%x\n", idx, psg->dSgAddress,psg->wSgSize,psg->wSgFlag)); */ + } + /* psg[-1].wSgFlag = SG_FLAG_EOT; */ + + if (pCmd->cf_data_in) { + bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map, + BUS_DMASYNC_PREREAD); + } + else if (pCmd->cf_data_out) { + bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map, + BUS_DMASYNC_PREWRITE); + } } ccb->ccb_h.timeout_ch = timeout(hpt_timeout, (caddr_t)ccb, 20*hz); Modified: projects/physbio/sys/dev/hptrr/hptrr_osm_bsd.c ============================================================================== --- projects/physbio/sys/dev/hptrr/hptrr_osm_bsd.c Thu Dec 27 01:43:35 2012 (r244724) +++ projects/physbio/sys/dev/hptrr/hptrr_osm_bsd.c Thu Dec 27 02:02:23 2012 (r244725) @@ -501,21 +501,23 @@ static void hpt_io_dmamap_callback(void HPT_ASSERT(nsegs<=os_max_sg_descriptors); - for (idx = 0; idx < nsegs; idx++, psg++) { - psg->addr.bus = segs[idx].ds_addr; - psg->size = segs[idx].ds_len; - psg->eot = 0; - } - if (nsegs) - psg[-1].eot = 1; - - if (pCmd->flags.data_in) { - bus_dmamap_sync(ext->vbus_ext->io_dmat, ext->dma_map, BUS_DMASYNC_PREREAD); - } - else if (pCmd->flags.data_out) { - bus_dmamap_sync(ext->vbus_ext->io_dmat, ext->dma_map, BUS_DMASYNC_PREWRITE); + if (nsegs != 0) { + for (idx = 0; idx < nsegs; idx++, psg++) { + psg->addr.bus = segs[idx].ds_addr; + psg->size = segs[idx].ds_len; + psg->eot = 0; + } + psg[-1].eot = 1; + + if (pCmd->flags.data_in) { + bus_dmamap_sync(ext->vbus_ext->io_dmat, ext->dma_map, + BUS_DMASYNC_PREREAD); + } + else if (pCmd->flags.data_out) { + bus_dmamap_sync(ext->vbus_ext->io_dmat, ext->dma_map, + BUS_DMASYNC_PREWRITE); + } } - ext->ccb->ccb_h.timeout_ch = timeout(hpt_timeout, pCmd, HPT_OSM_TIMEOUT); ldm_queue_cmd(pCmd); } Modified: projects/physbio/sys/dev/siis/siis.c ============================================================================== --- projects/physbio/sys/dev/siis/siis.c Thu Dec 27 01:43:35 2012 (r244724) +++ projects/physbio/sys/dev/siis/siis.c Thu Dec 27 02:02:23 2012 (r244725) @@ -1018,24 +1018,26 @@ siis_dmasetprd(void *arg, bus_dma_segmen return; } KASSERT(nsegs <= SIIS_SG_ENTRIES, ("too many DMA segment entries\n")); - /* Get a piece of the workspace for this request */ - ctp = (struct siis_cmd *) - (ch->dma.work + SIIS_CT_OFFSET + (SIIS_CT_SIZE * slot->slot)); - /* Fill S/G table */ - if (slot->ccb->ccb_h.func_code == XPT_ATA_IO) - prd = &ctp->u.ata.prd[0]; - else - prd = &ctp->u.atapi.prd[0]; - for (i = 0; i < nsegs; i++) { - prd[i].dba = htole64(segs[i].ds_addr); - prd[i].dbc = htole32(segs[i].ds_len); - prd[i].control = 0; - } - prd[nsegs - 1].control = htole32(SIIS_PRD_TRM); slot->dma.nsegs = nsegs; - bus_dmamap_sync(ch->dma.data_tag, slot->dma.data_map, - ((slot->ccb->ccb_h.flags & CAM_DIR_IN) ? - BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE)); + if (nsegs != 0) { + /* Get a piece of the workspace for this request */ + ctp = (struct siis_cmd *)(ch->dma.work + SIIS_CT_OFFSET + + (SIIS_CT_SIZE * slot->slot)); + /* Fill S/G table */ + if (slot->ccb->ccb_h.func_code == XPT_ATA_IO) + prd = &ctp->u.ata.prd[0]; + else + prd = &ctp->u.atapi.prd[0]; + for (i = 0; i < nsegs; i++) { + prd[i].dba = htole64(segs[i].ds_addr); + prd[i].dbc = htole32(segs[i].ds_len); + prd[i].control = 0; + } + prd[nsegs - 1].control = htole32(SIIS_PRD_TRM); + bus_dmamap_sync(ch->dma.data_tag, slot->dma.data_map, + ((slot->ccb->ccb_h.flags & CAM_DIR_IN) ? + BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE)); + } siis_execute_transaction(slot); } Modified: projects/physbio/sys/dev/twa/tw_osl_cam.c ============================================================================== --- projects/physbio/sys/dev/twa/tw_osl_cam.c Thu Dec 27 01:43:35 2012 (r244724) +++ projects/physbio/sys/dev/twa/tw_osl_cam.c Thu Dec 27 02:02:23 2012 (r244725) @@ -273,7 +273,7 @@ tw_osli_execute_scsi(struct tw_osli_req_ xpt_done(ccb); return(1); } - req->data = csio->data_ptr; + req->data = ccb; req->length = csio->dxfer_len; req->flags |= TW_OSLI_REQ_FLAGS_CCB; req->deadline = tw_osl_get_local_time() + (ccb_h->timeout / 1000); Modified: projects/physbio/sys/kern/subr_busdma.c ============================================================================== --- projects/physbio/sys/kern/subr_busdma.c Thu Dec 27 01:43:35 2012 (r244724) +++ projects/physbio/sys/kern/subr_busdma.c Thu Dec 27 02:02:23 2012 (r244725) @@ -197,6 +197,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, } } + nsegs++; segs = _bus_dmamap_complete(dmat, map, NULL, nsegs, error); if (error) (*callback)(callback_arg, segs, 0, 0, error); Modified: projects/physbio/sys/powerpc/powerpc/busdma_machdep.c ============================================================================== --- projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Thu Dec 27 01:43:35 2012 (r244724) +++ projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Thu Dec 27 02:02:23 2012 (r244725) @@ -701,7 +701,6 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm } *segp = seg; - map->nsegs = seg; /* * Did we fit?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212270202.qBR22NbB084813>