summaryrefslogtreecommitdiffstats
path: root/sys/dev/cxgb
diff options
context:
space:
mode:
authorkmacy <kmacy@FreeBSD.org>2008-09-30 23:45:22 +0000
committerkmacy <kmacy@FreeBSD.org>2008-09-30 23:45:22 +0000
commit0eeeb52deea21339cde829755893d1f7fa18a456 (patch)
treee4775d429f6decab0086ab01d35653047ef01fe6 /sys/dev/cxgb
parent74c5b2b97871042e29635c86d74262d5e9860af4 (diff)
downloadFreeBSD-src-0eeeb52deea21339cde829755893d1f7fa18a456.zip
FreeBSD-src-0eeeb52deea21339cde829755893d1f7fa18a456.tar.gz
update callers of vm_fault_hold_user_pages
MFC after: 1 week
Diffstat (limited to 'sys/dev/cxgb')
-rw-r--r--sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c15
-rw-r--r--sys/dev/cxgb/ulp/tom/cxgb_ddp.c11
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;
OpenPOWER on IntegriCloud