From owner-svn-src-projects@FreeBSD.ORG Thu Dec 27 02:02:25 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 73A57381; Thu, 27 Dec 2012 02:02:25 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 5728C8FC15; Thu, 27 Dec 2012 02:02:25 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id qBR22Phe084824; Thu, 27 Dec 2012 02:02:25 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id qBR22NbB084813; Thu, 27 Dec 2012 02:02:23 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201212270202.qBR22NbB084813@svn.freebsd.org> From: Jeff Roberson Date: Thu, 27 Dec 2012 02:02:23 +0000 (UTC) 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 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 Dec 2012 02:02:25 -0000 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?