diff options
author | kmacy <kmacy@FreeBSD.org> | 2008-09-30 23:45:22 +0000 |
---|---|---|
committer | kmacy <kmacy@FreeBSD.org> | 2008-09-30 23:45:22 +0000 |
commit | 0eeeb52deea21339cde829755893d1f7fa18a456 (patch) | |
tree | e4775d429f6decab0086ab01d35653047ef01fe6 /sys | |
parent | 74c5b2b97871042e29635c86d74262d5e9860af4 (diff) | |
download | FreeBSD-src-0eeeb52deea21339cde829755893d1f7fa18a456.zip FreeBSD-src-0eeeb52deea21339cde829755893d1f7fa18a456.tar.gz |
update callers of vm_fault_hold_user_pages
MFC after: 1 week
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c | 15 | ||||
-rw-r--r-- | sys/dev/cxgb/ulp/tom/cxgb_ddp.c | 11 |
2 files changed, 15 insertions, 11 deletions
diff --git a/sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c b/sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c index 9fe39b1..76237fb 100644 --- a/sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c +++ b/sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c @@ -193,14 +193,16 @@ cxgb_zero_copy_free(void *cl, void *arg) static int -cxgb_hold_iovec_pages(struct uio *uio, vm_page_t *m, int *held, int flags) +cxgb_hold_iovec_pages(struct uio *uio, vm_page_t *m, int *held, vm_prot_t prot) { struct iovec *iov = uio->uio_iov; int iovcnt = uio->uio_iovcnt; int err, i, count, totcount, maxcount, totbytes, npages, curbytes; uint64_t start, end; vm_page_t *mp; - + vm_map_t map; + + map = &uio->uio_td->td_proc->p_vmspace->vm_map; totbytes = totcount = 0; maxcount = *held; @@ -217,11 +219,8 @@ cxgb_hold_iovec_pages(struct uio *uio, vm_page_t *m, int *held, int flags) count = min(count, npages); - err = vm_fault_hold_user_pages((vm_offset_t)iov->iov_base, mp, count, flags); - if (err) { - vm_fault_unhold_pages(m, totcount); - return (err); - } + err = vm_fault_hold_user_pages(map, + (vm_offset_t)iov->iov_base, mp, count, prot); mp += count; totcount += count; curbytes = iov->iov_len; @@ -429,7 +428,7 @@ sendmore: * Make sure we don't exceed the socket buffer */ count = min(toep->tp_page_count, (sockbuf_sbspace(snd) >> PAGE_SHIFT) + 2*PAGE_SIZE); - rv = cxgb_hold_iovec_pages(&uiotmp, toep->tp_pages, &count, 0); + rv = cxgb_hold_iovec_pages(&uiotmp, toep->tp_pages, &count, VM_PROT_READ); hold_resid = uiotmp.uio_resid; if (rv) return (rv); diff --git a/sys/dev/cxgb/ulp/tom/cxgb_ddp.c b/sys/dev/cxgb/ulp/tom/cxgb_ddp.c index 09a9d3a..a54598c 100644 --- a/sys/dev/cxgb/ulp/tom/cxgb_ddp.c +++ b/sys/dev/cxgb/ulp/tom/cxgb_ddp.c @@ -120,7 +120,7 @@ pages2ppods(unsigned int pages) * a new gather list was allocated it is returned in @newgl. */ static int -t3_pin_pages(bus_dma_tag_t tag, bus_dmamap_t map, vm_offset_t addr, +t3_pin_pages(bus_dma_tag_t tag, bus_dmamap_t dmamap, vm_offset_t addr, size_t len, struct ddp_gather_list **newgl, const struct ddp_gather_list *gl) { @@ -128,13 +128,16 @@ t3_pin_pages(bus_dma_tag_t tag, bus_dmamap_t map, vm_offset_t addr, size_t pg_off; unsigned int npages; struct ddp_gather_list *p; - + vm_map_t map; + /* * XXX need x86 agnostic check */ if (addr + len > VM_MAXUSER_ADDRESS) return (EFAULT); + + pg_off = addr & PAGE_MASK; npages = (pg_off + len + PAGE_SIZE - 1) >> PAGE_SHIFT; p = malloc(sizeof(struct ddp_gather_list) + npages * sizeof(vm_page_t *), @@ -142,7 +145,9 @@ t3_pin_pages(bus_dma_tag_t tag, bus_dmamap_t map, vm_offset_t addr, if (p == NULL) return (ENOMEM); - err = vm_fault_hold_user_pages(addr, p->dgl_pages, npages, VM_HOLD_WRITEABLE); + map = &curthread->td_proc->p_vmspace->vm_map; + err = vm_fault_hold_user_pages(map, addr, p->dgl_pages, npages, + VM_PROT_READ | VM_PROT_WRITE); if (err) goto free_gl; |