Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/uipc_mbuf.c
Show First 20 Lines • Show All 622 Lines • ▼ Show 20 Lines | m_copyfromunmapped(const struct mbuf *m, int off, int len, caddr_t cp) | ||||
iov.iov_base = cp; | iov.iov_base = cp; | ||||
iov.iov_len = len; | iov.iov_len = len; | ||||
uio.uio_resid = len; | uio.uio_resid = len; | ||||
uio.uio_iov = &iov; | uio.uio_iov = &iov; | ||||
uio.uio_segflg = UIO_SYSSPACE; | uio.uio_segflg = UIO_SYSSPACE; | ||||
uio.uio_iovcnt = 1; | uio.uio_iovcnt = 1; | ||||
uio.uio_offset = 0; | uio.uio_offset = 0; | ||||
uio.uio_rw = UIO_READ; | uio.uio_rw = UIO_READ; | ||||
error = m_unmappedtouio(m, off, &uio, len); | error = m_unmapped_uiomove(m, off, &uio, len); | ||||
KASSERT(error == 0, ("m_unmappedtouio failed: off %d, len %d", off, | KASSERT(error == 0, ("m_unmapped_uiomove failed: off %d, len %d", off, | ||||
len)); | len)); | ||||
} | } | ||||
/* | /* | ||||
* Copy data from an mbuf chain starting "off" bytes from the beginning, | * Copy data from an mbuf chain starting "off" bytes from the beginning, | ||||
* continuing for "len" bytes, into the indicated buffer. | * continuing for "len" bytes, into the indicated buffer. | ||||
*/ | */ | ||||
void | void | ||||
▲ Show 20 Lines • Show All 511 Lines • ▼ Show 20 Lines | m_copytounmapped(const struct mbuf *m, int off, int len, c_caddr_t cp) | ||||
iov.iov_base = __DECONST(caddr_t, cp); | iov.iov_base = __DECONST(caddr_t, cp); | ||||
iov.iov_len = len; | iov.iov_len = len; | ||||
uio.uio_resid = len; | uio.uio_resid = len; | ||||
uio.uio_iov = &iov; | uio.uio_iov = &iov; | ||||
uio.uio_segflg = UIO_SYSSPACE; | uio.uio_segflg = UIO_SYSSPACE; | ||||
uio.uio_iovcnt = 1; | uio.uio_iovcnt = 1; | ||||
uio.uio_offset = 0; | uio.uio_offset = 0; | ||||
uio.uio_rw = UIO_WRITE; | uio.uio_rw = UIO_WRITE; | ||||
error = m_unmappedtouio(m, off, &uio, len); | error = m_unmapped_uiomove(m, off, &uio, len); | ||||
KASSERT(error == 0, ("m_unmappedtouio failed: off %d, len %d", off, | KASSERT(error == 0, ("m_unmapped_uiomove failed: off %d, len %d", off, | ||||
len)); | len)); | ||||
} | } | ||||
/* | /* | ||||
* Copy data from a buffer back into the indicated mbuf chain, | * Copy data from a buffer back into the indicated mbuf chain, | ||||
* starting "off" bytes from the beginning, extending the mbuf | * starting "off" bytes from the beginning, extending the mbuf | ||||
* chain if necessary. | * chain if necessary. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 724 Lines • ▼ Show 20 Lines | m_uiotombuf(struct uio *uio, int how, int len, int align, int flags) | ||||
return (m); | return (m); | ||||
} | } | ||||
/* | /* | ||||
* Copy data to/from an unmapped mbuf into a uio limited by len if set. | * Copy data to/from an unmapped mbuf into a uio limited by len if set. | ||||
*/ | */ | ||||
int | int | ||||
m_unmappedtouio(const struct mbuf *m, int m_off, struct uio *uio, int len) | m_unmapped_uiomove(const struct mbuf *m, int m_off, struct uio *uio, int len) | ||||
{ | { | ||||
vm_page_t pg; | vm_page_t pg; | ||||
int error, i, off, pglen, pgoff, seglen, segoff; | int error, i, off, pglen, pgoff, seglen, segoff; | ||||
M_ASSERTEXTPG(m); | M_ASSERTEXTPG(m); | ||||
error = 0; | error = 0; | ||||
/* Skip over any data removed from the front. */ | /* Skip over any data removed from the front. */ | ||||
▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | m_mbuftouio(struct uio *uio, const struct mbuf *m, int len) | ||||
else | else | ||||
total = uio->uio_resid; | total = uio->uio_resid; | ||||
/* Fill the uio with data from the mbufs. */ | /* Fill the uio with data from the mbufs. */ | ||||
for (; m != NULL; m = m->m_next) { | for (; m != NULL; m = m->m_next) { | ||||
length = min(m->m_len, total - progress); | length = min(m->m_len, total - progress); | ||||
if ((m->m_flags & M_EXTPG) != 0) | if ((m->m_flags & M_EXTPG) != 0) | ||||
error = m_unmappedtouio(m, 0, uio, length); | error = m_unmapped_uiomove(m, 0, uio, length); | ||||
else | else | ||||
error = uiomove(mtod(m, void *), length, uio); | error = uiomove(mtod(m, void *), length, uio); | ||||
if (error) | if (error) | ||||
return (error); | return (error); | ||||
progress += length; | progress += length; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 281 Lines • Show Last 20 Lines |