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 size; #define XE_GGTT_FLAGS_64K BIT(0); 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 ``size`` Total size of this GGTT ``flags`` Flags for this GGTT Acceptable flags: - ``XE_GGTT_FLAGS_64K`` - if PTE size is 64K. Otherwise, regular is 4K. ``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)}(hX<struct xe_ggtt { struct xe_tile *tile; u64 size; #define XE_GGTT_FLAGS_64K BIT(0); 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]hX<struct xe_ggtt { struct xe_tile *tile; u64 size; #define XE_GGTT_FLAGS_64K BIT(0); 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!``size`` Total size of this GGTT h](j)}(h``size``h]j)}(hjUh]hsize}(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)}(hTotal size of this GGTTh]hTotal size of this GGTT}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhKhjkubah}(h]h ]h"]h$]h&]uh1j0hjOubeh}(h]h ]h"]h$]h&]uh1jhjjhKhj ubj)}(hx``flags`` Flags for this GGTT Acceptable flags: - ``XE_GGTT_FLAGS_64K`` - if PTE size is 64K. Otherwise, regular is 4K. 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)}(hmFlags for this GGTT Acceptable flags: - ``XE_GGTT_FLAGS_64K`` - if PTE size is 64K. Otherwise, regular is 4K.h](h(Flags for this GGTT Acceptable flags: - }(hjhhhNhNubj)}(h``XE_GGTT_FLAGS_64K``h]hXE_GGTT_FLAGS_64K}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh0 - if PTE size is 64K. Otherwise, regular is 4K.}(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.hhKhjubah}(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)}(hjh]hscratch}(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)}(h1Internal object allocation used as a scratch pageh]h1Internal object allocation used as a scratch page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK$hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhK$hj ubj)}(h)``lock`` Mutex lock to protect GGTT data h](j)}(h``lock``h]j)}(hjh]hlock}(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&hj ubj1)}(hhh]h)}(hMutex lock to protect GGTT datah]hMutex lock to protect GGTT data}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hK&hj)ubah}(h]h ]h"]h$]h&]uh1j0hj ubeh}(h]h ]h"]h$]h&]uh1jhj(hK&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)}(hjLh]hgsm}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(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*hjFubj1)}(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}(hjehhhNhNubah}(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)hjbubah}(h]h ]h"]h$]h&]uh1j0hjFubeh}(h]h ]h"]h$]h&]uh1jhjahK*hj 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.hhK-hjubj1)}(hhh]h)}(h"Page Table operations per platformh]h"Page Table operations per platform}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK-hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhK-hj ubj)}(hE``mm`` The memory manager used to manage individual GGTT allocations h](j)}(h``mm``h]j)}(hjh]hmm}(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)}(h=The memory manager used to manage individual GGTT allocationsh]h=The memory manager used to manage individual GGTT allocations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK/hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhK/hj ubj)}(h$``access_count`` counts GGTT writes h](j)}(h``access_count``h]j)}(hjh]h access_count}(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.hhK1hjubj1)}(hhh]h)}(hcounts GGTT writesh]hcounts GGTT writes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK1hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhj hK1hj ubj)}(h>``wq`` Dedicated unordered work queue to process node removalsh](j)}(h``wq``h]j)}(hj1h]hwq}(hj3hhhNhNubah}(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.hhK2hj+ubj1)}(hhh]h)}(h7Dedicated unordered work queue to process node removalsh]h7Dedicated unordered work queue to process node removals}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK3hjGubah}(h]h ]h"]h$]h&]uh1j0hj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhK2hj ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(h**Description**h]j)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK6hj hhubh)}(h]In general, each tile can contains its own Global Graphics Translation Table (GGTT) instance.h]h]In general, each tile can contains its own Global Graphics Translation Table (GGTT) instance.}(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.hhKhj hhubj)}(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}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjhhh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhKubjb)}(h xe_ggtt_nodeh]jh)}(hjh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hjhKhjhhubj)}(hhh]h)}(hA node in GGTT.h]hA node in GGTT.}(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.hhK7hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(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}(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.hhK;hjubj)}(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; };}hj1sbah}(h]h ]h"]h$]h&]hhuh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK=hjubh)}(h **Members**h]j)}(hjBh]hMembers}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKDhjubj )}(hhh](j)}(hG``ggtt`` Back pointer to xe_ggtt where this region will be inserted at h](j)}(h``ggtt``h]j)}(hjah]hggtt}(hjchhhNhNubah}(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?hj[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}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhK?hjwubah}(h]h ]h"]h$]h&]uh1j0hj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhK?hjXubj)}(h``base`` A drm_mm_node h](j)}(h``base``h]j)}(hjh]hbase}(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.hhKAhjubj1)}(hhh]h)}(h A drm_mm_nodeh]h A drm_mm_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKAhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhKAhjXubj)}(hA``delayed_removal_work`` The work struct for the delayed removal h](j)}(h``delayed_removal_work``h]j)}(hjh]hdelayed_removal_work}(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.hhKChjubj1)}(hhh]h)}(h'The work struct for the delayed removalh]h'The work struct for the delayed removal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKChjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhKChjXubj)}(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&]uh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKDhj ubj1)}(hhh]h)}(h%If it needs invalidation upon removalh]h%If it needs invalidation upon removal}(hj% 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.hhKEhj" ubah}(h]h ]h"]h$]h&]uh1j0hj ubeh}(h]h ]h"]h$]h&]uh1jhj! hKDhjXubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubh)}(h**Description**h]j)}(hjO h]h Description}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKHhj 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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK8hj hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_pt_ops (C struct)c.xe_ggtt_pt_opshNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hxe_ggtt_pt_opsh]j9)}(hstruct xe_ggtt_pt_opsh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj hhh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhK?ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hK?ubjb)}(hxe_ggtt_pt_opsh]jh)}(hj h]hxe_ggtt_pt_ops}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj hhhj hK?ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj hhhj hK?ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j2hj hK?hj 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.}(hj 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.hhKIhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hK?ubeh}(h]h ](jstructeh"]h$]h&]jjjj jj jjjuh1j-hhhj hNhNubj)}(hX-**Definition**:: struct xe_ggtt_pt_ops { u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index); void (*ggtt_set_pte)(struct xe_ggtt *ggtt, u64 addr, u64 pte); }; **Members** ``pte_encode_flags`` Encode PTE flags for a given BO ``ggtt_set_pte`` Directly write into GGTT's PTEh](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&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKMhj ubj)}(hstruct xe_ggtt_pt_ops { u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index); void (*ggtt_set_pte)(struct xe_ggtt *ggtt, u64 addr, u64 pte); };h]hstruct xe_ggtt_pt_ops { u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index); void (*ggtt_set_pte)(struct xe_ggtt *ggtt, u64 addr, u64 pte); };}hj sbah}(h]h ]h"]h$]h&]hhuh1jh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKOhj ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:19: ./drivers/gpu/drm/xe/xe_ggtt_types.hhKThj ubj )}(hhh](j)}(h5``pte_encode_flags`` Encode PTE flags for a given BO h](j)}(h``pte_encode_flags``h]j)}(hj< h]hpte_encode_flags}(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.hhKNhj6 ubj1)}(hhh]h)}(hEncode PTE flags for a given BOh]hEncode PTE flags for a given BO}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ hKNhjR ubah}(h]h ]h"]h$]h&]uh1j0hj6 ubeh}(h]h ]h"]h$]h&]uh1jhjQ hKNhj3 ubj)}(h/``ggtt_set_pte`` Directly write into GGTT's PTEh](j)}(h``ggtt_set_pte``h]j)}(hju h]h ggtt_set_pte}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs 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.hhKOhjo ubj1)}(hhh]h)}(hDirectly write into GGTT's PTEh]h Directly write into GGTT’s PTE}(hj 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.hhKPhj ubah}(h]h ]h"]h$]h&]uh1j0hjo ubeh}(h]h ]h"]h$]h&]uh1jhj hKOhj3 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_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 }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hKubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j xe_ggtt_allocsbc.xe_ggtt_allocasbuh1hhj hhhj hKubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj hKubhdesc_sig_punctuation)}(h*h]h*}(hj' hhhNhNubah}(h]h ]pah"]h$]h&]uh1j% hj hhhj hKubjb)}(h xe_ggtt_alloch]jh)}(hj h]h xe_ggtt_alloc}(hj: hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj6 ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj hhhj hKubhdesc_parameterlist)}(h(struct xe_tile *tile)h]hdesc_parameter)}(hstruct xe_tile *tileh](j?)}(hjBh]hstruct}(hjY hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjU ubjQ)}(h h]h }(hjf hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU ubh)}(hhh]jh)}(hxe_tileh]hxe_tile}(hjw hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjt ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjy modnameN classnameNj j )}j ]j c.xe_ggtt_allocasbuh1hhjU ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjU ubj& )}(hj) h]h*}(hj hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjU ubjh)}(htileh]htile}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjU ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjO ubah}(h]h ]h"]h$]h&]hhuh1jM hj hhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j2hj hKhj hhubj)}(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 ](xrefjc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdoc gpu/xe/xe_mm refdomainjreftypetype refexplicitrefwarnj j )}j ]j c.xe_ggtt_allocasb reftargetxe_tileuh1hhj hKhj ubeh}(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&]uh1jhj hhhj hKubeh}(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)}(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.chKhj ubj )}(hhh]j)}(h+``struct xe_tile *tile`` :c:type:`xe_tile` h](j)}(h``struct xe_tile *tile``h]j)}(hjB h]hstruct xe_tile *tile}(hjD 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_tile`h]h)}(hj] h]j)}(hj] h]hxe_tile}(hjb hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj_ ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]sbj xe_tileuh1hhjW hKhj[ ubah}(h]h ]h"]h$]h&]uh1hhjW hKhjX ubah}(h]h ]h"]h$]h&]uh1j0hj< ubeh}(h]h ]h"]h$]h&]uh1jhjW hKhj9 ubah}(h]h ]h"]h$]h&]uh1j hj ubh)}(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.chKhj ubh)}(h/Allocates a :c:type:`xe_ggtt` for a given tile.h](h Allocates a }(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 for a given tile.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj 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.chKhj ubh)}(h9:c:type:`xe_ggtt` on success, or NULL when out of memory.h](h)}(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( on success, or NULL when out of memory.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj ubeh}(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}(hjJ hhhNhNubah}(h]h ]ktah"]h$]h&]uh1jH hjD hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKubjQ)}(h h]h }(hjZ hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjD hhhjY hKubjb)}(hxe_ggtt_init_earlyh]jh)}(hxe_ggtt_init_earlyh]hxe_ggtt_init_early}(hjl hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjh ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjD hhhjY hKubjN )}(h(struct xe_ggtt *ggtt)h]jT )}(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 jn sbc.xe_ggtt_init_earlyasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj& )}(hj) h]h*}(hj hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj ubjh)}(hggtth]hggtt}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj ubah}(h]h ]h"]h$]h&]hhuh1jM hjD hhhjY hKubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj@ hhhjY hKubah}(h]j; ah ](jjeh"]h$]h&]jj)jhuh1j2hjY hKhj= hhubj)}(hhh]h)}(hEarly GGTT initializationh]hEarly 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.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj= hhhjY hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1j-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)}(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.chKhj'ubj )}(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.chKhjFubj1)}(hhh]h)}(h'the :c:type:`xe_ggtt` to be initializedh](hthe }(hjehhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjoh]hxe_ggtt}(hjqhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggttuh1hhjahKhjeubh to be initialized}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjahKhjbubah}(h]h ]h"]h$]h&]uh1j0hjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhjCubah}(h]h ]h"]h$]h&]uh1j hj'ubh)}(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.chKhj'ubh)}(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.chKhj'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.chMhj'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.chMhj'ubeh}(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](jI )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMrubjQ)}(h h]h }(hj%hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj$hMrubjb)}(hxe_ggtt_node_removeh]jh)}(hxe_ggtt_node_removeh]hxe_ggtt_node_remove}(hj7hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj3ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhj$hMrubjN )}(h,(struct xe_ggtt_node *node, bool invalidate)h](jT )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjShhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjOubjQ)}(h h]h }(hj`hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjqhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNj j )}j ]j )}j j9sbc.xe_ggtt_node_removeasbuh1hhjOubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubj& )}(hj) h]h*}(hjhhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjOubjh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjOubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjKubjT )}(hbool invalidateh](jI )}(hboolh]hbool}(hjhhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(h invalidateh]h invalidate}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjKubeh}(h]h ]h"]h$]h&]hhuh1jM hjhhhj$hMrubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhj$hMrubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j2hj$hMrhj hhubj)}(hhh]h)}(h-Remove a :c:type:`xe_ggtt_node` from the GGTTh](h Remove a }(hj hhhNhNubh)}(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 ]jc.xe_ggtt_node_removeasbj xe_ggtt_nodeuh1hhj hKhj ubh from the 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.chMrhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj$hMrubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1j-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)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMvhjOubj )}(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)}(hjth]hstruct xe_ggtt_node *node}(hjvhhhNhNubah}(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.chMshjnubj1)}(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_nodeuh1hhjhMshjubh to be removed}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1j0hjnubeh}(h]h ]h"]h$]h&]uh1jhjhMshjkubj)}(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.chMuhjubj1)}(hhh]h)}(h'if node needs invalidation upon removalh]h'if node needs invalidation upon removal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMthjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMuhjkubeh}(h]h ]h"]h$]h&]uh1j hjOubeh}(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](jI )}(hinth]hint}(hj*hhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hj&hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj&hhhj8hMubjb)}(h xe_ggtt_inith]jh)}(h xe_ggtt_inith]h xe_ggtt_init}(hjKhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjGubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj&hhhj8hMubjN )}(h(struct xe_ggtt *ggtt)h]jT )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjghhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjcubjQ)}(h h]h }(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubh)}(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 jMsbc.xe_ggtt_initasbuh1hhjcubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjcubj& )}(hj) h]h*}(hjhhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjcubjh)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjcubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj_ubah}(h]h ]h"]h$]h&]hhuh1jM hj&hhhj8hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj"hhhj8hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hj8hMhjhhubj)}(hhh]h)}(h%Regular non-early GGTT initializationh]h%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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j-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)}(hj h]h Parameters}(hjhhhNhNubah}(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.chMhjubj )}(hhh]j)}(hA``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be initialized 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` to be initializedh](hthe }(hjDhhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjNh]hxe_ggtt}(hjPhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggttuh1hhj@hMhjDubh to be initialized}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hMhjAubah}(h]h ]h"]h$]h&]uh1j0hj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj"ubah}(h]h ]h"]h$]h&]uh1j hjubh)}(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.chMhjubh)}(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.chMhjubeh}(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](jI )}(hinth]hint}(hjhhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hjhhhY/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)}(h"xe_ggtt_node_insert_balloon_lockedh]jh)}(h"xe_ggtt_node_insert_balloon_lockedh]h"xe_ggtt_node_insert_balloon_locked}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhjhMubjN )}(h/(struct xe_ggtt_node *node, u64 start, u64 end)h](jT )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hj hhhNhNubah}(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}(hj)hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNj j )}j ]j )}j jsb$c.xe_ggtt_node_insert_balloon_lockedasbuh1hhjubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj& )}(hj) h]h*}(hjWhhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjubjh)}(hnodeh]hnode}(hjdhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjubjT )}(h u64 starth](h)}(hhh]jh)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jE$c.xe_ggtt_node_insert_balloon_lockedasbuh1hhjyubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyubjh)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjyubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjubjT )}(hu64 endh](h)}(hhh]jh)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jE$c.xe_ggtt_node_insert_balloon_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(hendh]hend}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjubeh}(h]h ]h"]h$]h&]hhuh1jM hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hjhMhjhhubj)}(hhh]h)}(h.prevent allocation of specified GGTT addressesh]h.prevent allocation of specified GGTT addresses}(hjhhhNhNubah}(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&]jjjj6jj6jjjuh1j-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)}(hj@h]h Parameters}(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.chMhj: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)}(hj_h]hstruct xe_ggtt_node *node}(hjahhhNhNubah}(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.chMhjYubj1)}(hhh]h)}(h5the :c:type:`xe_ggtt_node` to hold reserved GGTT nodeh](hthe }(hjxhhhNhNubh)}(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_nodeuh1hhjthMhjxubh to hold reserved GGTT node}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1j0hjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjVubj)}(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.chMhjubj1)}(hhh]h)}(h0the starting GGTT address of the reserved regionh]h0the starting GGTT address of the reserved region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubj)}(h9``u64 end`` then end GGTT address of the reserved region h](j)}(h ``u64 end``h]j)}(hjh]hu64 end}(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,then end GGTT address of the reserved regionh]h,then end GGTT address of the reserved region}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjVubeh}(h]h ]h"]h$]h&]uh1j hj:ubh)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(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)}(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.}(hjEhhhNhNubah}(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)}(hjVh]hReturn}(hjXhhhNhNubah}(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.chMhj:ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjlhhhNhNubah}(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_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](jI )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hjhhhY/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)}(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&]hhuh1jahjhhhjhMubjN )}(h(struct xe_ggtt_node *node)h]jT )}(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 jsb$c.xe_ggtt_node_remove_balloon_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj& )}(hj) h]h*}(hj$hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjubjh)}(hnodeh]hnode}(hj1hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjubah}(h]h ]h"]h$]h&]hhuh1jM hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hjhMhjhhubj)}(hhh]h)}(hrelease a reserved GGTT regionh]hrelease a reserved 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.chMhjXhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsjjsjjjuh1j-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)}(hj}h]h Parameters}(hjhhhNhNubah}(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.chMhjwubj )}(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.chMhjubj1)}(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_nodeuh1hhjhMhjubh with reserved GGTT region}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjwubh)}(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.chMhjwubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjwubeh}(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](jI )}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hj;hhhY/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&]uh1jPhj;hhhjMhMubjb)}(hxe_ggtt_shift_nodes_lockedh]jh)}(hxe_ggtt_shift_nodes_lockedh]hxe_ggtt_shift_nodes_locked}(hj`hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj\ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj;hhhjMhMubjN )}(h!(struct xe_ggtt *ggtt, s64 shift)h](jT )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj|hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubh)}(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 jbsbc.xe_ggtt_shift_nodes_lockedasbuh1hhjxubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjxubj& )}(hj) h]h*}(hjhhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjxubjh)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjxubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjtubjT )}(h s64 shifth](h)}(hhh]jh)}(hs64h]hs64}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jc.xe_ggtt_shift_nodes_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(hshifth]hshift}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjtubeh}(h]h ]h"]h$]h&]hhuh1jM hj;hhhjMhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj7hhhjMhMubah}(h]j2ah ](jjeh"]h$]h&]jj)jhuh1j2hjMhMhj4hhubj)}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjDhhubah}(h]h ]h"]h$]h&]uh1jhj4hhhjMhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj_jj_jjjuh1j-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)}(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.chM"hjcubj )}(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.chMhjubj1)}(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_ggttuh1hhjhMhjubh struct instance}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hH``s64 shift`` change to the location of area provisioned for current VF h](j)}(h ``s64 shift``h]j)}(hjh]h s64 shift}(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)}(h9change to the location of area provisioned for current VFh]h9change to the location of area provisioned for current VF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1j hjcubh)}(h**Description**h]j)}(hjh]h Description}(hj!hhhNhNubah}(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"hjcubh)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM!hjcubh)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM%hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)'xe_ggtt_node_insert_locked (C function)c.xe_ggtt_node_insert_lockedhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h]int xe_ggtt_node_insert_locked (struct xe_ggtt_node *node, u32 size, u32 align, u32 mm_flags)h]j9)}(h\int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node, u32 size, u32 align, u32 mm_flags)h](jI )}(hinth]hint}(hjshhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hjohhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMFubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjohhhjhMFubjb)}(hxe_ggtt_node_insert_lockedh]jh)}(hxe_ggtt_node_insert_lockedh]hxe_ggtt_node_insert_locked}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjohhhjhMFubjN )}(h>(struct xe_ggtt_node *node, u32 size, u32 align, u32 mm_flags)h](jT )}(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 jsbc.xe_ggtt_node_insert_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj& )}(hj) h]h*}(hjhhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjubjh)}(hnodeh]hnode}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjubjT )}(hu32 sizeh](h)}(hhh]jh)}(hu32h]hu32}(hj%hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNj j )}j ]jc.xe_ggtt_node_insert_lockedasbuh1hhjubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(hsizeh]hsize}(hjQhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjubjT )}(h u32 alignh](h)}(hhh]jh)}(hu32h]hu32}(hjmhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjomodnameN classnameNj j )}j ]jc.xe_ggtt_node_insert_lockedasbuh1hhjfubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjfubjh)}(halignh]halign}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjfubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjubjT )}(h u32 mm_flagsh](h)}(hhh]jh)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jc.xe_ggtt_node_insert_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(hmm_flagsh]hmm_flags}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjubeh}(h]h ]h"]h$]h&]hhuh1jM hjohhhjhMFubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjkhhhjhMFubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1j2hjhMFhjhhhubj)}(hhh]h)}(h?Locked version to insert a :c:type:`xe_ggtt_node` into the GGTTh](hLocked version to insert a }(hj hhhNhNubh)}(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 ]jc.xe_ggtt_node_insert_lockedasbj xe_ggtt_nodeuh1hhj hKhj ubh into the 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.chMFhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhMFubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1j-hhhj hNhNubj)}(hX**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 ``u32 mm_flags`` flags to control the node behavior **Description** It cannot be called without first having called xe_ggtt_init() once. To be used in cases where ggtt->lock is already taken. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMJhjOubj )}(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)}(hjth]hstruct xe_ggtt_node *node}(hjvhhhNhNubah}(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.chMGhjnubj1)}(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_nodeuh1hhjhMGhjubh to be inserted}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMGhjubah}(h]h ]h"]h$]h&]uh1j0hjnubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjkubj)}(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.chMHhjubj1)}(hhh]h)}(hsize of the nodeh]hsize of the node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjkubj)}(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&]uh1jhjubah}(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)}(halignment constrain of the nodeh]halignment constrain of the node}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjkubj)}(h4``u32 mm_flags`` flags to control the node behavior h](j)}(h``u32 mm_flags``h]j)}(hjBh]h u32 mm_flags}(hjDhhhNhNubah}(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.chMJhj<ubj1)}(hhh]h)}(h"flags to control the node behaviorh]h"flags to control the node behavior}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMJhjXubah}(h]h ]h"]h$]h&]uh1j0hj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMJhjkubeh}(h]h ]h"]h$]h&]uh1j hjOubh)}(h**Description**h]j)}(hj}h]h Description}(hjhhhNhNubah}(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.chMLhjOubh)}(h{It cannot be called without first having called xe_ggtt_init() once. To be used in cases where ggtt->lock is already taken.h]h{It cannot be called without first having called xe_ggtt_init() once. To be used in cases where ggtt->lock is already taken.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMKhjOubh)}(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.chMNhjOubh)}(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.chMOhjOubeh}(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](jI )}(hinth]hint}(hjhhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMYubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMYubjb)}(hxe_ggtt_node_inserth]jh)}(hxe_ggtt_node_inserth]hxe_ggtt_node_insert}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhjhMYubjN )}(h0(struct xe_ggtt_node *node, u32 size, u32 align)h](jT )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hj&hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj"ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjDhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNj j )}j ]j )}j j sbc.xe_ggtt_node_insertasbuh1hhj"ubjQ)}(h h]h }(hjdhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj& )}(hj) h]h*}(hjrhhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj"ubjh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjubjT )}(hu32 sizeh](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)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjubjT )}(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&]noemphhhuh1jS hjubeh}(h]h ]h"]h$]h&]hhuh1jM hjhhhjhMYubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhMYubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hjhMYhjhhubj)}(hhh]h)}(h-Insert a :c:type:`xe_ggtt_node` into the GGTTh](h Insert a }(hj9hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjCh]h xe_ggtt_node}(hjEhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]j`c.xe_ggtt_node_insertasbj xe_ggtt_nodeuh1hhj hKhj9ubh into the GGTT}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMYhj6hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMYubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1j-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)}(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)}(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)}(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.chMZhjubj1)}(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_nodeuh1hhjhMZhjubh to be inserted}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjubj)}(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.chM[hjubj1)}(hhh]h)}(hsize of the nodeh]hsize of the node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM[hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubj)}(h.``u32 align`` alignment constrain of the node h](j)}(h ``u32 align``h]j)}(hj7h]h u32 align}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(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)}(halignment constrain of the nodeh]halignment constrain of the node}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM\hjMubah}(h]h ]h"]h$]h&]uh1j0hj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhM\hjubeh}(h]h ]h"]h$]h&]uh1j hj}ubh)}(h**Description**h]j)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(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)}(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.}(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.chM`hj}ubeh}(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)}(hhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMrubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMrubh)}(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 xe_ggtt_node_initsbc.xe_ggtt_node_initasbuh1hhjhhhjhMrubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMrubj& )}(hj) h]h*}(hj, hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjhhhjhMrubjb)}(hxe_ggtt_node_inith]jh)}(hj h]hxe_ggtt_node_init}(hj= hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj9 ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhjhMrubjN )}(h(struct xe_ggtt *ggtt)h]jT )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjX hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjT ubjQ)}(h h]h }(hje hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjT ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjv hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjs ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjx modnameN classnameNj j )}j ]j c.xe_ggtt_node_initasbuh1hhjT ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjT ubj& )}(hj) h]h*}(hj hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjT ubjh)}(hggtth]hggtt}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjT ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjP ubah}(h]h ]h"]h$]h&]hhuh1jM hjhhhjhMrubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhMrubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hjhMrhjhhubj)}(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.chMrhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMrubeh}(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 the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(), 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.chMvhj!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.chMshj&!ubj1)}(hhh]h)}(hIthe :c:type:`xe_ggtt` where the new node will later be inserted/reserved.h](hthe }(hjE!hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjO!h]hxe_ggtt}(hjQ!hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjM!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggttuh1hhjA!hMshjE!ubh4 where the new node will later be inserted/reserved.}(hjE!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjA!hMshjB!ubah}(h]h ]h"]h$]h&]uh1j0hj&!ubeh}(h]h ]h"]h$]h&]uh1jhjA!hMshj#!ubah}(h]h ]h"]h$]h&]uh1j hj!ubh)}(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.chMuhj!ubh)}(hXThis 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 the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(), xe_ggtt_node_insert_balloon_locked() will ensure the node is inserted or reserved in GGTT.h](h'This function will allocate the struct }(hj!hhhNhNubj)}(h``xe_ggtt_node``h]h xe_ggtt_node}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!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(). Having }(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 the xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(), 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.chMthj!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.chM{hj!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.chM|hj!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](jI )}(hvoidh]hvoid}(hj,"hhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hj("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}(hjM"hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjI"ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj("hhhj:"hMubjN )}(h(struct xe_ggtt_node *node)h]jT )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hji"hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hje"ubjQ)}(h h]h }(hjv"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhje"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 jO"sbc.xe_ggtt_node_finiasbuh1hhje"ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhje"ubj& )}(hj) h]h*}(hj"hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hje"ubjh)}(hnodeh]hnode}(hj"hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghje"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hja"ubah}(h]h ]h"]h$]h&]hhuh1jM 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}(hjA#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.chMhj9#ubj1)}(hhh]h)}(h&the :c:type:`xe_ggtt_node` to be freedh](hthe }(hjX#hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjb#h]h xe_ggtt_node}(hjd#hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj`#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggtt_nodeuh1hhjT#hMhjX#ubh to be freed}(hjX#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjT#hMhjU#ubah}(h]h ]h"]h$]h&]uh1j0hj9#ubeh}(h]h ]h"]h$]h&]uh1jhjT#hMhj6#ubah}(h]h ]h"]h$]h&]uh1j hj#ubh)}(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.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_allocatedhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h=bool xe_ggtt_node_allocated (const struct xe_ggtt_node *node)h]j9)}(hhj>$ubjQ)}(h h]h }(hjP$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>$ubj?)}(hjBh]hstruct}(hj^$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj>$ubjQ)}(h h]h }(hjk$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&]uh1jghjy$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~$modnameN classnameNj j )}j ]j )}j j($sbc.xe_ggtt_node_allocatedasbuh1hhj>$ubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>$ubj& )}(hj) h]h*}(hj$hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj>$ubjh)}(hnodeh]hnode}(hj$hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj>$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj:$ubah}(h]h ]h"]h$]h&]hhuh1jM 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)}(hjE%h]h xe_ggtt_node}(hjG%hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjC%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggtt_nodeuh1hhj7%hMhj;%ubh to be inspected}(hj;%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7%hMhj8%ubah}(h]h ]h"]h$]h&]uh1j0hj%ubeh}(h]h ]h"]h$]h&]uh1jhj7%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#True if allocated, False otherwise.h]h#True if allocated, False otherwise.}(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)}(hfvoid xe_ggtt_map_bo (struct xe_ggtt *ggtt, struct xe_ggtt_node *node, struct xe_bo *bo, u16 pat_index)h]j9)}(hevoid xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, struct xe_bo *bo, u16 pat_index)h](jI )}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hj%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_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&]hhuh1jahj%hhhj%hMubjN )}(hR(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, struct xe_bo *bo, u16 pat_index)h](jT )}(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*}(hjN&hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj%ubjh)}(hggtth]hggtt}(hj[&hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj%ubjT )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjt&hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjp&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjp&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_map_boasbuh1hhjp&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjp&ubj& )}(hj) h]h*}(hj&hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjp&ubjh)}(hnodeh]hnode}(hj&hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjp&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj%ubjT )}(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 ]j2 ah"]h$]h&]uh1j% hj&ubjh)}(hboh]hbo}(hj;'hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj%ubjT )}(h u16 pat_indexh](h)}(hhh]jh)}(hu16h]hu16}(hjW'hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjT'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjY'modnameN classnameNj j )}j ]j<&c.xe_ggtt_map_boasbuh1hhjP'ubjQ)}(h h]h }(hju'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjP'ubjh)}(h pat_indexh]h pat_index}(hj'hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjP'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj%ubeh}(h]h ]h"]h$]h&]hhuh1jM hj%hhhj%hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj%hhhj%hMubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1j2hj%hMhj%hhubj)}(hhh]h)}(hMap the BO into GGTTh]hMap the BO into 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)}(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 ``u16 pat_index`` Which pat_index to use.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)}(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)}(hjJ(h]hstruct xe_ggtt_node *node}(hjL(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH(ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjD(ubj1)}(hhh]h)}(h2the :c:type:`xe_ggtt_node` where this BO is mappedh](hthe }(hjc(hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjm(h]h xe_ggtt_node}(hjo(hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjk(ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggtt_nodeuh1hhj_(hMhjc(ubh where this BO is mapped}(hjc(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_(hMhj`(ubah}(h]h ]h"]h$]h&]uh1j0hjD(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)}(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(hMhj'ubj)}(h)``u16 pat_index`` Which pat_index to use.h](j)}(h``u16 pat_index``h]j)}(hj)h]h u16 pat_index}(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)}(hWhich pat_index to use.h]hWhich pat_index to use.}(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 hj'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](jI )}(hvoidh]hvoid}(hj\)hhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hjX)hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjk)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjX)hhhjj)hMubjb)}(hxe_ggtt_map_bo_unlockedh]jh)}(hxe_ggtt_map_bo_unlockedh]hxe_ggtt_map_bo_unlocked}(hj})hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjy)ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjX)hhhjj)hMubjN )}(h((struct xe_ggtt *ggtt, struct xe_bo *bo)h](jT )}(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_bo_unlockedasbuh1hhj)ubjQ)}(h h]h }(hj)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj)ubj& )}(hj) h]h*}(hj)hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj)ubjh)}(hggtth]hggtt}(hj)hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj)ubjT )}(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 }(hjG*hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj*ubj& )}(hj) h]h*}(hjU*hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj*ubjh)}(hboh]hbo}(hjb*hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj)ubeh}(h]h ]h"]h$]h&]hhuh1jM hjX)hhhjj)hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjT)hhhjj)hMubah}(h]jO)ah ](jjeh"]h$]h&]jj)jhuh1j2hjj)hMhjQ)hhubj)}(hhh]h)}(h#Restore a mapping of a BO into GGTTh]h#Restore a mapping of a BO into 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&]uh1jhjQ)hhhjj)hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*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)}(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)}(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)}(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 }(hjB+hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hjL+h]hxe_bo}(hjN+hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjJ+ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_bouh1hhj>+hMhjB+ubh to be mapped}(hjB+hhhNhNubeh}(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**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.chMhj*ubh)}(h5This is used to restore a GGTT mapping after suspend.h]h5This is used to restore a GGTT mapping after suspend.}(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_insert_bo_at (C function)c.xe_ggtt_insert_bo_athNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hUint xe_ggtt_insert_bo_at (struct xe_ggtt *ggtt, struct xe_bo *bo, u64 start, u64 end)h]j9)}(hTint xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo, u64 start, u64 end)h](jI )}(hinth]hint}(hj+hhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hj+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_insert_bo_ath]jh)}(hxe_ggtt_insert_bo_ath]hxe_ggtt_insert_bo_at}(hj+hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj+ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj+hhhj+hMubjN )}(h<(struct xe_ggtt *ggtt, struct xe_bo *bo, u64 start, u64 end)h](jT )}(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_insert_bo_atasbuh1hhj,ubjQ)}(h h]h }(hjG,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj& )}(hj) h]h*}(hjU,hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj,ubjh)}(hggtth]hggtt}(hjb,hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj,ubjT )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj{,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjw,ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw,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 ]jC,c.xe_ggtt_insert_bo_atasbuh1hhjw,ubjQ)}(h h]h }(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw,ubj& )}(hj) h]h*}(hj,hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjw,ubjh)}(hboh]hbo}(hj,hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjw,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj,ubjT )}(h u64 starth](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 ]jC,c.xe_ggtt_insert_bo_atasbuh1hhj,ubjQ)}(h h]h }(hj -hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubjh)}(hstarth]hstart}(hj-hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj,ubjT )}(hu64 endh](h)}(hhh]jh)}(hu64h]hu64}(hj6-hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj3-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8-modnameN classnameNj j )}j ]jC,c.xe_ggtt_insert_bo_atasbuh1hhj/-ubjQ)}(h h]h }(hjT-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/-ubjh)}(hendh]hend}(hjb-hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj/-ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj,ubeh}(h]h ]h"]h$]h&]hhuh1jM hj+hhhj+hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj+hhhj+hMubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1j2hj+hMhj+hhubj)}(hhh]h)}(h"Insert BO at a specific GGTT spaceh]h"Insert BO at a specific GGTT space}(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)}(hXA**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 **Return** 0 on success or a negative error code on failure.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)}(hI``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where bo will be inserted 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 bo will be insertedh](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 bo will be inserted}(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)}(h8``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted 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 insertedh](hthe }(hjB.hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hjL.h]hxe_bo}(hjN.hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjJ.ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_bouh1hhj>.hMhjB.ubh to be inserted}(hjB.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>.hMhj?.ubah}(h]h ]h"]h$]h&]uh1j0hj#.ubeh}(h]h ]h"]h$]h&]uh1jhj>.hMhj-ubj)}(h0``u64 start`` address where it will be inserted h](j)}(h ``u64 start``h]j)}(hj.h]h u64 start}(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!address where it will be insertedh]h!address where it will be inserted}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1j0hj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj-ubj)}(h7``u64 end`` end of the range where it will be inserted h](j)}(h ``u64 end``h]j)}(hj.h]hu64 end}(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*end of the range where it will be insertedh]h*end of the range where it will be inserted}(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)}(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.chMhj-ubeh}(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)}(h>int xe_ggtt_insert_bo (struct xe_ggtt *ggtt, struct xe_bo *bo)h]j9)}(h=int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)h](jI )}(hinth]hint}(hj>/hhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hj:/hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM"ubjQ)}(h h]h }(hjM/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:/hhhjL/hM"ubjb)}(hxe_ggtt_insert_boh]jh)}(hxe_ggtt_insert_boh]hxe_ggtt_insert_bo}(hj_/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj[/ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj:/hhhjL/hM"ubjN )}(h((struct xe_ggtt *ggtt, struct xe_bo *bo)h](jT )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj{/hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjw/ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw/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 ja/sbc.xe_ggtt_insert_boasbuh1hhjw/ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw/ubj& )}(hj) h]h*}(hj/hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjw/ubjh)}(hggtth]hggtt}(hj/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjw/ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjs/ubjT )}(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 0hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj 0modnameN classnameNj j )}j ]j/c.xe_ggtt_insert_boasbuh1hhj/ubjQ)}(h h]h }(hj)0hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj/ubj& )}(hj) h]h*}(hj70hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj/ubjh)}(hboh]hbo}(hjD0hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjs/ubeh}(h]h ]h"]h$]h&]hhuh1jM hj:/hhhjL/hM"ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj6/hhhjL/hM"ubah}(h]j1/ah ](jjeh"]h$]h&]jj)jhuh1j2hjL/hM"hj3/hhubj)}(hhh]h)}(hInsert BO into GGTTh]hInsert BO into GGTT}(hjn0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM"hjk0hhubah}(h]h ]h"]h$]h&]uh1jhj3/hhhjL/hM"ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1j-hhhj hNhNubj)}(h**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 **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM&hj0ubj )}(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)}(hj0h]hstruct xe_ggtt *ggtt}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM#hj0ubj1)}(hhh]h)}(h/the :c:type:`xe_ggtt` where bo will be insertedh](hthe }(hj0hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj0h]hxe_ggtt}(hj0hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggttuh1hhj0hM#hj0ubh where bo will be inserted}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hM#hj0ubah}(h]h ]h"]h$]h&]uh1j0hj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hM#hj0ubj)}(h8``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted h](j)}(h``struct xe_bo *bo``h]j)}(hj 1h]hstruct xe_bo *bo}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 1ubah}(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)}(h"the :c:type:`xe_bo` to be insertedh](hthe }(hj$1hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hj.1h]hxe_bo}(hj01hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj,1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_bouh1hhj 1hM$hj$1ubh to be inserted}(hj$1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj 1hM$hj!1ubah}(h]h ]h"]h$]h&]uh1j0hj1ubeh}(h]h ]h"]h$]h&]uh1jhj 1hM$hj0ubeh}(h]h ]h"]h$]h&]uh1j hj0ubh)}(h **Return**h]j)}(hji1h]hReturn}(hjk1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg1ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM&hj0ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM&hj0ubeh}(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](jI )}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hj1hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM.ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1hhhj1hM.ubjb)}(hxe_ggtt_remove_boh]jh)}(hxe_ggtt_remove_boh]hxe_ggtt_remove_bo}(hj1hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj1ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj1hhhj1hM.ubjN )}(h((struct xe_ggtt *ggtt, struct xe_bo *bo)h](jT )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj1hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj1ubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj 2hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj 2modnameN classnameNj j )}j ]j )}j j1sbc.xe_ggtt_remove_boasbuh1hhj1ubjQ)}(h h]h }(hj)2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1ubj& )}(hj) h]h*}(hj72hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj1ubjh)}(hggtth]hggtt}(hjD2hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj1ubjT )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj]2hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjY2ubjQ)}(h h]h }(hjj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY2ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj{2hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjx2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}2modnameN classnameNj j )}j ]j%2c.xe_ggtt_remove_boasbuh1hhjY2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjY2ubj& )}(hj) h]h*}(hj2hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjY2ubjh)}(hboh]hbo}(hj2hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjY2ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj1ubeh}(h]h ]h"]h$]h&]hhuh1jM hj1hhhj1hM.ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj1hhhj1hM.ubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1j2hj1hM.hj1hhubj)}(hhh]h)}(hRemove a BO from the GGTTh]hRemove a BO from the GGTT}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM.hj2hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1j-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)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM2hj2ubj )}(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)}(hj3h]hstruct xe_ggtt *ggtt}(hj!3hhhNhNubah}(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/hj3ubj1)}(hhh]h)}(h0the :c:type:`xe_ggtt` where node will be removedh](hthe }(hj83hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjB3h]hxe_ggtt}(hjD3hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj@3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggttuh1hhj43hM/hj83ubh where node will be removed}(hj83hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj43hM/hj53ubah}(h]h ]h"]h$]h&]uh1j0hj3ubeh}(h]h ]h"]h$]h&]uh1jhj43hM/hj3ubj)}(h6``struct xe_bo *bo`` the :c:type:`xe_bo` to be removedh](j)}(h``struct xe_bo *bo``h]j)}(hj{3h]hstruct xe_bo *bo}(hj}3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy3ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM1hju3ubj1)}(hhh]h)}(h!the :c:type:`xe_bo` to be removedh](hthe }(hj3hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hj3h]hxe_bo}(hj3hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj3ubah}(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.chM0hj3ubh to be removed}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hM0hj3ubah}(h]h ]h"]h$]h&]uh1j0hju3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM1hj3ubeh}(h]h ]h"]h$]h&]uh1j hj2ubeh}(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}(hj3hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNj j )}j ]j )}j xe_ggtt_largest_holesbc.xe_ggtt_largest_holeasbuh1hhj3hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMAubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj3hhhj4hMAubjb)}(hxe_ggtt_largest_holeh]jh)}(hj4h]hxe_ggtt_largest_hole}(hj/4hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj+4ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj3hhhj4hMAubjN )}(h1(struct xe_ggtt *ggtt, u64 alignment, u64 *spare)h](jT )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjJ4hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjF4ubjQ)}(h h]h }(hjW4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjF4ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjh4hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghje4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjj4modnameN classnameNj j )}j ]j4c.xe_ggtt_largest_holeasbuh1hhjF4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjF4ubj& )}(hj) h]h*}(hj4hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjF4ubjh)}(hggtth]hggtt}(hj4hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjF4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjB4ubjT )}(h u64 alignmenth](h)}(hhh]jh)}(hu64h]hu64}(hj4hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNj j )}j ]j4c.xe_ggtt_largest_holeasbuh1hhj4ubjQ)}(h h]h }(hj4hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubjh)}(h alignmenth]h alignment}(hj4hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjB4ubjT )}(h u64 *spareh](h)}(hhh]jh)}(hu64h]hu64}(hj5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNj j )}j ]j4c.xe_ggtt_largest_holeasbuh1hhj4ubjQ)}(h h]h }(hj#5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj4ubj& )}(hj) h]h*}(hj15hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj4ubjh)}(hspareh]hspare}(hj>5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjB4ubeh}(h]h ]h"]h$]h&]hhuh1jM hj3hhhj4hMAubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj3hhhj4hMAubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1j2hj4hMAhj3hhubj)}(hhh]h)}(hLargest GGTT holeh]hLargest GGTT hole}(hjh5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMAhje5hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj4hMAubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5jj5jjjuh1j-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)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMEhj5ubj )}(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)}(hj5h]hstruct xe_ggtt *ggtt}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMBhj5ubj1)}(hhh]h)}(h,the :c:type:`xe_ggtt` that will be inspectedh](hthe }(hj5hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj5h]hxe_ggtt}(hj5hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggttuh1hhj5hMBhj5ubh that will be inspected}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hMBhj5ubah}(h]h ]h"]h$]h&]uh1j0hj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMBhj5ubj)}(h$``u64 alignment`` minimum alignment h](j)}(h``u64 alignment``h]j)}(hj6h]h u64 alignment}(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.chMChj5ubj1)}(hhh]h)}(hminimum alignmenth]hminimum alignment}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMChj6ubah}(h]h ]h"]h$]h&]uh1j0hj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hMChj5ubj)}(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>6h]h u64 *spare}(hj@6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<6ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMDhj86ubj1)}(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}(hjW6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS6hMDhjT6ubah}(h]h ]h"]h$]h&]uh1j0hj86ubeh}(h]h ]h"]h$]h&]uh1jhjS6hMDhj5ubeh}(h]h ]h"]h$]h&]uh1j hj5ubh)}(h **Return**h]j)}(hjy6h]hReturn}(hj{6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw6ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMFhj5ubh)}(h*size of the largest continuous GGTT regionh]h*size of the largest continuous GGTT region}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMFhj5ubeh}(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](jI )}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hj6hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM~ubjQ)}(h h]h }(hj6hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6hhhj6hM~ubjb)}(hxe_ggtt_assignh]jh)}(hxe_ggtt_assignh]hxe_ggtt_assign}(hj6hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj6ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj6hhhj6hM~ubjN )}(h+(const struct xe_ggtt_node *node, u16 vfid)h](jT )}(hconst struct xe_ggtt_node *nodeh](j?)}(hjD$h]hconst}(hj6hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj6ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj?)}(hjBh]hstruct}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj6ubjQ)}(h h]h }(hj#7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj47hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj17ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj67modnameN classnameNj j )}j ]j )}j j6sbc.xe_ggtt_assignasbuh1hhj6ubjQ)}(h h]h }(hjT7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6ubj& )}(hj) h]h*}(hjb7hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj6ubjh)}(hnodeh]hnode}(hjo7hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj6ubjT )}(hu16 vfidh](h)}(hhh]jh)}(hu16h]hu16}(hj7hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNj j )}j ]jP7c.xe_ggtt_assignasbuh1hhj7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubjh)}(hvfidh]hvfid}(hj7hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj6ubeh}(h]h ]h"]h$]h&]hhuh1jM hj6hhhj6hM~ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj6hhhj6hM~ubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1j2hj6hM~hj6hhubj)}(hhh]h)}(hassign a GGTT region to the VFh]hassign a GGTT region to the VF}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM~hj7hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj6hM~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1j-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)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj7ubj )}(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)}(hj"8h]hconst struct xe_ggtt_node *node}(hj$8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 8ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj8ubj1)}(hhh]h)}(h$the :c:type:`xe_ggtt_node` to updateh](hthe }(hj;8hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjE8h]h xe_ggtt_node}(hjG8hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjC8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggtt_nodeuh1hhj78hMhj;8ubh to update}(hj;8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj78hMhj88ubah}(h]h ]h"]h$]h&]uh1j0hj8ubeh}(h]h ]h"]h$]h&]uh1jhj78hMhj8ubj)}(h``u16 vfid`` the VF identifier h](j)}(h ``u16 vfid``h]j)}(hj~8h]hu16 vfid}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|8ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjx8ubj1)}(hhh]h)}(hthe VF identifierh]hthe VF identifier}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1j0hjx8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubeh}(h]h ]h"]h$]h&]uh1j hj7ubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj7ubh)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj7ubeh}(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](jI )}(hinth]hint}(hj8hhhNhNubah}(h]h ]jU ah"]h$]h&]uh1jH hj8hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj 9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8hhhj 9hMubjb)}(h xe_ggtt_dumph]jh)}(h xe_ggtt_dumph]h xe_ggtt_dump}(hj9hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj9ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj8hhhj 9hMubjN )}(h-(struct xe_ggtt *ggtt, struct drm_printer *p)h](jT )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj;9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj79ubjQ)}(h h]h }(hjH9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj79ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjY9hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjV9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[9modnameN classnameNj j )}j ]j )}j j!9sbc.xe_ggtt_dumpasbuh1hhj79ubjQ)}(h h]h }(hjy9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj79ubj& )}(hj) h]h*}(hj9hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj79ubjh)}(hggtth]hggtt}(hj9hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj79ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj39ubjT )}(hstruct drm_printer *ph](j?)}(hjBh]hstruct}(hj9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubh)}(hhh]jh)}(h drm_printerh]h drm_printer}(hj9hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNj j )}j ]ju9c.xe_ggtt_dumpasbuh1hhj9ubjQ)}(h h]h }(hj9hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj9ubj& )}(hj) h]h*}(hj9hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj9ubjh)}(hj2 h]hp}(hj:hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj39ubeh}(h]h ]h"]h$]h&]hhuh1jM hj8hhhj 9hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj8hhhj 9hMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1j2hj 9hMhj8hhubj)}(hhh]h)}(hDump GGTT for debugh]hDump GGTT for debug}(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&]uh1jhj8hhhj 9hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjE:jjE:jjjuh1j-hhhj hNhNubj)}(h**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be dumped ``struct drm_printer *p`` the :c:type:`drm_mm_printer` helper handle to be used to dump the information **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjO:h]h Parameters}(hjQ:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM:ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjI:ubj )}(hhh](j)}(h<``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be dumped h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjn:h]hstruct xe_ggtt *ggtt}(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_ggtt` to be dumpedh](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 to be dumped}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1j0hjh:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhje:ubj)}(hh``struct drm_printer *p`` the :c:type:`drm_mm_printer` helper handle to be used to dump the information h](j)}(h``struct drm_printer *p``h]j)}(hj:h]hstruct drm_printer *p}(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)}(hMthe :c:type:`drm_mm_printer` helper handle to be used to dump the informationh](hthe }(hj:hhhNhNubh)}(h:c:type:`drm_mm_printer`h]j)}(hj:h]hdrm_mm_printer}(hj:hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j drm_mm_printeruh1hhj:hMhj:ubh1 helper handle to be used to dump the information}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1j0hj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhje:ubeh}(h]h ]h"]h$]h&]uh1j hjI: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.chMhjI:ubh)}(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.chMhjI:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j) xe_ggtt_print_holes (C function)c.xe_ggtt_print_holeshNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hTu64 xe_ggtt_print_holes (struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p)h]j9)}(hSu64 xe_ggtt_print_holes(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p)h](h)}(hhh]jh)}(hu64h]hu64}(hjp;hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjm;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjr;modnameN classnameNj j )}j ]j )}j xe_ggtt_print_holessbc.xe_ggtt_print_holesasbuh1hhji;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_print_holesh]jh)}(hj;h]hxe_ggtt_print_holes}(hj;hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj;ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahji;hhhj;hMubjN )}(h<(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p)h](jT )}(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_print_holesasbuh1hhj;ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj;ubj& )}(hj) h]h*}(hj <hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj;ubjh)}(hggtth]hggtt}(hj<hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj;ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj;ubjT )}(h u64 alignmenth](h)}(hhh]jh)}(hu64h]hu64}(hj2<hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj/<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4<modnameN classnameNj j )}j ]j;c.xe_ggtt_print_holesasbuh1hhj+<ubjQ)}(h h]h }(hjP<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+<ubjh)}(h alignmenth]h alignment}(hj^<hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj+<ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj;ubjT )}(hstruct drm_printer *ph](j?)}(hjBh]hstruct}(hjw<hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjs<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjs<ubh)}(hhh]jh)}(h drm_printerh]h drm_printer}(hj<hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNj j )}j ]j;c.xe_ggtt_print_holesasbuh1hfhjs<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjs<ubj& )}(hj) h]h*}(hj<hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjs<ubjh)}(hj2 h]hp}(hj<hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjs<ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj;ubeh}(h]h ]h"]h$]h&]hhuh1jM hji;hhhj;hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhje;hhhj;hMubah}(h]j`;ah ](jjeh"]h$]h&]jj)jhuh1j2hj;hMhjb;hhubj)}(hhh]h)}(h Print holesh]h Print holes}(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&]uh1jhjb;hhhj;hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1j-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=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?``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be inspected h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hj8=h]hstruct xe_ggtt *ggtt}(hj:=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6=ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj2=ubj1)}(hhh]h)}(h%the :c:type:`xe_ggtt` to be inspectedh](hthe }(hjQ=hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj[=h]hxe_ggtt}(hj]=hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjY=ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggttuh1hhjM=hMhjQ=ubh to be inspected}(hjQ=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjM=hMhjN=ubah}(h]h ]h"]h$]h&]uh1j0hj2=ubeh}(h]h ]h"]h$]h&]uh1jhjM=hMhj/=ubj)}(h ``u64 alignment`` min alignment h](j)}(h``u64 alignment``h]j)}(hj=h]h u64 alignment}(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 min alignmenth]h min alignment}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1j0hj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhj/=ubj)}(h4``struct drm_printer *p`` the :c:type:`drm_printer` h](j)}(h``struct drm_printer *p``h]j)}(hj=h]hstruct drm_printer *p}(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:`drm_printer`h](hthe }(hj=hhhNhNubh)}(h:c:type:`drm_printer`h]j)}(hj=h]h drm_printer}(hj=hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j drm_printeruh1hhj=hMhj=ubeh}(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**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.chMhj=ubh)}(hEPrint GGTT ranges that are available and return total size available.h]hEPrint GGTT ranges that are available and return total size available.}(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=ubh)}(h **Return**h]j)}(hjN>h]hReturn}(hjP>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL>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)}(hTotal available size.h]hTotal available size.}(hjd>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_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}(hj>hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNj j )}j ]j )}j xe_ggtt_encode_pte_flagssbc.xe_ggtt_encode_pte_flagsasbuh1hhj>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_encode_pte_flagsh]jh)}(hj>h]hxe_ggtt_encode_pte_flags}(hj>hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj>ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj>hhhj>hMubjN )}(h7(struct xe_ggtt *ggtt, struct xe_bo *bo, u16 pat_index)h](jT )}(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_encode_pte_flagsasbuh1hhj>ubjQ)}(h h]h }(hj!?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj>ubj& )}(hj) h]h*}(hj/?hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hj>ubjh)}(hggtth]hggtt}(hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj>ubjT )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hjU?hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjQ?ubjQ)}(h h]h }(hjb?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQ?ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hjs?hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjp?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetju?modnameN classnameNj j )}j ]j>c.xe_ggtt_encode_pte_flagsasbuh1hhjQ?ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjQ?ubj& )}(hj) h]h*}(hj?hhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjQ?ubjh)}(hboh]hbo}(hj?hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjQ?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj>ubjT )}(h u16 pat_indexh](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_encode_pte_flagsasbuh1hhj?ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubjh)}(h pat_indexh]h pat_index}(hj?hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hj>ubeh}(h]h ]h"]h$]h&]hhuh1jM hj>hhhj>hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj>hhhj>hMubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1j2hj>hMhj>hhubj)}(hhh]h)}(hGet PTE encoding flags for BOh]hGet PTE encoding flags for BO}(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&]jjjj6@jj6@jjjuh1j-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)}(hj@@h]h Parameters}(hjB@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+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hj_@h]hstruct xe_ggtt *ggtt}(hja@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.chMhjY@ubj1)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hjz@h]j)}(hjz@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_ggttuh1hhjt@hMhjx@ubah}(h]h ]h"]h$]h&]uh1hhjt@hMhju@ubah}(h]h ]h"]h$]h&]uh1j0hjY@ubeh}(h]h ]h"]h$]h&]uh1jhjt@hMhjV@ubj)}(h%``struct xe_bo *bo`` :c:type:`xe_bo` 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:c:type:`xe_bo`h]h)}(hj@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@ubah}(h]h ]h"]h$]h&]uh1hhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1j0hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjV@ubj)}(h-``u16 pat_index`` The pat_index for the PTE. h](j)}(h``u16 pat_index``h]j)}(hjAh]h u16 pat_index}(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@ubj1)}(hhh]h)}(hThe pat_index for the PTE.h]hThe pat_index for the PTE.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1j0hj@ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjV@ubeh}(h]h ]h"]h$]h&]uh1j hj:@ubh)}(h**Description**h]j)}(hj@Ah]h Description}(hjBAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Aubah}(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 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.}(hjVAhhhNhNubah}(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_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}(hjAhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNj j )}j ]j )}j xe_ggtt_read_ptesbc.xe_ggtt_read_pteasbuh1hhjAhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAhhhjAhMubjb)}(hxe_ggtt_read_pteh]jh)}(hjAh]hxe_ggtt_read_pte}(hjAhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjAubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjAhhhjAhMubjN )}(h"(struct xe_ggtt *ggtt, u64 offset)h](jT )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjAhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjAubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjAhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNj j )}j ]jAc.xe_ggtt_read_pteasbuh1hhjAubjQ)}(h h]h }(hjBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjAubj& )}(hj) h]h*}(hj!BhhhNhNubah}(h]h ]j2 ah"]h$]h&]uh1j% hjAubjh)}(hggtth]hggtt}(hj.BhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjAubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjAubjT )}(h u64 offseth](h)}(hhh]jh)}(hu64h]hu64}(hjJBhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjGBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLBmodnameN classnameNj j )}j ]jAc.xe_ggtt_read_pteasbuh1hhjCBubjQ)}(h h]h }(hjhBhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCBubjh)}(hoffseth]hoffset}(hjvBhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjCBubeh}(h]h ]h"]h$]h&]noemphhhuh1jS hjAubeh}(h]h ]h"]h$]h&]hhuh1jM hjAhhhjAhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj}AhhhjAhMubah}(h]jxAah ](jjeh"]h$]h&]jj)jhuh1j2hjAhMhjzAhhubj)}(hhh]h)}(hRead a PTE from the GGTTh]hRead a PTE from the GGTT}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjBhhubah}(h]h ]h"]h$]h&]uh1jhjzAhhhjAhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1j-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)}(hjBh]h Parameters}(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.chMhjBubj )}(hhh](j)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjBh]hstruct xe_ggtt *ggtt}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjBubj1)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hjBh]j)}(hjBh]hxe_ggtt}(hjChhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j| j xe_ggttuh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1j0hjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjBubj)}(h@``u64 offset`` the offset for which the mapping should be read. h](j)}(h``u64 offset``h]j)}(hj4Ch]h u64 offset}(hj6ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Cubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj.Cubj1)}(hhh]h)}(h0the offset for which the mapping should be read.h]h0the offset for which the mapping should be read.}(hjMChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIChMhjJCubah}(h]h ]h"]h$]h&]uh1j0hj.Cubeh}(h]h ]h"]h$]h&]uh1jhjIChMhjBubeh}(h]h ]h"]h$]h&]uh1j hjBubh)}(h**Description**h]j)}(hjoCh]h Description}(hjqChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmCubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjBubh)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjBubeh}(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}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChhhhhKubh)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:28: ./drivers/gpu/drm/xe/xe_pt.chKhjChhubh)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:28: ./drivers/gpu/drm/xe/xe_pt.chKhjChhubeh}(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_handlerj Derror_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}(jCjChhjjjGjDjjjjjjjjj&j#jujrjjjjjEjBjmjjjjjCjCjCjCjCjCu nametypes}(jChjjGjjjjj&jujjjEjmjjCjCjCuh}(jChhhjhjDjjjJjjjjjjjj#jjrj)jjIjjjBjjjjHjjxjCjjCj j+j4jjj j j j j; j@ j jjj"jjjjj2j7jfjkjjjjj"j$"j#j#j%j%jO)jT)j+j+j1/j6/j1j1j3j3j6j6j8j8j`;je;j>j>jxAj}AjCjCu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.