sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget /translations/zh_CN/gpu/xe/xe_mmmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/zh_TW/gpu/xe/xe_mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/it_IT/gpu/xe/xe_mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/ja_JP/gpu/xe/xe_mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/ko_KR/gpu/xe/xe_mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/sp_SP/gpu/xe/xe_mmmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h*SPDX-License-Identifier: (GPL-2.0+ OR MIT)h]h*SPDX-License-Identifier: (GPL-2.0+ OR MIT)}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh:/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm.rsthKubhsection)}(hhh](htitle)}(hMemory Managementh]hMemory Management}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h BO managementh]h BO management}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhNhNubh paragraph)}(h8TTM manages (placement, eviction, etc...) all BOs in Xe.h]h8TTM manages (placement, eviction, etc...) all BOs in Xe.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhK hhubeh}(h] bo-managementah ]h"] bo managementah$]h&]uh1hhhhhhNhNubh)}(hhh](h)}(h BO creationh]h BO creation}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhNhNubh)}(hCreate a chunk of memory which can be used by the GPU. Placement rules (sysmem or vram region) passed in upon creation. TTM handles placement of BO and can trigger eviction of other BOs to make space for the new BO.h]hCreate a chunk of memory which can be used by the GPU. Placement rules (sysmem or vram region) passed in upon creation. TTM handles placement of BO and can trigger eviction of other BOs to make space for the new BO.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhhubh)}(hhh](h)}(h Kernel BOsh]h Kernel BOs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(hXA kernel BO is created as part of driver load (e.g. uC firmware images, GuC ADS, etc...) or a BO created as part of a user operation which requires a kernel BO (e.g. engine state, memory for page tables, etc...). These BOs are typically mapped in the GGTT (any kernel BOs aside memory for page tables are in the GGTT), are pinned (can't move or be evicted at runtime), have a vmap (Xe can access the memory via xe_map layer) and have contiguous physical memory.h]hXA kernel BO is created as part of driver load (e.g. uC firmware images, GuC ADS, etc...) or a BO created as part of a user operation which requires a kernel BO (e.g. engine state, memory for page tables, etc...). These BOs are typically mapped in the GGTT (any kernel BOs aside memory for page tables are in the GGTT), are pinned (can’t move or be evicted at runtime), have a vmap (Xe can access the memory via xe_map layer) and have contiguous physical memory.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjubh)}(h?More details of why kernel BOs are pinned and contiguous below.h]h?More details of why kernel BOs are pinned and contiguous below.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhK!hjubeh}(h] kernel-bosah ]h"] kernel bosah$]h&]uh1hhhubh)}(hhh](h)}(hUser BOsh]hUser BOs}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhNhNubh)}(hXA user BO is created via the DRM_IOCTL_XE_GEM_CREATE IOCTL. Once it is created the BO can be mmap'd (via DRM_IOCTL_XE_GEM_MMAP_OFFSET) for user access and it can be bound for GPU access (via DRM_IOCTL_XE_VM_BIND). All user BOs are evictable and user BOs are never pinned by Xe. The allocation of the backing store can be deferred from creation time until first use which is either mmap, bind, or pagefault.h]hXA user BO is created via the DRM_IOCTL_XE_GEM_CREATE IOCTL. Once it is created the BO can be mmap’d (via DRM_IOCTL_XE_GEM_MMAP_OFFSET) for user access and it can be bound for GPU access (via DRM_IOCTL_XE_VM_BIND). All user BOs are evictable and user BOs are never pinned by Xe. The allocation of the backing store can be deferred from creation time until first use which is either mmap, bind, or pagefault.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhK&hjJubh)}(hhh](h)}(h Private BOsh]h Private BOs}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhNhNubh)}(hXbA private BO is a user BO created with a valid VM argument passed into the create IOCTL. If a BO is private it cannot be exported via prime FD and mappings can only be created for the BO within the VM it is tied to. Lastly, the BO dma-resv slots / lock point to the VM's dma-resv slots / lock (all private BOs to a VM share common dma-resv slots / lock).h]hXdA private BO is a user BO created with a valid VM argument passed into the create IOCTL. If a BO is private it cannot be exported via prime FD and mappings can only be created for the BO within the VM it is tied to. Lastly, the BO dma-resv slots / lock point to the VM’s dma-resv slots / lock (all private BOs to a VM share common dma-resv slots / lock).}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhK0hjjubeh}(h] private-bosah ]h"] private bosah$]h&]uh1hhjJubh)}(hhh](h)}(h External BOsh]h External BOs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(hXAn external BO is a user BO created with a NULL VM argument passed into the create IOCTL. An external BO can be shared with different UMDs / devices via prime FD and the BO can be mapped into multiple VMs. An external BO has its own unique dma-resv slots / lock. An external BO will be in an array of all VMs which has a mapping of the BO. This allows VMs to lookup and lock all external BOs mapped in the VM as needed.h]hXAn external BO is a user BO created with a NULL VM argument passed into the create IOCTL. An external BO can be shared with different UMDs / devices via prime FD and the BO can be mapped into multiple VMs. An external BO has its own unique dma-resv slots / lock. An external BO will be in an array of all VMs which has a mapping of the BO. This allows VMs to lookup and lock all external BOs mapped in the VM as needed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhK9hjubeh}(h] external-bosah ]h"] external bosah$]h&]uh1hhjJubh)}(hhh](h)}(h BO placementh]h BO placement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(huWhen a user BO is created, a mask of valid placements is passed indicating which memory regions are considered valid.h]huWhen a user BO is created, a mask of valid placements is passed indicating which memory regions are considered valid.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKChjubh)}(hKThe memory region information is available via query uAPI (TODO: add link).h]hKThe memory region information is available via query uAPI (TODO: add link).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKFhjubeh}(h] bo-placementah ]h"] bo placementah$]h&]uh1hhjJubeh}(h]user-bosah ]h"]user bosah$]h&]uh1hhhubeh}(h] bo-creationah ]h"] bo creationah$]h&]uh1hhhhhhNhNubh)}(hhh](h)}(h BO validationh]h BO validation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(hX,BO validation (ttm_bo_validate) refers to ensuring a BO has a valid placement. If a BO was swapped to temporary storage, a validation call will trigger a move back to a valid (location where GPU can access BO) placement. Validation of a BO may evict other BOs to make room for the BO being validated.h]hX,BO validation (ttm_bo_validate) refers to ensuring a BO has a valid placement. If a BO was swapped to temporary storage, a validation call will trigger a move back to a valid (location where GPU can access BO) placement. Validation of a BO may evict other BOs to make room for the BO being validated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKKhjubeh}(h] bo-validationah ]h"] bo validationah$]h&]uh1hhhhhhNhNubh)}(hhh](h)}(hBO eviction / movingh]hBO eviction / moving}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hNhNubh)}(hAll eviction (or in other words, moving a BO from one memory location to another) is routed through TTM with a callback into Xe.h]hAll eviction (or in other words, moving a BO from one memory location to another) is routed through TTM with a callback into Xe.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKThj)ubh)}(hhh](h)}(hRuntime evictionh]hRuntime eviction}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhNhNubh)}(hRuntime evictions refers to during normal operations where TTM decides it needs to move a BO. Typically this is because TTM needs to make room for another BO and the evicted BO is first BO on LRU list that is not locked.h]hRuntime evictions refers to during normal operations where TTM decides it needs to move a BO. Typically this is because TTM needs to make room for another BO and the evicted BO is first BO on LRU list that is not locked.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKZhjIubh)}(hXAn example of this is a new BO which can only be placed in VRAM but there is not space in VRAM. There could be multiple BOs which have sysmem and VRAM placement rules which currently reside in VRAM, TTM trigger a will move of one (or multiple) of these BO(s) until there is room in VRAM to place the new BO. The evicted BO(s) are valid but still need new bindings before the BO used again (exec or compute mode rebind worker).h]hXAn example of this is a new BO which can only be placed in VRAM but there is not space in VRAM. There could be multiple BOs which have sysmem and VRAM placement rules which currently reside in VRAM, TTM trigger a will move of one (or multiple) of these BO(s) until there is room in VRAM to place the new BO. The evicted BO(s) are valid but still need new bindings before the BO used again (exec or compute mode rebind worker).}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhK^hjIubh)}(hX+Another example would be, TTM can't find a BO to evict which has another valid placement. In this case TTM will evict one (or multiple) unlocked BO(s) to a temporary unreachable (invalid) placement. The evicted BO(s) are invalid and before next use need to be moved to a valid placement and rebound.h]hX-Another example would be, TTM can’t find a BO to evict which has another valid placement. In this case TTM will evict one (or multiple) unlocked BO(s) to a temporary unreachable (invalid) placement. The evicted BO(s) are invalid and before next use need to be moved to a valid placement and rebound.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKehjIubh)}(h]In both cases, moves of these BOs are scheduled behind the fences in the BO's dma-resv slots.h]h_In both cases, moves of these BOs are scheduled behind the fences in the BO’s dma-resv slots.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKjhjIubh)}(h`WW locking tries to ensures if 2 VMs use 51% of the memory forward progress is made on both VMs.h]h`WW locking tries to ensures if 2 VMs use 51% of the memory forward progress is made on both VMs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKmhjIubh)}(hRuntime eviction uses per a GT migration engine (TODO: link to migration engine doc) to do a GPU memcpy from one location to another.h]hRuntime eviction uses per a GT migration engine (TODO: link to migration engine doc) to do a GPU memcpy from one location to another.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKphjIubeh}(h]runtime-evictionah ]h"]runtime evictionah$]h&]uh1hhj)ubh)}(hhh](h)}(hRebinds after runtime evictionh]hRebinds after runtime eviction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(hXWhen BOs are moved, every mapping (VMA) of the BO needs to rebound before the BO is used again. Every VMA is added to an evicted list of its VM when the BO is moved. This is safe because of the VM locking structure (TODO: link to VM locking doc). On the next use of a VM (exec or compute mode rebind worker) the evicted VMA list is checked and rebinds are triggered. In the case of faulting VM, the rebind is done in the page fault handler.h]hXWhen BOs are moved, every mapping (VMA) of the BO needs to rebound before the BO is used again. Every VMA is added to an evicted list of its VM when the BO is moved. This is safe because of the VM locking structure (TODO: link to VM locking doc). On the next use of a VM (exec or compute mode rebind worker) the evicted VMA list is checked and rebinds are triggered. In the case of faulting VM, the rebind is done in the page fault handler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKvhjubeh}(h]rebinds-after-runtime-evictionah ]h"]rebinds after runtime evictionah$]h&]uh1hhj)ubh)}(hhh](h)}(h!Suspend / resume eviction of VRAMh]h!Suspend / resume eviction of VRAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(hDuring device suspend / resume VRAM may lose power which means the contents of VRAM's memory is blown away. Thus BOs present in VRAM at the time of suspend must be moved to sysmem in order for their contents to be saved.h]hDuring device suspend / resume VRAM may lose power which means the contents of VRAM’s memory is blown away. Thus BOs present in VRAM at the time of suspend must be moved to sysmem in order for their contents to be saved.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjubh)}(hA simple TTM call (ttm_resource_manager_evict_all) can move all non-pinned (user) BOs to sysmem. External BOs that are pinned need to be manually evicted with a simple loop + xe_bo_evict call. It gets a little trickier with kernel BOs.h]hA simple TTM call (ttm_resource_manager_evict_all) can move all non-pinned (user) BOs to sysmem. External BOs that are pinned need to be manually evicted with a simple loop + xe_bo_evict call. It gets a little trickier with kernel BOs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjubh)}(hSome kernel BOs are used by the GT migration engine to do moves, thus we can't move all of the BOs via the GT migration engine. For simplity, use a TTM memcpy (CPU) to move any kernel (pinned) BO on either suspend or resume.h]hSome kernel BOs are used by the GT migration engine to do moves, thus we can’t move all of the BOs via the GT migration engine. For simplity, use a TTM memcpy (CPU) to move any kernel (pinned) BO on either suspend or resume.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjubh)}(hX Some kernel BOs need to be restored to the exact same physical location. TTM makes this rather easy but the caveat is the memory must be contiguous. Again for simplity, we enforce that all kernel (pinned) BOs are contiguous and restored to the same physical location.h]hX Some kernel BOs need to be restored to the exact same physical location. TTM makes this rather easy but the caveat is the memory must be contiguous. Again for simplity, we enforce that all kernel (pinned) BOs are contiguous and restored to the same physical location.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjubh)}(h?Pinned external BOs in VRAM are restored on resume via the GPU.h]h?Pinned external BOs in VRAM are restored on resume via the GPU.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjubeh}(h]suspend-resume-eviction-of-vramah ]h"]!suspend / resume eviction of vramah$]h&]uh1hhj)ubh)}(hhh](h)}(hRebinds after suspend / resumeh]hRebinds after suspend / resume}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhNhNubh)}(hMost kernel BOs have GGTT mappings which must be restored during the resume process. All user BOs are rebound after validation on their next use.h]hMost kernel BOs have GGTT mappings which must be restored during the resume process. All user BOs are rebound after validation on their next use.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjHubeh}(h]rebinds-after-suspend-resumeah ]h"]rebinds after suspend / resumeah$]h&]uh1hhj)ubeh}(h]bo-eviction-movingah ]h"]bo eviction / movingah$]h&]uh1hhhhhhNhNubh)}(hhh](h)}(h Future workh]h Future work}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhNhNubh)}(hTrim the list of BOs which is saved / restored via TTM memcpy on suspend / resume. All we really need to save / restore via TTM memcpy is the memory required for the GuC to load and the memory for the GT migrate engine to operate.h]hTrim the list of BOs which is saved / restored via TTM memcpy on suspend / resume. All we really need to save / restore via TTM memcpy is the memory required for the GuC to load and the memory for the GT migrate engine to operate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjxubh)}(hXDo not require kernel BOs to be contiguous in physical memory / restored to the same physical address on resume. In all likelihood the only memory that needs to be restored to the same physical address is memory used for page tables. All of that memory is allocated 1 page at time so the contiguous requirement isn't needed. Some work on the vmap code would need to be done if kernel BOs are not contiguous too.h]hXDo not require kernel BOs to be contiguous in physical memory / restored to the same physical address on resume. In all likelihood the only memory that needs to be restored to the same physical address is memory used for page tables. All of that memory is allocated 1 page at time so the contiguous requirement isn’t needed. Some work on the vmap code would need to be done if kernel BOs are not contiguous too.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjxubh)}(hMake some kernel BO evictable rather than pinned. An example of this would be engine state, in all likelihood if the dma-slots of these BOs where properly used rather than pinning we could safely evict + rebind these BOs as needed.h]hMake some kernel BO evictable rather than pinned. An example of this would be engine state, in all likelihood if the dma-slots of these BOs where properly used rather than pinning we could safely evict + rebind these BOs as needed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjxubh)}(hSome kernel BOs do not need to be restored on resume (e.g. GuC ADS as that is repopulated on resume), add flag to mark such objects as no save / restore.h]hSome kernel BOs do not need to be restored on resume (e.g. GuC ADS as that is repopulated on resume), add flag to mark such objects as no save / restore.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhjxubeh}(h] future-workah ]h"] future workah$]h&]uh1hhhhhhNhNubh)}(hhh](h)}(hGGTTh]hGGTT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK ubh)}(hX?Xe GGTT implements the support for a Global Virtual Address space that is used for resources that are accessible to privileged (i.e. kernel-mode) processes, and not tied to a specific user-level process. For example, the Graphics micro-Controller (GuC) and Display Engine (if present) utilize this Global address space.h]hX?Xe GGTT implements the support for a Global Virtual Address space that is used for resources that are accessible to privileged (i.e. kernel-mode) processes, and not tied to a specific user-level process. For example, the Graphics micro-Controller (GuC) and Display Engine (if present) utilize this Global address space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:13: ./drivers/gpu/drm/xe/xe_ggtt.chK%hjhhubh)}(hThe Global GTT (GGTT) translates from the Global virtual address to a physical address that can be accessed by HW. The GGTT is a flat, single-level table.h]hThe Global GTT (GGTT) translates from the Global virtual address to a physical address that can be accessed by HW. The GGTT is a flat, single-level table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:13: ./drivers/gpu/drm/xe/xe_ggtt.chK+hjhhubh)}(hXXe implements a simplified version of the GGTT specifically managing only a certain range of it that goes from the Write Once Protected Content Memory (WOPCM) Layout to a predefined GUC_GGTT_TOP. This approach avoids complications related to the GuC (Graphics Microcontroller) hardware limitations. The GuC address space is limited on both ends of the GGTT, because the GuC shim HW redirects accesses to those addresses to other HW areas instead of going through the GGTT. On the bottom end, the GuC can't access offsets below the WOPCM size, while on the top side the limit is fixed at GUC_GGTT_TOP. To keep things simple, instead of checking each object to see if they are accessed by GuC or not, we just exclude those areas from the allocator. Additionally, to simplify the driver load, we use the maximum WOPCM size in this logic instead of the programmed one, so we don't need to wait until the actual size to be programmed is determined (which requires FW fetch) before initializing the GGTT. These simplifications might waste space in the GGTT (about 20-25 MBs depending on the platform) but we can live with this. Another benefit of this is the GuC bootrom can't access anything below the WOPCM max size so anything the bootrom needs to access (e.g. a RSA key) needs to be placed in the GGTT above the WOPCM max size. Starting the GGTT allocations above the WOPCM max give us the correct placement for free.h]hXXe implements a simplified version of the GGTT specifically managing only a certain range of it that goes from the Write Once Protected Content Memory (WOPCM) Layout to a predefined GUC_GGTT_TOP. This approach avoids complications related to the GuC (Graphics Microcontroller) hardware limitations. The GuC address space is limited on both ends of the GGTT, because the GuC shim HW redirects accesses to those addresses to other HW areas instead of going through the GGTT. On the bottom end, the GuC can’t access offsets below the WOPCM size, while on the top side the limit is fixed at GUC_GGTT_TOP. To keep things simple, instead of checking each object to see if they are accessed by GuC or not, we just exclude those areas from the allocator. Additionally, to simplify the driver load, we use the maximum WOPCM size in this logic instead of the programmed one, so we don’t need to wait until the actual size to be programmed is determined (which requires FW fetch) before initializing the GGTT. These simplifications might waste space in the GGTT (about 20-25 MBs depending on the platform) but we can live with this. Another benefit of this is the GuC bootrom can’t access anything below the WOPCM max size so anything the bootrom needs to access (e.g. a RSA key) needs to be placed in the GGTT above the WOPCM max size. Starting the GGTT allocations above the WOPCM max give us the correct placement for free.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:13: ./drivers/gpu/drm/xe/xe_ggtt.chK.hjhhubh)}(hhh](h)}(hGGTT Internal APIh]hGGTT Internal API}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlexe_ggtt (C struct) c.xe_ggtthNtauh1jhj hhhNhNubhdesc)}(hhh](hdesc_signature)}(hxe_ggtth]hdesc_signature_line)}(hstruct xe_ggtth](hdesc_sig_keyword)}(hstructh]hstruct}(hj@hhhNhNubah}(h]h ]kah"]h$]h&]uh1j>hj:hhh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKubhdesc_sig_space)}(h h]h }(hjRhhhNhNubah}(h]h ]wah"]h$]h&]uh1jPhj:hhhjOhKubh desc_name)}(hxe_ggtth]h desc_sig_name)}(hj6h]hxe_ggtt}(hjihhhNhNubah}(h]h ]nah"]h$]h&]uh1jghjcubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jahj:hhhjOhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1j8sphinx_line_type declaratorhj4hhhjOhKubah}(h]j+ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j2hjOhKhj/hhubh desc_content)}(hhh]h)}(hMain GGTT structh]hMain GGTT struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj/hhhjOhKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1j-hhhj hNhNubh container)}(hX**Definition**:: struct xe_ggtt { struct xe_tile *tile; u64 start; u64 size; #define XE_GGTT_FLAGS_64K BIT(0); #define XE_GGTT_FLAGS_ONLINE BIT(1); unsigned int flags; struct xe_bo *scratch; struct mutex lock; u64 __iomem *gsm; const struct xe_ggtt_pt_ops *pt_ops; struct drm_mm mm; unsigned int access_count; struct workqueue_struct *wq; }; **Members** ``tile`` Back pointer to tile where this GGTT belongs ``start`` Start offset of GGTT ``size`` Total usable size of this GGTT ``flags`` Flags for this GGTT Acceptable flags: - ``XE_GGTT_FLAGS_64K`` - if PTE size is 64K. Otherwise, regular is 4K. - ``XE_GGTT_FLAGS_ONLINE`` - is GGTT online, protected by ggtt->lock after init ``scratch`` Internal object allocation used as a scratch page ``lock`` Mutex lock to protect GGTT data ``gsm`` The iomem pointer to the actual location of the translation table located in the GSM for easy PTE manipulation ``pt_ops`` Page Table operations per platform ``mm`` The memory manager used to manage individual GGTT allocations ``access_count`` counts GGTT writes ``wq`` Dedicated unordered work queue to process node removalsh](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKhjubh literal_block)}(hXystruct xe_ggtt { struct xe_tile *tile; u64 start; u64 size; #define XE_GGTT_FLAGS_64K BIT(0); #define XE_GGTT_FLAGS_ONLINE BIT(1); unsigned int flags; struct xe_bo *scratch; struct mutex lock; u64 __iomem *gsm; const struct xe_ggtt_pt_ops *pt_ops; struct drm_mm mm; unsigned int access_count; struct workqueue_struct *wq; };h]hXystruct xe_ggtt { struct xe_tile *tile; u64 start; u64 size; #define XE_GGTT_FLAGS_64K BIT(0); #define XE_GGTT_FLAGS_ONLINE BIT(1); unsigned int flags; struct xe_bo *scratch; struct mutex lock; u64 __iomem *gsm; const struct xe_ggtt_pt_ops *pt_ops; struct drm_mm mm; unsigned int access_count; struct workqueue_struct *wq; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK(hjubhdefinition_list)}(hhh](hdefinition_list_item)}(h6``tile`` Back pointer to tile where this GGTT belongs h](hterm)}(h``tile``h]hliteral)}(hjh]htile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKhjubh definition)}(hhh]h)}(h,Back pointer to tile where this GGTT belongsh]h,Back pointer to tile where this GGTT belongs}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj2ubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj ubj)}(h``start`` Start offset of GGTT h](j)}(h ``start``h]j)}(hjUh]hstart}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKhjOubj1)}(hhh]h)}(hStart offset of GGTTh]hStart offset of GGTT}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhKhjkubah}(h]h ]h"]h$]h&]uh1j0hjOubeh}(h]h ]h"]h$]h&]uh1jhjjhKhj ubj)}(h(``size`` Total usable size of this GGTT h](j)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKhjubj1)}(hhh]h)}(hTotal usable size of this GGTTh]hTotal usable size of this GGTT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(h``flags`` Flags for this GGTT Acceptable flags: - ``XE_GGTT_FLAGS_64K`` - if PTE size is 64K. Otherwise, regular is 4K. - ``XE_GGTT_FLAGS_ONLINE`` - is GGTT online, protected by ggtt->lock after init h](j)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK'hjubj1)}(hhh](h)}(hFlags for this GGTT Acceptable flags: - ``XE_GGTT_FLAGS_64K`` - if PTE size is 64K. Otherwise, regular is 4K. - ``XE_GGTT_FLAGS_ONLINE`` - is GGTT online, protected by ggtt->lockh](h(Flags for this GGTT Acceptable flags: - }(hjhhhNhNubj)}(h``XE_GGTT_FLAGS_64K``h]hXE_GGTT_FLAGS_64K}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh3 - if PTE size is 64K. Otherwise, regular is 4K. - }(hjhhhNhNubj)}(h``XE_GGTT_FLAGS_ONLINE``h]hXE_GGTT_FLAGS_ONLINE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh* - is GGTT online, protected by ggtt->lock}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK#hjubh block_quote)}(h after init h]h)}(h after inith]h after init}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK'hjubah}(h]h ]h"]h$]h&]uh1jhjhK'hjubeh}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhK'hj ubj)}(h>``scratch`` Internal object allocation used as a scratch page h](j)}(h ``scratch``h]j)}(hj?h]hscratch}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK*hj9ubj1)}(hhh]h)}(h1Internal object allocation used as a scratch pageh]h1Internal object allocation used as a scratch page}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThK*hjUubah}(h]h ]h"]h$]h&]uh1j0hj9ubeh}(h]h ]h"]h$]h&]uh1jhjThK*hj ubj)}(h)``lock`` Mutex lock to protect GGTT data h](j)}(h``lock``h]j)}(hjxh]hlock}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK,hjrubj1)}(hhh]h)}(hMutex lock to protect GGTT datah]hMutex lock to protect GGTT data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK,hjubah}(h]h ]h"]h$]h&]uh1j0hjrubeh}(h]h ]h"]h$]h&]uh1jhjhK,hj ubj)}(hw``gsm`` The iomem pointer to the actual location of the translation table located in the GSM for easy PTE manipulation h](j)}(h``gsm``h]j)}(hjh]hgsm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK0hjubj1)}(hhh]h)}(hnThe iomem pointer to the actual location of the translation table located in the GSM for easy PTE manipulationh]hnThe iomem pointer to the actual location of the translation table located in the GSM for easy PTE manipulation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK/hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhK0hj ubj)}(h.``pt_ops`` Page Table operations per platform h](j)}(h ``pt_ops``h]j)}(hjh]hpt_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK3hjubj1)}(hhh]h)}(h"Page Table operations per platformh]h"Page Table operations per platform}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK3hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhK3hj ubj)}(hE``mm`` The memory manager used to manage individual GGTT allocations h](j)}(h``mm``h]j)}(hj$h]hmm}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK5hjubj1)}(hhh]h)}(h=The memory manager used to manage individual GGTT allocationsh]h=The memory manager used to manage individual GGTT allocations}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hK5hj:ubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhj9hK5hj ubj)}(h$``access_count`` counts GGTT writes h](j)}(h``access_count``h]j)}(hj]h]h access_count}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK7hjWubj1)}(hhh]h)}(hcounts GGTT writesh]hcounts GGTT writes}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhK7hjsubah}(h]h ]h"]h$]h&]uh1j0hjWubeh}(h]h ]h"]h$]h&]uh1jhjrhK7hj ubj)}(h>``wq`` Dedicated unordered work queue to process node removalsh](j)}(h``wq``h]j)}(hjh]hwq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK8hjubj1)}(hhh]h)}(h7Dedicated unordered work queue to process node removalsh]h7Dedicated unordered work queue to process node removals}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK9hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hj ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKhjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj$hKubjb)}(hxe_ggtt_pt_opsh]jh)}(hjh]hxe_ggtt_pt_ops}(hj7hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj3ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhj$hKubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhj$hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j2hj$hKhj hhubj)}(hhh]h)}(hDGGTT Page table operations Which can vary from platform to platform.h]hDGGTT Page table operations Which can vary from platform to platform.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKBhjVhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj$hKubeh}(h]h ](jstructeh"]h$]h&]jjjjqjjqjjjuh1j-hhhj hNhNubj)}(hX|**Definition**:: struct xe_ggtt_pt_ops { u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index); xe_ggtt_set_pte_fn ggtt_set_pte; u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr); }; **Members** ``pte_encode_flags`` Encode PTE flags for a given BO ``ggtt_set_pte`` Directly write into GGTT's PTE ``ggtt_get_pte`` Directly read from GGTT's PTEh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh:}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKFhjuubj)}(hstruct xe_ggtt_pt_ops { u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index); xe_ggtt_set_pte_fn ggtt_set_pte; u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr); };h]hstruct xe_ggtt_pt_ops { u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index); xe_ggtt_set_pte_fn ggtt_set_pte; u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr); };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKHhjuubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKNhjuubj )}(hhh](j)}(h5``pte_encode_flags`` Encode PTE flags for a given BO h](j)}(h``pte_encode_flags``h]j)}(hjh]hpte_encode_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKGhjubj1)}(hhh]h)}(hEncode PTE flags for a given BOh]hEncode PTE flags for a given BO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKGhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhKGhjubj)}(h0``ggtt_set_pte`` Directly write into GGTT's PTE h](j)}(h``ggtt_set_pte``h]j)}(hjh]h ggtt_set_pte}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKJhjubj1)}(hhh]h)}(hDirectly write into GGTT's PTEh]h Directly write into GGTT’s PTE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKJhj ubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhj hKJhjubj)}(h.``ggtt_get_pte`` Directly read from GGTT's PTEh](j)}(h``ggtt_get_pte``h]j)}(hj8 h]h ggtt_get_pte}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6 ubah}(h]h ]h"]h$]h&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKLhj2 ubj1)}(hhh]h)}(hDirectly read from GGTT's PTEh]hDirectly read from GGTT’s PTE}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKMhjN ubah}(h]h ]h"]h$]h&]uh1j0hj2 ubeh}(h]h ]h"]h$]h&]uh1jhjM hKLhjubeh}(h]h ]h"]h$]h&]uh1j hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_node (C struct)c.xe_ggtt_nodehNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h xe_ggtt_nodeh]j9)}(hstruct xe_ggtt_nodeh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hKubjb)}(h xe_ggtt_nodeh]jh)}(hj h]h xe_ggtt_node}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj hhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j2hj hKhj hhubj)}(hhh]h)}(hA node in GGTT.h]hA node in GGTT.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKFhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](jstructeh"]h$]h&]jjjj jj jjjuh1j-hhhj hNhNubj)}(hX**Definition**:: struct xe_ggtt_node { struct xe_ggtt *ggtt; struct drm_mm_node base; struct work_struct delayed_removal_work; bool invalidate_on_remove; }; **Members** ``ggtt`` Back pointer to xe_ggtt where this region will be inserted at ``base`` A drm_mm_node ``delayed_removal_work`` The work struct for the delayed removal ``invalidate_on_remove`` If it needs invalidation upon removalh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKJhj ubj)}(hstruct xe_ggtt_node { struct xe_ggtt *ggtt; struct drm_mm_node base; struct work_struct delayed_removal_work; bool invalidate_on_remove; };h]hstruct xe_ggtt_node { struct xe_ggtt *ggtt; struct drm_mm_node base; struct work_struct delayed_removal_work; bool invalidate_on_remove; };}hj sbah}(h]h ]h"]h$]h&]hhuh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKLhj ubh)}(h **Members**h]j)}(hj" h]hMembers}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKShj ubj )}(hhh](j)}(hG``ggtt`` Back pointer to xe_ggtt where this region will be inserted at h](j)}(h``ggtt``h]j)}(hjA h]hggtt}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj? ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKNhj; ubj1)}(hhh]h)}(h=Back pointer to xe_ggtt where this region will be inserted ath]h=Back pointer to xe_ggtt where this region will be inserted at}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV hKNhjW ubah}(h]h ]h"]h$]h&]uh1j0hj; ubeh}(h]h ]h"]h$]h&]uh1jhjV hKNhj8 ubj)}(h``base`` A drm_mm_node h](j)}(h``base``h]j)}(hjz h]hbase}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKPhjt ubj1)}(hhh]h)}(h A drm_mm_nodeh]h A drm_mm_node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKPhj ubah}(h]h ]h"]h$]h&]uh1j0hjt ubeh}(h]h ]h"]h$]h&]uh1jhj hKPhj8 ubj)}(hA``delayed_removal_work`` The work struct for the delayed removal h](j)}(h``delayed_removal_work``h]j)}(hj h]hdelayed_removal_work}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKRhj ubj1)}(hhh]h)}(h'The work struct for the delayed removalh]h'The work struct for the delayed removal}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKRhj ubah}(h]h ]h"]h$]h&]uh1j0hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKRhj8 ubj)}(h>``invalidate_on_remove`` If it needs invalidation upon removalh](j)}(h``invalidate_on_remove``h]j)}(hj h]hinvalidate_on_remove}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKShj ubj1)}(hhh]h)}(h%If it needs invalidation upon removalh]h%If it needs invalidation upon removal}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKThj ubah}(h]h ]h"]h$]h&]uh1j0hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKShj8 ubeh}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(h**Description**h]j)}(hj/ h]h Description}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj- ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKWhj hhubh)}(hThis struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node insertion, reservation, or 'ballooning'. It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().h]hThis struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node insertion, reservation, or ‘ballooning’. It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKGhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_start (C function)c.xe_ggtt_starthNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h(u64 xe_ggtt_start (struct xe_ggtt *ggtt)h]j9)}(h'u64 xe_ggtt_start(struct xe_ggtt *ggtt)h](h)}(hhh]jh)}(hu64h]hu64}(hjp hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjm ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjr modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j xe_ggtt_startsbc.xe_ggtt_startasbuh1hhji hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhji hhhj hKubjb)}(h xe_ggtt_starth]jh)}(hj h]h xe_ggtt_start}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahji hhhj hKubhdesc_parameterlist)}(h(struct xe_ggtt *ggtt)h]hdesc_parameter)}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]j c.xe_ggtt_startasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hj ubjh)}(hggtth]hggtt}(hj& hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hji hhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhje hhhj hKubah}(h]j` ah ](jjeh"]h$]h&]jj)jhuh1j2hj hKhjb hhubj)}(hhh]h)}(hGet starting offset of GGTT.h]hGet starting offset of GGTT.}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjM hhubah}(h]h ]h"]h$]h&]uh1jhjb hhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjh jjh jjjuh1j-hhhj hNhNubj)}(hu**Parameters** ``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` **Return** Starting offset for this :c:type:`xe_ggtt`.h](h)}(h**Parameters**h]j)}(hjr h]h Parameters}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjl ubj )}(hhh]j)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hj h]hstruct xe_ggtt *ggtt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubj1)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hj h]j)}(hj h]hxe_ggtt}(hj hhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdoc gpu/xe/xe_mm refdomainjreftypetype refexplicitrefwarnj j )}j ]sb reftargetxe_ggttuh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j0hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubah}(h]h ]h"]h$]h&]uh1j hjl ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjl ubh)}(h+Starting offset for this :c:type:`xe_ggtt`.h](hStarting offset for this }(hj hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj h]hxe_ggtt}(hj hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj) hKhjl ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_size (C function)c.xe_ggtt_sizehNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h'u64 xe_ggtt_size (struct xe_ggtt *ggtt)h]j9)}(h&u64 xe_ggtt_size(struct xe_ggtt *ggtt)h](h)}(hhh]jh)}(hu64h]hu64}(hjW hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjT ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjY modnameN classnameNj j )}j ]j )}j xe_ggtt_sizesbc.xe_ggtt_sizeasbuh1hhjP hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKubjQ)}(h h]h }(hjy hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjP hhhjx hKubjb)}(h xe_ggtt_sizeh]jh)}(hju h]h xe_ggtt_size}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjP hhhjx hKubj )}(h(struct xe_ggtt *ggtt)h]j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]js c.xe_ggtt_sizeasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj ubjh)}(hggtth]hggtt}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hjP hhhjx hKubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjL hhhjx hKubah}(h]jG ah ](jjeh"]h$]h&]jj)jhuh1j2hjx hKhjI hhubj)}(hhh]h)}(hGet size of GGTT.h]hGet size of GGTT.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj$hhubah}(h]h ]h"]h$]h&]uh1jhjI hhhjx hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?jj?jjjuh1j-hhhj hNhNubj)}(hv**Parameters** ``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` **Return** Total usable size of this :c:type:`xe_ggtt`.h](h)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjCubj )}(hhh]j)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjhh]hstruct xe_ggtt *ggtt}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjbubj1)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hjh]j)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj}hKhjubah}(h]h ]h"]h$]h&]uh1hhj}hKhj~ubah}(h]h ]h"]h$]h&]uh1j0hjbubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj_ubah}(h]h ]h"]h$]h&]uh1j hjCubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjCubh)}(h,Total usable size of this :c:type:`xe_ggtt`.h](hTotal usable size of this }(hjhhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_alloc (C function)c.xe_ggtt_allochNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h5struct xe_ggtt * xe_ggtt_alloc (struct xe_tile *tile)h]j9)}(h3struct xe_ggtt *xe_ggtt_alloc(struct xe_tile *tile)h](j?)}(hjBh]hstruct}(hj%hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj!hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj2hKubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjDhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNj j )}j ]j )}j xe_ggtt_allocsbc.xe_ggtt_allocasbuh1hhj!hhhj2hKubjQ)}(h h]h }(hjehhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!hhhj2hKubj )}(hj h]h*}(hjshhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj!hhhj2hKubjb)}(h xe_ggtt_alloch]jh)}(hjbh]h xe_ggtt_alloc}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj!hhhj2hKubj )}(h(struct xe_tile *tile)h]j )}(hstruct xe_tile *tileh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(hxe_tileh]hxe_tile}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j`c.xe_ggtt_allocasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjubjh)}(htileh]htile}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hj!hhhj2hKubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhj2hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hj2hKhjhhubj)}(hhh]h)}(h-Allocate a GGTT for a given :c:type:`xe_tile`h](hAllocate a GGTT for a given }(hj hhhNhNubh)}(h:c:type:`xe_tile`h]j)}(hj*h]hxe_tile}(hj,hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]j`c.xe_ggtt_allocasbj xe_tileuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1j-hhhj hNhNubj)}(h**Parameters** ``struct xe_tile *tile`` :c:type:`xe_tile` **Description** Allocates a :c:type:`xe_ggtt` for a given tile. **Return** :c:type:`xe_ggtt` on success, or NULL when out of memory.h](h)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjaubj )}(hhh]j)}(h+``struct xe_tile *tile`` :c:type:`xe_tile` h](j)}(h``struct xe_tile *tile``h]j)}(hjh]hstruct xe_tile *tile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjubj1)}(hhh]h)}(h:c:type:`xe_tile`h]h)}(hjh]j)}(hjh]hxe_tile}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_tileuh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj}ubah}(h]h ]h"]h$]h&]uh1j hjaubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjaubh)}(h/Allocates a :c:type:`xe_ggtt` for a given tile.h](h Allocates a }(hjhhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjubh for a given tile.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjaubh)}(h **Return**h]j)}(hj%h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjaubh)}(h9:c:type:`xe_ggtt` on success, or NULL when out of memory.h](h)}(h:c:type:`xe_ggtt`h]j)}(hjAh]hxe_ggtt}(hjChhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj;ubh( on success, or NULL when out of memory.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hKhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_init_early (C function)c.xe_ggtt_init_earlyhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h-int xe_ggtt_init_early (struct xe_ggtt *ggtt)h]j9)}(h,int xe_ggtt_init_early(struct xe_ggtt *ggtt)h](hdesc_sig_keyword_type)}(hinth]hint}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMBubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMBubjb)}(hxe_ggtt_init_earlyh]jh)}(hxe_ggtt_init_earlyh]hxe_ggtt_init_early}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhjhMBubj )}(h(struct xe_ggtt *ggtt)h]j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.xe_ggtt_init_earlyasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjubjh)}(hggtth]hggtt}(hj"hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMBubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhMBubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1j2hjhMBhj~hhubj)}(hhh]h)}(hEarly GGTT initializationh]hEarly GGTT initialization}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMBhjIhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhMBubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdjjdjjjuh1j-hhhj hNhNubj)}(hX**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be initialized **Description** It allows to create new mappings usable by the GuC. Mappings are not usable by the HW engines, as it doesn't have scratch nor initial clear done to it yet. That will happen in the regular, non-early GGTT initialization. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMFhjhubj )}(hhh]j)}(hA``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be initialized h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjh]hstruct xe_ggtt *ggtt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMChjubj1)}(hhh]h)}(h'the :c:type:`xe_ggtt` to be initializedh](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjhMChjubh to be initialized}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjubah}(h]h ]h"]h$]h&]uh1j hjhubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMEhjhubh)}(hIt allows to create new mappings usable by the GuC. Mappings are not usable by the HW engines, as it doesn't have scratch nor initial clear done to it yet. That will happen in the regular, non-early GGTT initialization.h]hIt allows to create new mappings usable by the GuC. Mappings are not usable by the HW engines, as it doesn’t have scratch nor initial clear done to it yet. That will happen in the regular, non-early GGTT initialization.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMDhjhubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMIhjhubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMJhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j) xe_ggtt_node_remove (C function)c.xe_ggtt_node_removehNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hEvoid xe_ggtt_node_remove (struct xe_ggtt_node *node, bool invalidate)h]j9)}(hDvoid xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate)h](j)}(hvoidh]hvoid}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjfhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjehMubjb)}(hxe_ggtt_node_removeh]jh)}(hxe_ggtt_node_removeh]hxe_ggtt_node_remove}(hjxhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjtubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjShhhjehMubj )}(h,(struct xe_ggtt_node *node, bool invalidate)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jzsbc.xe_ggtt_node_removeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjubjh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hbool invalidateh](j)}(hboolh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(h invalidateh]h invalidate}(hj"hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjShhhjehMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjOhhhjehMubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1j2hjehMhjLhhubj)}(hhh]h)}(h-Remove a :c:type:`xe_ggtt_node` from the GGTTh](h Remove a }(hjLhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjVh]h xe_ggtt_node}(hjXhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]jc.xe_ggtt_node_removeasbj xe_ggtt_nodeuh1hhjLhKhjLubh from the GGTT}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjehMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j-hhhj hNhNubj)}(h**Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be removed ``bool invalidate`` if node needs invalidation upon removalh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubj )}(hhh](j)}(hG``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be removed h](j)}(h``struct xe_ggtt_node *node``h]j)}(hjh]hstruct xe_ggtt_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubj1)}(hhh]h)}(h(the :c:type:`xe_ggtt_node` to be removedh](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhjhMhjubh to be removed}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``bool invalidate`` if node needs invalidation upon removalh](j)}(h``bool invalidate``h]j)}(hjh]hbool invalidate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj ubj1)}(hhh]h)}(h'if node needs invalidation upon removalh]h'if node needs invalidation upon removal}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'ubah}(h]h ]h"]h$]h&]uh1j0hj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_init (C function)c.xe_ggtt_inithNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h'int xe_ggtt_init (struct xe_ggtt *ggtt)h]j9)}(h&int xe_ggtt_init(struct xe_ggtt *ggtt)h](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjzhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjghhhjyhMubjb)}(h xe_ggtt_inith]jh)}(h xe_ggtt_inith]h xe_ggtt_init}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjghhhjyhMubj )}(h(struct xe_ggtt *ggtt)h]j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.xe_ggtt_initasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjubjh)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjghhhjyhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjchhhjyhMubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1j2hjyhMhj`hhubj)}(hhh]h)}(h%Regular non-early GGTT initializationh]h%Regular non-early GGTT initialization}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj(hhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjyhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1j-hhhj hNhNubj)}(h**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be initialized **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjGubj )}(hhh]j)}(hA``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be initialized h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjlh]hstruct xe_ggtt *ggtt}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjfubj1)}(hhh]h)}(h'the :c:type:`xe_ggtt` to be initializedh](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjhMhjubh to be initialized}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j0hjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubah}(h]h ]h"]h$]h&]uh1j hjGubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjGubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)/xe_ggtt_node_insert_balloon_locked (C function)$c.xe_ggtt_node_insert_balloon_lockedhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hVint xe_ggtt_node_insert_balloon_locked (struct xe_ggtt_node *node, u64 start, u64 end)h]j9)}(hUint xe_ggtt_node_insert_balloon_locked(struct xe_ggtt_node *node, u64 start, u64 end)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM(ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhjhM(ubjb)}(h"xe_ggtt_node_insert_balloon_lockedh]jh)}(h"xe_ggtt_node_insert_balloon_lockedh]h"xe_ggtt_node_insert_balloon_locked}(hj0hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj,ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj hhhjhM(ubj )}(h/(struct xe_ggtt_node *node, u64 start, u64 end)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjLhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjHubjQ)}(h h]h }(hjYhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNj j )}j ]j )}j j2sb$c.xe_ggtt_node_insert_balloon_lockedasbuh1hhjHubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjHubjh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjHubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjDubj )}(h u64 starth](h)}(hhh]jh)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j$c.xe_ggtt_node_insert_balloon_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjDubj )}(hu64 endh](h)}(hhh]jh)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]j$c.xe_ggtt_node_insert_balloon_lockedasbuh1hhjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(hendh]hend}(hj5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjDubeh}(h]h ]h"]h$]h&]hhuh1j hj hhhjhM(ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhM(ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hjhM(hjhhubj)}(hhh]h)}(h.prevent allocation of specified GGTT addressesh]h.prevent allocation of specified GGTT addresses}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM(hj\hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1j-hhhj hNhNubj)}(hX**Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to hold reserved GGTT node ``u64 start`` the starting GGTT address of the reserved region ``u64 end`` then end GGTT address of the reserved region **Description** To be used in cases where ggtt->lock is already taken. Use xe_ggtt_node_remove_balloon_locked() to release a reserved GGTT node. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM,hj{ubj )}(hhh](j)}(hT``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to hold reserved GGTT node h](j)}(h``struct xe_ggtt_node *node``h]j)}(hjh]hstruct xe_ggtt_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM)hjubj1)}(hhh]h)}(h5the :c:type:`xe_ggtt_node` to hold reserved GGTT nodeh](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhjhM)hjubh to hold reserved GGTT node}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM)hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(h?``u64 start`` the starting GGTT address of the reserved region h](j)}(h ``u64 start``h]j)}(hjh]h u64 start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM*hjubj1)}(hhh]h)}(h0the starting GGTT address of the reserved regionh]h0the starting GGTT address of the reserved region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubj)}(h9``u64 end`` then end GGTT address of the reserved region h](j)}(h ``u64 end``h]j)}(hj5h]hu64 end}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM+hj/ubj1)}(hhh]h)}(h,then end GGTT address of the reserved regionh]h,then end GGTT address of the reserved region}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM+hjKubah}(h]h ]h"]h$]h&]uh1j0hj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhM+hjubeh}(h]h ]h"]h$]h&]uh1j hj{ubh)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM-hj{ubh)}(hTo be used in cases where ggtt->lock is already taken. Use xe_ggtt_node_remove_balloon_locked() to release a reserved GGTT node.h]hTo be used in cases where ggtt->lock is already taken. Use xe_ggtt_node_remove_balloon_locked() to release a reserved GGTT node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM,hj{ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM/hj{ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM0hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)/xe_ggtt_node_remove_balloon_locked (C function)$c.xe_ggtt_node_remove_balloon_lockedhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hCvoid xe_ggtt_node_remove_balloon_locked (struct xe_ggtt_node *node)h]j9)}(hBvoid xe_ggtt_node_remove_balloon_locked(struct xe_ggtt_node *node)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMLubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMLubjb)}(h"xe_ggtt_node_remove_balloon_lockedh]jh)}(h"xe_ggtt_node_remove_balloon_lockedh]h"xe_ggtt_node_remove_balloon_locked}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhjhMLubj )}(h(struct xe_ggtt_node *node)h]j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj7hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNj j )}j ]j )}j jsb$c.xe_ggtt_node_remove_balloon_lockedasbuh1hhjubjQ)}(h h]h }(hjWhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj )}(hj h]h*}(hjehhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjubjh)}(hnodeh]hnode}(hjrhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMLubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhMLubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hjhMLhjhhubj)}(hhh]h)}(hrelease a reserved GGTT regionh]hrelease a reserved GGTT region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMLubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j-hhhj hNhNubj)}(h**Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` with reserved GGTT region **Description** To be used in cases where ggtt->lock is already taken. See xe_ggtt_node_insert_balloon_locked() for details.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMPhjubj )}(hhh]j)}(hS``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` with reserved GGTT region h](j)}(h``struct xe_ggtt_node *node``h]j)}(hjh]hstruct xe_ggtt_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMMhjubj1)}(hhh]h)}(h4the :c:type:`xe_ggtt_node` with reserved GGTT regionh](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhjhMMhjubh with reserved GGTT region}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMMhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjubah}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMOhjubh)}(hlTo be used in cases where ggtt->lock is already taken. See xe_ggtt_node_insert_balloon_locked() for details.h]hlTo be used in cases where ggtt->lock is already taken. See xe_ggtt_node_insert_balloon_locked() for details.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)'xe_ggtt_shift_nodes_locked (C function)c.xe_ggtt_shift_nodes_lockedhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hAvoid xe_ggtt_shift_nodes_locked (struct xe_ggtt *ggtt, s64 shift)h]j9)}(h@void xe_ggtt_shift_nodes_locked(struct xe_ggtt *ggtt, s64 shift)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj|hhhjhMgubjb)}(hxe_ggtt_shift_nodes_lockedh]jh)}(hxe_ggtt_shift_nodes_lockedh]hxe_ggtt_shift_nodes_locked}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj|hhhjhMgubj )}(h!(struct xe_ggtt *ggtt, s64 shift)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.xe_ggtt_shift_nodes_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjubjh)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h s64 shifth](h)}(hhh]jh)}(hs64h]hs64}(hj2hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNj j )}j ]jc.xe_ggtt_shift_nodes_lockedasbuh1hhj+ubjQ)}(h h]h }(hjPhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubjh)}(hshifth]hshift}(hj^hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hj|hhhjhMgubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjxhhhjhMgubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1j2hjhMghjuhhubj)}(hhh]h)}(h@Shift GGTT nodes to adjust for a change in usable address range.h]h@Shift GGTT nodes to adjust for a change in usable address range.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMghjhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhMgubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j-hhhj hNhNubj)}(hXf**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` struct instance ``s64 shift`` change to the location of area provisioned for current VF **Description** This function moves all nodes from the GGTT VM, to a temp list. These nodes are expected to represent allocations in range formerly assigned to current VF, before the range changed. When the GGTT VM is completely clear of any nodes, they are re-added with shifted offsets. The function has no ability of failing - because it shifts existing nodes, without any additional processing. If the nodes were successfully existing at the old address, they will do the same at the new one. A fail inside this function would indicate that the list of nodes was either already damaged, or that the shift brings the address range outside of valid bounds. Both cases justify an assert rather than error code.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMkhjubj )}(hhh](j)}(h?``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` struct instance h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjh]hstruct xe_ggtt *ggtt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhhjubj1)}(hhh]h)}(h%the :c:type:`xe_ggtt` struct instanceh](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjhMhhjubh struct instance}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubj)}(hH``s64 shift`` change to the location of area provisioned for current VF h](j)}(h ``s64 shift``h]j)}(hj%h]h s64 shift}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMihjubj1)}(hhh]h)}(h9change to the location of area provisioned for current VFh]h9change to the location of area provisioned for current VF}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMihj;ubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhj:hMihjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMkhjubh)}(hXThis function moves all nodes from the GGTT VM, to a temp list. These nodes are expected to represent allocations in range formerly assigned to current VF, before the range changed. When the GGTT VM is completely clear of any nodes, they are re-added with shifted offsets.h]hXThis function moves all nodes from the GGTT VM, to a temp list. These nodes are expected to represent allocations in range formerly assigned to current VF, before the range changed. When the GGTT VM is completely clear of any nodes, they are re-added with shifted offsets.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMjhjubh)}(hXThe function has no ability of failing - because it shifts existing nodes, without any additional processing. If the nodes were successfully existing at the old address, they will do the same at the new one. A fail inside this function would indicate that the list of nodes was either already damaged, or that the shift brings the address range outside of valid bounds. Both cases justify an assert rather than error code.h]hXThe function has no ability of failing - because it shifts existing nodes, without any additional processing. If the nodes were successfully existing at the old address, they will do the same at the new one. A fail inside this function would indicate that the list of nodes was either already damaged, or that the shift brings the address range outside of valid bounds. Both cases justify an assert rather than error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMnhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j) xe_ggtt_node_insert (C function)c.xe_ggtt_node_inserthNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hHint xe_ggtt_node_insert (struct xe_ggtt_node *node, u32 size, u32 align)h]j9)}(hGint xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMubjb)}(hxe_ggtt_node_inserth]jh)}(hxe_ggtt_node_inserth]hxe_ggtt_node_insert}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhjhMubj )}(h0(struct xe_ggtt_node *node, u32 size, u32 align)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.xe_ggtt_node_insertasbuh1hhjubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj )}(hj h]h*}(hj=hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjubjh)}(hnodeh]hnode}(hjJhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hu32 sizeh](h)}(hhh]jh)}(hu32h]hu32}(hjfhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNj j )}j ]j+c.xe_ggtt_node_insertasbuh1hhj_ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_ubjh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj_ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h u32 alignh](h)}(hhh]jh)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j+c.xe_ggtt_node_insertasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(halignh]halign}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hjhMhjhhubj)}(hhh]h)}(h-Insert a :c:type:`xe_ggtt_node` into the GGTTh](h Insert a }(hjhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]j+c.xe_ggtt_node_insertasbj xe_ggtt_nodeuh1hhjLhKhjubh into the GGTT}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjDjjDjjjuh1j-hhhj hNhNubj)}(hXA**Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be inserted ``u32 size`` size of the node ``u32 align`` alignment constrain of the node **Description** It cannot be called without first having called xe_ggtt_init() once. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjHubj )}(hhh](j)}(hH``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be inserted h](j)}(h``struct xe_ggtt_node *node``h]j)}(hjmh]hstruct xe_ggtt_node *node}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjgubj1)}(hhh]h)}(h)the :c:type:`xe_ggtt_node` to be insertedh](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhjhMhjubh to be inserted}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j0hjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjdubj)}(h``u32 size`` size of the node h](j)}(h ``u32 size``h]j)}(hjh]hu32 size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubj1)}(hhh]h)}(hsize of the nodeh]hsize of the node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjdubj)}(h.``u32 align`` alignment constrain of the node h](j)}(h ``u32 align``h]j)}(hj h]h u32 align}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubj1)}(hhh]h)}(halignment constrain of the nodeh]halignment constrain of the node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjdubeh}(h]h ]h"]h$]h&]uh1j hjHubh)}(h**Description**h]j)}(hj= h]h Description}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjHubh)}(hDIt cannot be called without first having called xe_ggtt_init() once.h]hDIt cannot be called without first having called xe_ggtt_init() once.}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjHubh)}(h **Return**h]j)}(hjd h]hReturn}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjHubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_node_init (C function)c.xe_ggtt_node_inithNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h>struct xe_ggtt_node * xe_ggtt_node_init (struct xe_ggtt *ggtt)h]j9)}(hhj hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]j )}j xe_ggtt_node_initsbc.xe_ggtt_node_initasbuh1hhj hhhj hMubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hMubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj hhhj hMubjb)}(hxe_ggtt_node_inith]jh)}(hj h]hxe_ggtt_node_init}(hj!hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj!ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj hhhj hMubj )}(h(struct xe_ggtt *ggtt)h]j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj#!hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj!ubjQ)}(h h]h }(hj0!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjA!hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj>!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjC!modnameN classnameNj j )}j ]j c.xe_ggtt_node_initasbuh1hhj!ubjQ)}(h h]h }(hj_!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubj )}(hj h]h*}(hjm!hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj!ubjh)}(hggtth]hggtt}(hjz!hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj!ubah}(h]h ]h"]h$]h&]hhuh1j hj hhhj hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j2hj hMhj hhubj)}(hhh]h)}(h"Initialize ``xe_ggtt_node`` structh](h Initialize }(hj!hhhNhNubj)}(h``xe_ggtt_node``h]h xe_ggtt_node}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh struct}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj!hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj!jj!jjjuh1j-hhhj hNhNubj)}(hX**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where the new node will later be inserted/reserved. **Description** This function will allocate the struct ``xe_ggtt_node`` and return its pointer. This struct will then be freed after the node removal upon xe_ggtt_node_remove() or xe_ggtt_node_remove_balloon_locked(). Having ``xe_ggtt_node`` struct allocated doesn't mean that the node is already allocated in GGTT. Only xe_ggtt_node_insert(), allocation through xe_ggtt_node_insert_transform(), or xe_ggtt_node_insert_balloon_locked() will ensure the node is inserted or reserved in GGTT. **Return** A pointer to ``xe_ggtt_node`` struct on success. An ERR_PTR otherwise.h](h)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj!ubj )}(hhh]j)}(hc``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where the new node will later be inserted/reserved. h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hj!h]hstruct xe_ggtt *ggtt}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj!ubj1)}(hhh]h)}(hIthe :c:type:`xe_ggtt` where the new node will later be inserted/reserved.h](hthe }(hj"hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj"h]hxe_ggtt}(hj"hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj "hMhj"ubh4 where the new node will later be inserted/reserved.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj "hMhj "ubah}(h]h ]h"]h$]h&]uh1j0hj!ubeh}(h]h ]h"]h$]h&]uh1jhj "hMhj!ubah}(h]h ]h"]h$]h&]uh1j hj!ubh)}(h**Description**h]j)}(hjU"h]h Description}(hjW"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS"ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj!ubh)}(hThis function will allocate the struct ``xe_ggtt_node`` and return its pointer. This struct will then be freed after the node removal upon xe_ggtt_node_remove() or xe_ggtt_node_remove_balloon_locked().h](h'This function will allocate the struct }(hjk"hhhNhNubj)}(h``xe_ggtt_node``h]h xe_ggtt_node}(hjs"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk"ubh and return its pointer. This struct will then be freed after the node removal upon xe_ggtt_node_remove() or xe_ggtt_node_remove_balloon_locked().}(hjk"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj!ubh)}(hXHaving ``xe_ggtt_node`` struct allocated doesn't mean that the node is already allocated in GGTT. Only xe_ggtt_node_insert(), allocation through xe_ggtt_node_insert_transform(), or xe_ggtt_node_insert_balloon_locked() will ensure the node is inserted or reserved in GGTT.h](hHaving }(hj"hhhNhNubj)}(h``xe_ggtt_node``h]h xe_ggtt_node}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh struct allocated doesn’t mean that the node is already allocated in GGTT. Only xe_ggtt_node_insert(), allocation through xe_ggtt_node_insert_transform(), or xe_ggtt_node_insert_balloon_locked() will ensure the node is inserted or reserved in GGTT.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj!ubh)}(h **Return**h]j)}(hj"h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj!ubh)}(hFA pointer to ``xe_ggtt_node`` struct on success. An ERR_PTR otherwise.h](h A pointer to }(hj"hhhNhNubj)}(h``xe_ggtt_node``h]h xe_ggtt_node}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh) struct on success. An ERR_PTR otherwise.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_node_fini (C function)c.xe_ggtt_node_finihNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h2void xe_ggtt_node_fini (struct xe_ggtt_node *node)h]j9)}(h1void xe_ggtt_node_fini(struct xe_ggtt_node *node)h](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#hhhj#hMubjb)}(hxe_ggtt_node_finih]jh)}(hxe_ggtt_node_finih]hxe_ggtt_node_fini}(hj'#hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj##ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj#hhhj#hMubj )}(h(struct xe_ggtt_node *node)h]j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjC#hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj?#ubjQ)}(h h]h }(hjP#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?#ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hja#hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj^#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjc#modnameN classnameNj j )}j ]j )}j j)#sbc.xe_ggtt_node_finiasbuh1hhj?#ubjQ)}(h h]h }(hj#hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?#ubj )}(hj h]h*}(hj#hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj?#ubjh)}(hnodeh]hnode}(hj#hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj?#ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj;#ubah}(h]h ]h"]h$]h&]hhuh1j hj#hhhj#hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj"hhhj#hMubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1j2hj#hMhj"hhubj)}(hhh]h)}(h)Forcebly finalize ``xe_ggtt_node`` structh](hForcebly finalize }(hj#hhhNhNubj)}(h``xe_ggtt_node``h]h xe_ggtt_node}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh struct}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj#hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1j-hhhj hNhNubj)}(hXa**Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be freed **Description** If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(), or xe_ggtt_node_insert_balloon_locked(); and this **node** is not going to be reused, then, this function needs to be called to free the ``xe_ggtt_node`` structh](h)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj#ubj )}(hhh]j)}(hE``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be freed h](j)}(h``struct xe_ggtt_node *node``h]j)}(hj$h]hstruct xe_ggtt_node *node}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj$ubj1)}(hhh]h)}(h&the :c:type:`xe_ggtt_node` to be freedh](hthe }(hj2$hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj<$h]h xe_ggtt_node}(hj>$hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj:$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj.$hMhj2$ubh to be freed}(hj2$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.$hMhj/$ubah}(h]h ]h"]h$]h&]uh1j0hj$ubeh}(h]h ]h"]h$]h&]uh1jhj.$hMhj$ubah}(h]h ]h"]h$]h&]uh1j hj#ubh)}(h**Description**h]j)}(hjw$h]h Description}(hjy$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju$ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj#ubh)}(hIf anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(), or xe_ggtt_node_insert_balloon_locked(); and this **node** is not going to be reused, then, this function needs to be called to free the ``xe_ggtt_node`` structh](hIf anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(), or xe_ggtt_node_insert_balloon_locked(); and this }(hj$hhhNhNubj)}(h**node**h]hnode}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubhO is not going to be reused, then, this function needs to be called to free the }(hj$hhhNhNubj)}(h``xe_ggtt_node``h]h xe_ggtt_node}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh struct}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)#xe_ggtt_node_allocated (C function)c.xe_ggtt_node_allocatedhNtauh1j;hj hhhNhNubj.)}(hhh](j3)}(h=bool xe_ggtt_node_allocated (const struct xe_ggtt_node *node)h]j9)}(hhj%ubjQ)}(h h]h }(hj*%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj?)}(hjBh]hstruct}(hj8%hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj%ubjQ)}(h h]h }(hjE%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjV%hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjS%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjX%modnameN classnameNj j )}j ]j )}j j%sbc.xe_ggtt_node_allocatedasbuh1hhj%ubjQ)}(h h]h }(hjv%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj%ubj )}(hj h]h*}(hj%hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj%ubjh)}(hnodeh]hnode}(hj%hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj%ubah}(h]h ]h"]h$]h&]hhuh1j hj$hhhj$hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj$hhhj$hMubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1j2hj$hMhj$hhubj)}(hhh]h)}(h"Check if node is allocated in GGTTh]h"Check if node is allocated in GGTT}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1j-hhhj hNhNubj)}(h**Parameters** ``const struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be inspected **Return** True if allocated, False otherwise.h](h)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj%ubj )}(hhh]j)}(hO``const struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be inspected h](j)}(h#``const struct xe_ggtt_node *node``h]j)}(hj%h]hconst struct xe_ggtt_node *node}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj%ubj1)}(hhh]h)}(h*the :c:type:`xe_ggtt_node` to be inspectedh](hthe }(hj&hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj&h]h xe_ggtt_node}(hj!&hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj&hMhj&ubh to be inspected}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1j0hj%ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj%ubah}(h]h ]h"]h$]h&]uh1j hj%ubh)}(h **Return**h]j)}(hjZ&h]hReturn}(hj\&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX&ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj%ubh)}(h#True if allocated, False otherwise.h]h#True if allocated, False otherwise.}(hjp&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)!xe_ggtt_node_pt_size (C function)c.xe_ggtt_node_pt_sizehNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h=size_t xe_ggtt_node_pt_size (const struct xe_ggtt_node *node)h]j9)}(hhj&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj?)}(hjBh]hstruct}(hj 'hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj&ubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj*'hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj''ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,'modnameN classnameNj j )}j ]j&c.xe_ggtt_node_pt_sizeasbuh1hhj&ubjQ)}(h h]h }(hjH'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&ubj )}(hj h]h*}(hjV'hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj&ubjh)}(hnodeh]hnode}(hjc'hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj&ubah}(h]h ]h"]h$]h&]hhuh1j hj&hhhj&hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj&hhhj&hMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1j2hj&hMhj&hhubj)}(hhh]h)}(h=Get the size of page table entries needed to map a GGTT node.h]h=Get the size of page table entries needed to map a GGTT node.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1j-hhhj hNhNubj)}(h**Parameters** ``const struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` **Return** GGTT node page table entries size in bytes.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'ubj )}(hhh]j)}(h?``const struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` h](j)}(h#``const struct xe_ggtt_node *node``h]j)}(hj'h]hconst struct xe_ggtt_node *node}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'ubj1)}(hhh]h)}(hthe :c:type:`xe_ggtt_node`h](hthe }(hj'hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj'h]h xe_ggtt_node}(hj'hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj'hMhj'ubeh}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1j0hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1j hj'ubh)}(h **Return**h]j)}(hj((h]hReturn}(hj*(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&(ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'ubh)}(h+GGTT node page table entries size in bytes.h]h+GGTT node page table entries size in bytes.}(hj>(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_map_bo (C function)c.xe_ggtt_map_bohNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h`void xe_ggtt_map_bo (struct xe_ggtt *ggtt, struct xe_ggtt_node *node, struct xe_bo *bo, u64 pte)h]j9)}(h_void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, struct xe_bo *bo, u64 pte)h](j)}(hvoidh]hvoid}(hjm(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji(hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj|(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhji(hhhj{(hMubjb)}(hxe_ggtt_map_boh]jh)}(hxe_ggtt_map_boh]hxe_ggtt_map_bo}(hj(hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj(ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahji(hhhj{(hMubj )}(hL(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, struct xe_bo *bo, u64 pte)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj(hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNj j )}j ]j )}j j(sbc.xe_ggtt_map_boasbuh1hhj(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj )}(hj h]h*}(hj(hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj(ubjh)}(hggtth]hggtt}(hj)hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubj )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hj)hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj)ubjQ)}(h h]h }(hj))hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj:)hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj7)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<)modnameN classnameNj j )}j ]j(c.xe_ggtt_map_boasbuh1hhj)ubjQ)}(h h]h }(hjX)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj )}(hj h]h*}(hjf)hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj)ubjh)}(hnodeh]hnode}(hjs)hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj)hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj)ubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj)hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNj j )}j ]j(c.xe_ggtt_map_boasbuh1hhj)ubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj )}(hj h]h*}(hj)hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj)ubjh)}(hboh]hbo}(hj)hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubj )}(hu64 pteh](h)}(hhh]jh)}(hu64h]hu64}(hj)hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNj j )}j ]j(c.xe_ggtt_map_boasbuh1hhj)ubjQ)}(h h]h }(hj*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubjh)}(hpteh]hpte}(hj+*hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubeh}(h]h ]h"]h$]h&]hhuh1j hji(hhhj{(hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhje(hhhj{(hMubah}(h]j`(ah ](jjeh"]h$]h&]jj)jhuh1j2hj{(hMhjb(hhubj)}(hhh]h)}(hMap the BO into GGTTh]hMap the BO into GGTT}(hjU*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjR*hhubah}(h]h ]h"]h$]h&]uh1jhjb(hhhj{(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjm*jjm*jjjuh1j-hhhj hNhNubj)}(hX**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where node will be mapped ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` where this BO is mapped ``struct xe_bo *bo`` the :c:type:`xe_bo` to be mapped ``u64 pte`` The pte flags to append.h](h)}(h**Parameters**h]j)}(hjw*h]h Parameters}(hjy*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju*ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjq*ubj )}(hhh](j)}(hI``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where node will be mapped h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hj*h]hstruct xe_ggtt *ggtt}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj*ubj1)}(hhh]h)}(h/the :c:type:`xe_ggtt` where node will be mappedh](hthe }(hj*hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj*h]hxe_ggtt}(hj*hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj*hMhj*ubh where node will be mapped}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1j0hj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj*ubj)}(hQ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` where this BO is mapped h](j)}(h``struct xe_ggtt_node *node``h]j)}(hj*h]hstruct xe_ggtt_node *node}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj*ubj1)}(hhh]h)}(h2the :c:type:`xe_ggtt_node` where this BO is mappedh](hthe }(hj +hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj+h]h xe_ggtt_node}(hj+hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj+hMhj +ubh where this BO is mapped}(hj +hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1j0hj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj*ubj)}(h6``struct xe_bo *bo`` the :c:type:`xe_bo` to be mapped h](j)}(h``struct xe_bo *bo``h]j)}(hjN+h]hstruct xe_bo *bo}(hjP+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL+ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjH+ubj1)}(hhh]h)}(h the :c:type:`xe_bo` to be mappedh](hthe }(hjg+hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hjq+h]hxe_bo}(hjs+hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjo+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhjc+hMhjg+ubh to be mapped}(hjg+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjc+hMhjd+ubah}(h]h ]h"]h$]h&]uh1j0hjH+ubeh}(h]h ]h"]h$]h&]uh1jhjc+hMhj*ubj)}(h$``u64 pte`` The pte flags to append.h](j)}(h ``u64 pte``h]j)}(hj+h]hu64 pte}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj+ubj1)}(hhh]h)}(hThe pte flags to append.h]hThe pte flags to append.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj+ubah}(h]h ]h"]h$]h&]uh1j0hj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj*ubeh}(h]h ]h"]h$]h&]uh1j hjq*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)$xe_ggtt_map_bo_unlocked (C function)c.xe_ggtt_map_bo_unlockedhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hEvoid xe_ggtt_map_bo_unlocked (struct xe_ggtt *ggtt, struct xe_bo *bo)h]j9)}(hDvoid xe_ggtt_map_bo_unlocked(struct xe_ggtt *ggtt, struct xe_bo *bo)h](j)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,hhhj,hMubjb)}(hxe_ggtt_map_bo_unlockedh]jh)}(hxe_ggtt_map_bo_unlockedh]hxe_ggtt_map_bo_unlocked}(hj%,hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj!,ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj,hhhj,hMubj )}(h((struct xe_ggtt *ggtt, struct xe_bo *bo)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjA,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj=,ubjQ)}(h h]h }(hjN,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=,ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj_,hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj\,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetja,modnameN classnameNj j )}j ]j )}j j',sbc.xe_ggtt_map_bo_unlockedasbuh1hhj=,ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=,ubj )}(hj h]h*}(hj,hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj=,ubjh)}(hggtth]hggtt}(hj,hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj=,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj9,ubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj,ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj,hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNj j )}j ]j{,c.xe_ggtt_map_bo_unlockedasbuh1hhj,ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj )}(hj h]h*}(hj,hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj,ubjh)}(hboh]hbo}(hj -hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj9,ubeh}(h]h ]h"]h$]h&]hhuh1j hj,hhhj,hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj+hhhj,hMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1j2hj,hMhj+hhubj)}(hhh]h)}(h#Restore a mapping of a BO into GGTTh]h#Restore a mapping of a BO into GGTT}(hj4-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj1-hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj,hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjL-jjL-jjjuh1j-hhhj hNhNubj)}(h**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where node will be mapped ``struct xe_bo *bo`` the :c:type:`xe_bo` to be mapped **Description** This is used to restore a GGTT mapping after suspend.h](h)}(h**Parameters**h]j)}(hjV-h]h Parameters}(hjX-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT-ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjP-ubj )}(hhh](j)}(hI``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where node will be mapped h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hju-h]hstruct xe_ggtt *ggtt}(hjw-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs-ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjo-ubj1)}(hhh]h)}(h/the :c:type:`xe_ggtt` where node will be mappedh](hthe }(hj-hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj-h]hxe_ggtt}(hj-hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj-hMhj-ubh where node will be mapped}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j0hjo-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjl-ubj)}(h6``struct xe_bo *bo`` the :c:type:`xe_bo` to be mapped h](j)}(h``struct xe_bo *bo``h]j)}(hj-h]hstruct xe_bo *bo}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj-ubj1)}(hhh]h)}(h the :c:type:`xe_bo` to be mappedh](hthe }(hj-hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hj-h]hxe_bo}(hj-hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhj-hMhj-ubh to be mapped}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1j0hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjl-ubeh}(h]h ]h"]h$]h&]uh1j hjP-ubh)}(h**Description**h]j)}(hj/.h]h Description}(hj1.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-.ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjP-ubh)}(h5This is used to restore a GGTT mapping after suspend.h]h5This is used to restore a GGTT mapping after suspend.}(hjE.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjP-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)*xe_ggtt_node_insert_transform (C function)c.xe_ggtt_node_insert_transformhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hstruct xe_ggtt_node * xe_ggtt_node_insert_transform (struct xe_ggtt *ggtt, struct xe_bo *bo, u64 pte_flags, u64 size, u32 align, xe_ggtt_transform_cb transform, void *arg)h]j9)}(hstruct xe_ggtt_node *xe_ggtt_node_insert_transform(struct xe_ggtt *ggtt, struct xe_bo *bo, u64 pte_flags, u64 size, u32 align, xe_ggtt_transform_cb transform, void *arg)h](j?)}(hjBh]hstruct}(hjt.hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjp.hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM,ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjp.hhhj.hM,ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj.hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNj j )}j ]j )}j xe_ggtt_node_insert_transformsbc.xe_ggtt_node_insert_transformasbuh1hhjp.hhhj.hM,ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjp.hhhj.hM,ubj )}(hj h]h*}(hj.hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjp.hhhj.hM,ubjb)}(hxe_ggtt_node_insert_transformh]jh)}(hj.h]hxe_ggtt_node_insert_transform}(hj.hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj.ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjp.hhhj.hM,ubj )}(hw(struct xe_ggtt *ggtt, struct xe_bo *bo, u64 pte_flags, u64 size, u32 align, xe_ggtt_transform_cb transform, void *arg)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj.hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj /hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj /ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNj j )}j ]j.c.xe_ggtt_node_insert_transformasbuh1hhj.ubjQ)}(h h]h }(hj*/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj.ubj )}(hj h]h*}(hj8/hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj.ubjh)}(hggtth]hggtt}(hjE/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj^/hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjZ/ubjQ)}(h h]h }(hjk/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZ/ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj|/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjy/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~/modnameN classnameNj j )}j ]j.c.xe_ggtt_node_insert_transformasbuh1hhjZ/ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZ/ubj )}(hj h]h*}(hj/hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjZ/ubjh)}(hboh]hbo}(hj/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjZ/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubj )}(h u64 pte_flagsh](h)}(hhh]jh)}(hu64h]hu64}(hj/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNj j )}j ]j.c.xe_ggtt_node_insert_transformasbuh1hhj/ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubjh)}(h pte_flagsh]h pte_flags}(hj/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubj )}(hu64 sizeh](h)}(hhh]jh)}(hu64h]hu64}(hj0hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNj j )}j ]j.c.xe_ggtt_node_insert_transformasbuh1hhj0ubjQ)}(h h]h }(hj70hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubjh)}(hsizeh]hsize}(hjE0hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubj )}(h u32 alignh](h)}(hhh]jh)}(hu32h]hu32}(hja0hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj^0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjc0modnameN classnameNj j )}j ]j.c.xe_ggtt_node_insert_transformasbuh1hhjZ0ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjZ0ubjh)}(halignh]halign}(hj0hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjZ0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubj )}(hxe_ggtt_transform_cb transformh](h)}(hhh]jh)}(hxe_ggtt_transform_cbh]hxe_ggtt_transform_cb}(hj0hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNj j )}j ]j.c.xe_ggtt_node_insert_transformasbuh1hhj0ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubjh)}(h transformh]h transform}(hj0hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubj )}(h void *argh](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjQ)}(h h]h }(hj0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj0ubj )}(hj h]h*}(hj 1hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj0ubjh)}(hargh]harg}(hj1hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubeh}(h]h ]h"]h$]h&]hhuh1j hjp.hhhj.hM,ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjl.hhhj.hM,ubah}(h]jg.ah ](jjeh"]h$]h&]jj)jhuh1j2hj.hM,hji.hhubj)}(hhh]h)}(h=Insert a newly allocated :c:type:`xe_ggtt_node` into the GGTTh](hInsert a newly allocated }(hjA1hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjK1h]h xe_ggtt_node}(hjM1hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjI1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]j.c.xe_ggtt_node_insert_transformasbj xe_ggtt_nodeuh1hhjLhKhjA1ubh into the GGTT}(hjA1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM,hj>1hhubah}(h]h ]h"]h$]h&]uh1jhji.hhhj.hM,ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1j-hhhj hNhNubj)}(hX**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where the node will inserted/reserved. ``struct xe_bo *bo`` The bo to be transformed ``u64 pte_flags`` The extra GGTT flags to add to mapping. ``u64 size`` size of the node ``u32 align`` required alignment for node ``xe_ggtt_transform_cb transform`` transformation function that will populate the GGTT node, or NULL for linear mapping. ``void *arg`` Extra argument to pass to the transformation function. **Description** This function allows inserting a GGTT node with a custom transformation function. This is useful for display to allow inserting rotated framebuffers to GGTT. **Return** A pointer to ``xe_ggtt_node`` struct on success. An ERR_PTR otherwise.h](h)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM0hj1ubj )}(hhh](j)}(hV``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where the node will inserted/reserved. h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hj1h]hstruct xe_ggtt *ggtt}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM-hj1ubj1)}(hhh]h)}(hhj4ubjQ)}(h h]h }(hj&4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj74hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj44ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj94modnameN classnameNj j )}j ]j )}j j3sbc.xe_ggtt_insert_bo_atasbuh1hhj4ubjQ)}(h h]h }(hjW4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj )}(hj h]h*}(hje4hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj4ubjh)}(hggtth]hggtt}(hjr4hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj4ubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj4hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj4hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNj j )}j ]jS4c.xe_ggtt_insert_bo_atasbuh1hhj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj )}(hj h]h*}(hj4hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj4ubjh)}(hboh]hbo}(hj4hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj4ubj )}(h u64 starth](h)}(hhh]jh)}(hu64h]hu64}(hj4hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNj j )}j ]jS4c.xe_ggtt_insert_bo_atasbuh1hhj4ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubjh)}(hstarth]hstart}(hj*5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj4ubj )}(hu64 endh](h)}(hhh]jh)}(hu64h]hu64}(hjF5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjC5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjH5modnameN classnameNj j )}j ]jS4c.xe_ggtt_insert_bo_atasbuh1hhj?5ubjQ)}(h h]h }(hjd5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?5ubjh)}(hendh]hend}(hjr5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj?5ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj4ubj )}(hstruct drm_exec *exech](j?)}(hjBh]hstruct}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubh)}(hhh]jh)}(hdrm_exech]hdrm_exec}(hj5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNj j )}j ]jS4c.xe_ggtt_insert_bo_atasbuh1hhj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj )}(hj h]h*}(hj5hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj5ubjh)}(hexech]hexec}(hj5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj5ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj4ubeh}(h]h ]h"]h$]h&]hhuh1j hj3hhhj3hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj3hhhj3hMubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1j2hj3hMhj3hhubj)}(hhh]h)}(h"Insert BO at a specific GGTT spaceh]h"Insert BO at a specific GGTT space}(hj 6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj 6hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$6jj$6jjjuh1j-hhhj hNhNubj)}(hX**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where bo will be inserted ``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted ``u64 start`` address where it will be inserted ``u64 end`` end of the range where it will be inserted ``struct drm_exec *exec`` The drm_exec transaction to use for exhaustive eviction. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj.6h]h Parameters}(hj06hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,6ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj(6ubj )}(hhh](j)}(hI``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where bo will be inserted h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjM6h]hstruct xe_ggtt *ggtt}(hjO6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK6ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjG6ubj1)}(hhh]h)}(h/the :c:type:`xe_ggtt` where bo will be insertedh](hthe }(hjf6hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjp6h]hxe_ggtt}(hjr6hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjn6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjb6hMhjf6ubh where bo will be inserted}(hjf6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb6hMhjc6ubah}(h]h ]h"]h$]h&]uh1j0hjG6ubeh}(h]h ]h"]h$]h&]uh1jhjb6hMhjD6ubj)}(h8``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted h](j)}(h``struct xe_bo *bo``h]j)}(hj6h]hstruct xe_bo *bo}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj6ubj1)}(hhh]h)}(h"the :c:type:`xe_bo` to be insertedh](hthe }(hj6hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hj6h]hxe_bo}(hj6hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhj6hMhj6ubh to be inserted}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1j0hj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjD6ubj)}(h0``u64 start`` address where it will be inserted h](j)}(h ``u64 start``h]j)}(hj7h]h u64 start}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj6ubj1)}(hhh]h)}(h!address where it will be insertedh]h!address where it will be inserted}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1j0hj6ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjD6ubj)}(h7``u64 end`` end of the range where it will be inserted h](j)}(h ``u64 end``h]j)}(hj>7h]hu64 end}(hj@7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<7ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj87ubj1)}(hhh]h)}(h*end of the range where it will be insertedh]h*end of the range where it will be inserted}(hjW7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS7hMhjT7ubah}(h]h ]h"]h$]h&]uh1j0hj87ubeh}(h]h ]h"]h$]h&]uh1jhjS7hMhjD6ubj)}(hS``struct drm_exec *exec`` The drm_exec transaction to use for exhaustive eviction. h](j)}(h``struct drm_exec *exec``h]j)}(hjw7h]hstruct drm_exec *exec}(hjy7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju7ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjq7ubj1)}(hhh]h)}(h8The drm_exec transaction to use for exhaustive eviction.h]h8The drm_exec transaction to use for exhaustive eviction.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1j0hjq7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjD6ubeh}(h]h ]h"]h$]h&]uh1j hj(6ubh)}(h **Return**h]j)}(hj7h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj(6ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj(6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_insert_bo (C function)c.xe_ggtt_insert_bohNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hUint xe_ggtt_insert_bo (struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec)h]j9)}(hTint xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec)h](j)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7hhhj8hMubjb)}(hxe_ggtt_insert_boh]jh)}(hxe_ggtt_insert_boh]hxe_ggtt_insert_bo}(hj8hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj8ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj7hhhj8hMubj )}(h?(struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj48hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj08ubjQ)}(h h]h }(hjA8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj08ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjR8hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjO8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjT8modnameN classnameNj j )}j ]j )}j j8sbc.xe_ggtt_insert_boasbuh1hhj08ubjQ)}(h h]h }(hjr8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj08ubj )}(hj h]h*}(hj8hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj08ubjh)}(hggtth]hggtt}(hj8hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj08ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj,8ubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj8hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj8hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNj j )}j ]jn8c.xe_ggtt_insert_boasbuh1hhj8ubjQ)}(h h]h }(hj8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubj )}(hj h]h*}(hj8hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj8ubjh)}(hboh]hbo}(hj8hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj,8ubj )}(hstruct drm_exec *exech](j?)}(hjBh]hstruct}(hj9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj9ubjQ)}(h h]h }(hj#9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubh)}(hhh]jh)}(hdrm_exech]hdrm_exec}(hj49hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj19ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj69modnameN classnameNj j )}j ]jn8c.xe_ggtt_insert_boasbuh1hhj9ubjQ)}(h h]h }(hjR9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj )}(hj h]h*}(hj`9hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj9ubjh)}(hexech]hexec}(hjm9hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj,8ubeh}(h]h ]h"]h$]h&]hhuh1j hj7hhhj8hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj7hhhj8hMubah}(h]j7ah ](jjeh"]h$]h&]jj)jhuh1j2hj8hMhj7hhubj)}(hhh]h)}(hInsert BO into GGTTh]hInsert BO into GGTT}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9jj9jjjuh1j-hhhj hNhNubj)}(hX***Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where bo will be inserted ``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted ``struct drm_exec *exec`` The drm_exec transaction to use for exhaustive eviction. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj9ubj )}(hhh](j)}(hI``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where bo will be inserted h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hj9h]hstruct xe_ggtt *ggtt}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj9ubj1)}(hhh]h)}(h/the :c:type:`xe_ggtt` where bo will be insertedh](hthe }(hj9hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj9h]hxe_ggtt}(hj9hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj9hMhj9ubh where bo will be inserted}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1j0hj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubj)}(h8``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted h](j)}(h``struct xe_bo *bo``h]j)}(hj4:h]hstruct xe_bo *bo}(hj6:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2:ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj.:ubj1)}(hhh]h)}(h"the :c:type:`xe_bo` to be insertedh](hthe }(hjM:hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hjW:h]hxe_bo}(hjY:hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjU:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhjI:hMhjM:ubh to be inserted}(hjM:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjI:hMhjJ:ubah}(h]h ]h"]h$]h&]uh1j0hj.:ubeh}(h]h ]h"]h$]h&]uh1jhjI:hMhj9ubj)}(hS``struct drm_exec *exec`` The drm_exec transaction to use for exhaustive eviction. h](j)}(h``struct drm_exec *exec``h]j)}(hj:h]hstruct drm_exec *exec}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj:ubj1)}(hhh]h)}(h8The drm_exec transaction to use for exhaustive eviction.h]h8The drm_exec transaction to use for exhaustive eviction.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1j0hj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj9ubeh}(h]h ]h"]h$]h&]uh1j hj9ubh)}(h **Return**h]j)}(hj:h]hReturn}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj9ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_remove_bo (C function)c.xe_ggtt_remove_bohNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h?void xe_ggtt_remove_bo (struct xe_ggtt *ggtt, struct xe_bo *bo)h]j9)}(h>void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)h](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ;hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ;hhhj;hMubjb)}(hxe_ggtt_remove_boh]jh)}(hxe_ggtt_remove_boh]hxe_ggtt_remove_bo}(hj1;hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj-;ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj ;hhhj;hMubj )}(h((struct xe_ggtt *ggtt, struct xe_bo *bo)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjM;hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjI;ubjQ)}(h h]h }(hjZ;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjI;ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjk;hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjh;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjm;modnameN classnameNj j )}j ]j )}j j3;sbc.xe_ggtt_remove_boasbuh1hhjI;ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjI;ubj )}(hj h]h*}(hj;hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjI;ubjh)}(hggtth]hggtt}(hj;hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjI;ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjE;ubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj;hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj;ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj;hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNj j )}j ]j;c.xe_ggtt_remove_boasbuh1hhj;ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj )}(hj h]h*}(hj <hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj;ubjh)}(hboh]hbo}(hj<hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj;ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjE;ubeh}(h]h ]h"]h$]h&]hhuh1j hj ;hhhj;hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj;hhhj;hMubah}(h]j;ah ](jjeh"]h$]h&]jj)jhuh1j2hj;hMhj;hhubj)}(hhh]h)}(hRemove a BO from the GGTTh]hRemove a BO from the GGTT}(hj@<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj=<hhubah}(h]h ]h"]h$]h&]uh1jhj;hhhj;hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjX<jjX<jjjuh1j-hhhj hNhNubj)}(h**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where node will be removed ``struct xe_bo *bo`` the :c:type:`xe_bo` to be removedh](h)}(h**Parameters**h]j)}(hjb<h]h Parameters}(hjd<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`<ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj\<ubj )}(hhh](j)}(hJ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where node will be removed h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hj<h]hstruct xe_ggtt *ggtt}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj{<ubj1)}(hhh]h)}(h0the :c:type:`xe_ggtt` where node will be removedh](hthe }(hj<hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj<h]hxe_ggtt}(hj<hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj<hMhj<ubh where node will be removed}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1j0hj{<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjx<ubj)}(h6``struct xe_bo *bo`` the :c:type:`xe_bo` to be removedh](j)}(h``struct xe_bo *bo``h]j)}(hj<h]hstruct xe_bo *bo}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj<ubj1)}(hhh]h)}(h!the :c:type:`xe_bo` to be removedh](hthe }(hj<hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hj=h]hxe_bo}(hj=hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj<ubh to be removed}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj=hMhj<ubah}(h]h ]h"]h$]h&]uh1j0hj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjx<ubeh}(h]h ]h"]h$]h&]uh1j hj\<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)!xe_ggtt_largest_hole (C function)c.xe_ggtt_largest_holehNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hJu64 xe_ggtt_largest_hole (struct xe_ggtt *ggtt, u64 alignment, u64 *spare)h]j9)}(hIu64 xe_ggtt_largest_hole(struct xe_ggtt *ggtt, u64 alignment, u64 *spare)h](h)}(hhh]jh)}(hu64h]hu64}(hj]=hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjZ=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_=modnameN classnameNj j )}j ]j )}j xe_ggtt_largest_holesbc.xe_ggtt_largest_holeasbuh1hhjV=hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjV=hhhj~=hMubjb)}(hxe_ggtt_largest_holeh]jh)}(hj{=h]hxe_ggtt_largest_hole}(hj=hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj=ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjV=hhhj~=hMubj )}(h1(struct xe_ggtt *ggtt, u64 alignment, u64 *spare)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj=hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj=modnameN classnameNj j )}j ]jy=c.xe_ggtt_largest_holeasbuh1hhj=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj )}(hj h]h*}(hj=hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj=ubjh)}(hggtth]hggtt}(hj>hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj=ubj )}(h u64 alignmenth](h)}(hhh]jh)}(hu64h]hu64}(hj>hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!>modnameN classnameNj j )}j ]jy=c.xe_ggtt_largest_holeasbuh1hhj>ubjQ)}(h h]h }(hj=>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubjh)}(h alignmenth]h alignment}(hjK>hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj>ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj=ubj )}(h u64 *spareh](h)}(hhh]jh)}(hu64h]hu64}(hjg>hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjd>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetji>modnameN classnameNj j )}j ]jy=c.xe_ggtt_largest_holeasbuh1hhj`>ubjQ)}(h h]h }(hj>hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`>ubj )}(hj h]h*}(hj>hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj`>ubjh)}(hspareh]hspare}(hj>hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj`>ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj=ubeh}(h]h ]h"]h$]h&]hhuh1j hjV=hhhj~=hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjR=hhhj~=hMubah}(h]jM=ah ](jjeh"]h$]h&]jj)jhuh1j2hj~=hMhjO=hhubj)}(hhh]h)}(hLargest GGTT holeh]hLargest GGTT hole}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jhjO=hhhj~=hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1j-hhhj hNhNubj)}(hX**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` that will be inspected ``u64 alignment`` minimum alignment ``u64 *spare`` If not NULL: in: desired memory size to be spared / out: Adjusted possible spare **Return** size of the largest continuous GGTT regionh](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj>ubj )}(hhh](j)}(hF``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` that will be inspected h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hj ?h]hstruct xe_ggtt *ggtt}(hj ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ?ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj?ubj1)}(hhh]h)}(h,the :c:type:`xe_ggtt` that will be inspectedh](hthe }(hj$?hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj.?h]hxe_ggtt}(hj0?hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj,?ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj ?hMhj$?ubh that will be inspected}(hj$?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj ?hMhj!?ubah}(h]h ]h"]h$]h&]uh1j0hj?ubeh}(h]h ]h"]h$]h&]uh1jhj ?hMhj?ubj)}(h$``u64 alignment`` minimum alignment h](j)}(h``u64 alignment``h]j)}(hjg?h]h u64 alignment}(hji?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje?ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhja?ubj1)}(hhh]h)}(hminimum alignmenth]hminimum alignment}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|?hMhj}?ubah}(h]h ]h"]h$]h&]uh1j0hja?ubeh}(h]h ]h"]h$]h&]uh1jhj|?hMhj?ubj)}(h```u64 *spare`` If not NULL: in: desired memory size to be spared / out: Adjusted possible spare h](j)}(h``u64 *spare``h]j)}(hj?h]h u64 *spare}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj?ubj1)}(hhh]h)}(hPIf not NULL: in: desired memory size to be spared / out: Adjusted possible spareh]hPIf not NULL: in: desired memory size to be spared / out: Adjusted possible spare}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1j0hj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj?ubeh}(h]h ]h"]h$]h&]uh1j hj>ubh)}(h **Return**h]j)}(hj?h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj>ubh)}(h*size of the largest continuous GGTT regionh]h*size of the largest continuous GGTT region}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_assign (C function)c.xe_ggtt_assignhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h?void xe_ggtt_assign (const struct xe_ggtt_node *node, u16 vfid)h]j9)}(h>void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid)h](j)}(hvoidh]hvoid}(hj @hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj/@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@hhhj.@hMubjb)}(hxe_ggtt_assignh]jh)}(hxe_ggtt_assignh]hxe_ggtt_assign}(hjA@hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj=@ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj@hhhj.@hMubj )}(h+(const struct xe_ggtt_node *node, u16 vfid)h](j )}(hconst struct xe_ggtt_node *nodeh](j?)}(hj%h]hconst}(hj]@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjY@ubjQ)}(h h]h }(hjj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY@ubj?)}(hjBh]hstruct}(hjx@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjY@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY@ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj@hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNj j )}j ]j )}j jC@sbc.xe_ggtt_assignasbuh1hhjY@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY@ubj )}(hj h]h*}(hj@hhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjY@ubjh)}(hnodeh]hnode}(hj@hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjY@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjU@ubj )}(hu16 vfidh](h)}(hhh]jh)}(hu16h]hu16}(hj@hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNj j )}j ]j@c.xe_ggtt_assignasbuh1hhj@ubjQ)}(h h]h }(hj AhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubjh)}(hvfidh]hvfid}(hjAhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjU@ubeh}(h]h ]h"]h$]h&]hhuh1j hj@hhhj.@hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj@hhhj.@hMubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1j2hj.@hMhj@hhubj)}(hhh]h)}(hassign a GGTT region to the VFh]hassign a GGTT region to the VF}(hjCAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj@Ahhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj.@hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[Ajj[Ajjjuh1j-hhhj hNhNubj)}(hXI**Parameters** ``const struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to update ``u16 vfid`` the VF identifier **Description** This function is used by the PF driver to assign a GGTT region to the VF. In addition to PTE's VFID bits 11:2 also PRESENT bit 0 is set as on some platforms VFs can't modify that either.h](h)}(h**Parameters**h]j)}(hjeAh]h Parameters}(hjgAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcAubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj_Aubj )}(hhh](j)}(hI``const struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to update h](j)}(h#``const struct xe_ggtt_node *node``h]j)}(hjAh]hconst struct xe_ggtt_node *node}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj~Aubj1)}(hhh]h)}(h$the :c:type:`xe_ggtt_node` to updateh](hthe }(hjAhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjAh]h xe_ggtt_node}(hjAhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhjAhMhjAubh to update}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1j0hj~Aubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj{Aubj)}(h``u16 vfid`` the VF identifier h](j)}(h ``u16 vfid``h]j)}(hjAh]hu16 vfid}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjAubj1)}(hhh]h)}(hthe VF identifierh]hthe VF identifier}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1j0hjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj{Aubeh}(h]h ]h"]h$]h&]uh1j hj_Aubh)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj_Aubh)}(hThis function is used by the PF driver to assign a GGTT region to the VF. In addition to PTE's VFID bits 11:2 also PRESENT bit 0 is set as on some platforms VFs can't modify that either.h]hThis function is used by the PF driver to assign a GGTT region to the VF. In addition to PTE’s VFID bits 11:2 also PRESENT bit 0 is set as on some platforms VFs can’t modify that either.}(hj1BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj_Aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_node_save (C function)c.xe_ggtt_node_savehNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hSint xe_ggtt_node_save (struct xe_ggtt_node *node, void *dst, size_t size, u16 vfid)h]j9)}(hRint xe_ggtt_node_save(struct xe_ggtt_node *node, void *dst, size_t size, u16 vfid)h](j)}(hinth]hint}(hj`BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\BhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjoBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj\BhhhjnBhMubjb)}(hxe_ggtt_node_saveh]jh)}(hxe_ggtt_node_saveh]hxe_ggtt_node_save}(hjBhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj}Bubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj\BhhhjnBhMubj )}(h=(struct xe_ggtt_node *node, void *dst, size_t size, u16 vfid)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjBhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjBubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjBhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNj j )}j ]j )}j jBsbc.xe_ggtt_node_saveasbuh1hhjBubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjBubj )}(hj h]h*}(hjBhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjBubjh)}(hnodeh]hnode}(hjBhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjBubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjBubj )}(h void *dsth](j)}(hvoidh]hvoid}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj CubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj Cubj )}(hj h]h*}(hj+ChhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj Cubjh)}(hdsth]hdst}(hj8ChhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj Cubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjBubj )}(h size_t sizeh](h)}(hhh]jh)}(hsize_th]hsize_t}(hjTChhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjQCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVCmodnameN classnameNj j )}j ]jBc.xe_ggtt_node_saveasbuh1hhjMCubjQ)}(h h]h }(hjrChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjMCubjh)}(hsizeh]hsize}(hjChhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjMCubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjBubj )}(hu16 vfidh](h)}(hhh]jh)}(hu16h]hu16}(hjChhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNj j )}j ]jBc.xe_ggtt_node_saveasbuh1hhjCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubjh)}(hvfidh]hvfid}(hjChhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjCubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjBubeh}(h]h ]h"]h$]h&]hhuh1j hj\BhhhjnBhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjXBhhhjnBhMubah}(h]jSBah ](jjeh"]h$]h&]jj)jhuh1j2hjnBhMhjUBhhubj)}(hhh]h)}(h*Save a :c:type:`xe_ggtt_node` to a buffer.h](hSave a }(hjChhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjCh]h xe_ggtt_node}(hjChhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]jBc.xe_ggtt_node_saveasbj xe_ggtt_nodeuh1hhjLhKhjCubh to a buffer.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjChhubah}(h]h ]h"]h$]h&]uh1jhjUBhhhjnBhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2Djj2Djjjuh1j-hhhj hNhNubj)}(hX **Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be saved ``void *dst`` destination buffer ``size_t size`` destination buffer size in bytes ``u16 vfid`` VF identifier **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Dubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj6Dubj )}(hhh](j)}(hE``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be saved h](j)}(h``struct xe_ggtt_node *node``h]j)}(hj[Dh]hstruct xe_ggtt_node *node}(hj]DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYDubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjUDubj1)}(hhh]h)}(h&the :c:type:`xe_ggtt_node` to be savedh](hthe }(hjtDhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj~Dh]h xe_ggtt_node}(hjDhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj|Dubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhjpDhMhjtDubh to be saved}(hjtDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjpDhMhjqDubah}(h]h ]h"]h$]h&]uh1j0hjUDubeh}(h]h ]h"]h$]h&]uh1jhjpDhMhjRDubj)}(h!``void *dst`` destination buffer h](j)}(h ``void *dst``h]j)}(hjDh]h void *dst}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjDubj1)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1j0hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjRDubj)}(h1``size_t size`` destination buffer size in bytes h](j)}(h``size_t size``h]j)}(hjDh]h size_t size}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjDubj1)}(hhh]h)}(h destination buffer size in bytesh]h destination buffer size in bytes}(hj EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1j0hjDubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjRDubj)}(h``u16 vfid`` VF identifier h](j)}(h ``u16 vfid``h]j)}(hj)Eh]hu16 vfid}(hj+EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Eubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj#Eubj1)}(hhh]h)}(h VF identifierh]h VF identifier}(hjBEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>EhMhj?Eubah}(h]h ]h"]h$]h&]uh1j0hj#Eubeh}(h]h ]h"]h$]h&]uh1jhj>EhMhjRDubeh}(h]h ]h"]h$]h&]uh1j hj6Dubh)}(h **Return**h]j)}(hjdEh]hReturn}(hjfEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbEubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj6Dubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjzEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj6Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_node_load (C function)c.xe_ggtt_node_loadhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hYint xe_ggtt_node_load (struct xe_ggtt_node *node, const void *src, size_t size, u16 vfid)h]j9)}(hXint xe_ggtt_node_load(struct xe_ggtt_node *node, const void *src, size_t size, u16 vfid)h](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM8ubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEhhhjEhM8ubjb)}(hxe_ggtt_node_loadh]jh)}(hxe_ggtt_node_loadh]hxe_ggtt_node_load}(hjEhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjEubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjEhhhjEhM8ubj )}(hC(struct xe_ggtt_node *node, const void *src, size_t size, u16 vfid)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjEhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjFhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNj j )}j ]j )}j jEsbc.xe_ggtt_node_loadasbuh1hhjEubjQ)}(h h]h }(hj$FhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj )}(hj h]h*}(hj2FhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjEubjh)}(hnodeh]hnode}(hj?FhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjEubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEubj )}(hconst void *srch](j?)}(hj%h]hconst}(hjXFhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjTFubjQ)}(h h]h }(hjeFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTFubj)}(hvoidh]hvoid}(hjsFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTFubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTFubj )}(hj h]h*}(hjFhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjTFubjh)}(hsrch]hsrc}(hjFhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjTFubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEubj )}(h size_t sizeh](h)}(hhh]jh)}(hsize_th]hsize_t}(hjFhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNj j )}j ]j Fc.xe_ggtt_node_loadasbuh1hhjFubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubjh)}(hsizeh]hsize}(hjFhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjFubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEubj )}(hu16 vfidh](h)}(hhh]jh)}(hu16h]hu16}(hjGhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNj j )}j ]j Fc.xe_ggtt_node_loadasbuh1hhjFubjQ)}(h h]h }(hjGhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFubjh)}(hvfidh]hvfid}(hj,GhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjFubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEubeh}(h]h ]h"]h$]h&]hhuh1j hjEhhhjEhM8ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjEhhhjEhM8ubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1j2hjEhM8hjEhhubj)}(hhh]h)}(h,Load a :c:type:`xe_ggtt_node` from a buffer.h](hLoad a }(hjVGhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj`Gh]h xe_ggtt_node}(hjbGhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj^Gubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]j Fc.xe_ggtt_node_loadasbj xe_ggtt_nodeuh1hhjLhKhjVGubh from a buffer.}(hjVGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM8hjSGhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjEhM8ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1j-hhhj hNhNubj)}(hX**Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be loaded ``const void *src`` source buffer ``size_t size`` source buffer size in bytes ``u16 vfid`` VF identifier **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM<hjGubj )}(hhh](j)}(hF``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be loaded h](j)}(h``struct xe_ggtt_node *node``h]j)}(hjGh]hstruct xe_ggtt_node *node}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM9hjGubj1)}(hhh]h)}(h'the :c:type:`xe_ggtt_node` to be loadedh](hthe }(hjGhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjGh]h xe_ggtt_node}(hjGhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhjGhM9hjGubh to be loaded}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGhM9hjGubah}(h]h ]h"]h$]h&]uh1j0hjGubeh}(h]h ]h"]h$]h&]uh1jhjGhM9hjGubj)}(h"``const void *src`` source buffer h](j)}(h``const void *src``h]j)}(hjHh]hconst void *src}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM:hjHubj1)}(hhh]h)}(h source bufferh]h source buffer}(hj4HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0HhM:hj1Hubah}(h]h ]h"]h$]h&]uh1j0hjHubeh}(h]h ]h"]h$]h&]uh1jhj0HhM:hjGubj)}(h,``size_t size`` source buffer size in bytes h](j)}(h``size_t size``h]j)}(hjTHh]h size_t size}(hjVHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRHubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM;hjNHubj1)}(hhh]h)}(hsource buffer size in bytesh]hsource buffer size in bytes}(hjmHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiHhM;hjjHubah}(h]h ]h"]h$]h&]uh1j0hjNHubeh}(h]h ]h"]h$]h&]uh1jhjiHhM;hjGubj)}(h``u16 vfid`` VF identifier h](j)}(h ``u16 vfid``h]j)}(hjHh]hu16 vfid}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM<hjHubj1)}(hhh]h)}(h VF identifierh]h VF identifier}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM<hjHubah}(h]h ]h"]h$]h&]uh1j0hjHubeh}(h]h ]h"]h$]h&]uh1jhjHhM<hjGubeh}(h]h ]h"]h$]h&]uh1j hjGubh)}(h **Return**h]j)}(hjHh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM>hjGubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM>hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_dump (C function)c.xe_ggtt_dumphNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h>int xe_ggtt_dump (struct xe_ggtt *ggtt, struct drm_printer *p)h]j9)}(h=int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p)h](j)}(hinth]hint}(hj IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj IhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM`ubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj IhhhjIhM`ubjb)}(h xe_ggtt_dumph]jh)}(h xe_ggtt_dumph]h xe_ggtt_dump}(hj.IhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj*Iubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj IhhhjIhM`ubj )}(h-(struct xe_ggtt *ggtt, struct drm_printer *p)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjJIhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjFIubjQ)}(h h]h }(hjWIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFIubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjhIhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjeIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjImodnameN classnameNj j )}j ]j )}j j0Isbc.xe_ggtt_dumpasbuh1hhjFIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjFIubj )}(hj h]h*}(hjIhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjFIubjh)}(hggtth]hggtt}(hjIhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjFIubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjBIubj )}(hstruct drm_printer *ph](j?)}(hjBh]hstruct}(hjIhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubh)}(hhh]jh)}(h drm_printerh]h drm_printer}(hjIhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNj j )}j ]jIc.xe_ggtt_dumpasbuh1hhjIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubj )}(hj h]h*}(hjJhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjIubjh)}(hj" h]hp}(hjJhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjIubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjBIubeh}(h]h ]h"]h$]h&]hhuh1j hj IhhhjIhM`ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjIhhhjIhM`ubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1j2hjIhM`hjIhhubj)}(hhh]h)}(hDump GGTT for debugh]hDump GGTT for debug}(hjhjKubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjKhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNj j )}j ]jKc.xe_ggtt_print_holesasbuh1hhjKubjQ)}(h h]h }(hj LhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj )}(hj h]h*}(hjLhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjKubjh)}(hggtth]hggtt}(hj%LhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjKubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjKubj )}(h u64 alignmenth](h)}(hhh]jh)}(hu64h]hu64}(hjALhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj>Lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCLmodnameN classnameNj j )}j ]jKc.xe_ggtt_print_holesasbuh1hhj:LubjQ)}(h h]h }(hj_LhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:Lubjh)}(h alignmenth]h alignment}(hjmLhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj:Lubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjKubj )}(hstruct drm_printer *ph](j?)}(hjBh]hstruct}(hjLhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjLubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubh)}(hhh]jh)}(h drm_printerh]h drm_printer}(hjLhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNj j )}j ]jKc.xe_ggtt_print_holesasbuh1hhjLubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjLubj )}(hj h]h*}(hjLhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjLubjh)}(hj" h]hp}(hjLhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjLubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjKubeh}(h]h ]h"]h$]h&]hhuh1j hjxKhhhjKhMtubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjtKhhhjKhMtubah}(h]joKah ](jjeh"]h$]h&]jj)jhuh1j2hjKhMthjqKhhubj)}(hhh]h)}(h Print holesh]h Print holes}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMthjMhhubah}(h]h ]h"]h$]h&]uh1jhjqKhhhjKhMtubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1j-hhhj hNhNubj)}(hX%**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be inspected ``u64 alignment`` min alignment ``struct drm_printer *p`` the :c:type:`drm_printer` **Description** Print GGTT ranges that are available and return total size available. **Return** Total available size.h](h)}(h**Parameters**h]j)}(hj(Mh]h Parameters}(hj*MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Mubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMxhj"Mubj )}(hhh](j)}(h?``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be inspected h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjGMh]hstruct xe_ggtt *ggtt}(hjIMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEMubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMuhjAMubj1)}(hhh]h)}(h%the :c:type:`xe_ggtt` to be inspectedh](hthe }(hj`MhhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjjMh]hxe_ggtt}(hjlMhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjhMubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj\MhMuhj`Mubh to be inspected}(hj`MhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\MhMuhj]Mubah}(h]h ]h"]h$]h&]uh1j0hjAMubeh}(h]h ]h"]h$]h&]uh1jhj\MhMuhj>Mubj)}(h ``u64 alignment`` min alignment h](j)}(h``u64 alignment``h]j)}(hjMh]h u64 alignment}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMvhjMubj1)}(hhh]h)}(h min alignmenth]h min alignment}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMvhjMubah}(h]h ]h"]h$]h&]uh1j0hjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMvhj>Mubj)}(h4``struct drm_printer *p`` the :c:type:`drm_printer` h](j)}(h``struct drm_printer *p``h]j)}(hjMh]hstruct drm_printer *p}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMwhjMubj1)}(hhh]h)}(hthe :c:type:`drm_printer`h](hthe }(hjMhhhNhNubh)}(h:c:type:`drm_printer`h]j)}(hjMh]h drm_printer}(hjNhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j drm_printeruh1hhjMhMwhjMubeh}(h]h ]h"]h$]h&]uh1hhjMhMwhjMubah}(h]h ]h"]h$]h&]uh1j0hjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMwhj>Mubeh}(h]h ]h"]h$]h&]uh1j hj"Mubh)}(h**Description**h]j)}(hj6Nh]h Description}(hj8NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Nubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMyhj"Mubh)}(hEPrint GGTT ranges that are available and return total size available.h]hEPrint GGTT ranges that are available and return total size available.}(hjLNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMxhj"Mubh)}(h **Return**h]j)}(hj]Nh]hReturn}(hj_NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Nubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMzhj"Mubh)}(hTotal available size.h]hTotal available size.}(hjsNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM{hj"Mubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)%xe_ggtt_encode_pte_flags (C function)c.xe_ggtt_encode_pte_flagshNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hTu64 xe_ggtt_encode_pte_flags (struct xe_ggtt *ggtt, struct xe_bo *bo, u16 pat_index)h]j9)}(hSu64 xe_ggtt_encode_pte_flags(struct xe_ggtt *ggtt, struct xe_bo *bo, u16 pat_index)h](h)}(hhh]jh)}(hu64h]hu64}(hjNhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjNubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjNmodnameN classnameNj j )}j ]j )}j xe_ggtt_encode_pte_flagssbc.xe_ggtt_encode_pte_flagsasbuh1hhjNhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjNhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNhhhjNhMubjb)}(hxe_ggtt_encode_pte_flagsh]jh)}(hjNh]hxe_ggtt_encode_pte_flags}(hjNhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjNubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjNhhhjNhMubj )}(h7(struct xe_ggtt *ggtt, struct xe_bo *bo, u16 pat_index)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjNhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjNubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjOhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNj j )}j ]jNc.xe_ggtt_encode_pte_flagsasbuh1hhjNubjQ)}(h h]h }(hj0OhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjNubj )}(hj h]h*}(hj>OhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjNubjh)}(hggtth]hggtt}(hjKOhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjNubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjNubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hjdOhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj`OubjQ)}(h h]h }(hjqOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`Oubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hjOhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNj j )}j ]jNc.xe_ggtt_encode_pte_flagsasbuh1hhj`OubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj`Oubj )}(hj h]h*}(hjOhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hj`Oubjh)}(hboh]hbo}(hjOhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj`Oubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjNubj )}(h u16 pat_indexh](h)}(hhh]jh)}(hu16h]hu16}(hjOhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNj j )}j ]jNc.xe_ggtt_encode_pte_flagsasbuh1hhjOubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubjh)}(h pat_indexh]h pat_index}(hjPhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjOubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjNubeh}(h]h ]h"]h$]h&]hhuh1j hjNhhhjNhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjNhhhjNhMubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1j2hjNhMhjNhhubj)}(hhh]h)}(hGet PTE encoding flags for BOh]hGet PTE encoding flags for BO}(hj-PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj*Phhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjNhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEPjjEPjjjuh1j-hhhj hNhNubj)}(hX3**Parameters** ``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` ``struct xe_bo *bo`` :c:type:`xe_bo` ``u16 pat_index`` The pat_index for the PTE. **Description** This function returns the pte_flags for a given BO, without address. It's used for DPT to fill a GGTT mapped BO with a linear lookup table.h](h)}(h**Parameters**h]j)}(hjOPh]h Parameters}(hjQPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMPubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjIPubj )}(hhh](j)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjnPh]hstruct xe_ggtt *ggtt}(hjpPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlPubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjhPubj1)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hjPh]j)}(hjPh]hxe_ggtt}(hjPhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjPhMhjPubah}(h]h ]h"]h$]h&]uh1hhjPhMhjPubah}(h]h ]h"]h$]h&]uh1j0hjhPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjePubj)}(h%``struct xe_bo *bo`` :c:type:`xe_bo` h](j)}(h``struct xe_bo *bo``h]j)}(hjPh]hstruct xe_bo *bo}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjPubj1)}(hhh]h)}(h:c:type:`xe_bo`h]h)}(hjPh]j)}(hjPh]hxe_bo}(hjPhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhjPhMhjPubah}(h]h ]h"]h$]h&]uh1hhjPhMhjPubah}(h]h ]h"]h$]h&]uh1j0hjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjePubj)}(h-``u16 pat_index`` The pat_index for the PTE. h](j)}(h``u16 pat_index``h]j)}(hjQh]h u16 pat_index}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjQubj1)}(hhh]h)}(hThe pat_index for the PTE.h]hThe pat_index for the PTE.}(hj-QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)QhMhj*Qubah}(h]h ]h"]h$]h&]uh1j0hjQubeh}(h]h ]h"]h$]h&]uh1jhj)QhMhjePubeh}(h]h ]h"]h$]h&]uh1j hjIPubh)}(h**Description**h]j)}(hjOQh]h Description}(hjQQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMQubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjIPubh)}(hThis function returns the pte_flags for a given BO, without address. It's used for DPT to fill a GGTT mapped BO with a linear lookup table.h]hThis function returns the pte_flags for a given BO, without address. It’s used for DPT to fill a GGTT mapped BO with a linear lookup table.}(hjeQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjIPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_read_pte (C function)c.xe_ggtt_read_ptehNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h7u64 xe_ggtt_read_pte (struct xe_ggtt *ggtt, u64 offset)h]j9)}(h6u64 xe_ggtt_read_pte(struct xe_ggtt *ggtt, u64 offset)h](h)}(hhh]jh)}(hu64h]hu64}(hjQhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNj j )}j ]j )}j xe_ggtt_read_ptesbc.xe_ggtt_read_pteasbuh1hhjQhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQhhhjQhMubjb)}(hxe_ggtt_read_pteh]jh)}(hjQh]hxe_ggtt_read_pte}(hjQhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjQubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjQhhhjQhMubj )}(h"(struct xe_ggtt *ggtt, u64 offset)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjQhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjQubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjRhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNj j )}j ]jQc.xe_ggtt_read_pteasbuh1hhjQubjQ)}(h h]h }(hj"RhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQubj )}(hj h]h*}(hj0RhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjQubjh)}(hggtth]hggtt}(hj=RhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjQubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjQubj )}(h u64 offseth](h)}(hhh]jh)}(hu64h]hu64}(hjYRhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjVRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[RmodnameN classnameNj j )}j ]jQc.xe_ggtt_read_pteasbuh1hhjRRubjQ)}(h h]h }(hjwRhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRRubjh)}(hoffseth]hoffset}(hjRhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjRRubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjQubeh}(h]h ]h"]h$]h&]hhuh1j hjQhhhjQhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjQhhhjQhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1j2hjQhMhjQhhubj)}(hhh]h)}(hRead a PTE from the GGTTh]hRead a PTE from the GGTT}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjRhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjQhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1j-hhhj hNhNubj)}(h**Parameters** ``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` ``u64 offset`` the offset for which the mapping should be read. **Description** Used by testcases, and by display reading out an inherited bios FB.h](h)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjRubj )}(hhh](j)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjRh]hstruct xe_ggtt *ggtt}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjRubj1)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hj Sh]j)}(hj Sh]hxe_ggtt}(hjShhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj Subah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjShMhj Subah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1j0hjRubeh}(h]h ]h"]h$]h&]uh1jhjShMhjRubj)}(h@``u64 offset`` the offset for which the mapping should be read. h](j)}(h``u64 offset``h]j)}(hjCSh]h u64 offset}(hjEShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjASubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj=Subj1)}(hhh]h)}(h0the offset for which the mapping should be read.h]h0the offset for which the mapping should be read.}(hj\ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXShMhjYSubah}(h]h ]h"]h$]h&]uh1j0hj=Subeh}(h]h ]h"]h$]h&]uh1jhjXShMhjRubeh}(h]h ]h"]h$]h&]uh1j hjRubh)}(h**Description**h]j)}(hj~Sh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|Subah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjRubh)}(hCUsed by testcases, and by display reading out an inherited bios FB.h]hCUsed by testcases, and by display reading out an inherited bios FB.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_node_addr (C function)c.xe_ggtt_node_addrhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h7u64 xe_ggtt_node_addr (const struct xe_ggtt_node *node)h]j9)}(h6u64 xe_ggtt_node_addr(const struct xe_ggtt_node *node)h](h)}(hhh]jh)}(hu64h]hu64}(hjShhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNj j )}j ]j )}j xe_ggtt_node_addrsbc.xe_ggtt_node_addrasbuh1hhjShhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjShhhjShMubjb)}(hxe_ggtt_node_addrh]jh)}(hjSh]hxe_ggtt_node_addr}(hjShhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjSubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjShhhjShMubj )}(h!(const struct xe_ggtt_node *node)h]j )}(hconst struct xe_ggtt_node *nodeh](j?)}(hj%h]hconst=}(hjThhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjTubjQ)}(h h]h }(hj"ThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj?)}(hjBh]hstruct}(hj0ThhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjTubjQ)}(h h]h }(hj=ThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjNThhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjKTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPTmodnameN classnameNj j )}j ]jSc.xe_ggtt_node_addrasbuh1hhjTubjQ)}(h h]h }(hjlThhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjTubj )}(hj h]h*}(hjzThhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjTubjh)}(hnodeh]hnode}(hjThhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjTubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj Tubah}(h]h ]h"]h$]h&]hhuh1j hjShhhjShMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjShhhjShMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1j2hjShMhjShhubj)}(hhh]h)}(hGet **node** offset in GGTT.h](hGet }(hjThhhNhNubj)}(h**node**h]hnode}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh offset in GGTT.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjThhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1j-hhhj hNhNubj)}(h**Parameters** ``const struct xe_ggtt_node *node`` :c:type:`xe_ggtt_node` **Description** Get the GGTT offset for allocated node.h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjTubj )}(hhh]j)}(h;``const struct xe_ggtt_node *node`` :c:type:`xe_ggtt_node` h](j)}(h#``const struct xe_ggtt_node *node``h]j)}(hjUh]hconst struct xe_ggtt_node *node}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjTubj1)}(hhh]h)}(h:c:type:`xe_ggtt_node`h]h)}(hjUh]j)}(hjUh]h xe_ggtt_node}(hj$UhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj!Uubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhjUhMhjUubah}(h]h ]h"]h$]h&]uh1hhjUhMhjUubah}(h]h ]h"]h$]h&]uh1j0hjTubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjTubah}(h]h ]h"]h$]h&]uh1j hjTubh)}(h**Description**h]j)}(hjYUh]h Description}(hj[UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWUubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjTubh)}(h'Get the GGTT offset for allocated node.h]h'Get the GGTT offset for allocated node.}(hjoUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_node_size (C function)c.xe_ggtt_node_sizehNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h7u64 xe_ggtt_node_size (const struct xe_ggtt_node *node)h]j9)}(h6u64 xe_ggtt_node_size(const struct xe_ggtt_node *node)h](h)}(hhh]jh)}(hu64h]hu64}(hjUhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNj j )}j ]j )}j xe_ggtt_node_sizesbc.xe_ggtt_node_sizeasbuh1hhjUhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUhhhjUhMubjb)}(hxe_ggtt_node_sizeh]jh)}(hjUh]hxe_ggtt_node_size}(hjUhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjUubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjUhhhjUhMubj )}(h!(const struct xe_ggtt_node *node)h]j )}(hconst struct xe_ggtt_node *nodeh](j?)}(hj%h]hconst}(hjUhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjUubjQ)}(h h]h }(hjUhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj?)}(hjBh]hstruct}(hj VhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjUubjQ)}(h h]h }(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj)VhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj&Vubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+VmodnameN classnameNj j )}j ]jUc.xe_ggtt_node_sizeasbuh1hhjUubjQ)}(h h]h }(hjGVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjUubj )}(hj h]h*}(hjUVhhhNhNubah}(h]h ]j" ah"]h$]h&]uh1j hjUubjh)}(hnodeh]hnode}(hjbVhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjUubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjUubah}(h]h ]h"]h$]h&]hhuh1j hjUhhhjUhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjUhhhjUhMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1j2hjUhMhjUhhubj)}(hhh]h)}(hGet **node** allocation size.h](hGet }(hjVhhhNhNubj)}(h**node**h]hnode}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh allocation size.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjUhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1j-hhhj hNhNubj)}(h}**Parameters** ``const struct xe_ggtt_node *node`` :c:type:`xe_ggtt_node` **Description** Get the allocated node's size.h](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjVubj )}(hhh]j)}(h;``const struct xe_ggtt_node *node`` :c:type:`xe_ggtt_node` h](j)}(h#``const struct xe_ggtt_node *node``h]j)}(hjVh]hconst struct xe_ggtt_node *node}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjVubj1)}(hhh]h)}(h:c:type:`xe_ggtt_node`h]h)}(hjVh]j)}(hjVh]h xe_ggtt_node}(hjVhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhjVhMhjVubah}(h]h ]h"]h$]h&]uh1hhjVhMhjVubah}(h]h ]h"]h$]h&]uh1j0hjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjVubah}(h]h ]h"]h$]h&]uh1j hjVubh)}(h**Description**h]j)}(hj4Wh]h Description}(hj6WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Wubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjVubh)}(hGet the allocated node's size.h]h Get the allocated node’s size.}(hjJWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubeh}(h]ggtt-internal-apiah ]h"]ggtt internal apiah$]h&]uh1hhjhhhhhKubeh}(h]ggttah ]h"]ggttah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hPagetable buildingh]hPagetable building}(hjsWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpWhhhhhKubh)}(hBelow we use the term "page-table" for both page-directories, containing pointers to lower level page-directories or page-tables, and level 0 page-tables that contain only page-table-entries pointing to memory pages.h]hBelow we use the term “page-table” for both page-directories, containing pointers to lower level page-directories or page-tables, and level 0 page-tables that contain only page-table-entries pointing to memory pages.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:28: ./drivers/gpu/drm/xe/xe_pt.chKhjpWhhubh)}(hXWhen inserting an address range in an already existing page-table tree there will typically be a set of page-tables that are shared with other address ranges, and a set that are private to this address range. The set of shared page-tables can be at most two per level, and those can't be updated immediately because the entries of those page-tables may still be in use by the gpu for other mappings. Therefore when inserting entries into those, we instead stage those insertions by adding insertion data into struct xe_vm_pgtable_update structures. This data, (subtrees for the cpu and page-table-entries for the gpu) is then added in a separate commit step. CPU-data is committed while still under the vm lock, the object lock and for userptr, the notifier lock in read mode. The GPU async data is committed either by the GPU or CPU after fulfilling relevant dependencies. For non-shared page-tables (and, in fact, for shared ones that aren't existing at the time of staging), we add the data in-place without the special update structures. This private part of the page-table tree will remain disconnected from the vm page-table tree until data is committed to the shared page tables of the vm tree in the commit phase.h]hXWhen inserting an address range in an already existing page-table tree there will typically be a set of page-tables that are shared with other address ranges, and a set that are private to this address range. The set of shared page-tables can be at most two per level, and those can’t be updated immediately because the entries of those page-tables may still be in use by the gpu for other mappings. Therefore when inserting entries into those, we instead stage those insertions by adding insertion data into struct xe_vm_pgtable_update structures. This data, (subtrees for the cpu and page-table-entries for the gpu) is then added in a separate commit step. CPU-data is committed while still under the vm lock, the object lock and for userptr, the notifier lock in read mode. The GPU async data is committed either by the GPU or CPU after fulfilling relevant dependencies. For non-shared page-tables (and, in fact, for shared ones that aren’t existing at the time of staging), we add the data in-place without the special update structures. This private part of the page-table tree will remain disconnected from the vm page-table tree until data is committed to the shared page tables of the vm tree in the commit phase.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:28: ./drivers/gpu/drm/xe/xe_pt.chKhjpWhhubeh}(h]pagetable-buildingah ]h"]pagetable buildingah$]h&]uh1hhhhhhhhKubeh}(h]memory-managementah ]h"]memory managementah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjWerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jWjWhhjjjGjDjjjjjjjjj&j#jujrjjjjjEjBjmjjjjjmWjjWjeWjbWjWjWu nametypes}(jWhjjGjjjjj&jujjjEjmjjmWjeWjWuh}(jWhhhjhjDjjjJjjjjjjjj#jjrj)jjIjjjBjjjjHjjxjjWjjbWj j+j4j jj j j` je jG jL jjj|jjJjOj^jcjjjjjsjxjjj j j"j"j$j$j&j&j`(je(j+j+jg.jl.j3j3j7j7j;j;jM=jR=j@j@jSBjXBjEjEjIjIjoKjtKjNjNjQjQjSjSjUjUjWjpWu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]h)}(hUnexpected indentation.h]hUnexpected indentation.}(hj9XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6Xubah}(h]h ]h"]h$]h&]levelKtypeERRORsourcejlineK'uh1j4Xhjubatransform_messages] transformerN include_log] decorationNhhub.