svn commit: r244877 - projects/physbio/sys/kern
Jeff Roberson
jeff at FreeBSD.org
Mon Dec 31 01:13:42 UTC 2012
Author: jeff
Date: Mon Dec 31 01:13:41 2012
New Revision: 244877
URL: http://svnweb.freebsd.org/changeset/base/244877
Log:
- Correct the bus_dmamap_load_uio function so it correctly specifies the
pmap in all cases.
Sponsored by: EMC / Isilon Storage Division
Modified:
projects/physbio/sys/kern/subr_busdma.c
Modified: projects/physbio/sys/kern/subr_busdma.c
==============================================================================
--- projects/physbio/sys/kern/subr_busdma.c Mon Dec 31 00:52:16 2012 (r244876)
+++ projects/physbio/sys/kern/subr_busdma.c Mon Dec 31 01:13:41 2012 (r244877)
@@ -202,14 +202,21 @@ _bus_dmamap_load_ccb(bus_dma_tag_t dmat,
*/
static int
_bus_dmamap_load_uio(bus_dma_tag_t dmat, bus_dmamap_t map, struct uio *uio,
- pmap_t pmap, int *nsegs, int flags)
+ int *nsegs, int flags)
{
bus_size_t resid;
bus_size_t minlen;
struct iovec *iov;
+ pmap_t pmap;
caddr_t addr;
int error, i;
+ if (uio->uio_segflg == UIO_USERSPACE) {
+ KASSERT(uio->uio_td != NULL,
+ ("bus_dmamap_load_uio: USERSPACE but no proc"));
+ pmap = vmspace_pmap(uio->uio_td->td_proc->p_vmspace);
+ } else
+ pmap = kernel_pmap;
resid = uio->uio_resid;
iov = uio->uio_iov;
error = 0;
@@ -318,18 +325,10 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
{
bus_dma_segment_t *segs;
int nsegs, error;
- pmap_t pmap;
flags |= BUS_DMA_NOWAIT;
- if (uio->uio_segflg == UIO_USERSPACE) {
- KASSERT(uio->uio_td != NULL,
- ("bus_dmamap_load_uio: USERSPACE but no proc"));
- pmap = vmspace_pmap(uio->uio_td->td_proc->p_vmspace);
- } else
- pmap = kernel_pmap;
-
nsegs = -1;
- error = _bus_dmamap_load_uio(dmat, map, uio, pmap, &nsegs, flags);
+ error = _bus_dmamap_load_uio(dmat, map, uio, &nsegs, flags);
nsegs++;
segs = _bus_dmamap_complete(dmat, map, NULL, nsegs, error);
@@ -419,7 +418,7 @@ bus_dmamap_load_mem(bus_dma_tag_t dmat,
break;
case BUS_DMAMEM_UIO:
error = _bus_dmamap_load_uio(dmat, map, mem->u.dm_uio,
- /*XXX*/kernel_pmap, &nsegs, flags);
+ &nsegs, flags);
break;
case BUS_DMAMEM_MBUF:
error = _bus_dmamap_load_mbuf_sg(dmat, map, mem->u.dm_mbuf,
More information about the svn-src-projects
mailing list