• Home
  • Raw
  • Download

Lines Matching refs:umem

48 static void __ib_umem_release(struct ib_device *dev, struct ib_umem *umem, int dirty)  in __ib_umem_release()  argument
53 list_for_each_entry_safe(chunk, tmp, &umem->chunk_list, list) { in __ib_umem_release()
59 if (umem->writable && dirty) in __ib_umem_release()
79 struct ib_umem *umem; in ib_umem_get() local
98 umem = kmalloc(sizeof *umem, GFP_KERNEL); in ib_umem_get()
99 if (!umem) in ib_umem_get()
102 umem->context = context; in ib_umem_get()
103 umem->length = size; in ib_umem_get()
104 umem->offset = addr & ~PAGE_MASK; in ib_umem_get()
105 umem->page_size = PAGE_SIZE; in ib_umem_get()
113 umem->writable = !!(access & ~IB_ACCESS_REMOTE_READ); in ib_umem_get()
116 umem->hugetlb = 1; in ib_umem_get()
118 INIT_LIST_HEAD(&umem->chunk_list); in ib_umem_get()
122 kfree(umem); in ib_umem_get()
132 umem->hugetlb = 0; in ib_umem_get()
134 npages = PAGE_ALIGN(size + umem->offset) >> PAGE_SHIFT; in ib_umem_get()
153 1, !umem->writable, page_list, vma_list); in ib_umem_get()
177 umem->hugetlb = 0; in ib_umem_get()
197 list_add_tail(&chunk->list, &umem->chunk_list); in ib_umem_get()
205 __ib_umem_release(context->device, umem, 0); in ib_umem_get()
206 kfree(umem); in ib_umem_get()
215 return ret < 0 ? ERR_PTR(ret) : umem; in ib_umem_get()
221 struct ib_umem *umem = container_of(work, struct ib_umem, work); in ib_umem_account() local
223 down_write(&umem->mm->mmap_sem); in ib_umem_account()
224 umem->mm->locked_vm -= umem->diff; in ib_umem_account()
225 up_write(&umem->mm->mmap_sem); in ib_umem_account()
226 mmput(umem->mm); in ib_umem_account()
227 kfree(umem); in ib_umem_account()
234 void ib_umem_release(struct ib_umem *umem) in ib_umem_release() argument
236 struct ib_ucontext *context = umem->context; in ib_umem_release()
240 __ib_umem_release(umem->context->device, umem, 1); in ib_umem_release()
244 kfree(umem); in ib_umem_release()
248 diff = PAGE_ALIGN(umem->length + umem->offset) >> PAGE_SHIFT; in ib_umem_release()
260 INIT_WORK(&umem->work, ib_umem_account); in ib_umem_release()
261 umem->mm = mm; in ib_umem_release()
262 umem->diff = diff; in ib_umem_release()
264 schedule_work(&umem->work); in ib_umem_release()
273 kfree(umem); in ib_umem_release()
277 int ib_umem_page_count(struct ib_umem *umem) in ib_umem_page_count() argument
284 shift = ilog2(umem->page_size); in ib_umem_page_count()
287 list_for_each_entry(chunk, &umem->chunk_list, list) in ib_umem_page_count()