Lines Matching defs:userptr
218 * @p_userptr: pointer to result userptr structure.
221 * - Allocate userptr structure.
222 * - Pin the given host memory using the userptr structure.
228 struct hl_userptr *userptr;
231 userptr = kzalloc(sizeof(*userptr), GFP_KERNEL);
232 if (!userptr) {
237 rc = hl_pin_host_memory(hdev, addr, size, userptr);
241 userptr->dma_mapped = true;
242 userptr->dir = DMA_BIDIRECTIONAL;
243 userptr->vm_type = VM_TYPE_USERPTR;
245 *p_userptr = userptr;
247 rc = hdev->asic_funcs->asic_dma_map_sgtable(hdev, userptr->sgt, DMA_BIDIRECTIONAL);
256 hl_unpin_host_memory(hdev, userptr);
258 kfree(userptr);
267 * @userptr: userptr to free.
271 * - Frees the userptr structure.
274 struct hl_userptr *userptr)
276 hl_unpin_host_memory(hdev, userptr);
277 kfree(userptr);
827 * @userptr: userptr to initialize from.
840 struct hl_userptr *userptr,
858 phys_pg_pack->vm_type = userptr->vm_type;
872 for_each_sgtable_dma_sg(userptr->sgt, sg, i) {
901 for_each_sgtable_dma_sg(userptr->sgt, sg, i) {
1055 struct hl_userptr *userptr = NULL;
1078 rc = dma_map_host_va(hdev, addr, size, &userptr);
1082 rc = init_phys_pg_pack_from_userptr(ctx, userptr,
1091 vm_type = (enum vm_type *) userptr;
1245 dma_unmap_host_va(hdev, userptr);
1279 struct hl_userptr *userptr = NULL;
1310 userptr = hnode->ptr;
1312 rc = init_phys_pg_pack_from_userptr(ctx, userptr, &phys_pg_pack,
1392 dma_unmap_host_va(hdev, userptr);
2296 struct hl_userptr *userptr)
2305 userptr->pages = kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
2306 if (!userptr->pages)
2310 userptr->pages);
2322 userptr->npages = npages;
2324 rc = sg_alloc_table_from_pages(userptr->sgt,
2325 userptr->pages,
2335 unpin_user_pages(userptr->pages, npages);
2337 kvfree(userptr->pages);
2346 * @userptr: pointer to hl_userptr structure.
2353 struct hl_userptr *userptr)
2376 userptr->pid = current->pid;
2377 userptr->sgt = kzalloc(sizeof(*userptr->sgt), GFP_KERNEL);
2378 if (!userptr->sgt)
2386 userptr->size = size;
2387 userptr->addr = addr;
2388 userptr->dma_mapped = false;
2389 INIT_LIST_HEAD(&userptr->job_node);
2392 userptr);
2400 hl_debugfs_add_userptr(hdev, userptr);
2405 kfree(userptr->sgt);
2412 * @userptr: pointer to hl_userptr structure
2418 void hl_unpin_host_memory(struct hl_device *hdev, struct hl_userptr *userptr)
2420 hl_debugfs_remove_userptr(hdev, userptr);
2422 if (userptr->dma_mapped)
2423 hdev->asic_funcs->hl_dma_unmap_sgtable(hdev, userptr->sgt, userptr->dir);
2425 unpin_user_pages_dirty_lock(userptr->pages, userptr->npages, true);
2426 kvfree(userptr->pages);
2428 list_del(&userptr->job_node);
2430 sg_free_table(userptr->sgt);
2431 kfree(userptr->sgt);
2435 * hl_userptr_delete_list() - clear userptr list.
2440 * - Iterates over the list and unpins the host memory and frees the userptr
2446 struct hl_userptr *userptr, *tmp;
2448 list_for_each_entry_safe(userptr, tmp, userptr_list, job_node) {
2449 hl_unpin_host_memory(hdev, userptr);
2450 kfree(userptr);
2457 * hl_userptr_is_pinned() - returns whether the given userptr is pinned.
2462 * @userptr: pointer to userptr to check.
2465 * - Iterates over the list and checks if the given userptr is in it, means is
2470 struct hl_userptr **userptr)
2472 list_for_each_entry((*userptr), userptr_list, job_node) {
2473 if ((addr == (*userptr)->addr) && (size == (*userptr)->size))