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); u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr); }; **Members** ``pte_encode_flags`` Encode PTE flags for a given BO ``ggtt_set_pte`` Directly write into GGTT's PTE ``ggtt_get_pte`` Directly read from GGTT's PTEh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]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); u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr); };h]hstruct xe_ggtt_pt_ops { u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index); void (*ggtt_set_pte)(struct xe_ggtt *ggtt, u64 addr, u64 pte); u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr); };}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.hhKUhj 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)}(h0``ggtt_set_pte`` Directly write into GGTT's PTE h](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.hhKPhjo ubj1)}(hhh]h)}(hDirectly write into GGTT's PTEh]h Directly write into GGTT’s PTE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKPhj ubah}(h]h ]h"]h$]h&]uh1j0hjo ubeh}(h]h ]h"]h$]h&]uh1jhj hKPhj3 ubj)}(h.``ggtt_get_pte`` Directly read from GGTT's PTEh](j)}(h``ggtt_get_pte``h]j)}(hj h]h ggtt_get_pte}(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.hhKQhj ubj1)}(hhh]h)}(hDirectly read from GGTT's PTEh]hDirectly read from 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.hhKRhj ubah}(h]h ]h"]h$]h&]uh1j0hj ubeh}(h]h ]h"]h$]h&]uh1jhj hKQhj3 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]jB ASTIdentifier)}j= xe_ggtt_allocsbc.xe_ggtt_allocasbuh1hhj hhhj hKubjQ)}(h h]h }(hjP 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)}(hjM h]h xe_ggtt_alloc}(hjs hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjo 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}(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_tileh]hxe_tile}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj modnameN classnameNjA jD )}jG ]jK c.xe_ggtt_allocasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj_ )}(hjb h]h*}(hj hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj ubjh)}(htileh]htile}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hj hhhj 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 refexplicitrefwarnjA jD )}jG ]jK 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&]jjjjR jjR 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&]uh1jhjZ ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjV ubj )}(hhh]j)}(h+``struct xe_tile *tile`` :c:type:`xe_tile` h](j)}(h``struct xe_tile *tile``h]j)}(hj{ h]hstruct xe_tile *tile}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhju ubj1)}(hhh]h)}(h:c:type:`xe_tile`h]h)}(hj h]j)}(hj h]hxe_tile}(hj hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA jD )}jG ]sbj@ xe_tileuh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1j0hju ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjr ubah}(h]h ]h"]h$]h&]uh1j hjV 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.chKhjV 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&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA 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 hKhjV 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.chKhjV ubh)}(h9:c:type:`xe_ggtt` on success, or NULL when out of memory.h](h)}(h:c:type:`xe_ggtt`h]j)}(hj9 h]hxe_ggtt}(hj; hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj7 ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggttuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj3 ubh( on success, or NULL when out of memory.}(hj3 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjV hKhjV 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}(hj hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j 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_init_earlyh]jh)}(hxe_ggtt_init_earlyh]hxe_ggtt_init_early}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj} hhhj hMubj )}(h(struct xe_ggtt *ggtt)h]j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(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 classnameNjA jD )}jG ]jJ )}j= j sbc.xe_ggtt_init_earlyasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj_ )}(hjb h]h*}(hj hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj ubjh)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hj} hhhj hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjy hhhj hMubah}(h]jt ah ](jjeh"]h$]h&]jj)jhuh1j2hj hMhjv hhubj)}(hhh]h)}(hEarly GGTT initializationh]hEarly GGTT initialization}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjAhhubah}(h]h ]h"]h$]h&]uh1jhjv 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 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)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(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)}(hA``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be initialized h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjh]hstruct xe_ggtt *ggtt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubj1)}(hhh]h)}(h'the :c:type:`xe_ggtt` to be initializedh](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggttuh1hhjhMhjubh to be initialized}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubah}(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.chMhj`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.chMhj`ubh)}(h **Return**h]j)}(hj h]hReturn}(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 hj`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.chM!hj`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](j )}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjKhhhY/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&]uh1jPhjKhhhj]hMubjb)}(hxe_ggtt_node_removeh]jh)}(hxe_ggtt_node_removeh]hxe_ggtt_node_remove}(hjphhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjlubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjKhhhj]hMubj )}(h,(struct xe_ggtt_node *node, bool invalidate)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjmodnameN classnameNjA jD )}jG ]jJ )}j= jrsbc.xe_ggtt_node_removeasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj_ )}(hjb h]h*}(hjhhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjubjh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hbool invalidateh](j )}(hboolh]hbool}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(h invalidateh]h invalidate}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjKhhhj]hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjGhhhj]hMubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1j2hj]hMhjDhhubj)}(hhh]h)}(h-Remove a :c:type:`xe_ggtt_node` from the GGTTh](h Remove a }(hjDhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjNh]h xe_ggtt_node}(hjPhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA jD )}jG ]jc.xe_ggtt_node_removeasbj@ xe_ggtt_nodeuh1hhj hKhjDubh from the GGTT}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjAhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj]hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j-hhhj hNhNubj)}(h**Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be removed ``bool invalidate`` if node needs invalidation upon removalh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubj )}(hhh](j)}(hG``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be removed h](j)}(h``struct xe_ggtt_node *node``h]j)}(hjh]hstruct xe_ggtt_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubj1)}(hhh]h)}(h(the :c:type:`xe_ggtt_node` to be removedh](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhjhMhjubh to be removed}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``bool invalidate`` if node needs invalidation upon removalh](j)}(h``bool invalidate``h]j)}(hj h]hbool invalidate}(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.chMhjubj1)}(hhh]h)}(h'if node needs invalidation upon removalh]h'if node needs invalidation upon removal}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_init (C function)c.xe_ggtt_inithNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h'int xe_ggtt_init (struct xe_ggtt *ggtt)h]j9)}(h&int xe_ggtt_init(struct xe_ggtt *ggtt)h](j )}(hinth]hint}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj_hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjrhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_hhhjqhMubjb)}(h xe_ggtt_inith]jh)}(h xe_ggtt_inith]h xe_ggtt_init}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj_hhhjqhMubj )}(h(struct xe_ggtt *ggtt)h]j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjmodnameN classnameNjA jD )}jG ]jJ )}j= jsbc.xe_ggtt_initasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj_ )}(hjb h]h*}(hjhhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjubjh)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hj_hhhjqhMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj[hhhjqhMubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1j2hjqhMhjXhhubj)}(hhh]h)}(h%Regular non-early GGTT initializationh]h%Regular non-early GGTT initialization}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjqhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1j-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)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(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)}(hA``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be initialized h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjdh]hstruct xe_ggtt *ggtt}(hjfhhhNhNubah}(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.chMhj^ubj1)}(hhh]h)}(h'the :c:type:`xe_ggtt` to be initializedh](hthe }(hj}hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggttuh1hhjyhMhj}ubh to be initialized}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1j0hj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj[ubah}(h]h ]h"]h$]h&]uh1j 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.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_insert_balloon_locked (C function)$c.xe_ggtt_node_insert_balloon_lockedhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hVint xe_ggtt_node_insert_balloon_locked (struct xe_ggtt_node *node, u64 start, u64 end)h]j9)}(hUint xe_ggtt_node_insert_balloon_locked(struct xe_ggtt_node *node, u64 start, u64 end)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j 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}(hj(hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj$ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhjhMubj )}(h/(struct xe_ggtt_node *node, u64 start, u64 end)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjDhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj@ubjQ)}(h h]h }(hjQhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjbhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjdmodnameN classnameNjA jD )}jG ]jJ )}j= j*sb$c.xe_ggtt_node_insert_balloon_lockedasbuh1hhj@ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubj_ )}(hjb h]h*}(hjhhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj@ubjh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj<ubj )}(h u64 starth](h)}(hhh]jh)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjmodnameN classnameNjA jD )}jG ]j~$c.xe_ggtt_node_insert_balloon_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj<ubj )}(hu64 endh](h)}(hhh]jh)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjmodnameN classnameNjA jD )}jG ]j~$c.xe_ggtt_node_insert_balloon_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(hendh]hend}(hj-hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj<ubeh}(h]h ]h"]h$]h&]hhuh1j 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}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjThhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1j-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)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjsubj )}(hhh](j)}(hT``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to hold reserved GGTT node h](j)}(h``struct xe_ggtt_node *node``h]j)}(hjh]hstruct xe_ggtt_node *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubj1)}(hhh]h)}(h5the :c:type:`xe_ggtt_node` to hold reserved GGTT nodeh](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhjhMhjubh to hold reserved GGTT node}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h9``u64 end`` then end GGTT address of the reserved region 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,then end GGTT address of the reserved regionh]h,then end GGTT address of the reserved region}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1j0hj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjubeh}(h]h ]h"]h$]h&]uh1j hjsubh)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjsubh)}(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.}(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.chMhjsubh)}(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.chMhjsubh)}(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.chMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)/xe_ggtt_node_remove_balloon_locked (C function)$c.xe_ggtt_node_remove_balloon_lockedhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hCvoid xe_ggtt_node_remove_balloon_locked (struct xe_ggtt_node *node)h]j9)}(hBvoid xe_ggtt_node_remove_balloon_locked(struct xe_ggtt_node *node)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM"ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhM"ubjb)}(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&]hhuh1jahjhhhjhM"ubj )}(h(struct xe_ggtt_node *node)h]j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj1modnameN classnameNjA jD )}jG ]jJ )}j= jsb$c.xe_ggtt_node_remove_balloon_lockedasbuh1hhj ubjQ)}(h h]h }(hjOhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj_ )}(hjb h]h*}(hj]hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj ubjh)}(hnodeh]hnode}(hjjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhM"ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhM"ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hjhM"hjhhubj)}(hhh]h)}(hrelease a reserved GGTT regionh]hrelease a reserved GGTT region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM"hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM"ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j-hhhj hNhNubj)}(h**Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` with reserved GGTT region **Description** To be used in cases where ggtt->lock is already taken. See xe_ggtt_node_insert_balloon_locked() for details.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM&hjubj )}(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.chM#hjubj1)}(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&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhjhM#hjubh with reserved GGTT region}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubah}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM%hjubh)}(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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)'xe_ggtt_shift_nodes_locked (C function)c.xe_ggtt_shift_nodes_lockedhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hAvoid xe_ggtt_shift_nodes_locked (struct xe_ggtt *ggtt, s64 shift)h]j9)}(h@void xe_ggtt_shift_nodes_locked(struct xe_ggtt *ggtt, s64 shift)h](j )}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjthhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM?ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjthhhjhM?ubjb)}(hxe_ggtt_shift_nodes_lockedh]jh)}(hxe_ggtt_shift_nodes_lockedh]hxe_ggtt_shift_nodes_locked}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjthhhjhM?ubj )}(h!(struct xe_ggtt *ggtt, s64 shift)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjmodnameN classnameNjA jD )}jG ]jJ )}j= jsbc.xe_ggtt_shift_nodes_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj_ )}(hjb h]h*}(hjhhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjubjh)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h s64 shifth](h)}(hhh]jh)}(hs64h]hs64}(hj*hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj,modnameN classnameNjA jD )}jG ]jc.xe_ggtt_shift_nodes_lockedasbuh1hhj#ubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj#ubjh)}(hshifth]hshift}(hjVhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjthhhjhM?ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjphhhjhM?ubah}(h]jkah ](jjeh"]h$]h&]jj)jhuh1j2hjhM?hjmhhubj)}(hhh]h)}(h@Shift GGTT nodes to adjust for a change in usable address range.h]h@Shift GGTT nodes to adjust for a change in usable address range.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM?hj}hhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjhM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j-hhhj hNhNubj)}(hXf**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` struct instance ``s64 shift`` change to the location of area provisioned for current VF **Description** This function moves all nodes from the GGTT VM, to a temp list. These nodes are expected to represent allocations in range formerly assigned to current VF, before the range changed. When the GGTT VM is completely clear of any nodes, they are re-added with shifted offsets. The function has no ability of failing - because it shifts existing nodes, without any additional processing. If the nodes were successfully existing at the old address, they will do the same at the new one. A fail inside this function would indicate that the list of nodes was either already damaged, or that the shift brings the address range outside of valid bounds. Both cases justify an assert rather than error code.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMChjubj )}(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.chM@hjubj1)}(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&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggttuh1hhjhM@hjubh struct instance}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjubj)}(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.chMAhjubj1)}(hhh]h)}(h9change to the location of area provisioned for current VFh]h9change to the location of area provisioned for current VF}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMAhj3ubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhj2hMAhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h**Description**h]j)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMChjubh)}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMBhjubh)}(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.}(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.chMFhjubeh}(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](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMgubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhjhMgubjb)}(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&]hhuh1jahjhhhjhMgubj )}(h>(struct xe_ggtt_node *node, u32 size, u32 align, u32 mm_flags)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj modnameN classnameNjA jD )}jG ]jJ )}j= jsbc.xe_ggtt_node_insert_lockedasbuh1hhjubjQ)}(h h]h }(hj'hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubj_ )}(hjb h]h*}(hj5hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjubjh)}(hnodeh]hnode}(hjBhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hu32 sizeh](h)}(hhh]jh)}(hu32h]hu32}(hj^hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj`modnameN classnameNjA jD )}jG ]j#c.xe_ggtt_node_insert_lockedasbuh1hhjWubjQ)}(h h]h }(hj|hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWubjh)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjWubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h u32 alignh](h)}(hhh]jh)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjmodnameN classnameNjA jD )}jG ]j#c.xe_ggtt_node_insert_lockedasbuh1hhjubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(halignh]halign}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h u32 mm_flagsh](h)}(hhh]jh)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjmodnameN classnameNjA jD )}jG ]j#c.xe_ggtt_node_insert_lockedasbuh1hhjubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(hmm_flagsh]hmm_flags}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMgubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhjhMgubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hjhMghjhhubj)}(hhh]h)}(h?Locked version to insert a :c:type:`xe_ggtt_node` into the GGTTh](hLocked version to insert a }(hjDhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjNh]h xe_ggtt_node}(hjPhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA jD )}jG ]j#c.xe_ggtt_node_insert_lockedasbj@ xe_ggtt_nodeuh1hhj hKhjDubh into the GGTT}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMghjAhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMgubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j-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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMkhjubj )}(hhh](j)}(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.chMhhjubj1)}(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&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhjhMhhjubh to be inserted}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubj)}(h``u32 size`` size of the node h](j)}(h ``u32 size``h]j)}(hj h]hu32 size}(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)}(hsize of the nodeh]hsize of the node}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhMihjubj)}(h.``u32 align`` alignment constrain of the node h](j)}(h ``u32 align``h]j)}(hjBh]h u32 align}(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)}(halignment constrain of the nodeh]halignment constrain of the node}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMjhjXubah}(h]h ]h"]h$]h&]uh1j0hj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMjhjubj)}(h4``u32 mm_flags`` flags to control the node behavior h](j)}(h``u32 mm_flags``h]j)}(hj{h]h u32 mm_flags}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMkhjuubj1)}(hhh]h)}(h"flags to control the node behaviorh]h"flags to control the node behavior}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1j0hjuubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(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.chMmhjubh)}(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.chMlhjubh)}(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.chMohjubh)}(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.chMphjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j) xe_ggtt_node_insert (C function)c.xe_ggtt_node_inserthNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hHint xe_ggtt_node_insert (struct xe_ggtt_node *node, u32 size, u32 align)h]j9)}(hGint xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)h](j )}(hinth]hint}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMzubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhj0hMzubjb)}(hxe_ggtt_node_inserth]jh)}(hxe_ggtt_node_inserth]hxe_ggtt_node_insert}(hjChhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj?ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjhhhj0hMzubj )}(h0(struct xe_ggtt_node *node, u32 size, u32 align)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hj_hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj[ubjQ)}(h h]h }(hjlhhhNhNubah}(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&]uh1jghjzubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjmodnameN classnameNjA jD )}jG ]jJ )}j= jEsbc.xe_ggtt_node_insertasbuh1hhj[ubjQ)}(h h]h }(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj[ubj_ )}(hjb h]h*}(hjhhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj[ubjh)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj[ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjWubj )}(hu32 sizeh](h)}(hhh]jh)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjmodnameN classnameNjA jD )}jG ]jc.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&]noemphhhuh1j hjWubj )}(h u32 alignh](h)}(hhh]jh)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjmodnameN classnameNjA jD )}jG ]jc.xe_ggtt_node_insertasbuh1hhjubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjh)}(halignh]halign}(hjHhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjWubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhj0hMzubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjhhhj0hMzubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j2hj0hMzhjhhubj)}(hhh]h)}(h-Insert a :c:type:`xe_ggtt_node` into the GGTTh](h Insert a }(hjrhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj|h]h xe_ggtt_node}(hj~hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA jD )}jG ]jc.xe_ggtt_node_insertasbj@ xe_ggtt_nodeuh1hhj hKhjrubh into the GGTT}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMzhjohhubah}(h]h ]h"]h$]h&]uh1jhjhhhj0hMzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j-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~hjubj )}(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.chM{hjubj1)}(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&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhjhM{hjubh to be inserted}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM{hjubah}(h]h ]h"]h$]h&]uh1j0hjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjubj)}(h``u32 size`` size of the node h](j)}(h ``u32 size``h]j)}(hj7h]hu32 size}(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)}(hsize of the nodeh]hsize of the node}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM|hjMubah}(h]h ]h"]h$]h&]uh1j0hj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhM|hjubj)}(h.``u32 align`` alignment constrain of the node h](j)}(h ``u32 align``h]j)}(hjph]h u32 align}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM}hjjubj1)}(hhh]h)}(halignment constrain of the nodeh]halignment constrain of the node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1j0hjjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(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.chMhjubh)}(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~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_init (C function)c.xe_ggtt_node_inithNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h>struct xe_ggtt_node * xe_ggtt_node_init (struct xe_ggtt *ggtt)h]j9)}(hhj hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hj% hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj$ hMubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj6 hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj3 ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj8 modnameN classnameNjA jD )}jG ]jJ )}j= xe_ggtt_node_initsbc.xe_ggtt_node_initasbuh1hhj hhhj$ hMubjQ)}(h h]h }(hjW hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhj$ hMubj_ )}(hjb h]h*}(hje hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj hhhj$ hMubjb)}(hxe_ggtt_node_inith]jh)}(hjT h]hxe_ggtt_node_init}(hjv hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjr ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj hhhj$ hMubj )}(h(struct xe_ggtt *ggtt)h]j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj ubjQ)}(h h]h }(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 classnameNjA jD )}jG ]jR c.xe_ggtt_node_initasbuh1hhj ubjQ)}(h h]h }(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj ubj_ )}(hjb h]h*}(hj hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj ubjh)}(hggtth]hggtt}(hj hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hj hhhj$ hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj hhhj$ hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j2hj$ hMhj hhubj)}(hhh]h)}(h"Initialize ``xe_ggtt_node`` structh](h Initialize }(hj!hhhNhNubj)}(h``xe_ggtt_node``h]h xe_ggtt_node}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh struct}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj!hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj$ hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhj"ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj"hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj"modnameN classnameNjA jD )}jG ]jJ )}j= j"sbc.xe_ggtt_node_finiasbuh1hhj"ubjQ)}(h h]h }(hj"hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj"ubj_ )}(hjb h]h*}(hj"hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj"ubjh)}(hnodeh]hnode}(hj"hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj"ubah}(h]h ]h"]h$]h&]hhuh1j hja"hhhjs"hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj]"hhhjs"hMubah}(h]jX"ah ](jjeh"]h$]h&]jj)jhuh1j2hjs"hMhjZ"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&]uh1jhjZ"hhhjs"hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjO#jjO#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)}(hjY#h]h Parameters}(hj[#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW#ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjS#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)}(hjx#h]hstruct xe_ggtt_node *node}(hjz#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv#ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjr#ubj1)}(hhh]h)}(h&the :c:type:`xe_ggtt_node` to be freedh](hthe }(hj#hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj#h]h xe_ggtt_node}(hj#hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhj#hMhj#ubh to be freed}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1j0hjr#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjo#ubah}(h]h ]h"]h$]h&]uh1j hjS#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.chMhjS#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.chMhjS#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)}(hhjw$ubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw$ubj?)}(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)}(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 classnameNjA jD )}jG ]jJ )}j= ja$sbc.xe_ggtt_node_allocatedasbuh1hhjw$ubjQ)}(h h]h }(hj$hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw$ubj_ )}(hjb h]h*}(hj$hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjw$ubjh)}(hnodeh]hnode}(hj$hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjw$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjs$ubah}(h]h ]h"]h$]h&]hhuh1j hj;$hhhjL$hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj7$hhhjL$hMubah}(h]j2$ah ](jjeh"]h$]h&]jj)jhuh1j2hjL$hMhj4$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&]uh1jhj4$hhhjL$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2%jj2%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.chMhj6%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&]uh1jhjY%ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjU%ubj1)}(hhh]h)}(h*the :c:type:`xe_ggtt_node` to be inspectedh](hthe }(hjt%hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj~%h]h xe_ggtt_node}(hj%hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj|%ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhjp%hMhjt%ubh to be inspected}(hjt%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjp%hMhjq%ubah}(h]h ]h"]h$]h&]uh1j0hjU%ubeh}(h]h ]h"]h$]h&]uh1jhjp%hMhjR%ubah}(h]h ]h"]h$]h&]uh1j hj6%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.chMhj6%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.chMhj6%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)!xe_ggtt_node_pt_size (C function)c.xe_ggtt_node_pt_sizehNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h=size_t xe_ggtt_node_pt_size (const struct xe_ggtt_node *node)h]j9)}(hhjL&ubjQ)}(h h]h }(hj]&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjL&ubj?)}(hjBh]hstruct}(hjk&hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjL&ubjQ)}(h h]h }(hjx&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjL&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 classnameNjA jD )}jG ]j&c.xe_ggtt_node_pt_sizeasbuh1hhjL&ubjQ)}(h h]h }(hj&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjL&ubj_ )}(hjb h]h*}(hj&hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjL&ubjh)}(hnodeh]hnode}(hj&hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjL&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjH&ubah}(h]h ]h"]h$]h&]hhuh1j hj%hhhj"&hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj%hhhj"&hMubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1j2hj"&hMhj%hhubj)}(hhh]h)}(h=Get the size of page table entries needed to map a GGTT node.h]h=Get the size of page table entries needed to map a GGTT node.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj"&hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1j-hhhj hNhNubj)}(h**Parameters** ``const struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` **Return** GGTT node page table entries size in bytes.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 'ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'ubj )}(hhh]j)}(h?``const struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` h](j)}(h#``const struct xe_ggtt_node *node``h]j)}(hj-'h]hconst struct xe_ggtt_node *node}(hj/'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+'ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj''ubj1)}(hhh]h)}(hthe :c:type:`xe_ggtt_node`h](hthe }(hjF'hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjP'h]h xe_ggtt_node}(hjR'hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjN'ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhjB'hMhjF'ubeh}(h]h ]h"]h$]h&]uh1hhjB'hMhjC'ubah}(h]h ]h"]h$]h&]uh1j0hj''ubeh}(h]h ]h"]h$]h&]uh1jhjB'hMhj$'ubah}(h]h ]h"]h$]h&]uh1j hj'ubh)}(h **Return**h]j)}(hj'h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'ubh)}(h+GGTT node page table entries size in bytes.h]h+GGTT node page table entries size in bytes.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_map_bo (C function)c.xe_ggtt_map_bohNtauh1jhj hhhNhNubj.)}(hhh](j3)}(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](j )}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j 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'hMubj )}(hR(struct xe_ggtt *ggtt, struct xe_ggtt_node *node, struct xe_bo *bo, u16 pat_index)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj (hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj'(hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj$(ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj)(modnameN classnameNjA jD )}jG ]jJ )}j= j'sbc.xe_ggtt_map_boasbuh1hhj(ubjQ)}(h h]h }(hjG(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj_ )}(hjb h]h*}(hjU(hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj(ubjh)}(hggtth]hggtt}(hjb(hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubj )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hj{(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjw(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw(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 classnameNjA jD )}jG ]jC(c.xe_ggtt_map_boasbuh1hhjw(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjw(ubj_ )}(hjb h]h*}(hj(hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjw(ubjh)}(hnodeh]hnode}(hj(hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjw(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj(ubjQ)}(h h]h }(hj(hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj )hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj )modnameN classnameNjA jD )}jG ]jC(c.xe_ggtt_map_boasbuh1hhj(ubjQ)}(h h]h }(hj')hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(ubj_ )}(hjb h]h*}(hj5)hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj(ubjh)}(hboh]hbo}(hjB)hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubj )}(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 classnameNjA jD )}jG ]jC(c.xe_ggtt_map_boasbuh1hhjW)ubjQ)}(h h]h }(hj|)hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjW)ubjh)}(h pat_indexh]h pat_index}(hj)hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjW)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubeh}(h]h ]h"]h$]h&]hhuh1j hj'hhhj'hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj'hhhj'hMubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1j2hj'hMhj'hhubj)}(hhh]h)}(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&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA 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)}(hjQ*h]hstruct xe_ggtt_node *node}(hjS*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO*ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjK*ubj1)}(hhh]h)}(h2the :c:type:`xe_ggtt_node` where this BO is mappedh](hthe }(hjj*hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjt*h]h xe_ggtt_node}(hjv*hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjr*ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhjf*hMhjj*ubh where this BO is mapped}(hjj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjf*hMhjg*ubah}(h]h ]h"]h$]h&]uh1j0hjK*ubeh}(h]h ]h"]h$]h&]uh1jhjf*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&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA 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](j )}(hvoidh]hvoid}(hjc+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj_+hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjr+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj_+hhhjq+hMubjb)}(hxe_ggtt_map_bo_unlockedh]jh)}(hxe_ggtt_map_bo_unlockedh]hxe_ggtt_map_bo_unlocked}(hj+hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj+ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj_+hhhjq+hMubj )}(h((struct xe_ggtt *ggtt, struct xe_bo *bo)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj+hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj+hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj+modnameN classnameNjA jD )}jG ]jJ )}j= j+sbc.xe_ggtt_map_bo_unlockedasbuh1hhj+ubjQ)}(h h]h }(hj+hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj+ubj_ )}(hjb h]h*}(hj+hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj+ubjh)}(hggtth]hggtt}(hj+hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+ubj )}(hstruct xe_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}(hj0,hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj-,ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj2,modnameN classnameNjA jD )}jG ]j+c.xe_ggtt_map_bo_unlockedasbuh1hhj,ubjQ)}(h h]h }(hjN,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj,ubj_ )}(hjb h]h*}(hj\,hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj,ubjh)}(hboh]hbo}(hji,hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+ubeh}(h]h ]h"]h$]h&]hhuh1j hj_+hhhjq+hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj[+hhhjq+hMubah}(h]jV+ah ](jjeh"]h$]h&]jj)jhuh1j2hjq+hMhjX+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&]uh1jhjX+hhhjq+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&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA 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)}(hj0-h]hstruct xe_bo *bo}(hj2-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 }(hjI-hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hjS-h]hxe_bo}(hjU-hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjQ-ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_bouh1hhjE-hMhjI-ubh to be mapped}(hjI-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjE-hMhjF-ubah}(h]h ]h"]h$]h&]uh1j0hj*-ubeh}(h]h ]h"]h$]h&]uh1jhjE-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)}(hlint xe_ggtt_insert_bo_at (struct xe_ggtt *ggtt, struct xe_bo *bo, u64 start, u64 end, struct drm_exec *exec)h]j9)}(hkint xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo, u64 start, u64 end, struct drm_exec *exec)h](j )}(hinth]hint}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMBubjQ)}(h h]h }(hj-hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj-hhhj-hMBubjb)}(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-hMBubj )}(hS(struct xe_ggtt *ggtt, struct xe_bo *bo, u64 start, u64 end, struct drm_exec *exec)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj.hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj .ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj .ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj..hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj+.ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj0.modnameN classnameNjA jD )}jG ]jJ )}j= j-sbc.xe_ggtt_insert_bo_atasbuh1hhj .ubjQ)}(h h]h }(hjN.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj .ubj_ )}(hjb h]h*}(hj\.hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj .ubjh)}(hggtth]hggtt}(hji.hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj .ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj.hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj~.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~.ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj.hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj.modnameN classnameNjA jD )}jG ]jJ.c.xe_ggtt_insert_bo_atasbuh1hhj~.ubjQ)}(h h]h }(hj.hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~.ubj_ )}(hjb h]h*}(hj.hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj~.ubjh)}(hboh]hbo}(hj.hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj~.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubj )}(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 classnameNjA jD )}jG ]jJ.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&]noemphhhuh1j hj.ubj )}(hu64 endh](h)}(hhh]jh)}(hu64h]hu64}(hj=/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj:/ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj?/modnameN classnameNjA jD )}jG ]jJ.c.xe_ggtt_insert_bo_atasbuh1hhj6/ubjQ)}(h h]h }(hj[/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj6/ubjh)}(hendh]hend}(hji/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj6/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubj )}(hstruct drm_exec *exech](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)}(hdrm_exech]hdrm_exec}(hj/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj/modnameN classnameNjA jD )}jG ]jJ.c.xe_ggtt_insert_bo_atasbuh1hhj~/ubjQ)}(h h]h }(hj/hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj~/ubj_ )}(hjb h]h*}(hj/hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj~/ubjh)}(hexech]hexec}(hj/hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj~/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubeh}(h]h ]h"]h$]h&]hhuh1j hj-hhhj-hMBubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj-hhhj-hMBubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1j2hj-hMBhj-hhubj)}(hhh]h)}(h"Insert BO at a specific GGTT spaceh]h"Insert BO at a specific GGTT space}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMBhj0hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hMBubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1j-hhhj hNhNubj)}(hX**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where bo will be inserted ``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted ``u64 start`` address where it will be inserted ``u64 end`` end of the range where it will be inserted ``struct drm_exec *exec`` The drm_exec transaction to use for exhaustive eviction. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj%0h]h Parameters}(hj'0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#0ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMFhj0ubj )}(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)}(hjD0h]hstruct xe_ggtt *ggtt}(hjF0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB0ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMChj>0ubj1)}(hhh]h)}(h/the :c:type:`xe_ggtt` where bo will be insertedh](hthe }(hj]0hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjg0h]hxe_ggtt}(hji0hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhje0ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggttuh1hhjY0hMChj]0ubh where bo will be inserted}(hj]0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjY0hMChjZ0ubah}(h]h ]h"]h$]h&]uh1j0hj>0ubeh}(h]h ]h"]h$]h&]uh1jhjY0hMChj;0ubj)}(h8``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted h](j)}(h``struct xe_bo *bo``h]j)}(hj0h]hstruct xe_bo *bo}(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.chMDhj0ubj1)}(hhh]h)}(h"the :c:type:`xe_bo` to be insertedh](hthe }(hj0hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hj0h]hxe_bo}(hj0hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_bouh1hhj0hMDhj0ubh to be inserted}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hMDhj0ubah}(h]h ]h"]h$]h&]uh1j0hj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMDhj;0ubj)}(h0``u64 start`` address where it will be inserted h](j)}(h ``u64 start``h]j)}(hj0h]h u64 start}(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.chMEhj0ubj1)}(hhh]h)}(h!address where it will be insertedh]h!address where it will be inserted}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMEhj1ubah}(h]h ]h"]h$]h&]uh1j0hj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hMEhj;0ubj)}(h7``u64 end`` end of the range where it will be inserted h](j)}(h ``u64 end``h]j)}(hj51h]hu64 end}(hj71hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj31ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMFhj/1ubj1)}(hhh]h)}(h*end of the range where it will be insertedh]h*end of the range where it will be inserted}(hjN1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ1hMFhjK1ubah}(h]h ]h"]h$]h&]uh1j0hj/1ubeh}(h]h ]h"]h$]h&]uh1jhjJ1hMFhj;0ubj)}(hS``struct drm_exec *exec`` The drm_exec transaction to use for exhaustive eviction. h](j)}(h``struct drm_exec *exec``h]j)}(hjn1h]hstruct drm_exec *exec}(hjp1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl1ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMGhjh1ubj1)}(hhh]h)}(h8The drm_exec transaction to use for exhaustive eviction.h]h8The drm_exec transaction to use for exhaustive eviction.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMGhj1ubah}(h]h ]h"]h$]h&]uh1j0hjh1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMGhj;0ubeh}(h]h ]h"]h$]h&]uh1j hj0ubh)}(h **Return**h]j)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMIhj0ubh)}(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.chMIhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_insert_bo (C function)c.xe_ggtt_insert_bohNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hUint xe_ggtt_insert_bo (struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec)h]j9)}(hTint xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec)h](j )}(hinth]hint}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMRubjQ)}(h h]h }(hj1hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1hhhj1hMRubjb)}(hxe_ggtt_insert_boh]jh)}(hxe_ggtt_insert_boh]hxe_ggtt_insert_bo}(hj2hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj 2ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj1hhhj1hMRubj )}(h?(struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj+2hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj'2ubjQ)}(h h]h }(hj82hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'2ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjI2hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjF2ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjK2modnameN classnameNjA jD )}jG ]jJ )}j= j2sbc.xe_ggtt_insert_boasbuh1hhj'2ubjQ)}(h h]h }(hji2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj'2ubj_ )}(hjb h]h*}(hjw2hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj'2ubjh)}(hggtth]hggtt}(hj2hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj'2ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj#2ubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj2hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj2hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj2modnameN classnameNjA jD )}jG ]je2c.xe_ggtt_insert_boasbuh1hhj2ubjQ)}(h h]h }(hj2hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj2ubj_ )}(hjb h]h*}(hj2hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj2ubjh)}(hboh]hbo}(hj2hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj#2ubj )}(hstruct drm_exec *exech](j?)}(hjBh]hstruct}(hj 3hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj 3ubjQ)}(h h]h }(hj3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj 3ubh)}(hhh]jh)}(hdrm_exech]hdrm_exec}(hj+3hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj(3ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj-3modnameN classnameNjA jD )}jG ]je2c.xe_ggtt_insert_boasbuh1hhj 3ubjQ)}(h h]h }(hjI3hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj 3ubj_ )}(hjb h]h*}(hjW3hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj 3ubjh)}(hexech]hexec}(hjd3hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj 3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj#2ubeh}(h]h ]h"]h$]h&]hhuh1j hj1hhhj1hMRubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj1hhhj1hMRubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1j2hj1hMRhj1hhubj)}(hhh]h)}(hInsert BO into GGTTh]hInsert BO into GGTT}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMRhj3hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1j-hhhj hNhNubj)}(hX***Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where bo will be inserted ``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted ``struct drm_exec *exec`` The drm_exec transaction to use for exhaustive eviction. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMVhj3ubj )}(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)}(hj3h]hstruct xe_ggtt *ggtt}(hj3hhhNhNubah}(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.chMShj3ubj1)}(hhh]h)}(h/the :c:type:`xe_ggtt` where bo will be insertedh](hthe }(hj3hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj3h]hxe_ggtt}(hj3hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggttuh1hhj3hMShj3ubh where bo will be inserted}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMShj3ubah}(h]h ]h"]h$]h&]uh1j0hj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMShj3ubj)}(h8``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted h](j)}(h``struct xe_bo *bo``h]j)}(hj+4h]hstruct xe_bo *bo}(hj-4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)4ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMThj%4ubj1)}(hhh]h)}(h"the :c:type:`xe_bo` to be insertedh](hthe }(hjD4hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hjN4h]hxe_bo}(hjP4hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjL4ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_bouh1hhj@4hMThjD4ubh to be inserted}(hjD4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@4hMThjA4ubah}(h]h ]h"]h$]h&]uh1j0hj%4ubeh}(h]h ]h"]h$]h&]uh1jhj@4hMThj3ubj)}(hS``struct drm_exec *exec`` The drm_exec transaction to use for exhaustive eviction. h](j)}(h``struct drm_exec *exec``h]j)}(hj4h]hstruct drm_exec *exec}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMUhj4ubj1)}(hhh]h)}(h8The drm_exec transaction to use for exhaustive eviction.h]h8The drm_exec transaction to use for exhaustive eviction.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMUhj4ubah}(h]h ]h"]h$]h&]uh1j0hj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMUhj3ubeh}(h]h ]h"]h$]h&]uh1j hj3ubh)}(h **Return**h]j)}(hj4h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMWhj3ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMWhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_remove_bo (C function)c.xe_ggtt_remove_bohNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h?void xe_ggtt_remove_bo (struct xe_ggtt *ggtt, struct xe_bo *bo)h]j9)}(h>void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)h](j )}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj5hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM`ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5hhhj5hM`ubjb)}(hxe_ggtt_remove_boh]jh)}(hxe_ggtt_remove_boh]hxe_ggtt_remove_bo}(hj(5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj$5ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj5hhhj5hM`ubj )}(h((struct xe_ggtt *ggtt, struct xe_bo *bo)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjD5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj@5ubjQ)}(h h]h }(hjQ5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@5ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjb5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj_5ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjd5modnameN classnameNjA jD )}jG ]jJ )}j= j*5sbc.xe_ggtt_remove_boasbuh1hhj@5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@5ubj_ )}(hjb h]h*}(hj5hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj@5ubjh)}(hggtth]hggtt}(hj5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj@5ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj<5ubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hj5hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj5modnameN classnameNjA jD )}jG ]j~5c.xe_ggtt_remove_boasbuh1hhj5ubjQ)}(h h]h }(hj5hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj5ubj_ )}(hjb h]h*}(hj6hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj5ubjh)}(hboh]hbo}(hj 6hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj5ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj<5ubeh}(h]h ]h"]h$]h&]hhuh1j hj5hhhj5hM`ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj4hhhj5hM`ubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1j2hj5hM`hj4hhubj)}(hhh]h)}(hRemove a BO from the GGTTh]hRemove a BO from the GGTT}(hj76hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM`hj46hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj5hM`ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjO6jjO6jjjuh1j-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)}(hjY6h]h Parameters}(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.chMdhjS6ubj )}(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)}(hjx6h]hstruct xe_ggtt *ggtt}(hjz6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv6ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMahjr6ubj1)}(hhh]h)}(h0the :c:type:`xe_ggtt` where node will be removedh](hthe }(hj6hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj6h]hxe_ggtt}(hj6hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggttuh1hhj6hMahj6ubh where node will be removed}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hMahj6ubah}(h]h ]h"]h$]h&]uh1j0hjr6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMahjo6ubj)}(h6``struct xe_bo *bo`` the :c:type:`xe_bo` to be removedh](j)}(h``struct xe_bo *bo``h]j)}(hj6h]hstruct xe_bo *bo}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMchj6ubj1)}(hhh]h)}(h!the :c:type:`xe_bo` to be removedh](hthe }(hj6hhhNhNubh)}(h:c:type:`xe_bo`h]j)}(hj6h]hxe_bo}(hj6hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_bouh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMbhj6ubh to be removed}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMbhj6ubah}(h]h ]h"]h$]h&]uh1j0hj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMchjo6ubeh}(h]h ]h"]h$]h&]uh1j hjS6ubeh}(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}(hjT7hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjQ7ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjV7modnameN classnameNjA jD )}jG ]jJ )}j= xe_ggtt_largest_holesbc.xe_ggtt_largest_holeasbuh1hhjM7hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMsubjQ)}(h h]h }(hjv7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjM7hhhju7hMsubjb)}(hxe_ggtt_largest_holeh]jh)}(hjr7h]hxe_ggtt_largest_hole}(hj7hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj7ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjM7hhhju7hMsubj )}(h1(struct xe_ggtt *ggtt, u64 alignment, u64 *spare)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj7hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj7modnameN classnameNjA jD )}jG ]jp7c.xe_ggtt_largest_holeasbuh1hhj7ubjQ)}(h h]h }(hj7hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj7ubj_ )}(hjb h]h*}(hj7hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj7ubjh)}(hggtth]hggtt}(hj7hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj7ubj )}(h u64 alignmenth](h)}(hhh]jh)}(hu64h]hu64}(hj8hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj8modnameN classnameNjA jD )}jG ]jp7c.xe_ggtt_largest_holeasbuh1hhj8ubjQ)}(h h]h }(hj48hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj8ubjh)}(h alignmenth]h alignment}(hjB8hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj7ubj )}(h u64 *spareh](h)}(hhh]jh)}(hu64h]hu64}(hj^8hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj[8ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj`8modnameN classnameNjA jD )}jG ]jp7c.xe_ggtt_largest_holeasbuh1hhjW8ubjQ)}(h h]h }(hj|8hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjW8ubj_ )}(hjb h]h*}(hj8hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjW8ubjh)}(hspareh]hspare}(hj8hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjW8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj7ubeh}(h]h ]h"]h$]h&]hhuh1j hjM7hhhju7hMsubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjI7hhhju7hMsubah}(h]jD7ah ](jjeh"]h$]h&]jj)jhuh1j2hju7hMshjF7hhubj)}(hhh]h)}(hLargest GGTT holeh]hLargest GGTT hole}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMshj8hhubah}(h]h ]h"]h$]h&]uh1jhjF7hhhju7hMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8jj8jjjuh1j-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)}(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.chMwhj8ubj )}(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)}(hj9h]hstruct xe_ggtt *ggtt}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMthj8ubj1)}(hhh]h)}(h,the :c:type:`xe_ggtt` that will be inspectedh](hthe }(hj9hhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hj%9h]hxe_ggtt}(hj'9hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj#9ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggttuh1hhj9hMthj9ubh that will be inspected}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9hMthj9ubah}(h]h ]h"]h$]h&]uh1j0hj8ubeh}(h]h ]h"]h$]h&]uh1jhj9hMthj8ubj)}(h$``u64 alignment`` minimum alignment h](j)}(h``u64 alignment``h]j)}(hj^9h]h u64 alignment}(hj`9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\9ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMuhjX9ubj1)}(hhh]h)}(hminimum alignmenth]hminimum alignment}(hjw9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs9hMuhjt9ubah}(h]h ]h"]h$]h&]uh1j0hjX9ubeh}(h]h ]h"]h$]h&]uh1jhjs9hMuhj8ubj)}(h```u64 *spare`` If not NULL: in: desired memory size to be spared / out: Adjusted possible spare h](j)}(h``u64 *spare``h]j)}(hj9h]h u64 *spare}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMvhj9ubj1)}(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}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMvhj9ubah}(h]h ]h"]h$]h&]uh1j0hj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMvhj8ubeh}(h]h ]h"]h$]h&]uh1j hj8ubh)}(h **Return**h]j)}(hj9h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMxhj8ubh)}(h*size of the largest continuous GGTT regionh]h*size of the largest continuous GGTT region}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMxhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_assign (C function)c.xe_ggtt_assignhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h?void xe_ggtt_assign (const struct xe_ggtt_node *node, u16 vfid)h]j9)}(h>void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid)h](j )}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j 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_assignh]jh)}(hxe_ggtt_assignh]hxe_ggtt_assign}(hj8:hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj4:ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj:hhhj%:hMubj )}(h+(const struct xe_ggtt_node *node, u16 vfid)h](j )}(hconst struct xe_ggtt_node *nodeh](j?)}(hj}$h]hconst}(hjT:hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjP:ubjQ)}(h h]h }(hja:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjP:ubj?)}(hjBh]hstruct}(hjo: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 classnameNjA jD )}jG ]jJ )}j= j::sbc.xe_ggtt_assignasbuh1hhjP:ubjQ)}(h h]h }(hj:hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjP:ubj_ )}(hjb h]h*}(hj:hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjP:ubjh)}(hnodeh]hnode}(hj:hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjP:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjL:ubj )}(hu16 vfidh](h)}(hhh]jh)}(hu16h]hu16}(hj:hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj:ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj:modnameN classnameNjA jD )}jG ]j:c.xe_ggtt_assignasbuh1hhj:ubjQ)}(h h]h }(hj;hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj:ubjh)}(hvfidh]hvfid}(hj;hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjL:ubeh}(h]h ]h"]h$]h&]hhuh1j hj:hhhj%:hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj:hhhj%:hMubah}(h]j :ah ](jjeh"]h$]h&]jj)jhuh1j2hj%:hMhj :hhubj)}(hhh]h)}(hassign a GGTT region to the VFh]hassign a GGTT region to the VF}(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.chMhj7;hhubah}(h]h ]h"]h$]h&]uh1jhj :hhhj%:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjR;jjR;jjjuh1j-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)}(hj\;h]h Parameters}(hj^;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ;ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjV;ubj )}(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{;h]hconst struct xe_ggtt_node *node}(hj};hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy;ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhju;ubj1)}(hhh]h)}(h$the :c:type:`xe_ggtt_node` to updateh](hthe }(hj;hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj;h]h xe_ggtt_node}(hj;hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhj;hMhj;ubh to update}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1j0hju;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjr;ubj)}(h``u16 vfid`` the VF identifier h](j)}(h ``u16 vfid``h]j)}(hj;h]hu16 vfid}(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 VF identifierh]hthe VF identifier}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1j0hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjr;ubeh}(h]h ]h"]h$]h&]uh1j hjV;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.chMhjV;ubh)}(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.}(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.chMhjV;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_node_save (C function)c.xe_ggtt_node_savehNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hSint xe_ggtt_node_save (struct xe_ggtt_node *node, void *dst, size_t size, u16 vfid)h]j9)}(hRint xe_ggtt_node_save(struct xe_ggtt_node *node, void *dst, size_t size, u16 vfid)h](j )}(hinth]hint}(hjW<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjS<hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjf<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjS<hhhje<hMubjb)}(hxe_ggtt_node_saveh]jh)}(hxe_ggtt_node_saveh]hxe_ggtt_node_save}(hjx<hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjt<ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjS<hhhje<hMubj )}(h=(struct xe_ggtt_node *node, void *dst, size_t size, u16 vfid)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hj<hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj<hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj<modnameN classnameNjA jD )}jG ]jJ )}j= jz<sbc.xe_ggtt_node_saveasbuh1hhj<ubjQ)}(h h]h }(hj<hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj<ubj_ )}(hjb h]h*}(hj<hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj<ubjh)}(hnodeh]hnode}(hj<hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj<ubj )}(h void *dsth](j )}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubj_ )}(hjb h]h*}(hj"=hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj=ubjh)}(hdsth]hdst}(hj/=hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj<ubj )}(h size_t sizeh](h)}(hhh]jh)}(hsize_th]hsize_t}(hjK=hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjH=ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjM=modnameN classnameNjA jD )}jG ]j<c.xe_ggtt_node_saveasbuh1hhjD=ubjQ)}(h h]h }(hji=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjD=ubjh)}(hsizeh]hsize}(hjw=hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjD=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj<ubj )}(hu16 vfidh](h)}(hhh]jh)}(hu16h]hu16}(hj=hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj=modnameN classnameNjA jD )}jG ]j<c.xe_ggtt_node_saveasbuh1hhj=ubjQ)}(h h]h }(hj=hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=ubjh)}(hvfidh]hvfid}(hj=hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj<ubeh}(h]h ]h"]h$]h&]hhuh1j hjS<hhhje<hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjO<hhhje<hMubah}(h]jJ<ah ](jjeh"]h$]h&]jj)jhuh1j2hje<hMhjL<hhubj)}(hhh]h)}(h*Save a :c:type:`xe_ggtt_node` to a buffer.h](hSave a }(hj=hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hj=h]h xe_ggtt_node}(hj=hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA jD )}jG ]j<c.xe_ggtt_node_saveasbj@ xe_ggtt_nodeuh1hhj hKhj=ubh to a buffer.}(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&]uh1jhjL<hhhje<hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)>jj)>jjjuh1j-hhhj hNhNubj)}(hX **Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be saved ``void *dst`` destination buffer ``size_t size`` destination buffer size in bytes ``u16 vfid`` VF identifier **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj3>h]h Parameters}(hj5>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1>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 saved h](j)}(h``struct xe_ggtt_node *node``h]j)}(hjR>h]hstruct xe_ggtt_node *node}(hjT>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP>ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjL>ubj1)}(hhh]h)}(h&the :c:type:`xe_ggtt_node` to be savedh](hthe }(hjk>hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hju>h]h xe_ggtt_node}(hjw>hhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjs>ubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhjg>hMhjk>ubh to be saved}(hjk>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjg>hMhjh>ubah}(h]h ]h"]h$]h&]uh1j0hjL>ubeh}(h]h ]h"]h$]h&]uh1jhjg>hMhjI>ubj)}(h!``void *dst`` destination buffer h](j)}(h ``void *dst``h]j)}(hj>h]h void *dst}(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)}(hdestination bufferh]hdestination buffer}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1j0hj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjI>ubj)}(h1``size_t size`` destination buffer size in bytes h](j)}(h``size_t size``h]j)}(hj>h]h size_t size}(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 destination buffer size in bytesh]h destination buffer size in bytes}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1j0hj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjI>ubj)}(h``u16 vfid`` VF identifier h](j)}(h ``u16 vfid``h]j)}(hj ?h]hu16 vfid}(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 VF identifierh]h VF identifier}(hj9?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5?hMhj6?ubah}(h]h ]h"]h$]h&]uh1j0hj?ubeh}(h]h ]h"]h$]h&]uh1jhj5?hMhjI>ubeh}(h]h ]h"]h$]h&]uh1j hj->ubh)}(h **Return**h]j)}(hj[?h]hReturn}(hj]?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY?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.}(hjq?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj->ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_node_load (C function)c.xe_ggtt_node_loadhNtauh1jhj hhhNhNubj.)}(hhh](j3)}(hYint xe_ggtt_node_load (struct xe_ggtt_node *node, const void *src, size_t size, u16 vfid)h]j9)}(hXint xe_ggtt_node_load(struct xe_ggtt_node *node, const void *src, size_t size, u16 vfid)h](j )}(hinth]hint}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j 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_loadh]jh)}(hxe_ggtt_node_loadh]hxe_ggtt_node_load}(hj?hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj?ubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahj?hhhj?hMubj )}(hC(struct xe_ggtt_node *node, const void *src, size_t size, u16 vfid)h](j )}(hstruct xe_ggtt_node *nodeh](j?)}(hjBh]hstruct}(hj?hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj?ubjQ)}(h h]h }(hj?hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubh)}(hhh]jh)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj?hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj?modnameN classnameNjA jD )}jG ]jJ )}j= j?sbc.xe_ggtt_node_loadasbuh1hhj?ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj?ubj_ )}(hjb h]h*}(hj)@hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj?ubjh)}(hnodeh]hnode}(hj6@hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj?ubj )}(hconst void *srch](j?)}(hj}$h]hconst}(hjO@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjK@ubjQ)}(h h]h }(hj\@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjK@ubj )}(hvoidh]hvoid}(hjj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjK@ubjQ)}(h h]h }(hjx@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjK@ubj_ )}(hjb h]h*}(hj@hhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjK@ubjh)}(hsrch]hsrc}(hj@hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjK@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj?ubj )}(h size_t sizeh](h)}(hhh]jh)}(hsize_th]hsize_t}(hj@hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj@modnameN classnameNjA jD )}jG ]j@c.xe_ggtt_node_loadasbuh1hhj@ubjQ)}(h h]h }(hj@hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubjh)}(hsizeh]hsize}(hj@hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj?ubj )}(hu16 vfidh](h)}(hhh]jh)}(hu16h]hu16}(hj@hhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj@modnameN classnameNjA jD )}jG ]j@c.xe_ggtt_node_loadasbuh1hhj@ubjQ)}(h h]h }(hjAhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj@ubjh)}(hvfidh]hvfid}(hj#AhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj?ubeh}(h]h ]h"]h$]h&]hhuh1j hj?hhhj?hMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhj?hhhj?hMubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1j2hj?hMhj?hhubj)}(hhh]h)}(h,Load a :c:type:`xe_ggtt_node` from a buffer.h](hLoad a }(hjMAhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjWAh]h xe_ggtt_node}(hjYAhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjUAubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA jD )}jG ]j@c.xe_ggtt_node_loadasbj@ xe_ggtt_nodeuh1hhj hKhjMAubh from a buffer.}(hjMAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjJAhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1j-hhhj hNhNubj)}(hX**Parameters** ``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be loaded ``const void *src`` source buffer ``size_t size`` source buffer size in bytes ``u16 vfid`` VF identifier **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjAubj )}(hhh](j)}(hF``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be loaded h](j)}(h``struct xe_ggtt_node *node``h]j)}(hjAh]hstruct xe_ggtt_node *node}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjAubj1)}(hhh]h)}(h'the :c:type:`xe_ggtt_node` to be loadedh](hthe }(hjAhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j)}(hjAh]h xe_ggtt_node}(hjAhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggtt_nodeuh1hhjAhMhjAubh to be loaded}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1j0hjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h"``const void *src`` source buffer h](j)}(h``const void *src``h]j)}(hjBh]hconst void *src}(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.chMhj Bubj1)}(hhh]h)}(h source bufferh]h source buffer}(hj+BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'BhMhj(Bubah}(h]h ]h"]h$]h&]uh1j0hj Bubeh}(h]h ]h"]h$]h&]uh1jhj'BhMhjAubj)}(h,``size_t size`` source buffer size in bytes h](j)}(h``size_t size``h]j)}(hjKBh]h size_t size}(hjMBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIBubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjEBubj1)}(hhh]h)}(hsource buffer size in bytesh]hsource buffer size in bytes}(hjdBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`BhMhjaBubah}(h]h ]h"]h$]h&]uh1j0hjEBubeh}(h]h ]h"]h$]h&]uh1jhj`BhMhjAubj)}(h``u16 vfid`` VF identifier h](j)}(h ``u16 vfid``h]j)}(hjBh]hu16 vfid}(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.chMhj~Bubj1)}(hhh]h)}(h VF identifierh]h VF identifier}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1j0hj~Bubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjAubeh}(h]h ]h"]h$]h&]uh1j hjAubh)}(h **Return**h]j)}(hjBh]hReturn}(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.chMhjAubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)xe_ggtt_dump (C function)c.xe_ggtt_dumphNtauh1jhj hhhNhNubj.)}(hhh](j3)}(h>int xe_ggtt_dump (struct xe_ggtt *ggtt, struct drm_printer *p)h]j9)}(h=int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p)h](j )}(hinth]hint}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjChhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjChhhjChMubjb)}(h xe_ggtt_dumph]jh)}(h xe_ggtt_dumph]h xe_ggtt_dump}(hj%ChhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj!Cubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjChhhjChMubj )}(h-(struct xe_ggtt *ggtt, struct drm_printer *p)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjAChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hj=CubjQ)}(h h]h }(hjNChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=Cubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj_ChhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj\Cubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjaCmodnameN classnameNjA jD )}jG ]jJ )}j= j'Csbc.xe_ggtt_dumpasbuh1hhj=CubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj=Cubj_ )}(hjb h]h*}(hjChhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hj=Cubjh)}(hggtth]hggtt}(hjChhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj=Cubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj9Cubj )}(hstruct drm_printer *ph](j?)}(hjBh]hstruct}(hjChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubh)}(hhh]jh)}(h drm_printerh]h drm_printer}(hjChhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjCubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjCmodnameN classnameNjA jD )}jG ]j{Cc.xe_ggtt_dumpasbuh1hhjCubjQ)}(h h]h }(hjChhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjCubj_ )}(hjb h]h*}(hjChhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjCubjh)}(hjk h]hp}(hj DhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjCubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj9Cubeh}(h]h ]h"]h$]h&]hhuh1j hjChhhjChMubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjBhhhjChMubah}(h]jBah ](jjeh"]h$]h&]jj)jhuh1j2hjChMhjBhhubj)}(hhh]h)}(hDump GGTT for debugh]hDump GGTT for debug}(hj3DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj0Dhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjChMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKDjjKDjjjuh1j-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)}(hjUDh]h Parameters}(hjWDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSDubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjODubj )}(hhh](j)}(h<``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be dumped h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjtDh]hstruct xe_ggtt *ggtt}(hjvDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrDubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjnDubj1)}(hhh]h)}(h"the :c:type:`xe_ggtt` to be dumpedh](hthe }(hjDhhhNhNubh)}(h:c:type:`xe_ggtt`h]j)}(hjDh]hxe_ggtt}(hjDhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggttuh1hhjDhMhjDubh to be dumped}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1j0hjnDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjkDubj)}(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)}(hjDh]hstruct drm_printer *p}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjDubj1)}(hhh]h)}(hMthe :c:type:`drm_mm_printer` helper handle to be used to dump the informationh](hthe }(hjDhhhNhNubh)}(h:c:type:`drm_mm_printer`h]j)}(hjDh]hdrm_mm_printer}(hjDhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ drm_mm_printeruh1hhjDhMhjDubh1 helper handle to be used to dump the information}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1j0hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjkDubeh}(h]h ]h"]h$]h&]uh1j hjODubh)}(h **Return**h]j)}(hj.Eh]hReturn}(hj0EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Eubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjODubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjDEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjODubeh}(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}(hjvEhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjsEubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjxEmodnameN classnameNjA jD )}jG ]jJ )}j= xe_ggtt_print_holessbc.xe_ggtt_print_holesasbuh1hhjoEhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM$ubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjoEhhhjEhM$ubjb)}(hxe_ggtt_print_holesh]jh)}(hjEh]hxe_ggtt_print_holes}(hjEhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjEubah}(h]h ](jzj{eh"]h$]h&]hhuh1jahjoEhhhjEhM$ubj )}(h<(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p)h](j )}(hstruct xe_ggtt *ggtth](j?)}(hjBh]hstruct}(hjEhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjEubjQ)}(h h]h }(hjEhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjEhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjEubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjEmodnameN classnameNjA jD )}jG ]jEc.xe_ggtt_print_holesasbuh1hhjEubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjEubj_ )}(hjb h]h*}(hjFhhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjEubjh)}(hggtth]hggtt}(hjFhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjEubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEubj )}(h u64 alignmenth](h)}(hhh]jh)}(hu64h]hu64}(hj8FhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj5Fubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj:FmodnameN classnameNjA jD )}jG ]jEc.xe_ggtt_print_holesasbuh1hhj1FubjQ)}(h h]h }(hjVFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj1Fubjh)}(h alignmenth]h alignment}(hjdFhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghj1Fubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEubj )}(hstruct drm_printer *ph](j?)}(hjBh]hstruct}(hj}FhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjyFubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyFubh)}(hhh]jh)}(h drm_printerh]h drm_printer}(hjFhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjFubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjFmodnameN classnameNjA jD )}jG ]jEc.xe_ggtt_print_holesasbuh1hhjyFubjQ)}(h h]h }(hjFhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjyFubj_ )}(hjb h]h*}(hjFhhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjyFubjh)}(hjk h]hp}(hjFhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjyFubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEubeh}(h]h ]h"]h$]h&]hhuh1j hjoEhhhjEhM$ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjkEhhhjEhM$ubah}(h]jfEah ](jjeh"]h$]h&]jj)jhuh1j2hjEhM$hjhEhhubj)}(hhh]h)}(h Print holesh]h Print holes}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM$hjFhhubah}(h]h ]h"]h$]h&]uh1jhjhEhhhjEhM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1j-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)}(hjGh]h Parameters}(hj!GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM(hjGubj )}(hhh](j)}(h?``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be inspected h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hj>Gh]hstruct xe_ggtt *ggtt}(hj@GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhjHubjQ)}(h h]h }(hjHhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hj IhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjIubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj ImodnameN classnameNjA jD )}jG ]jHc.xe_ggtt_encode_pte_flagsasbuh1hhjHubjQ)}(h h]h }(hj'IhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjHubj_ )}(hjb h]h*}(hj5IhhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjHubjh)}(hggtth]hggtt}(hjBIhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjHubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjHubj )}(hstruct xe_bo *boh](j?)}(hjBh]hstruct}(hj[IhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j>hjWIubjQ)}(h h]h }(hjhIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWIubh)}(hhh]jh)}(hxe_boh]hxe_bo}(hjyIhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjvIubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetj{ImodnameN classnameNjA jD )}jG ]jHc.xe_ggtt_encode_pte_flagsasbuh1hhjWIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjWIubj_ )}(hjb h]h*}(hjIhhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjWIubjh)}(hboh]hbo}(hjIhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjWIubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjHubj )}(h u16 pat_indexh](h)}(hhh]jh)}(hu16h]hu16}(hjIhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjIubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjImodnameN classnameNjA jD )}jG ]jHc.xe_ggtt_encode_pte_flagsasbuh1hhjIubjQ)}(h h]h }(hjIhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjIubjh)}(h pat_indexh]h pat_index}(hjIhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjIubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjHubeh}(h]h ]h"]h$]h&]hhuh1j hjHhhhjHhMLubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjHhhhjHhMLubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1j2hjHhMLhjHhhubj)}(hhh]h)}(hGet PTE encoding flags for BOh]hGet PTE encoding flags for BO}(hj$JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMLhj!Jhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjHhMLubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjKubjQ)}(h h]h }(hjKhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubh)}(hhh]jh)}(hxe_ggtth]hxe_ggtt}(hjKhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjKubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjKmodnameN classnameNjA jD )}jG ]jKc.xe_ggtt_read_pteasbuh1hhjKubjQ)}(h h]h }(hjLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjKubj_ )}(hjb h]h*}(hj'LhhhNhNubah}(h]h ]jk ah"]h$]h&]uh1j^ hjKubjh)}(hggtth]hggtt}(hj4LhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjKubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjKubj )}(h u64 offseth](h)}(hhh]jh)}(hu64h]hu64}(hjPLhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjMLubah}(h]h ]h"]h$]h&] refdomainjreftypej= reftargetjRLmodnameN classnameNjA jD )}jG ]jKc.xe_ggtt_read_pteasbuh1hhjILubjQ)}(h h]h }(hjnLhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjILubjh)}(hoffseth]hoffset}(hj|LhhhNhNubah}(h]h ]jsah"]h$]h&]uh1jghjILubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjKubeh}(h]h ]h"]h$]h&]hhuh1j hjKhhhjKhM[ubeh}(h]h ]h"]h$]h&]hhjuh1j8jjhjKhhhjKhM[ubah}(h]j~Kah ](jjeh"]h$]h&]jj)jhuh1j2hjKhM[hjKhhubj)}(hhh]h)}(hRead a PTE from the GGTTh]hRead a PTE from the GGTT}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM[hjLhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjKhM[ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1j-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)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM_hjLubj )}(hhh](j)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j)}(h``struct xe_ggtt *ggtt``h]j)}(hjLh]hstruct xe_ggtt *ggtt}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM\hjLubj1)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hjMh]j)}(hjMh]hxe_ggtt}(hjMhhhNhNubah}(h]h ](j) jc-typeeh"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]refdocj5 refdomainjreftypetype refexplicitrefwarnjA j j@ xe_ggttuh1hhjLhM\hjMubah}(h]h ]h"]h$]h&]uh1hhjLhM\hjLubah}(h]h ]h"]h$]h&]uh1j0hjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM\hjLubj)}(h@``u64 offset`` the offset for which the mapping should be read. h](j)}(h``u64 offset``h]j)}(hj:Mh]h u64 offset}(hj