Skip site navigation (1)Skip section navigation (2)
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>