svn commit: r243973 - in projects/physbio/sys: arm/arm ia64/ia64 powerpc/powerpc sparc64/sparc64 x86/x86
Jeff Roberson
jeff at FreeBSD.org
Fri Dec 7 06:34:22 UTC 2012
Author: jeff
Date: Fri Dec 7 06:34:20 2012
New Revision: 243973
URL: http://svnweb.freebsd.org/changeset/base/243973
Log:
- Normalize load_buffer() address space handling by always requiring a
valid pmap pointer.
Sponsored by: EMC / Isilon Storage Division
Modified:
projects/physbio/sys/arm/arm/busdma_machdep-v6.c
projects/physbio/sys/arm/arm/busdma_machdep.c
projects/physbio/sys/ia64/ia64/busdma_machdep.c
projects/physbio/sys/powerpc/powerpc/busdma_machdep.c
projects/physbio/sys/sparc64/sparc64/bus_machdep.c
projects/physbio/sys/sparc64/sparc64/iommu.c
projects/physbio/sys/x86/x86/busdma_machdep.c
Modified: projects/physbio/sys/arm/arm/busdma_machdep-v6.c
==============================================================================
--- projects/physbio/sys/arm/arm/busdma_machdep-v6.c Fri Dec 7 06:05:34 2012 (r243972)
+++ projects/physbio/sys/arm/arm/busdma_machdep-v6.c Fri Dec 7 06:34:20 2012 (r243973)
@@ -669,7 +669,7 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm
vendaddr = (vm_offset_t)buf + buflen;
while (vaddr < vendaddr) {
- if (__predict_true(map->pmap == pmap_kernel()))
+ if (__predict_true(map->pmap == kernel_pmap))
paddr = pmap_kextract(vaddr);
else
paddr = pmap_extract(map->pmap, vaddr);
@@ -718,6 +718,7 @@ static __inline int
_bus_dmamap_load_buffer(bus_dma_tag_t dmat,
bus_dmamap_t map,
void *buf, bus_size_t buflen,
+ pmap_t pmap,
int flags,
bus_dma_segment_t *segs,
int *segp)
@@ -737,12 +738,13 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
sl = NULL;
vaddr = (vm_offset_t)buf;
bmask = ~(dmat->boundary - 1);
+ map->pmap = pmap;
for (seg = *segp; buflen > 0 ; ) {
/*
* Get the physical address for this segment.
*/
- if (__predict_true(map->pmap == pmap_kernel()))
+ if (__predict_true(map->pmap == kernel_pmap))
curaddr = pmap_kextract(vaddr);
else
curaddr = pmap_extract(map->pmap, vaddr);
@@ -848,10 +850,9 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
flags |= BUS_DMA_WAITOK;
map->callback = callback;
map->callback_arg = callback_arg;
- map->pmap = kernel_pmap;
- error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, flags,
- dmat->segments, &nsegs);
+ error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
+ flags, dmat->segments, &nsegs);
CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
__func__, dmat, dmat->flags, error, nsegs + 1);
@@ -887,7 +888,6 @@ _bus_dmamap_load_mbuf_sg(bus_dma_tag_t d
int error;
M_ASSERTPKTHDR(m0);
- map->pmap = kernel_pmap;
flags |= BUS_DMA_NOWAIT;
*nsegs = -1;
@@ -899,7 +899,8 @@ _bus_dmamap_load_mbuf_sg(bus_dma_tag_t d
if (m->m_len > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
m->m_data, m->m_len,
- flags, segs, nsegs);
+ kernel_pmap, flags, segs,
+ nsegs);
}
}
} else {
@@ -957,6 +958,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
int nsegs, error, i;
bus_size_t resid;
struct iovec *iov;
+ pmap_t pmap;
flags |= BUS_DMA_NOWAIT;
resid = uio->uio_resid;
@@ -965,9 +967,9 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (uio->uio_segflg == UIO_USERSPACE) {
KASSERT(uio->uio_td != NULL,
("bus_dmamap_load_uio: USERSPACE but no proc"));
- map->pmap = vmspace_pmap(uio->uio_td->td_proc->p_vmspace);
+ pmap = vmspace_pmap(uio->uio_td->td_proc->p_vmspace);
} else
- map->pmap = kernel_pmap;
+ pmap = kernel_pmap;
nsegs = -1;
error = 0;
@@ -982,7 +984,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (minlen > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
- addr, minlen, flags,
+ addr, minlen, pmap, flags,
dmat->segments, &nsegs);
resid -= minlen;
}
Modified: projects/physbio/sys/arm/arm/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/arm/arm/busdma_machdep.c Fri Dec 7 06:05:34 2012 (r243972)
+++ projects/physbio/sys/arm/arm/busdma_machdep.c Fri Dec 7 06:34:20 2012 (r243973)
@@ -710,7 +710,7 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm
vendaddr = (vm_offset_t)buf + buflen;
while (vaddr < vendaddr) {
- if (__predict_true(pmap == pmap_kernel()))
+ if (__predict_true(pmap == kernel_pmap))
paddr = pmap_kextract(vaddr);
else
paddr = pmap_extract(pmap, vaddr);
@@ -781,7 +781,7 @@ bus_dmamap_load_buffer(bus_dma_tag_t dma
* XXX Don't support checking for coherent mappings
* XXX in user address space.
*/
- if (__predict_true(pmap == pmap_kernel())) {
+ if (__predict_true(pmap == kernel_pmap)) {
if (pmap_get_pde_pte(pmap, vaddr, &pde, &ptep) == FALSE)
return (EFAULT);
@@ -951,7 +951,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
if (m->m_len > 0) {
error = bus_dmamap_load_buffer(dmat,
dmat->segments, map, m->m_data, m->m_len,
- pmap_kernel(), flags, &nsegs);
+ kernel_pmap, flags, &nsegs);
map->len += m->m_len;
}
}
@@ -995,7 +995,7 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dm
if (m->m_len > 0) {
error = bus_dmamap_load_buffer(dmat, segs, map,
m->m_data, m->m_len,
- pmap_kernel(), flags,
+ kernel_pmap, flags,
nsegs);
map->len += m->m_len;
}
Modified: projects/physbio/sys/ia64/ia64/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/ia64/ia64/busdma_machdep.c Fri Dec 7 06:05:34 2012 (r243972)
+++ projects/physbio/sys/ia64/ia64/busdma_machdep.c Fri Dec 7 06:34:20 2012 (r243973)
@@ -486,7 +486,7 @@ bus_dmamem_free(bus_dma_tag_t dmat, void
*/
static int
_bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
- bus_size_t buflen, struct thread *td, int flags,
+ bus_size_t buflen, pmap_t pmap, int flags,
bus_dma_segment_t *segs, int *segp)
{
bus_size_t sgsize;
@@ -494,16 +494,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
vm_offset_t vaddr;
bus_addr_t paddr;
int seg;
- pmap_t pmap;
if (map == NULL)
map = &nobounce_dmamap;
- if (td != NULL)
- pmap = vmspace_pmap(td->td_proc->p_vmspace);
- else
- pmap = NULL;
-
if ((dmat->lowaddr < paddr_max || dmat->boundary > 0 ||
dmat->alignment > 1) && map != &nobounce_dmamap &&
map->pagesneeded == 0) {
@@ -517,10 +511,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
vendaddr = (vm_offset_t)buf + buflen;
while (vaddr < vendaddr) {
- if (pmap != NULL)
- paddr = pmap_extract(pmap, vaddr);
- else
+ if (pmap == kernel_pmap)
paddr = pmap_kextract(vaddr);
+ else
+ paddr = pmap_extract(pmap, vaddr);
if (run_filter(dmat, paddr, 0) != 0)
map->pagesneeded++;
vaddr += PAGE_SIZE;
@@ -558,10 +552,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
/*
* Get the physical address for this segment.
*/
- if (pmap)
- curaddr = pmap_extract(pmap, vaddr);
- else
+ if (pmap == kernel_pmap)
curaddr = pmap_kextract(vaddr);
+ else
+ curaddr = pmap_extract(pmap, vaddr);
/*
* Compute the segment size, and adjust counts.
@@ -634,8 +628,8 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
map->callback_arg = callback_arg;
}
- error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags,
- dmat->segments, &nsegs);
+ error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
+ flags, dmat->segments, &nsegs);
if (error == EINPROGRESS)
return (error);
@@ -668,7 +662,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
for (m = m0; m != NULL && error == 0; m = m->m_next) {
if (m->m_len > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
- m->m_data, m->m_len, NULL, flags,
+ m->m_data, m->m_len, kernel_pmap, flags,
dmat->segments, &nsegs);
}
}
@@ -703,7 +697,7 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dm
for (m = m0; m != NULL && error == 0; m = m->m_next) {
if (m->m_len > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
- m->m_data, m->m_len, NULL, flags,
+ m->m_data, m->m_len, kernel_pmap, flags,
segs, nsegs);
}
}
@@ -725,17 +719,18 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
int nsegs, error, i;
bus_size_t resid;
struct iovec *iov;
- struct thread *td = NULL;
+ pmap_t pmap;
flags |= BUS_DMA_NOWAIT;
resid = uio->uio_resid;
iov = uio->uio_iov;
if (uio->uio_segflg == UIO_USERSPACE) {
- td = uio->uio_td;
+ pmap = vmspace_pmap(uio->uio_td->td_proc->p_vmspace);
KASSERT(td != NULL,
("bus_dmamap_load_uio: USERSPACE but no proc"));
- }
+ } else
+ pmap = kernel_pmap;
nsegs = -1;
error = 0;
Modified: projects/physbio/sys/powerpc/powerpc/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Fri Dec 7 06:05:34 2012 (r243972)
+++ projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Fri Dec 7 06:34:20 2012 (r243973)
@@ -601,10 +601,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
bus_size_t sg_len;
sg_len = PAGE_SIZE - ((vm_offset_t)vaddr & PAGE_MASK);
- if (pmap)
- paddr = pmap_extract(pmap, vaddr);
- else
+ if (pmap == kernel_pmap)
paddr = pmap_kextract(vaddr);
+ else
+ paddr = pmap_extract(pmap, vaddr);
if (run_filter(dmat, paddr) != 0) {
sg_len = roundup2(sg_len, dmat->alignment);
map->pagesneeded++;
@@ -646,10 +646,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
/*
* Get the physical address for this segment.
*/
- if (pmap)
- curaddr = pmap_extract(pmap, vaddr);
- else
+ if (pmap == kernel_pmap)
curaddr = pmap_kextract(vaddr);
+ else
+ curaddr = pmap_extract(pmap, vaddr);
/*
* Compute the segment size, and adjust counts.
@@ -724,8 +724,8 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
}
map->nsegs = -1;
- error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags,
- map->segments, &map->nsegs);
+ error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
+ flags, map->segments, &map->nsegs);
map->nsegs++;
CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
@@ -779,7 +779,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
if (m->m_len > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
m->m_data, m->m_len,
- NULL, flags,
+ kernel_pmap, flags,
map->segments, &map->nsegs);
}
}
@@ -824,7 +824,7 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dm
if (m->m_len > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
m->m_data, m->m_len,
- NULL, flags,
+ kernel_pmap, flags,
segs, nsegs);
}
}
@@ -871,7 +871,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
("bus_dmamap_load_uio: USERSPACE but no proc"));
pmap = vmspace_pmap(uio->uio_td->td_proc->p_vmspace);
} else
- pmap = NULL;
+ pmap = kernel_pmap;
map->nsegs = -1;
error = 0;
Modified: projects/physbio/sys/sparc64/sparc64/bus_machdep.c
==============================================================================
--- projects/physbio/sys/sparc64/sparc64/bus_machdep.c Fri Dec 7 06:05:34 2012 (r243972)
+++ projects/physbio/sys/sparc64/sparc64/bus_machdep.c Fri Dec 7 06:34:20 2012 (r243973)
@@ -331,19 +331,13 @@ nexus_dmamap_destroy(bus_dma_tag_t dmat,
*/
static int
_nexus_dmamap_load_buffer(bus_dma_tag_t dmat, void *buf, bus_size_t buflen,
- struct thread *td, int flags,
+ pmap_t pmap, int flags,
bus_dma_segment_t *segs, int *segp)
{
bus_size_t sgsize;
bus_addr_t curaddr, baddr, bmask;
vm_offset_t vaddr = (vm_offset_t)buf;
int seg;
- pmap_t pmap;
-
- if (td != NULL)
- pmap = vmspace_pmap(td->td_proc->p_vmspace);
- else
- pmap = NULL;
bmask = ~(dmat->dt_boundary - 1);
@@ -351,10 +345,10 @@ _nexus_dmamap_load_buffer(bus_dma_tag_t
/*
* Get the physical address for this segment.
*/
- if (pmap)
- curaddr = pmap_extract(pmap, vaddr);
- else
+ if (pmap == kernel_pmap)
curaddr = pmap_kextract(vaddr);
+ else
+ curaddr = pmap_extract(pmap, vaddr);
/*
* Compute the segment size, and adjust counts.
@@ -426,8 +420,8 @@ nexus_dmamap_load(bus_dma_tag_t dmat, bu
int error, nsegs;
nsegs = -1;
- error = _nexus_dmamap_load_buffer(dmat, buf, buflen, NULL, flags,
- dmat->dt_segments, &nsegs);
+ error = _nexus_dmamap_load_buffer(dmat, buf, buflen, kernel_pmap,
+ flags, dmat->dt_segments, &nsegs);
if (error == 0) {
(*callback)(callback_arg, dmat->dt_segments, nsegs + 1, 0);
@@ -457,7 +451,7 @@ nexus_dmamap_load_mbuf(bus_dma_tag_t dma
for (m = m0; m != NULL && error == 0; m = m->m_next) {
if (m->m_len > 0) {
error = _nexus_dmamap_load_buffer(dmat,
- m->m_data, m->m_len,NULL, flags,
+ m->m_data, m->m_len, kernel_pmap, flags,
dmat->dt_segments, &nsegs);
}
}
@@ -492,7 +486,7 @@ nexus_dmamap_load_mbuf_sg(bus_dma_tag_t
for (m = m0; m != NULL && error == 0; m = m->m_next) {
if (m->m_len > 0) {
error = _nexus_dmamap_load_buffer(dmat,
- m->m_data, m->m_len, NULL, flags,
+ m->m_data, m->m_len, kernel_pmap, flags,
segs, nsegs);
}
}
@@ -514,15 +508,15 @@ nexus_dmamap_load_uio(bus_dma_tag_t dmat
int nsegs, error, i;
bus_size_t resid;
struct iovec *iov;
- struct thread *td = NULL;
+ pmap_t pmap;
resid = uio->uio_resid;
iov = uio->uio_iov;
if (uio->uio_segflg == UIO_USERSPACE) {
- td = uio->uio_td;
- KASSERT(td != NULL, ("%s: USERSPACE but no proc", __func__));
- }
+ pmap = vmspace_pmap(uio->uio_td->td_proc->p_vmspace);
+ } else
+ pmap = kernel_pmap;
nsegs = -1;
error = 0;
@@ -537,7 +531,7 @@ nexus_dmamap_load_uio(bus_dma_tag_t dmat
if (minlen > 0) {
error = _nexus_dmamap_load_buffer(dmat, addr, minlen,
- td, flags, dmat->dt_segments, &nsegs);
+ pmap, flags, dmat->dt_segments, &nsegs);
resid -= minlen;
}
}
Modified: projects/physbio/sys/sparc64/sparc64/iommu.c
==============================================================================
--- projects/physbio/sys/sparc64/sparc64/iommu.c Fri Dec 7 06:05:34 2012 (r243972)
+++ projects/physbio/sys/sparc64/sparc64/iommu.c Fri Dec 7 06:34:20 2012 (r243973)
@@ -851,14 +851,13 @@ iommu_dvmamap_destroy(bus_dma_tag_t dt,
*/
static int
iommu_dvmamap_load_buffer(bus_dma_tag_t dt, struct iommu_state *is,
- bus_dmamap_t map, void *buf, bus_size_t buflen, struct thread *td,
+ bus_dmamap_t map, void *buf, bus_size_t buflen, pmap_t pmap,
int flags, bus_dma_segment_t *segs, int *segp)
{
bus_addr_t amask, dvmaddr, dvmoffs;
bus_size_t sgsize, esize;
vm_offset_t vaddr, voffs;
vm_paddr_t curaddr;
- pmap_t pmap = NULL;
int error, firstpg, sgcnt;
u_int slot;
@@ -866,9 +865,6 @@ iommu_dvmamap_load_buffer(bus_dma_tag_t
if (buflen > dt->dt_maxsize)
return (EINVAL);
- if (td != NULL)
- pmap = vmspace_pmap(td->td_proc->p_vmspace);
-
vaddr = (vm_offset_t)buf;
voffs = vaddr & IO_PAGE_MASK;
amask = (*segp == -1) ? dt->dt_alignment - 1 : 0;
@@ -888,10 +884,10 @@ iommu_dvmamap_load_buffer(bus_dma_tag_t
/*
* Get the physical address for this page.
*/
- if (pmap != NULL)
- curaddr = pmap_extract(pmap, vaddr);
- else
+ if (pmap == kernel_pmap)
curaddr = pmap_kextract(vaddr);
+ else
+ curaddr = pmap_extract(pmap, vaddr);
/*
* Compute the segment size, and adjust counts.
@@ -973,8 +969,8 @@ iommu_dvmamap_load(bus_dma_tag_t dt, bus
iommu_map_remq(is, map);
IS_UNLOCK(is);
- error = iommu_dvmamap_load_buffer(dt, is, map, buf, buflen, NULL,
- flags, dt->dt_segments, &seg);
+ error = iommu_dvmamap_load_buffer(dt, is, map, buf, buflen,
+ kernel_pmap, flags, dt->dt_segments, &seg);
IS_LOCK(is);
iommu_map_insq(is, map);
@@ -1017,8 +1013,8 @@ iommu_dvmamap_load_mbuf(bus_dma_tag_t dt
if (m->m_len == 0)
continue;
error = iommu_dvmamap_load_buffer(dt, is, map,
- m->m_data, m->m_len, NULL, flags, dt->dt_segments,
- &nsegs);
+ m->m_data, m->m_len, kernel_pmap, flags,
+ dt->dt_segments, &nsegs);
}
} else
error = EINVAL;
@@ -1065,7 +1061,7 @@ iommu_dvmamap_load_mbuf_sg(bus_dma_tag_t
if (m->m_len == 0)
continue;
error = iommu_dvmamap_load_buffer(dt, is, map,
- m->m_data, m->m_len, NULL, flags, segs,
+ m->m_data, m->m_len, kernel_pmap, flags, segs,
nsegs);
}
} else
@@ -1093,6 +1089,7 @@ iommu_dvmamap_load_uio(bus_dma_tag_t dt,
struct thread *td = NULL;
bus_size_t minlen, resid;
int nsegs = -1, error = 0, i;
+ pmap-t pmap;
if ((map->dm_flags & DMF_LOADED) != 0) {
#ifdef DIAGNOSTIC
@@ -1110,9 +1107,11 @@ iommu_dvmamap_load_uio(bus_dma_tag_t dt,
if (uio->uio_segflg == UIO_USERSPACE) {
td = uio->uio_td;
- KASSERT(td != NULL,
+ KASSERT(uio->uio_td != NULL,
("%s: USERSPACE but no proc", __func__));
- }
+ pmap = vmspace_pmap(uio->uio_td->td_proc->p_vmspace);
+ } else
+ pmap = kernel_pmap;
for (i = 0; i < uio->uio_iovcnt && resid != 0 && error == 0; i++) {
/*
@@ -1124,7 +1123,7 @@ iommu_dvmamap_load_uio(bus_dma_tag_t dt,
continue;
error = iommu_dvmamap_load_buffer(dt, is, map,
- iov[i].iov_base, minlen, td, flags, dt->dt_segments,
+ iov[i].iov_base, minlen, pmap, flags, dt->dt_segments,
&nsegs);
resid -= minlen;
}
Modified: projects/physbio/sys/x86/x86/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/x86/x86/busdma_machdep.c Fri Dec 7 06:05:34 2012 (r243972)
+++ projects/physbio/sys/x86/x86/busdma_machdep.c Fri Dec 7 06:34:20 2012 (r243973)
@@ -604,10 +604,10 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm
bus_size_t sg_len;
sg_len = PAGE_SIZE - ((vm_offset_t)vaddr & PAGE_MASK);
- if (pmap)
- paddr = pmap_extract(pmap, vaddr);
- else
+ if (pmap == kernel_pmap)
paddr = pmap_kextract(vaddr);
+ else
+ paddr = pmap_extract(pmap, vaddr);
if (((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) &&
run_filter(dmat, paddr) != 0) {
sg_len = roundup2(sg_len, dmat->alignment);
@@ -680,10 +680,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
/*
* Get the physical address for this segment.
*/
- if (pmap)
- curaddr = pmap_extract(pmap, vaddr);
- else
+ if (pmap == kernel_pmap)
curaddr = pmap_kextract(vaddr);
+ else
+ curaddr = pmap_extract(pmap, vaddr);
/*
* Compute the segment size, and adjust counts.
@@ -758,8 +758,8 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
map->callback_arg = callback_arg;
}
- error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags,
- dmat->segments, &nsegs);
+ error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
+ flags, dmat->segments, &nsegs);
CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
__func__, dmat, dmat->flags, error, nsegs + 1);
@@ -806,7 +806,7 @@ _bus_dmamap_load_mbuf_sg(bus_dma_tag_t d
if (m->m_len > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
m->m_data, m->m_len,
- NULL, flags,
+ kernel_pmap, flags,
segs, nsegs);
}
}
@@ -875,7 +875,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
("bus_dmamap_load_uio: USERSPACE but no proc"));
pmap = vmspace_pmap(uio->uio_td->td_proc->p_vmspace);
} else
- pmap = NULL;
+ pmap = kernel_pmap;
nsegs = -1;
error = 0;
More information about the svn-src-projects
mailing list