Date: Tue, 18 Jun 2013 03:34:08 +0000 (UTC) From: Scott Long <scottl@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r251888 - stable/9/sys/dev/amd Message-ID: <201306180334.r5I3Y8tY068090@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: scottl Date: Tue Jun 18 03:34:08 2013 New Revision: 251888 URL: http://svnweb.freebsd.org/changeset/base/251888 Log: Catch up to the changes from r251874. This isn't an MFC because the amd(4) driver no longer exists in FreeBSD 10. Obtained from: Netflix Modified: stable/9/sys/dev/amd/amd.c Modified: stable/9/sys/dev/amd/amd.c ============================================================================== --- stable/9/sys/dev/amd/amd.c Tue Jun 18 02:57:56 2013 (r251887) +++ stable/9/sys/dev/amd/amd.c Tue Jun 18 03:34:08 2013 (r251888) @@ -428,61 +428,22 @@ amd_action(struct cam_sim * psim, union pSRB->ScsiCmdLen = pcsio->cdb_len; bcopy(pcsio->cdb_io.cdb_bytes, pSRB->CmdBlock, pcsio->cdb_len); if ((pccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE) { - if ((pccb->ccb_h.flags & CAM_SCATTER_VALID) == 0) { + int error; + + error - bus_dmamap_load_ccb(amd->buffer_dmat, + pSRB->dmamap, + pccb, + amdexecutesrb, + pSRB, /*flags*/0); + if (error == EINPROGRESS) { /* - * We've been given a pointer - * to a single buffer. + * So as to maintain ordering, + * freeze the controller queue + * until our mapping is + * returned. */ - if ((pccb->ccb_h.flags & CAM_DATA_PHYS) == 0) { - int s; - int error; - - s = splsoftvm(); - error = - bus_dmamap_load(amd->buffer_dmat, - pSRB->dmamap, - pcsio->data_ptr, - pcsio->dxfer_len, - amdexecutesrb, - pSRB, /*flags*/0); - if (error == EINPROGRESS) { - /* - * So as to maintain - * ordering, freeze the - * controller queue - * until our mapping is - * returned. - */ - xpt_freeze_simq(amd->psim, 1); - pccb->ccb_h.status |= - CAM_RELEASE_SIMQ; - } - splx(s); - } else { - struct bus_dma_segment seg; - - /* Pointer to physical buffer */ - seg.ds_addr = - (bus_addr_t)pcsio->data_ptr; - seg.ds_len = pcsio->dxfer_len; - amdexecutesrb(pSRB, &seg, 1, 0); - } - } else { - struct bus_dma_segment *segs; - - if ((pccb->ccb_h.flags & CAM_SG_LIST_PHYS) == 0 - || (pccb->ccb_h.flags & CAM_DATA_PHYS) != 0) { - TAILQ_INSERT_HEAD(&amd->free_srbs, - pSRB, links); - pccb->ccb_h.status = CAM_PROVIDE_FAIL; - xpt_done(pccb); - return; - } - - /* Just use the segments provided */ - segs = - (struct bus_dma_segment *)pcsio->data_ptr; - amdexecutesrb(pSRB, segs, pcsio->sglist_cnt, 0); + xpt_freeze_simq(sim, 1); + pccb->ccb_h.status |= CAM_RELEASE_SIMQ; } } else amdexecutesrb(pSRB, NULL, 0, 0);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306180334.r5I3Y8tY068090>