svn commit: r244725 - in projects/physbio/sys: dev/arcmsr dev/ciss dev/hpt27xx dev/hptmv dev/hptrr dev/siis dev/twa kern powerpc/powerpc
Jeff Roberson
jeff at FreeBSD.org
Thu Dec 27 02:02:25 UTC 2012
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?
More information about the svn-src-projects
mailing list