| /linux/drivers/gpu/drm/xe/ |
| H A D | xe_userptr.c | 36 return mmu_interval_check_retry(&uvma->userptr.notifier, in xe_vma_userptr_check_repin() 37 uvma->userptr.pages.notifier_seq) ? in xe_vma_userptr_check_repin() 56 return (list_empty(&vm->userptr.repin_list) && in __xe_vm_userptr_needs_repin() 57 list_empty(&vm->userptr.invalidated)) ? 0 : -EAGAIN; in __xe_vm_userptr_needs_repin() 77 return drm_gpusvm_get_pages(&vm->svm.gpusvm, &uvma->userptr.pages, in xe_vma_userptr_pin_pages() 78 uvma->userptr.notifier.mm, in xe_vma_userptr_pin_pages() 79 &uvma->userptr.notifier, in xe_vma_userptr_pin_pages() 88 struct xe_userptr *userptr = &uvma->userptr; in xe_vma_userptr_do_inval() local 98 xe_assert(vm->xe, userptr->finish_inuse && !userptr->tlb_inval_submitted); in xe_vma_userptr_do_inval() 105 if (xe_vm_in_fault_mode(vm) && userptr->initial_bind) { in xe_vma_userptr_do_inval() [all …]
|
| H A D | xe_pt.c | 869 xe_res_first_dma(to_userptr_vma(vma)->userptr.pages.dma_addr, 0, in xe_pt_stage_bind() 1533 u32 divisor = uvma->userptr.divisor ? uvma->userptr.divisor : 2; in xe_pt_userptr_inject_eagain() 1537 uvma->userptr.divisor = divisor << 1; in xe_pt_userptr_inject_eagain() 1568 notifier_seq = uvma->userptr.pages.notifier_seq; in vma_check_userptr() 1570 if (!mmu_interval_read_retry(&uvma->userptr.notifier, in vma_check_userptr() 2535 to_userptr_vma(vma)->userptr.initial_bind = true; in bind_op_commit() 2572 spin_lock(&vm->userptr.invalidated_lock); in unbind_op_commit() 2573 list_del_init(&to_userptr_vma(vma)->userptr.invalidate_link); in unbind_op_commit() 2574 spin_unlock(&vm->userptr.invalidated_lock); in unbind_op_commit()
|
| /linux/drivers/gpu/drm/i915/gem/ |
| H A D | i915_gem_userptr.c | 75 return mmu_interval_notifier_insert(&obj->userptr.notifier, current->mm, in i915_gem_userptr_init__mmu_notifier() 76 obj->userptr.ptr, obj->base.size, in i915_gem_userptr_init__mmu_notifier() 86 if (!--obj->userptr.page_ref) { in i915_gem_object_userptr_drop_ref() 87 pvec = obj->userptr.pvec; in i915_gem_object_userptr_drop_ref() 88 obj->userptr.pvec = NULL; in i915_gem_object_userptr_drop_ref() 90 GEM_BUG_ON(obj->userptr.page_ref < 0); in i915_gem_object_userptr_drop_ref() 116 if (!obj->userptr.page_ref) { in i915_gem_userptr_get_pages() 121 obj->userptr.page_ref++; in i915_gem_userptr_get_pages() 122 pvec = obj->userptr.pvec; in i915_gem_userptr_get_pages() 242 if (obj->userptr.notifier.mm != current->mm) in i915_gem_object_userptr_submit_init() [all …]
|
| /linux/drivers/accel/habanalabs/common/ |
| H A D | memory.c | 228 struct hl_userptr *userptr; in dma_map_host_va() local 231 userptr = kzalloc_obj(*userptr); in dma_map_host_va() 232 if (!userptr) { in dma_map_host_va() 237 rc = hl_pin_host_memory(hdev, addr, size, userptr); in dma_map_host_va() 241 userptr->dma_mapped = true; in dma_map_host_va() 242 userptr->dir = DMA_BIDIRECTIONAL; in dma_map_host_va() 243 userptr->vm_type = VM_TYPE_USERPTR; in dma_map_host_va() 245 *p_userptr = userptr; in dma_map_host_va() 247 rc = hl_dma_map_sgtable(hdev, userptr->sgt, DMA_BIDIRECTIONAL); in dma_map_host_va() 256 hl_unpin_host_memory(hdev, userptr); in dma_map_host_va() [all …]
|
| H A D | debugfs.c | 208 struct hl_userptr *userptr; in userptr_show() local 215 list_for_each_entry(userptr, &dev_entry->userptr_list, debugfs_list) { in userptr_show() 223 userptr->pid, userptr->addr, userptr->size, in userptr_show() 224 dma_dir[userptr->dir]); in userptr_show() 243 struct hl_userptr *userptr; in vm_show() local 268 userptr = hnode->ptr; in vm_show() 271 hnode->vaddr, userptr->size); in vm_show() 355 struct hl_userptr *userptr; in userptr_lookup_show() local 363 list_for_each_entry(userptr, &dev_entry->userptr_list, debugfs_list) { in userptr_lookup_show() 364 if (dev_entry->userptr_lookup >= userptr->addr && in userptr_lookup_show() [all …]
|
| /linux/Documentation/gpu/ |
| H A D | drm-vm-bind-locking.rst | 8 including the userptr mmu_notifier locking. It also discusses some 9 optimizations to get rid of the looping through of all userptr mappings and 19 in this document. In particular, it is currently lacking a userptr 39 * ``userptr gpu_vma or just userptr``: A gpu_vma, whose backing store 81 gpu_vm's list of userptr gpu_vmas. With a CPU mm analogy this would 86 userptr gpu_vma on the gpu_vm's userptr list, and in write mode during mmu 103 invalidation. The userptr notifier lock is per gpu_vm. 193 might be userptr gpu_vmas that are not mapping a buffer object that 384 userptr gpu_vmas 387 A userptr gpu_vma is a gpu_vma that, instead of mapping a buffer object to a [all …]
|
| H A D | drm-vm-bind-async.rst | 196 /** @userptr: user virtual address for MAP_USERPTR */ 197 __u64 userptr; 292 * @vector_of_binds: userptr to array of struct
|
| /linux/drivers/gpu/drm/radeon/ |
| H A D | radeon_ttm.c | 316 uint64_t userptr; member 340 unsigned long end = gtt->userptr + (u64)ttm->num_pages * PAGE_SIZE; in radeon_ttm_tt_pin_userptr() 342 vma = find_vma(gtt->usermm, gtt->userptr); in radeon_ttm_tt_pin_userptr() 349 uint64_t userptr = gtt->userptr + pinned * PAGE_SIZE; in radeon_ttm_tt_pin_userptr() local 352 r = get_user_pages(userptr, num_pages, write ? FOLL_WRITE : 0, in radeon_ttm_tt_pin_userptr() 433 if (gtt->userptr) { in radeon_ttm_backend_bind() 461 if (gtt->userptr) in radeon_ttm_backend_unbind() 535 if (gtt && gtt->userptr) { in radeon_ttm_tt_populate() 561 if (gtt && gtt->userptr) { in radeon_ttm_tt_unpopulate() 582 gtt->userptr = addr; in radeon_ttm_tt_set_userptr() [all …]
|
| H A D | Kconfig | 39 bool "Always enable userptr support" 44 selected to enabled full userptr support.
|
| /linux/drivers/gpu/drm/msm/ |
| H A D | msm_gem_submit.c | 135 void __user *userptr = in submit_lookup_objects() local 143 if (copy_from_user(&submit_bo, userptr, sizeof(submit_bo))) { in submit_lookup_objects() 201 void __user *userptr = in submit_lookup_cmds() local 204 ret = copy_from_user(&submit_cmd, userptr, sizeof(submit_cmd)); in submit_lookup_cmds() 246 userptr = u64_to_user_ptr(submit_cmd.relocs); in submit_lookup_cmds() 258 ret = copy_from_user(submit->cmd[i].relocs, userptr, sz); in submit_lookup_cmds()
|
| /linux/drivers/gpu/drm/amd/amdgpu/ |
| H A D | amdgpu_ttm.c | 735 uint64_t userptr; member 758 unsigned long start = gtt->userptr; in amdgpu_ttm_tt_get_user_pages() 857 * amdgpu_ttm_tt_unpin_userptr - Unpin and unmap userptr pages 945 if (gtt->userptr) { in amdgpu_ttm_backend_bind() 948 dev_err(adev->dev, "failed to pin userptr\n"); in amdgpu_ttm_backend_bind() 1071 /* if the pages have userptr pinning then clear that first */ in amdgpu_ttm_backend_unbind() 1072 if (gtt->userptr) { in amdgpu_ttm_backend_unbind() 1241 if (gtt->userptr) { in amdgpu_ttm_tt_populate() 1281 if (gtt->userptr) { in amdgpu_ttm_tt_unpopulate() 1305 * amdgpu_ttm_tt_get_userptr - Return the userptr GT 1385 amdgpu_ttm_tt_affect_userptr(struct ttm_tt * ttm,unsigned long start,unsigned long end,unsigned long * userptr) amdgpu_ttm_tt_affect_userptr() argument [all...] |
| H A D | amdgpu_ttm.h | 251 unsigned long end, unsigned long *userptr);
|
| /linux/drivers/gpu/drm/etnaviv/ |
| H A D | etnaviv_gem.h | 58 struct etnaviv_gem_userptr userptr; member
|
| /linux/Documentation/userspace-api/media/v4l/ |
| H A D | vidioc-prepare-buf.rst | 55 bounds, or no buffers have been allocated yet, or the ``userptr`` or
|
| H A D | vidioc-qbuf.rst | 71 ``memory`` field to ``V4L2_MEMORY_USERPTR``, the ``m.userptr`` field to 73 multi-planar API is used, ``m.userptr`` and ``length`` members of the 164 bounds, or no buffers have been allocated yet, or the ``userptr`` or
|
| H A D | capture.c.rst | 161 if (buf.m.userptr == (unsigned long)buffers[i].start 167 process_image((void *)buf.m.userptr, buf.bytesused); 269 buf.m.userptr = (unsigned long)buffers[i].start;
|
| /linux/include/linux/ |
| H A D | splice.h | 37 void __user *userptr; /* memory to write to */ member
|
| /linux/net/ipv6/netfilter/ |
| H A D | ip6_tables.c | 833 void __user *userptr) in copy_entries_to_user() argument 856 if (copy_to_user(userptr + off, e, in copy_entries_to_user() 858 copy_to_user(userptr + off in copy_entries_to_user() 871 if (xt_match_to_user(m, userptr + off + i)) { in copy_entries_to_user() 878 if (xt_target_to_user(t, userptr + off + e->target_offset)) { in copy_entries_to_user() 1562 void __user *userptr) in compat_copy_entries_to_user() argument 1576 pos = userptr; in compat_copy_entries_to_user()
|
| /linux/drivers/cdrom/ |
| H A D | cdrom.c | 3299 void __user *userptr = (void __user *)arg; in mmc_ioctl() local 3309 return mmc_ioctl_cdrom_read_data(cdi, userptr, &cgc, cmd); in mmc_ioctl() 3311 return mmc_ioctl_cdrom_read_audio(cdi, userptr); in mmc_ioctl() 3313 return mmc_ioctl_cdrom_subchannel(cdi, userptr); in mmc_ioctl() 3315 return mmc_ioctl_cdrom_play_msf(cdi, userptr, &cgc); in mmc_ioctl() 3317 return mmc_ioctl_cdrom_play_blk(cdi, userptr, &cgc); in mmc_ioctl() 3320 return mmc_ioctl_cdrom_volume(cdi, userptr, &cgc, cmd); in mmc_ioctl() 3328 return mmc_ioctl_dvd_read_struct(cdi, userptr, &cgc); in mmc_ioctl() 3330 return mmc_ioctl_dvd_auth(cdi, userptr); in mmc_ioctl() 3332 return mmc_ioctl_cdrom_next_writable(cdi, userptr); in mmc_ioctl() [all …]
|
| /linux/drivers/accel/habanalabs/goya/ |
| H A D | goya.c | 3331 struct hl_userptr *userptr; in goya_pin_memory_before_cs() local 3335 parser->job_userptr_list, &userptr)) in goya_pin_memory_before_cs() 3338 userptr = kzalloc_obj(*userptr); in goya_pin_memory_before_cs() 3339 if (!userptr) in goya_pin_memory_before_cs() 3343 userptr); in goya_pin_memory_before_cs() 3347 list_add_tail(&userptr->job_node, parser->job_userptr_list); in goya_pin_memory_before_cs() 3349 rc = hl_dma_map_sgtable(hdev, userptr->sgt, dir); in goya_pin_memory_before_cs() 3355 userptr->dma_mapped = true; in goya_pin_memory_before_cs() 3356 userptr->dir = dir; in goya_pin_memory_before_cs() 3360 goya_get_dma_desc_list_size(hdev, userptr->sgt); in goya_pin_memory_before_cs() [all …]
|
| /linux/net/ipv4/netfilter/ |
| H A D | arp_tables.c | 683 void __user *userptr) in copy_entries_to_user() argument 704 if (copy_to_user(userptr + off, e, in copy_entries_to_user() 706 copy_to_user(userptr + off in copy_entries_to_user() 715 if (xt_target_to_user(t, userptr + off + e->target_offset)) { in copy_entries_to_user()
|
| /linux/include/uapi/drm/ |
| H A D | exynos_drm.h | 119 unsigned long userptr; member
|
| /linux/drivers/accel/habanalabs/gaudi/ |
| H A D | gaudi.c | 4901 struct hl_userptr *userptr; in gaudi_pin_memory_before_cs() local 4905 parser->job_userptr_list, &userptr)) in gaudi_pin_memory_before_cs() 4908 userptr = kzalloc_obj(*userptr); in gaudi_pin_memory_before_cs() 4909 if (!userptr) in gaudi_pin_memory_before_cs() 4913 userptr); in gaudi_pin_memory_before_cs() 4917 list_add_tail(&userptr->job_node, parser->job_userptr_list); in gaudi_pin_memory_before_cs() 4919 rc = hl_dma_map_sgtable(hdev, userptr->sgt, dir); in gaudi_pin_memory_before_cs() 4925 userptr->dma_mapped = true; in gaudi_pin_memory_before_cs() 4926 userptr->dir = dir; in gaudi_pin_memory_before_cs() 4930 gaudi_get_dma_desc_list_size(hdev, userptr->sgt); in gaudi_pin_memory_before_cs() [all …]
|
| /linux/Documentation/gpu/rfc/ |
| H A D | i915_vm_bind.rst | 31 * Support for userptr gem objects (no special uapi is required for this). 122 invalidated vmas (due to eviction and userptr invalidation) etc.
|
| H A D | gpusvm.rst | 116 * Build common userptr implementation on top of GPU SVM
|