Changeset View
Changeset View
Standalone View
Standalone View
sys/net/bpf_zerocopy.c
Show First 20 Lines • Show All 160 Lines • ▼ Show 20 Lines | |||||
zbuf_sfbuf_get(struct vm_map *map, vm_offset_t uaddr) | zbuf_sfbuf_get(struct vm_map *map, vm_offset_t uaddr) | ||||
{ | { | ||||
struct sf_buf *sf; | struct sf_buf *sf; | ||||
vm_page_t pp; | vm_page_t pp; | ||||
if (vm_fault_quick_hold_pages(map, uaddr, PAGE_SIZE, VM_PROT_READ | | if (vm_fault_quick_hold_pages(map, uaddr, PAGE_SIZE, VM_PROT_READ | | ||||
VM_PROT_WRITE, &pp, 1) < 0) | VM_PROT_WRITE, &pp, 1) < 0) | ||||
return (NULL); | return (NULL); | ||||
vm_page_lock(pp); | |||||
vm_page_wire(pp); | |||||
vm_page_unhold(pp); | |||||
vm_page_unlock(pp); | |||||
sf = sf_buf_alloc(pp, SFB_NOWAIT); | sf = sf_buf_alloc(pp, SFB_NOWAIT); | ||||
if (sf == NULL) { | if (sf == NULL) { | ||||
zbuf_page_free(pp); | zbuf_page_free(pp); | ||||
return (NULL); | return (NULL); | ||||
} | } | ||||
return (sf); | return (sf); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 420 Lines • Show Last 20 Lines |