Lines Matching defs:umem

48 static void __ib_umem_release(struct ib_device *dev, struct ib_umem *umem, int dirty)
50 bool make_dirty = umem->writable && dirty;
55 ib_dma_unmap_sgtable_attrs(dev, &umem->sgt_append.sgt,
58 for_each_sgtable_sg(&umem->sgt_append.sgt, sg, i)
62 sg_free_append_table(&umem->sgt_append);
68 * @umem: umem struct
75 * Returns 0 if the umem requires page sizes not supported by
79 unsigned long ib_umem_find_best_pgsz(struct ib_umem *umem,
88 umem->iova = va = virt;
90 if (umem->is_odp) {
91 unsigned int page_size = BIT(to_ib_umem_odp(umem)->page_shift);
105 bits_per((umem->length - 1 + virt) ^ virt));
107 pgoff = umem->address & ~PAGE_MASK;
109 for_each_sgtable_dma_sg(&umem->sgt_append.sgt, sg, i) {
119 if (i != (umem->sgt_append.sgt.nents - 1))
145 struct ib_umem *umem;
170 umem = kzalloc(sizeof(*umem), GFP_KERNEL);
171 if (!umem)
173 umem->ibdev = device;
174 umem->length = size;
175 umem->address = addr;
180 umem->iova = addr;
181 umem->writable = ib_access_writable(access);
182 umem->owning_mm = mm = current->mm;
191 npages = ib_umem_num_pages(umem);
208 if (umem->writable)
226 &umem->sgt_append, page_list, pinned, 0,
238 ret = ib_dma_map_sgtable_attrs(device, &umem->sgt_append.sgt,
245 __ib_umem_release(device, umem, 0);
246 atomic64_sub(ib_umem_num_pages(umem), &mm->pinned_vm);
251 mmdrop(umem->owning_mm);
252 kfree(umem);
254 return ret ? ERR_PTR(ret) : umem;
260 * @umem: umem struct to release
262 void ib_umem_release(struct ib_umem *umem)
264 if (!umem)
266 if (umem->is_dmabuf)
267 return ib_umem_dmabuf_release(to_ib_umem_dmabuf(umem));
268 if (umem->is_odp)
269 return ib_umem_odp_release(to_ib_umem_odp(umem));
271 __ib_umem_release(umem->ibdev, umem, 1);
273 atomic64_sub(ib_umem_num_pages(umem), &umem->owning_mm->pinned_vm);
274 mmdrop(umem->owning_mm);
275 kfree(umem);
282 * umem - the umem to copy from
289 int ib_umem_copy_from(void *dst, struct ib_umem *umem, size_t offset,
295 if (offset > umem->length || length > umem->length - offset) {
296 pr_err("%s not in range. offset: %zd umem length: %zd end: %zd\n",
297 __func__, offset, umem->length, end);
301 ret = sg_pcopy_to_buffer(umem->sgt_append.sgt.sgl,
302 umem->sgt_append.sgt.orig_nents, dst, length,
303 offset + ib_umem_offset(umem));