€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ(/translations/zh_CN/gpu/rfc/i915_vm_bind”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/zh_TW/gpu/rfc/i915_vm_bind”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/it_IT/gpu/rfc/i915_vm_bind”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ja_JP/gpu/rfc/i915_vm_bind”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ko_KR/gpu/rfc/i915_vm_bind”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/pt_BR/gpu/rfc/i915_vm_bind”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/sp_SP/gpu/rfc/i915_vm_bind”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ)I915 VM_BIND feature design and use cases”h]”hŒ)I915 VM_BIND feature design and use cases”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒB/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind.rst”h´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒVM_BIND feature”h]”hŒVM_BIND feature”…”�”}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)�”}”(hXºDRM_I915_GEM_VM_BIND/UNBIND ioctls allows UMD to bind/unbind GEM buffer objects (BOs) or sections of a BOs at specified GPU virtual addresses on a specified address space (VM). These mappings (also referred to as persistent mappings) will be persistent across multiple GPU submissions (execbuf calls) issued by the UMD, without user having to provide a list of all required mappings during each submission (as required by older execbuf mode).”h]”hXºDRM_I915_GEM_VM_BIND/UNBIND ioctls allows UMD to bind/unbind GEM buffer objects (BOs) or sections of a BOs at specified GPU virtual addresses on a specified address space (VM). These mappings (also referred to as persistent mappings) will be persistent across multiple GPU submissions (execbuf calls) issued by the UMD, without user having to provide a list of all required mappings during each submission (as required by older execbuf mode).”…”�”}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)�”}”(hŒzThe VM_BIND/UNBIND calls allow UMDs to request a timeline out fence for signaling the completion of bind/unbind operation.”h]”hŒzThe VM_BIND/UNBIND calls allow UMDs to request a timeline out fence for signaling the completion of bind/unbind operation.”…”�”}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)�”}”(hŒÖVM_BIND feature is advertised to user via I915_PARAM_VM_BIND_VERSION. User has to opt-in for VM_BIND mode of binding for an address space (VM) during VM creation time via I915_VM_CREATE_FLAGS_USE_VM_BIND extension.”h]”hŒÖVM_BIND feature is advertised to user via I915_PARAM_VM_BIND_VERSION. User has to opt-in for VM_BIND mode of binding for an address space (VM) during VM creation time via I915_VM_CREATE_FLAGS_USE_VM_BIND extension.”…”�”}”(hhúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)�”}”(hŒÍVM_BIND/UNBIND ioctl calls executed on different CPU threads concurrently are not ordered. Furthermore, parts of the VM_BIND/UNBIND operations can be done asynchronously, when valid out fence is specified.”h]”hŒÍVM_BIND/UNBIND ioctl calls executed on different CPU threads concurrently are not ordered. Furthermore, parts of the VM_BIND/UNBIND operations can be done asynchronously, when valid out fence is specified.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)�”}”(hŒVM_BIND features include:”h]”hŒVM_BIND features include:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒbMultiple Virtual Address (VA) mappings can map to the same physical pages of an object (aliasing).”h]”hÝ)�”}”(hŒbMultiple Virtual Address (VA) mappings can map to the same physical pages of an object (aliasing).”h]”hŒbMultiple Virtual Address (VA) mappings can map to the same physical pages of an object (aliasing).”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj&h²hh³hÊh´Nubj*)�”}”(hŒDVA mapping can map to a partial section of the BO (partial binding).”h]”hÝ)�”}”(hjEh]”hŒDVA mapping can map to a partial section of the BO (partial binding).”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj&h²hh³hÊh´Nubj*)�”}”(hŒBSupport capture of persistent mappings in the dump upon GPU error.”h]”hÝ)�”}”(hj\h]”hŒBSupport capture of persistent mappings in the dump upon GPU error.”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj&h²hh³hÊh´Nubj*)�”}”(hŒHSupport for userptr gem objects (no special uapi is required for this). ”h]”hÝ)�”}”(hŒGSupport for userptr gem objects (no special uapi is required for this).”h]”hŒGSupport for userptr gem objects (no special uapi is required for this).”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj&h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1j$h³hÊh´KhhËh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒTLB flush consideration”h]”hŒTLB flush consideration”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj‘h²hh³hÊh´K"ubhÝ)�”}”(hX�The i915 driver flushes the TLB for each submission and when an object's pages are released. The VM_BIND/UNBIND operation will not do any additional TLB flush. Any VM_BIND mapping added will be in the working set for subsequent submissions on that VM and will not be in the working set for currently running batches (which would require additional TLB flushes, which is not supported).”h]”hXƒThe i915 driver flushes the TLB for each submission and when an object’s pages are released. The VM_BIND/UNBIND operation will not do any additional TLB flush. Any VM_BIND mapping added will be in the working set for subsequent submissions on that VM and will not be in the working set for currently running batches (which would require additional TLB flushes, which is not supported).”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K#hj‘h²hubeh}”(h]”Œtlb-flush-consideration”ah ]”h"]”Œtlb flush consideration”ah$]”h&]”uh1hµhhËh²hh³hÊh´K"ubh¶)�”}”(hhh]”(h»)�”}”(hŒExecbuf ioctl in VM_BIND mode”h]”hŒExecbuf ioctl in VM_BIND mode”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¸h²hh³hÊh´K*ubhÝ)�”}”(hXA VM in VM_BIND mode will not support older execbuf mode of binding. The execbuf ioctl handling in VM_BIND mode differs significantly from the older execbuf2 ioctl (See struct drm_i915_gem_execbuffer2). Hence, a new execbuf3 ioctl has been added to support VM_BIND mode. (See struct drm_i915_gem_execbuffer3). The execbuf3 ioctl will not accept any execlist. Hence, no support for implicit sync. It is expected that the below work will be able to support requirements of object dependency setting in all use cases:”h]”hXA VM in VM_BIND mode will not support older execbuf mode of binding. The execbuf ioctl handling in VM_BIND mode differs significantly from the older execbuf2 ioctl (See struct drm_i915_gem_execbuffer2). Hence, a new execbuf3 ioctl has been added to support VM_BIND mode. (See struct drm_i915_gem_execbuffer3). The execbuf3 ioctl will not accept any execlist. Hence, no support for implicit sync. It is expected that the below work will be able to support requirements of object dependency setting in all use cases:”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K+hj¸h²hubhÝ)�”}”(hŒQ"dma-buf: Add an API for exporting sync files" (https://lwn.net/Articles/859290/)”h]”(hŒ4“dma-buf: Add an API for exporting sync filesâ€� (”…”�”}”(hj×h²hh³Nh´NubhŒ reference”“”)�”}”(hŒ https://lwn.net/Articles/859290/”h]”hŒ https://lwn.net/Articles/859290/”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jãuh1jßhj×ubhŒ)”…”�”}”(hj×h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K4hj¸h²hubhÝ)�”}”(hŒìThe new execbuf3 ioctl only works in VM_BIND mode and the VM_BIND mode only works with execbuf3 ioctl for submission. All BOs mapped on that VM (through VM_BIND call) at the time of execbuf3 call are deemed required for that submission.”h]”hŒìThe new execbuf3 ioctl only works in VM_BIND mode and the VM_BIND mode only works with execbuf3 ioctl for submission. All BOs mapped on that VM (through VM_BIND call) at the time of execbuf3 call are deemed required for that submission.”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K7hj¸h²hubhÝ)�”}”(hX!The execbuf3 ioctl directly specifies the batch addresses instead of as object handles as in execbuf2 ioctl. The execbuf3 ioctl will also not support many of the older features like in/out/submit fences, fence array, default gem context and many more (See struct drm_i915_gem_execbuffer3).”h]”hX!The execbuf3 ioctl directly specifies the batch addresses instead of as object handles as in execbuf2 ioctl. The execbuf3 ioctl will also not support many of the older features like in/out/submit fences, fence array, default gem context and many more (See struct drm_i915_gem_execbuffer3).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KWhen GPU page faults are supported, the execbuf path do not take any of these locks. There we will simply smash the new batch buffer address into the ring and then tell the scheduler run that. The lock taking only happens from the page fault handler, where we take lock-A in read mode, whichever lock-B we need to find the backing storage (dma_resv lock for gem objects, and hmm/core mm for system allocator) and some additional locks (lock-D) for taking care of page table races. Page fault mode should not need to ever manipulate the vm lists, so won’t ever need lock-C.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K|hj†h²hubeh}”(h]”Œvm-bind-locking-hierarchy”ah ]”h"]”Œvm_bind locking hierarchy”ah$]”h&]”uh1hµhhËh²hh³hÊh´K^ubh¶)�”}”(hhh]”(h»)�”}”(hŒVM_BIND LRU handling”h]”hŒVM_BIND LRU handling”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjRh²hh³hÊh´K†ubhÝ)�”}”(hŒÔWe need to ensure VM_BIND mapped objects are properly LRU tagged to avoid performance degradation. We will also need support for bulk LRU movement of VM_BIND objects to avoid additional latencies in execbuf path.”h]”hŒÔWe need to ensure VM_BIND mapped objects are properly LRU tagged to avoid performance degradation. We will also need support for bulk LRU movement of VM_BIND objects to avoid additional latencies in execbuf path.”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K‡hjRh²hubhÝ)�”}”(hXThe page table pages are similar to VM_BIND mapped objects (See `Evictable page table allocations`_) and are maintained per VM and needs to be pinned in memory when VM is made active (ie., upon an execbuf call with that VM). So, bulk LRU movement of page table pages is also needed.”h]”(hŒ@The page table pages are similar to VM_BIND mapped objects (See ”…”�”}”(hjqh²hh³Nh´Nubjà)�”}”(hŒ#`Evictable page table allocations`_”h]”hŒ Evictable page table allocations”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ Evictable page table allocations”j.Œ evictable-page-table-allocations”uh1jßhjqj0KubhŒ·) and are maintained per VM and needs to be pinned in memory when VM is made active (ie., upon an execbuf call with that VM). So, bulk LRU movement of page table pages is also needed.”…”�”}”(hjqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K‹hjRh²hubeh}”(h]”Œvm-bind-lru-handling”ah ]”h"]”Œvm_bind lru handling”ah$]”h&]”uh1hµhhËh²hh³hÊh´K†ubh¶)�”}”(hhh]”(h»)�”}”(hŒVM_BIND dma_resv usage”h]”hŒVM_BIND dma_resv usage”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjœh²hh³hÊh´K‘ubhÝ)�”}”(hX6Fences needs to be added to all VM_BIND mapped objects. During each execbuf submission, they are added with DMA_RESV_USAGE_BOOKKEEP usage to prevent over sync (See enum dma_resv_usage). One can override it with either DMA_RESV_USAGE_READ or DMA_RESV_USAGE_WRITE usage during explicit object dependency setting.”h]”hX6Fences needs to be added to all VM_BIND mapped objects. During each execbuf submission, they are added with DMA_RESV_USAGE_BOOKKEEP usage to prevent over sync (See enum dma_resv_usage). One can override it with either DMA_RESV_USAGE_READ or DMA_RESV_USAGE_WRITE usage during explicit object dependency setting.”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K’hjœh²hubhÝ)�”}”(hX Note that DRM_I915_GEM_WAIT and DRM_I915_GEM_BUSY ioctls do not check for DMA_RESV_USAGE_BOOKKEEP usage and hence should not be used for end of batch check. Instead, the execbuf3 out fence should be used for end of batch check (See struct drm_i915_gem_execbuffer3).”h]”hX Note that DRM_I915_GEM_WAIT and DRM_I915_GEM_BUSY ioctls do not check for DMA_RESV_USAGE_BOOKKEEP usage and hence should not be used for end of batch check. Instead, the execbuf3 out fence should be used for end of batch check (See struct drm_i915_gem_execbuffer3).”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K˜hjœh²hubhÝ)�”}”(hXAlso, in VM_BIND mode, use dma-resv apis for determining object activeness (See dma_resv_test_signaled() and dma_resv_wait_timeout()) and do not use the older i915_vma active reference tracking which is deprecated. This should be easier to get it working with the current TTM backend.”h]”hXAlso, in VM_BIND mode, use dma-resv apis for determining object activeness (See dma_resv_test_signaled() and dma_resv_wait_timeout()) and do not use the older i915_vma active reference tracking which is deprecated. This should be easier to get it working with the current TTM backend.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K�hjœh²hubeh}”(h]”j/ah ]”h"]”Œvm_bind dma_resv usage”ah$]”h&]”uh1hµhhËh²hh³hÊh´K‘Œ referenced”Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Mesa use case”h]”hŒ Mesa use case”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjßh²hh³hÊh´K£ubhÝ)�”}”(hXVM_BIND can potentially reduce the CPU overhead in Mesa (both Vulkan and Iris), hence improving performance of CPU-bound applications. It also allows us to implement Vulkan's Sparse Resources. With increasing GPU hardware performance, reducing CPU overhead becomes more impactful.”h]”hXVM_BIND can potentially reduce the CPU overhead in Mesa (both Vulkan and Iris), hence improving performance of CPU-bound applications. It also allows us to implement Vulkan’s Sparse Resources. With increasing GPU hardware performance, reducing CPU overhead becomes more impactful.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K¤hjßh²hubeh}”(h]”Œ mesa-use-case”ah ]”h"]”Œ mesa use case”ah$]”h&]”uh1hµhhËh²hh³hÊh´K£ubeh}”(h]”Œvm-bind-feature”ah ]”h"]”Œvm_bind feature”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒOther VM_BIND use cases”h]”hŒOther VM_BIND use cases”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K«ubh¶)�”}”(hhh]”(h»)�”}”(hŒLong running Compute contexts”h]”hŒLong running Compute contexts”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K®ubhÝ)�”}”(hXUsage of dma-fence expects that they complete in reasonable amount of time. Compute on the other hand can be long running. Hence it is appropriate for compute to use user/memory fence (See `User/Memory Fence`_) and dma-fence usage must be limited to in-kernel consumption only.”h]”(hŒ½Usage of dma-fence expects that they complete in reasonable amount of time. Compute on the other hand can be long running. Hence it is appropriate for compute to use user/memory fence (See ”…”�”}”(hj0h²hh³Nh´Nubjà)�”}”(hŒ`User/Memory Fence`_”h]”hŒUser/Memory Fence”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒUser/Memory Fence”j.Œuser-memory-fence”uh1jßhj0j0KubhŒD) and dma-fence usage must be limited to in-kernel consumption only.”…”�”}”(hj0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K¯hjh²hubhÝ)�”}”(hXgWhere GPU page faults are not available, kernel driver upon buffer invalidation will initiate a suspend (preemption) of long running context, finish the invalidation, revalidate the BO and then resume the compute context. This is done by having a per-context preempt fence which is enabled when someone tries to wait on it and triggers the context preemption.”h]”hXgWhere GPU page faults are not available, kernel driver upon buffer invalidation will initiate a suspend (preemption) of long running context, finish the invalidation, revalidate the BO and then resume the compute context. This is done by having a per-context preempt fence which is enabled when someone tries to wait on it and triggers the context preemption.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K´hjh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒUser/Memory Fence”h]”hŒUser/Memory Fence”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjah²hh³hÊh´K»ubhÝ)�”}”(hXMUser/Memory fence is a pair. To signal the user fence, the specified value will be written at the specified virtual address and wakeup the waiting process. User fence can be signaled either by the GPU or kernel async worker (like upon bind completion). User can wait on a user fence with a new user fence wait ioctl.”h]”hXMUser/Memory fence is a pair. To signal the user fence, the specified value will be written at the specified virtual address and wakeup the waiting process. User fence can be signaled either by the GPU or kernel async worker (like upon bind completion). User can wait on a user fence with a new user fence wait ioctl.”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K¼hjah²hubhÝ)�”}”(hŒPHere is some prior work on this: https://patchwork.freedesktop.org/patch/349417/”h]”(hŒ!Here is some prior work on this: ”…”�”}”(hj€h²hh³Nh´Nubjà)�”}”(hŒ/https://patchwork.freedesktop.org/patch/349417/”h]”hŒ/https://patchwork.freedesktop.org/patch/349417/”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jŠuh1jßhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÂhjah²hubeh}”(h]”jHah ]”h"]”Œuser/memory fence”ah$]”h&]”uh1hµhjh²hh³hÊh´K»jÞKubh¶)�”}”(hhh]”(h»)�”}”(hŒLow Latency Submission”h]”hŒLow Latency Submission”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¤h²hh³hÊh´KÆubhÝ)�”}”(hŒíAllows compute UMD to directly submit GPU jobs instead of through execbuf ioctl. This is made possible by VM_BIND is not being synchronized against execbuf. VM_BIND allows bind/unbind of mappings required for the directly submitted jobs.”h]”hŒíAllows compute UMD to directly submit GPU jobs instead of through execbuf ioctl. This is made possible by VM_BIND is not being synchronized against execbuf. VM_BIND allows bind/unbind of mappings required for the directly submitted jobs.”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÇhj¤h²hubeh}”(h]”Œlow-latency-submission”ah ]”h"]”Œlow latency submission”ah$]”h&]”uh1hµhjh²hh³hÊh´KÆubeh}”(h]”Œlong-running-compute-contexts”ah ]”h"]”Œlong running compute contexts”ah$]”h&]”uh1hµhjh²hh³hÊh´K®ubh¶)�”}”(hhh]”(h»)�”}”(hŒDebugger”h]”hŒDebugger”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÓh²hh³hÊh´KÍubhÝ)�”}”(hŒ¹With debug event interface user space process (debugger) is able to keep track of and act upon resources created by another process (debugged) and attached to GPU via vm_bind interface.”h]”hŒ¹With debug event interface user space process (debugger) is able to keep track of and act upon resources created by another process (debugged) and attached to GPU via vm_bind interface.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÎhjÓh²hubeh}”(h]”Œdebugger”ah ]”h"]”Œdebugger”ah$]”h&]”uh1hµhjh²hh³hÊh´KÍubh¶)�”}”(hhh]”(h»)�”}”(hŒGPU page faults”h]”hŒGPU page faults”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjúh²hh³hÊh´KÓubhÝ)�”}”(hXpGPU page faults when supported (in future), will only be supported in the VM_BIND mode. While both the older execbuf mode and the newer VM_BIND mode of binding will require using dma-fence to ensure residency, the GPU page faults mode when supported, will not use any dma-fence as residency is purely managed by installing and removing/invalidating page table entries.”h]”hXpGPU page faults when supported (in future), will only be supported in the VM_BIND mode. While both the older execbuf mode and the newer VM_BIND mode of binding will require using dma-fence to ensure residency, the GPU page faults mode when supported, will not use any dma-fence as residency is purely managed by installing and removing/invalidating page table entries.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÔhjúh²hubeh}”(h]”Œgpu-page-faults”ah ]”h"]”Œgpu page faults”ah$]”h&]”uh1hµhjh²hh³hÊh´KÓubh¶)�”}”(hhh]”(h»)�”}”(hŒPage level hints settings”h]”hŒPage level hints settings”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj!h²hh³hÊh´KÛubhÝ)�”}”(hŒÖVM_BIND allows any hints setting per mapping instead of per BO. Possible hints include placement and atomicity. Sub-BO level placement hint will be even more relevant with upcoming GPU on-demand page fault support.”h]”hŒÖVM_BIND allows any hints setting per mapping instead of per BO. Possible hints include placement and atomicity. Sub-BO level placement hint will be even more relevant with upcoming GPU on-demand page fault support.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÜhj!h²hubeh}”(h]”Œpage-level-hints-settings”ah ]”h"]”Œpage level hints settings”ah$]”h&]”uh1hµhjh²hh³hÊh´KÛubh¶)�”}”(hhh]”(h»)�”}”(hŒPage level Cache/CLOS settings”h]”hŒPage level Cache/CLOS settings”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjHh²hh³hÊh´KáubhÝ)�”}”(hŒAVM_BIND allows cache/CLOS settings per mapping instead of per BO.”h]”hŒAVM_BIND allows cache/CLOS settings per mapping instead of per BO.”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KâhjHh²hubeh}”(h]”Œpage-level-cache-clos-settings”ah ]”h"]”Œpage level cache/clos settings”ah$]”h&]”uh1hµhjh²hh³hÊh´Káubh¶)�”}”(hhh]”(h»)�”}”(hŒ Evictable page table allocations”h]”hŒ Evictable page table allocations”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjoh²hh³hÊh´KåubhÝ)�”}”(hX/Make pagetable allocations evictable and manage them similar to VM_BIND mapped objects. Page table pages are similar to persistent mappings of a VM (difference here are that the page table pages will not have an i915_vma structure and after swapping pages back in, parent page link needs to be updated).”h]”hX/Make pagetable allocations evictable and manage them similar to VM_BIND mapped objects. Page table pages are similar to persistent mappings of a VM (difference here are that the page table pages will not have an i915_vma structure and after swapping pages back in, parent page link needs to be updated).”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kæhjoh²hubeh}”(h]”j‰ah ]”h"]”Œ evictable page table allocations”ah$]”h&]”uh1hµhjh²hh³hÊh´KåjÞKubh¶)�”}”(hhh]”(h»)�”}”(hŒ#Shared Virtual Memory (SVM) support”h]”hŒ#Shared Virtual Memory (SVM) support”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj•h²hh³hÊh´KíubhÝ)�”}”(hŒ¥VM_BIND interface can be used to map system memory directly (without gem BO abstraction) using the HMM interface. SVM is only supported with GPU page faults enabled.”h]”hŒ¥VM_BIND interface can be used to map system memory directly (without gem BO abstraction) using the HMM interface. SVM is only supported with GPU page faults enabled.”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kîhj•h²hubeh}”(h]”j¯ah ]”h"]”Œ#shared virtual memory (svm) support”ah$]”h&]”uh1hµhjh²hh³hÊh´KíjÞKubeh}”(h]”Œother-vm-bind-use-cases”ah ]”h"]”Œother vm_bind use cases”ah$]”h&]”uh1hµhh·h²hh³hÊh´K«ubh¶)�”}”(hhh]”(h»)�”}”(hŒ VM_BIND UAPI”h]”hŒ VM_BIND UAPI”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÃh²hh³hÊh´KóubhŒtarget”“”)�”}”(hŒ.. _I915_PARAM_VM_BIND_VERSION:”h]”h}”(h]”h ]”h"]”h$]”h&]”j.Œi915-param-vm-bind-version”uh1jÔh´KhjÃh²hh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”ubhÝ)�”}”(hŒ**I915_PARAM_VM_BIND_VERSION**”h]”hŒstrong”“”)�”}”(hjäh]”hŒI915_PARAM_VM_BIND_VERSION”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjâubah}”(h]”jàah ]”h"]”Œi915_param_vm_bind_version”ah$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KhjÃh²hŒexpect_referenced_by_name”}”jùjÖsŒexpect_referenced_by_id”}”jàjÖsubhÝ)�”}”(hŒIVM_BIND feature version supported. See typedef drm_i915_getparam_t param.”h]”hŒIVM_BIND feature version supported. See typedef drm_i915_getparam_t param.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KhjÃh²hubhÝ)�”}”(hŒeSpecifies the VM_BIND feature version supported. The following versions of VM_BIND have been defined:”h]”hŒeSpecifies the VM_BIND feature version supported. The following versions of VM_BIND have been defined:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K hjÃh²hubhÝ)�”}”(hŒ0: No VM_BIND support.”h]”hŒ0: No VM_BIND support.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K hjÃh²hubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒë1: In VM_UNBIND calls, the UMD must specify the exact mappings created previously with VM_BIND, the ioctl will not support unbinding multiple mappings or splitting them. Similarly, VM_BIND calls will not replace any existing mappings. ”h]”(hŒterm”“”)�”}”(hŒF1: In VM_UNBIND calls, the UMD must specify the exact mappings created”h]”hŒF1: In VM_UNBIND calls, the UMD must specify the exact mappings created”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´Khj5ubhŒ definition”“”)�”}”(hhh]”hÝ)�”}”(hŒ£previously with VM_BIND, the ioctl will not support unbinding multiple mappings or splitting them. Similarly, VM_BIND calls will not replace any existing mappings.”h]”hŒ£previously with VM_BIND, the ioctl will not support unbinding multiple mappings or splitting them. Similarly, VM_BIND calls will not replace any existing mappings.”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jJhj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³jIh´Khj0ubj4)�”}”(hŒŠ2: The restrictions on unbinding partial or multiple mappings is lifted, Similarly, binding will replace any mappings in the given range. ”h]”(j:)�”}”(hŒ@2: The restrictions on unbinding partial or multiple mappings is”h]”hŒ@2: The restrictions on unbinding partial or multiple mappings is”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KhjjubjK)�”}”(hhh]”hÝ)�”}”(hŒHlifted, Similarly, binding will replace any mappings in the given range.”h]”hŒHlifted, Similarly, binding will replace any mappings in the given range.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j|h´Khj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jJhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³j|h´Khj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÃh²hh³jáh´NubhÝ)�”}”(hŒBSee struct drm_i915_gem_vm_bind and struct drm_i915_gem_vm_unbind.”h]”hŒBSee struct drm_i915_gem_vm_bind and struct drm_i915_gem_vm_unbind.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KhjÃh²hubjÕ)�”}”(hŒ%.. _I915_VM_CREATE_FLAGS_USE_VM_BIND:”h]”h}”(h]”h ]”h"]”h$]”h&]”j.Œ i915-vm-create-flags-use-vm-bind”uh1jÔh´KhjÃh²hh³jáubhÝ)�”}”(hŒ$**I915_VM_CREATE_FLAGS_USE_VM_BIND**”h]”jç)�”}”(hj¼h]”hŒ I915_VM_CREATE_FLAGS_USE_VM_BIND”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjºubah}”(h]”j¹ah ]”h"]”Œ i915_vm_create_flags_use_vm_bind”ah$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KhjÃh²hjý}”jÏj¯sjÿ}”j¹j¯subhÝ)�”}”(hŒhFlag to opt-in for VM_BIND mode of binding during VM creation. See struct drm_i915_gem_vm_control flags.”h]”hŒhFlag to opt-in for VM_BIND mode of binding during VM creation. See struct drm_i915_gem_vm_control flags.”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KhjÃh²hubhÝ)�”}”(hŒÌThe older execbuf2 ioctl will not support VM_BIND mode of operation. For VM_BIND mode, we have new execbuf3 ioctl which will not accept any execlist (See struct drm_i915_gem_execbuffer3 for more details).”h]”hŒÌThe older execbuf2 ioctl will not support VM_BIND mode of operation. For VM_BIND mode, we have new execbuf3 ioctl which will not accept any execlist (See struct drm_i915_gem_execbuffer3 for more details).”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K!hjÃh²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ&drm_i915_gem_timeline_fence (C struct)”Œc.drm_i915_gem_timeline_fence”hNt”auh1jóhjÃh²hh³jáh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒdrm_i915_gem_timeline_fence”h]”hŒdesc_signature_line”“”)�”}”(hŒ"struct drm_i915_gem_timeline_fence”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jhjh²hh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K(ubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j'hjh²hh³j&h´K(ubhŒ desc_name”“”)�”}”(hŒdrm_i915_gem_timeline_fence”h]”hŒ desc_sig_name”“”)�”}”(hj h]”hŒdrm_i915_gem_timeline_fence”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j>hj:ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j8hjh²hh³j&h´K(ubeh}”(h]”h ]”h"]”h$]”h&]”jVjWŒ add_permalink”ˆuh1jŒsphinx_line_type”Œ declarator”hj h²hh³j&h´K(ubah}”(h]”jah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1j h³j&h´K(hjh²hubhŒ desc_content”“”)�”}”(hhh]”hÝ)�”}”(hŒ"An input or output timeline fence.”h]”hŒ"An input or output timeline fence.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K3hjnh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jlhjh²hh³j&h´K(ubeh}”(h]”h ]”(Œc”Œstruct”eh"]”h$]”h&]”Œdomain”j‰Œobjtype”jŠŒdesctype”jŠŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jh²hhjÃh³jáh´NubhŒ container”“”)�”}”(hX**Definition**:: struct drm_i915_gem_timeline_fence { __u32 handle; __u32 flags; #define I915_TIMELINE_FENCE_WAIT (1 << 0); #define I915_TIMELINE_FENCE_SIGNAL (1 << 1); #define __I915_TIMELINE_FENCE_UNKNOWN_FLAGS (-(I915_TIMELINE_FENCE_SIGNAL << 1)); __u64 value; }; **Members** ``handle`` User's handle for a drm_syncobj to wait on or signal. ``flags`` Supported flags are: I915_TIMELINE_FENCE_WAIT: Wait for the input fence before the operation. I915_TIMELINE_FENCE_SIGNAL: Return operation completion fence as output. ``value`` A point in the timeline. Value must be 0 for a binary drm_syncobj. A Value of 0 for a timeline drm_syncobj is invalid as it turns a drm_syncobj into a binary one.”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jç)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjšubhŒ:”…”�”}”(hjšh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K7hj–ubhŒ literal_block”“”)�”}”(hXstruct drm_i915_gem_timeline_fence { __u32 handle; __u32 flags; #define I915_TIMELINE_FENCE_WAIT (1 << 0); #define I915_TIMELINE_FENCE_SIGNAL (1 << 1); #define __I915_TIMELINE_FENCE_UNKNOWN_FLAGS (-(I915_TIMELINE_FENCE_SIGNAL << 1)); __u64 value; };”h]”hXstruct drm_i915_gem_timeline_fence { __u32 handle; __u32 flags; #define I915_TIMELINE_FENCE_WAIT (1 << 0); #define I915_TIMELINE_FENCE_SIGNAL (1 << 1); #define __I915_TIMELINE_FENCE_UNKNOWN_FLAGS (-(I915_TIMELINE_FENCE_SIGNAL << 1)); __u64 value; };”…”�”}”hj¹sbah}”(h]”h ]”h"]”h$]”h&]”jVjWuh1j·h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K9hj–ubhÝ)�”}”(hŒ **Members**”h]”jç)�”}”(hjÊh]”hŒMembers”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KBhj–ubj/)�”}”(hhh]”(j4)�”}”(hŒA``handle`` User's handle for a drm_syncobj to wait on or signal. ”h]”(j:)�”}”(hŒ ``handle``”h]”hŒliteral”“”)�”}”(hjéh]”hŒhandle”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´Khj( ubah}”(h]”h ]”(jQjReh"]”h$]”h&]”jVjWuh1j8hj h²hh³j h´Khj5 ubah}”(h]”h ]”(jQjReh"]”h$]”h&]”jVjWuh1j8hj h²hh³j& h´Kpubeh}”(h]”h ]”h"]”h$]”h&]”jVjWj^ˆuh1jj_j`hj h²hh³j& h´Kpubah}”(h]”j ah ]”(jdjeeh"]”h$]”h&]”jiˆjj)jkhuh1j h³j& h´Kphj h²hubjm)�”}”(hhh]”hÝ)�”}”(hŒVA to object mapping to unbind.”h]”hŒVA to object mapping to unbind.”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KŸhjX h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jlhj h²hh³j& h´Kpubeh}”(h]”h ]”(j‰Œstruct”eh"]”h$]”h&]”jŽj‰j�js j�js j‘‰j’‰j“‰uh1jh²hhjÃh³jáh´Nubj•)�”}”(hX¹**Definition**:: struct drm_i915_gem_vm_unbind { __u32 vm_id; __u32 rsvd; __u64 start; __u64 length; __u64 flags; struct drm_i915_gem_timeline_fence fence; __u64 extensions; }; **Members** ``vm_id`` VM (address space) id to bind ``rsvd`` Reserved, MBZ ``start`` Virtual Address start to unbind ``length`` Length of mapping to unbind ``flags`` Currently reserved, MBZ. Note that **fence** carries its own flags. ``fence`` Timeline fence for unbind completion signaling. Timeline fence is of format struct drm_i915_gem_timeline_fence. It is an out fence, hence using I915_TIMELINE_FENCE_WAIT flag is invalid, and an error will be returned. If I915_TIMELINE_FENCE_SIGNAL flag is not set, then out fence is not requested and unbinding is completed synchronously. ``extensions`` Zero-terminated chain of extensions. For future extensions. See struct i915_user_extension.”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jç)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj{ ubhŒ:”…”�”}”(hj{ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K£hjw ubj¸)�”}”(hŒ»struct drm_i915_gem_vm_unbind { __u32 vm_id; __u32 rsvd; __u64 start; __u64 length; __u64 flags; struct drm_i915_gem_timeline_fence fence; __u64 extensions; };”h]”hŒ»struct drm_i915_gem_vm_unbind { __u32 vm_id; __u32 rsvd; __u64 start; __u64 length; __u64 flags; struct drm_i915_gem_timeline_fence fence; __u64 extensions; };”…”�”}”hj˜ sbah}”(h]”h ]”h"]”h$]”h&]”jVjWuh1j·h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K¥hjw ubhÝ)�”}”(hŒ **Members**”h]”jç)�”}”(hj© h]”hŒMembers”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj§ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K¯hjw ubj/)�”}”(hhh]”(j4)�”}”(hŒ(``vm_id`` VM (address space) id to bind ”h]”(j:)�”}”(hŒ ``vm_id``”h]”jì)�”}”(hjÈ h]”hŒvm_id”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjÆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K±hj ubjK)�”}”(hhh]”hÝ)�”}”(hŒVM (address space) id to bind”h]”hŒVM (address space) id to bind”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝ h´K±hjÞ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jJhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³jÝ h´K±hj¿ ubj4)�”}”(hŒ``rsvd`` Reserved, MBZ ”h]”(j:)�”}”(hŒ``rsvd``”h]”jì)�”}”(hjh]”hŒrsvd”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjÿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K´hjû ubjK)�”}”(hhh]”hÝ)�”}”(hŒ Reserved, MBZ”h]”hŒ Reserved, MBZ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´K´hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jJhjû ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³jh´K´hj¿ ubj4)�”}”(hŒ*``start`` Virtual Address start to unbind ”h]”(j:)�”}”(hŒ ``start``”h]”jì)�”}”(hj:h]”hŒstart”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K·hj4ubjK)�”}”(hhh]”hÝ)�”}”(hŒVirtual Address start to unbind”h]”hŒVirtual Address start to unbind”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jOh´K·hjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jJhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³jOh´K·hj¿ ubj4)�”}”(hŒ'``length`` Length of mapping to unbind ”h]”(j:)�”}”(hŒ ``length``”h]”jì)�”}”(hjsh]”hŒlength”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KºhjmubjK)�”}”(hhh]”hÝ)�”}”(hŒLength of mapping to unbind”h]”hŒLength of mapping to unbind”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆh´Kºhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jJhjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³jˆh´Kºhj¿ ubj4)�”}”(hŒO``flags`` Currently reserved, MBZ. Note that **fence** carries its own flags. ”h]”(j:)�”}”(hŒ ``flags``”h]”jì)�”}”(hj¬h]”hŒflags”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÀhj¦ubjK)�”}”(hhh]”(hÝ)�”}”(hŒCurrently reserved, MBZ.”h]”hŒCurrently reserved, MBZ.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K¾hjÂubhÝ)�”}”(hŒ*Note that **fence** carries its own flags.”h]”(hŒ Note that ”…”�”}”(hjÔh²hh³Nh´Nubjç)�”}”(hŒ **fence**”h]”hŒfence”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÔubhŒ carries its own flags.”…”�”}”(hjÔh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÁh´KÀhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³jÁh´KÀhj¿ ubj4)�”}”(hX_``fence`` Timeline fence for unbind completion signaling. Timeline fence is of format struct drm_i915_gem_timeline_fence. It is an out fence, hence using I915_TIMELINE_FENCE_WAIT flag is invalid, and an error will be returned. If I915_TIMELINE_FENCE_SIGNAL flag is not set, then out fence is not requested and unbinding is completed synchronously. ”h]”(j:)�”}”(hŒ ``fence``”h]”jì)�”}”(hjh]”hŒfence”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÍhjubjK)�”}”(hhh]”(hÝ)�”}”(hŒ/Timeline fence for unbind completion signaling.”h]”hŒ/Timeline fence for unbind completion signaling.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÅhjubhÝ)�”}”(hŒ?Timeline fence is of format struct drm_i915_gem_timeline_fence.”h]”hŒ?Timeline fence is of format struct drm_i915_gem_timeline_fence.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÇhjubhÝ)�”}”(hŒhIt is an out fence, hence using I915_TIMELINE_FENCE_WAIT flag is invalid, and an error will be returned.”h]”hŒhIt is an out fence, hence using I915_TIMELINE_FENCE_WAIT flag is invalid, and an error will be returned.”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÉhjubhÝ)�”}”(hŒxIf I915_TIMELINE_FENCE_SIGNAL flag is not set, then out fence is not requested and unbinding is completed synchronously.”h]”hŒxIf I915_TIMELINE_FENCE_SIGNAL flag is not set, then out fence is not requested and unbinding is completed synchronously.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÌhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³jh´KÍhj¿ ubj4)�”}”(hŒk``extensions`` Zero-terminated chain of extensions. For future extensions. See struct i915_user_extension.”h]”(j:)�”}”(hŒ``extensions``”h]”jì)�”}”(hjmh]”hŒ extensions”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÓhjgubjK)�”}”(hhh]”(hÝ)�”}”(hŒ$Zero-terminated chain of extensions.”h]”hŒ$Zero-terminated chain of extensions.”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÒhjƒubhÝ)�”}”(hŒ6For future extensions. See struct i915_user_extension.”h]”hŒ6For future extensions. See struct i915_user_extension.”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÔhjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³j‚h´KÓhj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j.hjw ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j”hjÃh²hh³jáh´NubhÝ)�”}”(hŒ**Description**”h]”jç)�”}”(hj¿h]”hŒ Description”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K×hjÃh²hubhÝ)�”}”(hX…This structure is passed to VM_UNBIND ioctl and specifies the GPU virtual address (VA) range that should be unbound from the device page table of the specified address space (VM). VM_UNBIND will force unbind the specified range from device page table without waiting for any GPU job to complete. It is UMDs responsibility to ensure the mapping is no longer in use before calling VM_UNBIND.”h]”hX…This structure is passed to VM_UNBIND ioctl and specifies the GPU virtual address (VA) range that should be unbound from the device page table of the specified address space (VM). VM_UNBIND will force unbind the specified range from device page table without waiting for any GPU job to complete. It is UMDs responsibility to ensure the mapping is no longer in use before calling VM_UNBIND.”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K hjÃh²hubhÝ)�”}”(hŒVIf the specified mapping is not found, the ioctl will simply return without any error.”h]”hŒVIf the specified mapping is not found, the ioctl will simply return without any error.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K§hjÃh²hubhÝ)�”}”(hŒÅVM_BIND/UNBIND ioctl calls executed on different CPU threads concurrently are not ordered. Furthermore, parts of the VM_UNBIND operation can be done asynchronously, if valid **fence** is specified.”h]”(hŒ®VM_BIND/UNBIND ioctl calls executed on different CPU threads concurrently are not ordered. Furthermore, parts of the VM_UNBIND operation can be done asynchronously, if valid ”…”�”}”(hjóh²hh³Nh´Nubjç)�”}”(hŒ **fence**”h]”hŒfence”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjóubhŒ is specified.”…”�”}”(hjóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KªhjÃh²hubjô)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ#drm_i915_gem_execbuffer3 (C struct)”Œc.drm_i915_gem_execbuffer3”hNt”auh1jóhjÃh²hh³jáh´Nubj)�”}”(hhh]”(j )�”}”(hŒdrm_i915_gem_execbuffer3”h]”j)�”}”(hŒstruct drm_i915_gem_execbuffer3”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j"ah"]”h$]”h&]”uh1jhj)h²hh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´K±ubj()�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j'hj)h²hh³j:h´K±ubj9)�”}”(hŒdrm_i915_gem_execbuffer3”h]”j?)�”}”(hj'h]”hŒdrm_i915_gem_execbuffer3”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jJah"]”h$]”h&]”uh1j>hjIubah}”(h]”h ]”(jQjReh"]”h$]”h&]”jVjWuh1j8hj)h²hh³j:h´K±ubeh}”(h]”h ]”h"]”h$]”h&]”jVjWj^ˆuh1jj_j`hj%h²hh³j:h´K±ubah}”(h]”j ah ]”(jdjeeh"]”h$]”h&]”jiˆjj)jkhuh1j h³j:h´K±hj"h²hubjm)�”}”(hhh]”hÝ)�”}”(hŒ-Structure for DRM_I915_GEM_EXECBUFFER3 ioctl.”h]”hŒ-Structure for DRM_I915_GEM_EXECBUFFER3 ioctl.”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÙhjlh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jlhj"h²hh³j:h´K±ubeh}”(h]”h ]”(j‰Œstruct”eh"]”h$]”h&]”jŽj‰j�j‡j�j‡j‘‰j’‰j“‰uh1jh²hhjÃh³jáh´Nubj•)�”}”(hXÉ**Definition**:: struct drm_i915_gem_execbuffer3 { __u32 ctx_id; __u32 engine_idx; __u64 batch_address; __u64 flags; __u32 rsvd1; __u32 fence_count; __u64 timeline_fences; __u64 rsvd2; __u64 extensions; }; **Members** ``ctx_id`` Context id Only contexts with user engine map are allowed. ``engine_idx`` Engine index An index in the user engine map of the context specified by **ctx_id**. ``batch_address`` Batch gpu virtual address/es. For normal submission, it is the gpu virtual address of the batch buffer. For parallel submission, it is a pointer to an array of batch buffer gpu virtual addresses with array size equal to the number of (parallel) engines involved in that submission (See struct i915_context_engines_parallel_submit). ``flags`` Currently reserved, MBZ ``rsvd1`` Reserved, MBZ ``fence_count`` Number of fences in **timeline_fences** array. ``timeline_fences`` Pointer to an array of timeline fences. Timeline fences are of format struct drm_i915_gem_timeline_fence. ``rsvd2`` Reserved, MBZ ``extensions`` Zero-terminated chain of extensions. For future extensions. See struct i915_user_extension.”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jç)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj�ubhŒ:”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KÝhj‹ubj¸)�”}”(hŒàstruct drm_i915_gem_execbuffer3 { __u32 ctx_id; __u32 engine_idx; __u64 batch_address; __u64 flags; __u32 rsvd1; __u32 fence_count; __u64 timeline_fences; __u64 rsvd2; __u64 extensions; };”h]”hŒàstruct drm_i915_gem_execbuffer3 { __u32 ctx_id; __u32 engine_idx; __u64 batch_address; __u64 flags; __u32 rsvd1; __u32 fence_count; __u64 timeline_fences; __u64 rsvd2; __u64 extensions; };”…”�”}”hj¬sbah}”(h]”h ]”h"]”h$]”h&]”jVjWuh1j·h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´Kßhj‹ubhÝ)�”}”(hŒ **Members**”h]”jç)�”}”(hj½h]”hŒMembers”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´Këhj‹ubj/)�”}”(hhh]”(j4)�”}”(hŒG``ctx_id`` Context id Only contexts with user engine map are allowed. ”h]”(j:)�”}”(hŒ ``ctx_id``”h]”jì)�”}”(hjÜh]”hŒctx_id”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KåhjÖubjK)�”}”(hhh]”(hÝ)�”}”(hŒ Context id”h]”hŒ Context id”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KãhjòubhÝ)�”}”(hŒ/Only contexts with user engine map are allowed.”h]”hŒ/Only contexts with user engine map are allowed.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jñh´Kåhjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³jñh´KåhjÓubj4)�”}”(hŒe``engine_idx`` Engine index An index in the user engine map of the context specified by **ctx_id**. ”h]”(j:)�”}”(hŒ``engine_idx``”h]”jì)�”}”(hj$h]”hŒ engine_idx”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´KìhjubjK)�”}”(hhh]”(hÝ)�”}”(hŒ Engine index”h]”hŒ Engine index”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´Kêhj:ubhÝ)�”}”(hŒGAn index in the user engine map of the context specified by **ctx_id**.”h]”(hŒhj±ubah}”(h]”h ]”(jQjReh"]”h$]”h&]”jVjWuh1j8hj‘h²hh³j¢h´Káubeh}”(h]”h ]”h"]”h$]”h&]”jVjWj^ˆuh1jj_j`hj�h²hh³j¢h´Káubah}”(h]”jˆah ]”(jdjeeh"]”h$]”h&]”jiˆjj)jkhuh1j h³j¢h´KáhjŠh²hubjm)�”}”(hhh]”hÝ)�”}”(hŒ9Extension to make the object private to the specified VM.”h]”hŒ9Extension to make the object private to the specified VM.”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´MhjÔh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jlhjŠh²hh³j¢h´Káubeh}”(h]”h ]”(j‰Œstruct”eh"]”h$]”h&]”jŽj‰j�jïj�jïj‘‰j’‰j“‰uh1jh²hhjÃh³jáh´Nubj•)�”}”(hX5**Definition**:: struct drm_i915_gem_create_ext_vm_private { #define I915_GEM_CREATE_EXT_VM_PRIVATE 2; struct i915_user_extension base; __u32 vm_id; }; **Members** ``base`` Extension link. See struct i915_user_extension. ``vm_id`` Id of the VM to which the object is private”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jç)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj÷ubhŒ:”…”�”}”(hj÷h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´Mhjóubj¸)�”}”(hŒ—struct drm_i915_gem_create_ext_vm_private { #define I915_GEM_CREATE_EXT_VM_PRIVATE 2; struct i915_user_extension base; __u32 vm_id; };”h]”hŒ—struct drm_i915_gem_create_ext_vm_private { #define I915_GEM_CREATE_EXT_VM_PRIVATE 2; struct i915_user_extension base; __u32 vm_id; };”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jVjWuh1j·h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´MhjóubhÝ)�”}”(hŒ **Members**”h]”jç)�”}”(hj%h]”hŒMembers”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´M"hjóubj/)�”}”(hhh]”(j4)�”}”(hŒ9``base`` Extension link. See struct i915_user_extension. ”h]”(j:)�”}”(hŒ``base``”h]”jì)�”}”(hjDh]”hŒbase”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´Mhj>ubjK)�”}”(hhh]”hÝ)�”}”(hŒ/Extension link. See struct i915_user_extension.”h]”hŒ/Extension link. See struct i915_user_extension.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jYh´MhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jJhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³jYh´Mhj;ubj4)�”}”(hŒ5``vm_id`` Id of the VM to which the object is private”h]”(j:)�”}”(hŒ ``vm_id``”h]”jì)�”}”(hj}h]”hŒvm_id”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j9h³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´M hjwubjK)�”}”(hhh]”hÝ)�”}”(hŒ+Id of the VM to which the object is private”h]”hŒ+Id of the VM to which the object is private”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´M!hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jJhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j3h³j’h´M hj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j.hjóubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j”hjÃh²hh³jáh´NubhÝ)�”}”(hŒ**Description**”h]”jç)�”}”(hjÀh]”hŒ Description”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´M$hjÃh²hubhÝ)�”}”(hŒ#See struct drm_i915_gem_create_ext.”h]”hŒ#See struct drm_i915_gem_create_ext.”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/rfc/i915_vm_bind:245: ./Documentation/gpu/rfc/i915_vm_bind.h”h´MhjÃh²hubeh}”(h]”Œ vm-bind-uapi”ah ]”h"]”Œ vm_bind uapi”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kóubeh}”(h]”Œ)i915-vm-bind-feature-design-and-use-cases”ah ]”h"]”Œ)i915 vm_bind feature design and use cases”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”(Œvm_bind dma_resv usage”]”jaŒ#shared virtual memory (svm) support”]”jŸaŒ evictable page table allocations”]”jyaŒuser/memory fence”]”j8auŒrefids”}”(jà]”jÖaj¹]”j¯auŒnameids”}”(jòjïj jjµj²jNjKjƒj€jOjLj™j–jÛj/jjjÀj½jÐjÍj¡jHjÈjÅj÷jôjjjEjBjljij’j‰j¸j¯jêjçjùjàjÏj¹uŒ nametypes”}”(jò‰j ‰jµ‰jN‰jƒ‰jO‰j™‰jÛ‰j‰jÀ‰jЉj¡‰jȉj÷‰j‰jE‰jl‰j’‰j¸‰jê‰jùˆjψuh}”(jïh·jhËj²j‘jKj¸j€jQjLj†j–jRj/jœjjßj½jjÍjjHjajÅj¤jôjÓjjújBj!jijHj‰joj¯j•jçjÃjàjâj¹jºjj jÿj j j j j%jˆj�uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”(hŒsystem_message”“”)�”}”(hhh]”hÝ)�”}”(hhh]”hŒ@Hyperlink target "i915-param-vm-bind-version" is not referenced.”…”�”}”hj‹sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÜhjˆubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”jáŒline”Kuh1j†ubj‡)�”}”(hhh]”hÝ)�”}”(hhh]”hŒFHyperlink target "i915-vm-create-flags-use-vm-bind" is not referenced.”…”�”}”hj¦sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÜhj£ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j Œsource”jáŒline”Kuh1j†ubeŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.