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]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/pt_BR/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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(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.hhKhjubh)}(hhh](h)}(h Kernel BOsh]h Kernel BOs}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hNhNubh)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhj'ubh)}(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.}(hjGhhhNhNubah}(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!hj'ubeh}(h] kernel-bosah ]h"] kernel bosah$]h&]uh1hhjubh)}(hhh](h)}(hUser BOsh]hUser BOs}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hNhNubh)}(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.}(hjohhhNhNubah}(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&hj^ubh)}(hhh](h)}(h Private BOsh]h Private BOs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hNhNubh)}(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).}(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.hhK0hj~ubeh}(h] private-bosah ]h"] private bosah$]h&]uh1hhj^ubh)}(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&]uh1hhj^ubh)}(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&]uh1hhj^ubeh}(h]user-bosah ]h"]user bosah$]h&]uh1hhjubeh}(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.}(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.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.}(hjNhhhNhNubah}(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}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hNhNubh)}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKZhj]ubh)}(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).}(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^hj]ubh)}(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.}(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.hhKehj]ubh)}(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.hhKjhj]ubh)}(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.hhKmhj]ubh)}(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.hhKphj]ubeh}(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.}(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)}(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.}(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)}(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.}(hj6hhhNhNubah}(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.}(hjEhhhNhNubah}(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}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hNhNubh)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:7: ./drivers/gpu/drm/xe/xe_bo_doc.hhKhj\ubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhNhNubh)}(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.hhKhjubh)}(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.hhKhjubh)}(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.hhKhjubh)}(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.hhKhjubeh}(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}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlexe_ggtt_node (C struct)c.xe_ggtt_nodehNtauh1j0hjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h xe_ggtt_nodeh]hdesc_signature_line)}(hstruct xe_ggtt_nodeh](hdesc_sig_keyword)}(hstructh]hstruct}(hjThhhNhNubah}(h]h ]kah"]h$]h&]uh1jRhjNhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKubhdesc_sig_space)}(h h]h }(hjfhhhNhNubah}(h]h ]wah"]h$]h&]uh1jdhjNhhhjchKubh desc_name)}(h xe_ggtt_nodeh]h desc_sig_name)}(hjJh]h xe_ggtt_node}(hj}hhhNhNubah}(h]h ]nah"]h$]h&]uh1j{hjwubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1juhjNhhhjchKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jLsphinx_line_type declaratorhjHhhhjchKubah}(h]j?ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jFhjchKhjChhubh desc_content)}(hhh]h)}(hA node in GGTT.h]hA node in GGTT.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKIhjhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjchKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jAhhhjhNhNubh container)}(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](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKMhjubh literal_block)}(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; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKOhjubh)}(h **Members**h]j)}(hjh]hMembers}(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.chKVhjubhdefinition_list)}(hhh](hdefinition_list_item)}(hG``ggtt`` Back pointer to xe_ggtt where this region will be inserted at h](hterm)}(h``ggtt``h]hliteral)}(hj,h]hggtt}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj*ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKPhj$ubh definition)}(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}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChKPhjFubah}(h]h ]h"]h$]h&]uh1jDhj$ubeh}(h]h ]h"]h$]h&]uh1j"hjChKPhjubj#)}(h``base`` A drm_mm_node h](j))}(h``base``h]j/)}(hjih]hbase}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjgubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKRhjcubjE)}(hhh]h)}(h A drm_mm_nodeh]h A drm_mm_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKRhjubah}(h]h ]h"]h$]h&]uh1jDhjcubeh}(h]h ]h"]h$]h&]uh1j"hj~hKRhjubj#)}(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&]uh1j.hjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKThjubjE)}(hhh]h)}(h'The work struct for the delayed removalh]h'The work struct for the delayed removal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKThjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhKThjubj#)}(h>``invalidate_on_remove`` If it needs invalidation upon removalh](j))}(h``invalidate_on_remove``h]j/)}(hjh]hinvalidate_on_remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKUhjubjE)}(hhh]h)}(h%If it needs invalidation upon removalh]h%If it needs invalidation upon removal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKVhjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhKUhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKYhjhhubh)}(hThis struct is allocated with xe_ggtt_insert_node(,_transform) or xe_ggtt_insert_bo(,_at). It will be deallocated using xe_ggtt_node_remove().h]hThis struct is allocated with xe_ggtt_insert_node(,_transform) or xe_ggtt_insert_bo(,_at). It will be deallocated using xe_ggtt_node_remove().}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKJhjhhubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_pt_ops (C struct)c.xe_ggtt_pt_opshNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hxe_ggtt_pt_opsh]jM)}(hstruct xe_ggtt_pt_opsh](jS)}(hjVh]hstruct}(hj\hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjXhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKPubje)}(h h]h }(hjjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjXhhhjihKPubjv)}(hxe_ggtt_pt_opsh]j|)}(hjVh]hxe_ggtt_pt_ops}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjxubah}(h]h ](jjeh"]h$]h&]hhuh1juhjXhhhjihKPubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjThhhjihKPubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1jFhjihKPhjQhhubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKZhjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjihKPubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jAhhhjhNhNubj)}(hX|**Definition**:: struct xe_ggtt_pt_ops { u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index); xe_ggtt_set_pte_fn ggtt_set_pte; u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr); }; **Members** ``pte_encode_flags`` Encode PTE flags for a given BO ``ggtt_set_pte`` Directly write into GGTT's PTE ``ggtt_get_pte`` Directly read from GGTT's PTEh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chK^hjubj)}(hstruct xe_ggtt_pt_ops { u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index); xe_ggtt_set_pte_fn ggtt_set_pte; u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr); };h]hstruct xe_ggtt_pt_ops { u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index); xe_ggtt_set_pte_fn ggtt_set_pte; u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr); };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chK`hjubh)}(h **Members**h]j)}(hjh]hMembers}(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.chKfhjubj)}(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&]uh1j.hj ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chK_hjubjE)}(hhh]h)}(hEncode PTE flags for a given BOh]hEncode PTE flags for a given BO}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK_hj!ubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hj hK_hjubj#)}(h0``ggtt_set_pte`` Directly write into GGTT's PTE h](j))}(h``ggtt_set_pte``h]j/)}(hjDh]h ggtt_set_pte}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjBubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKbhj>ubjE)}(hhh]h)}(hDirectly write into GGTT's PTEh]h Directly write into GGTT’s PTE}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhKbhjZubah}(h]h ]h"]h$]h&]uh1jDhj>ubeh}(h]h ]h"]h$]h&]uh1j"hjYhKbhjubj#)}(h.``ggtt_get_pte`` Directly read from GGTT's PTEh](j))}(h``ggtt_get_pte``h]j/)}(hj}h]h ggtt_get_pte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj{ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKdhjwubjE)}(hhh]h)}(hDirectly read from GGTT's PTEh]hDirectly read from GGTT’s PTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKehjubah}(h]h ]h"]h$]h&]uh1jDhjwubeh}(h]h ]h"]h$]h&]uh1j"hjhKdhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt (C struct) c.xe_ggtthNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hxe_ggtth]jM)}(hstruct xe_ggtth](jS)}(hjVh]hstruct}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKkubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhjhKkubjv)}(hxe_ggtth]j|)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ](jjeh"]h$]h&]hhuh1juhjhhhjhKkubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjhhhjhKkubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jFhjhKkhjhhubj)}(hhh]h)}(hMain GGTT structh]hMain GGTT struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKihjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKkubeh}(h]h ](jstructeh"]h$]h&]jjjj1jj1jjjuh1jAhhhjhNhNubj)}(hX**Definition**:: struct xe_ggtt { struct xe_tile *tile; u64 start; 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 ``start`` Start offset of GGTT ``size`` Total usable size of this GGTT ``flags`` Flags for this GGTT Acceptable flags: - ``XE_GGTT_FLAGS_64K`` - if PTE size is 64K. Otherwise, regular is 4K. - ``XE_GGTT_FLAGS_ONLINE`` - is GGTT online, protected by ggtt->lock after init ``scratch`` Internal object allocation used as a scratch page ``lock`` Mutex lock to protect GGTT data ``gsm`` The iomem pointer to the actual location of the translation table located in the GSM for easy PTE manipulation ``pt_ops`` Page Table operations per platform ``mm`` The memory manager used to manage individual GGTT allocations ``access_count`` counts GGTT writes ``wq`` Dedicated unordered work queue to process node removalsh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh:}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKmhj5ubj)}(hXKstruct xe_ggtt { struct xe_tile *tile; u64 start; 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]hXKstruct xe_ggtt { struct xe_tile *tile; u64 start; 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; };}hjVsbah}(h]h ]h"]h$]h&]hhuh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKohj5ubh)}(h **Members**h]j)}(hjgh]hMembers}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chK~hj5ubj)}(hhh](j#)}(h6``tile`` Back pointer to tile where this GGTT belongs h](j))}(h``tile``h]j/)}(hjh]htile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKphjubjE)}(hhh]h)}(h,Back pointer to tile where this GGTT belongsh]h,Back pointer to tile where this GGTT belongs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKphjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhKphj}ubj#)}(h``start`` Start offset of GGTT h](j))}(h ``start``h]j/)}(hjh]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKrhjubjE)}(hhh]h)}(hStart offset of GGTTh]hStart offset of GGTT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKrhjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhKrhj}ubj#)}(h(``size`` Total usable size of this GGTT h](j))}(h``size``h]j/)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKthjubjE)}(hhh]h)}(hTotal usable size of this GGTTh]hTotal usable size of this GGTT}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKthj ubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hj hKthj}ubj#)}(h``flags`` Flags for this GGTT Acceptable flags: - ``XE_GGTT_FLAGS_64K`` - if PTE size is 64K. Otherwise, regular is 4K. - ``XE_GGTT_FLAGS_ONLINE`` - is GGTT online, protected by ggtt->lock after init h](j))}(h ``flags``h]j/)}(hj1 h]hflags}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj/ ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chK}hj+ ubjE)}(hhh](h)}(hFlags for this GGTT Acceptable flags: - ``XE_GGTT_FLAGS_64K`` - if PTE size is 64K. Otherwise, regular is 4K. - ``XE_GGTT_FLAGS_ONLINE`` - is GGTT online, protected by ggtt->lockh](h(Flags for this GGTT Acceptable flags: - }(hjJ hhhNhNubj/)}(h``XE_GGTT_FLAGS_64K``h]hXE_GGTT_FLAGS_64K}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjJ ubh3 - if PTE size is 64K. Otherwise, regular is 4K. - }(hjJ hhhNhNubj/)}(h``XE_GGTT_FLAGS_ONLINE``h]hXE_GGTT_FLAGS_ONLINE}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjJ ubh* - is GGTT online, protected by ggtt->lock}(hjJ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKyhjG ubh block_quote)}(h after init h]h)}(h after inith]h after init}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF hK}hj ubah}(h]h ]h"]h$]h&]uh1j} hjF hK}hjG ubeh}(h]h ]h"]h$]h&]uh1jDhj+ ubeh}(h]h ]h"]h$]h&]uh1j"hjF hK}hj}ubj#)}(h>``scratch`` Internal object allocation used as a scratch page h](j))}(h ``scratch``h]j/)}(hj h]hscratch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubjE)}(hhh]h)}(h1Internal object allocation used as a scratch pageh]h1Internal object allocation used as a scratch page}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1j"hj hKhj}ubj#)}(h)``lock`` Mutex lock to protect GGTT data h](j))}(h``lock``h]j/)}(hj h]hlock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubjE)}(hhh]h)}(hMutex lock to protect GGTT datah]hMutex lock to protect GGTT data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1j"hj hKhj}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/)}(hj h]hgsm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubjE)}(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}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj1 ubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1j"hj0 hKhj}ubj#)}(h.``pt_ops`` Page Table operations per platform h](j))}(h ``pt_ops``h]j/)}(hjU h]hpt_ops}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjS ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjO ubjE)}(hhh]h)}(h"Page Table operations per platformh]h"Page Table operations per platform}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj hKhjk ubah}(h]h ]h"]h$]h&]uh1jDhjO ubeh}(h]h ]h"]h$]h&]uh1j"hjj hKhj}ubj#)}(hE``mm`` The memory manager used to manage individual GGTT allocations h](j))}(h``mm``h]j/)}(hj h]hmm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubjE)}(hhh]h)}(h=The memory manager used to manage individual GGTT allocationsh]h=The memory manager used to manage individual GGTT allocations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1j"hj hKhj}ubj#)}(h$``access_count`` counts GGTT writes h](j))}(h``access_count``h]j/)}(hj h]h access_count}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubjE)}(hhh]h)}(hcounts GGTT writesh]hcounts GGTT writes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1j"hj hKhj}ubj#)}(h>``wq`` Dedicated unordered work queue to process node removalsh](j))}(h``wq``h]j/)}(hj h]hwq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubjE)}(hhh]h)}(h7Dedicated unordered work queue to process node removalsh]h7Dedicated unordered work queue to process node removals}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1j"hj hKhj}ubeh}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjC h]h Description}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjhhubh)}(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.}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKjhjhhubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_start (C function)c.xe_ggtt_starthNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h(u64 xe_ggtt_start (struct xe_ggtt *ggtt)h]jM)}(h'u64 xe_ggtt_start(struct xe_ggtt *ggtt)h](h)}(hhh]j|)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j xe_ggtt_startsbc.xe_ggtt_startasbuh1hhj} hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKubje)}(h h]h }(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj} hhhj hKubjv)}(h xe_ggtt_starth]j|)}(hj h]h xe_ggtt_start}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj ubah}(h]h ](jjeh"]h$]h&]hhuh1juhj} hhhj hKubhdesc_parameterlist)}(h(struct xe_ggtt *ggtt)h]hdesc_parameter)}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj ubje)}(h h]h }(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]j c.xe_ggtt_startasbuh1hhj ubje)}(h h]h }(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubhdesc_sig_punctuation)}(h*h]h*}(hj+ hhhNhNubah}(h]h ]pah"]h$]h&]uh1j) hj ubj|)}(hggtth]hggtt}(hj: hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hj} hhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjy hhhj hKubah}(h]jt ah ](jjeh"]h$]h&]jj)jhuh1jFhj hKhjv hhubj)}(hhh]h)}(hGet starting offset of GGTT.h]hGet starting offset of GGTT.}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhja hhubah}(h]h ]h"]h$]h&]uh1jhjv hhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj| jj| jjjuh1jAhhhjhNhNubj)}(hu**Parameters** ``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` **Return** Starting offset for this :c:type:`xe_ggtt`.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubj)}(hhh]j#)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hj h]hstruct xe_ggtt *ggtt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubjE)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hj h]j/)}(hj h]hxe_ggtt}(hj hhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]refdoc gpu/xe/xe_mm refdomainjreftypetype refexplicitrefwarnj j )}j ]sb reftargetxe_ggttuh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1j"hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubh)}(h+Starting offset for this :c:type:`xe_ggtt`.h](hStarting offset for this }(hj hhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hj h]hxe_ggtt}(hj" hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj= hKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_size (C function)c.xe_ggtt_sizehNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h'u64 xe_ggtt_size (struct xe_ggtt *ggtt)h]jM)}(h&u64 xe_ggtt_size(struct xe_ggtt *ggtt)h](h)}(hhh]j|)}(hu64h]hu64}(hjk hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjh ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjm modnameN classnameNj j )}j ]j )}j xe_ggtt_sizesbc.xe_ggtt_sizeasbuh1hhjd hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKubje)}(h h]h }(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjd hhhj hKubjv)}(h xe_ggtt_sizeh]j|)}(hj h]h xe_ggtt_size}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj ubah}(h]h ](jjeh"]h$]h&]hhuh1juhjd hhhj hKubj )}(h(struct xe_ggtt *ggtt)h]j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj ubje)}(h h]h }(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNj j )}j ]j c.xe_ggtt_sizeasbuh1hhj ubje)}(h h]h }(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubj* )}(hj- h]h*}(hjhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj ubj|)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hjd hhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj` hhhj hKubah}(h]j[ ah ](jjeh"]h$]h&]jj)jhuh1jFhj hKhj] hhubj)}(hhh]h)}(hGet size of GGTT.h]hGet size of GGTT.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj8hhubah}(h]h ]h"]h$]h&]uh1jhj] hhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1jAhhhjhNhNubj)}(hv**Parameters** ``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` **Return** Total usable size of this :c:type:`xe_ggtt`.h](h)}(h**Parameters**h]j)}(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.chKhjWubj)}(hhh]j#)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hj|h]hstruct xe_ggtt *ggtt}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjzubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjvubjE)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hjh]j/)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jDhjvubeh}(h]h ]h"]h$]h&]uh1j"hjhKhjsubah}(h]h ]h"]h$]h&]uh1jhjWubh)}(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.chKhjWubh)}(h,Total usable size of this :c:type:`xe_ggtt`.h](hTotal usable size of this }(hjhhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_alloc (C function)c.xe_ggtt_allochNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h5struct xe_ggtt * xe_ggtt_alloc (struct xe_tile *tile)h]jM)}(h3struct xe_ggtt *xe_ggtt_alloc(struct xe_tile *tile)h](jS)}(hjVh]hstruct}(hj9hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj5hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM$ubje)}(h h]h }(hjGhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj5hhhjFhM$ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNj j )}j ]j )}j xe_ggtt_allocsbc.xe_ggtt_allocasbuh1hhj5hhhjFhM$ubje)}(h h]h }(hjyhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj5hhhjFhM$ubj* )}(hj- h]h*}(hjhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj5hhhjFhM$ubjv)}(h xe_ggtt_alloch]j|)}(hjvh]h xe_ggtt_alloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ](jjeh"]h$]h&]hhuh1juhj5hhhjFhM$ubj )}(h(struct xe_tile *tile)h]j )}(hstruct xe_tile *tileh](jS)}(hjVh]hstruct}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubh)}(hhh]j|)}(hxe_tileh]hxe_tile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jtc.xe_ggtt_allocasbuh1hhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubj* )}(hj- h]h*}(hjhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjubj|)}(htileh]htile}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hj5hhhjFhM$ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj1hhhjFhM$ubah}(h]j,ah ](jjeh"]h$]h&]jj)jhuh1jFhjFhM$hj.hhubj)}(hhh]h)}(h-Allocate a GGTT for a given :c:type:`xe_tile`h](hAllocate a GGTT for a given }(hj4hhhNhNubh)}(h:c:type:`xe_tile`h]j/)}(hj>h]hxe_tile}(hj@hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj<ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]jtc.xe_ggtt_allocasbj xe_tileuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj4ubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM$hj1hhubah}(h]h ]h"]h$]h&]uh1jhj.hhhjFhM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jAhhhjhNhNubj)}(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&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM(hjuubj)}(hhh]j#)}(h+``struct xe_tile *tile`` :c:type:`xe_tile` h](j))}(h``struct xe_tile *tile``h]j/)}(hjh]hstruct xe_tile *tile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM%hjubjE)}(hhh]h)}(h:c:type:`xe_tile`h]h)}(hjh]j/)}(hjh]hxe_tile}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_tileuh1hhjhM%hjubah}(h]h ]h"]h$]h&]uh1hhjhM%hjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjuubh)}(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.chM'hjuubh)}(h/Allocates a :c:type:`xe_ggtt` for a given tile.h](h Allocates a }(hjhhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM&hjubh for a given tile.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hM&hjuubh)}(h **Return**h]j)}(hj9h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM(hjuubh)}(h9:c:type:`xe_ggtt` on success, or NULL when out of memory.h](h)}(h:c:type:`xe_ggtt`h]j/)}(hjUh]hxe_ggtt}(hjWhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjSubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM)hjOubh( on success, or NULL when out of memory.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhM)hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_init_early (C function)c.xe_ggtt_init_earlyhNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h-int xe_ggtt_init_early (struct xe_ggtt *ggtt)h]jM)}(h,int xe_ggtt_init_early(struct xe_ggtt *ggtt)h](hdesc_sig_keyword_type)}(hinth]hint}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM}ubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhjhM}ubjv)}(hxe_ggtt_init_earlyh]j|)}(hxe_ggtt_init_earlyh]hxe_ggtt_init_early}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ](jjeh"]h$]h&]hhuh1juhjhhhjhM}ubj )}(h(struct xe_ggtt *ggtt)h]j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.xe_ggtt_init_earlyasbuh1hhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubj* )}(hj- h]h*}(hj)hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjubj|)}(hggtth]hggtt}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhM}ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjhhhjhM}ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jFhjhM}hjhhubj)}(hhh]h)}(hEarly GGTT initializationh]hEarly GGTT initialization}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM}hj]hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM}ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1jAhhhjhNhNubj)}(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)}(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.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&]uh1j.hjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM~hjubjE)}(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&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjhM~hjubh to be initialized}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhM~hjubah}(h]h ]h"]h$]h&]uh1jhj|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&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj|ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j= xe_ggtt_node_remove (C function)c.xe_ggtt_node_removehNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hEvoid xe_ggtt_node_remove (struct xe_ggtt_node *node, bool invalidate)h]jM)}(hDvoid xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate)h](j)}(hvoidh]hvoid}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubje)}(h h]h }(hjzhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjghhhjyhMubjv)}(hxe_ggtt_node_removeh]j|)}(hxe_ggtt_node_removeh]hxe_ggtt_node_remove}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ](jjeh"]h$]h&]hhuh1juhjghhhjyhMubj )}(h,(struct xe_ggtt_node *node, bool invalidate)h](j )}(hstruct xe_ggtt_node *nodeh](jS)}(hjVh]hstruct}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.xe_ggtt_node_removeasbuh1hhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubj* )}(hj- h]h*}(hjhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjubj|)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hbool invalidateh](j)}(hboolh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubje)}(h h]h }(hj(hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubj|)}(h invalidateh]h invalidate}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjghhhjyhMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjchhhjyhMubah}(h]j^ah ](jjeh"]h$]h&]jj)jhuh1jFhjyhMhj`hhubj)}(hhh]h)}(h-Remove a :c:type:`xe_ggtt_node` from the GGTTh](h Remove a }(hj`hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j/)}(hjjh]h xe_ggtt_node}(hjlhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjhubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]jc.xe_ggtt_node_removeasbj xe_ggtt_nodeuh1hhj`hKhj`ubh from the GGTT}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjyhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jAhhhjhNhNubj)}(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&]uh1j.hjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubjE)}(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&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhjhMhjubh to be removed}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjubj#)}(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&]uh1j.hj#ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubjE)}(hhh]h)}(h'if node needs invalidation upon removalh]h'if node needs invalidation upon removal}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj;ubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hj:hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_init (C function)c.xe_ggtt_inithNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h'int xe_ggtt_init (struct xe_ggtt *ggtt)h]jM)}(h&int xe_ggtt_init(struct xe_ggtt *ggtt)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj{hhhjhMubjv)}(h xe_ggtt_inith]j|)}(h xe_ggtt_inith]h xe_ggtt_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ](jjeh"]h$]h&]hhuh1juhj{hhhjhMubj )}(h(struct xe_ggtt *ggtt)h]j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.xe_ggtt_initasbuh1hhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubj* )}(hj- h]h*}(hjhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjubj|)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hj{hhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjwhhhjhMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jFhjhMhjthhubj)}(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&]uh1jhjthhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1jAhhhjhNhNubj)}(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)}(hjah]h Parameters}(hjchhhNhNubah}(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#)}(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&]uh1j.hj~ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjzubjE)}(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&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjhMhjubh to be initialized}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jDhjzubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[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&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j= xe_ggtt_shift_nodes (C function)c.xe_ggtt_shift_nodeshNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h>void xe_ggtt_shift_nodes (struct xe_ggtt *ggtt, u64 new_start)h]jM)}(h=void xe_ggtt_shift_nodes(struct xe_ggtt *ggtt, u64 new_start)h](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMSubje)}(h h]h }(hj2hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhj1hMSubjv)}(hxe_ggtt_shift_nodesh]j|)}(hxe_ggtt_shift_nodesh]hxe_ggtt_shift_nodes}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj@ubah}(h]h ](jjeh"]h$]h&]hhuh1juhjhhhj1hMSubj )}(h%(struct xe_ggtt *ggtt, u64 new_start)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj`hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj\ubje)}(h h]h }(hjmhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj\ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jFsbc.xe_ggtt_shift_nodesasbuh1hhj\ubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj\ubj* )}(hj- h]h*}(hjhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj\ubj|)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj\ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjXubj )}(h u64 new_starth](h)}(hhh]j|)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jc.xe_ggtt_shift_nodesasbuh1hhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubj|)}(h new_starth]h new_start}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjXubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhj1hMSubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjhhhj1hMSubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jFhj1hMShjhhubj)}(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.}(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.chMShj(hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hMSubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jAhhhjhNhNubj)}(hX**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` struct instance ``u64 new_start`` new location of area provisioned for current VF **Description** Ensure that all struct :c:type:`xe_ggtt_node` are moved to the **new_start** base address by changing the base offset of the GGTT. This function may be called multiple times during recovery, but if **new_start** is unchanged from the current base, it's a noop. **new_start** should be a value between xe_wopcm_size() and #GUC_GGTT_TOP.h](h)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMWhjGubj)}(hhh](j#)}(h?``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` struct instance h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hjlh]hstruct xe_ggtt *ggtt}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMThjfubjE)}(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&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjhMThjubh struct instance}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1jDhjfubeh}(h]h ]h"]h$]h&]uh1j"hjhMThjcubj#)}(hB``u64 new_start`` new location of area provisioned for current VF h](j))}(h``u64 new_start``h]j/)}(hjh]h u64 new_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMUhjubjE)}(hhh]h)}(h/new location of area provisioned for current VFh]h/new location of area provisioned for current VF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMUhjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMUhjcubeh}(h]h ]h"]h$]h&]uh1jhjGubh)}(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.chMWhjGubh)}(hEnsure that all struct :c:type:`xe_ggtt_node` are moved to the **new_start** base address by changing the base offset of the GGTT.h](hEnsure that all struct }(hjhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j/)}(hj#h]h xe_ggtt_node}(hj%hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMVhjubh are moved to the }(hjhhhNhNubj)}(h **new_start**h]h new_start}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh6 base address by changing the base offset of the GGTT.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hMVhjGubh)}(hThis function may be called multiple times during recovery, but if **new_start** is unchanged from the current base, it's a noop.h](hCThis function may be called multiple times during recovery, but if }(hj]hhhNhNubj)}(h **new_start**h]h new_start}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh3 is unchanged from the current base, it’s a noop.}(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.chMYhjGubh)}(hJ**new_start** should be a value between xe_wopcm_size() and #GUC_GGTT_TOP.h](j)}(h **new_start**h]h new_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh= should be a value between xe_wopcm_size() and #GUC_GGTT_TOP.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM\hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j= xe_ggtt_insert_node (C function)c.xe_ggtt_insert_nodehNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hUstruct xe_ggtt_node * xe_ggtt_insert_node (struct xe_ggtt *ggtt, u32 size, u32 align)h]jM)}(hSstruct xe_ggtt_node *xe_ggtt_insert_node(struct xe_ggtt *ggtt, u32 size, u32 align)h](jS)}(hjVh]hstruct}(hjhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhjhMubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j xe_ggtt_insert_nodesbc.xe_ggtt_insert_nodeasbuh1hhjhhhjhMubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhjhMubj* )}(hj- h]h*}(hj hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjhhhjhMubjv)}(hxe_ggtt_insert_nodeh]j|)}(hjh]hxe_ggtt_insert_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ](jjeh"]h$]h&]hhuh1juhjhhhjhMubj )}(h+(struct xe_ggtt *ggtt, u32 size, u32 align)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj5hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj1ubje)}(h h]h }(hjBhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj1ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNj j )}j ]jc.xe_ggtt_insert_nodeasbuh1hhj1ubje)}(h h]h }(hjqhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj1ubj* )}(hj- h]h*}(hjhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj1ubj|)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj-ubj )}(hu32 sizeh](h)}(hhh]j|)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jc.xe_ggtt_insert_nodeasbuh1hhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubj|)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj-ubj )}(h u32 alignh](h)}(hhh]j|)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jc.xe_ggtt_insert_nodeasbuh1hhjubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubj|)}(halignh]halign}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj-ubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jFhjhMhjhhubj)}(hhh]h)}(h-Insert a :c:type:`xe_ggtt_node` into the GGTTh](h Insert a }(hjFhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j/)}(hjPh]h xe_ggtt_node}(hjRhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjNubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]jc.xe_ggtt_insert_nodeasbj xe_ggtt_nodeuh1hhj`hKhjFubh into the GGTT}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjChhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jAhhhjhNhNubj)}(hX**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` into which the node should be inserted. ``u32 size`` size of the node ``u32 align`` alignment constrain of the node **Return** :c:type:`xe_ggtt_node` on success or a ERR_PTR 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.chMhjubj)}(hhh](j#)}(hW``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` into which the node should be inserted. h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hjh]hstruct xe_ggtt *ggtt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubjE)}(hhh]h)}(h=the :c:type:`xe_ggtt` into which the node should be inserted.h](hthe }(hjhhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjhMhjubh( into which the node should be inserted.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjubj#)}(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&]uh1j.hj ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubjE)}(hhh]h)}(hsize of the nodeh]hsize of the node}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj!ubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hj hMhjubj#)}(h.``u32 align`` alignment constrain of the node h](j))}(h ``u32 align``h]j/)}(hjDh]h u32 align}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjBubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj>ubjE)}(hhh]h)}(halignment constrain of the nodeh]halignment constrain of the node}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jDhj>ubeh}(h]h ]h"]h$]h&]uh1j"hjYhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubh)}(h::c:type:`xe_ggtt_node` on success or a ERR_PTR on failure.h](h)}(h:c:type:`xe_ggtt_node`h]j/)}(hjh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubh$ on success or a ERR_PTR on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=!xe_ggtt_node_pt_size (C function)c.xe_ggtt_node_pt_sizehNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h=size_t xe_ggtt_node_pt_size (const struct xe_ggtt_node *node)h]jM)}(h"hhubj)}(hhh]h)}(h#Restore a mapping of a BO into GGTTh]h#Restore a mapping of a BO into GGTT}(hjy#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#hhubah}(h]h ]h"]h$]h&]uh1jhj>"hhhjW"hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jAhhhjhNhNubj)}(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&]uh1j.hj#ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj#ubjE)}(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&]uh1j.hj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj#hMhj#ubh where node will be mapped}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jDhj#ubeh}(h]h ]h"]h$]h&]uh1j"hj#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&]uh1j.hj$ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj$ubjE)}(hhh]h)}(h the :c:type:`xe_bo` to be mappedh](hthe }(hj/$hhhNhNubh)}(h:c:type:`xe_bo`h]j/)}(hj9$h]hxe_bo}(hj;$hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj7$ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhj+$hMhj/$ubh to be mapped}(hj/$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+$hMhj,$ubah}(h]h ]h"]h$]h&]uh1jDhj$ubeh}(h]h ]h"]h$]h&]uh1j"hj+$hMhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h**Description**h]j)}(hjt$h]h Description}(hjv$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr$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&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=*xe_ggtt_insert_node_transform (C function)c.xe_ggtt_insert_node_transformhNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hstruct xe_ggtt_node * xe_ggtt_insert_node_transform (struct xe_ggtt *ggtt, struct xe_bo *bo, u64 pte_flags, u64 size, u32 align, xe_ggtt_transform_cb transform, void *arg)h]jM)}(hstruct xe_ggtt_node *xe_ggtt_insert_node_transform(struct xe_ggtt *ggtt, struct xe_bo *bo, u64 pte_flags, u64 size, u32 align, xe_ggtt_transform_cb transform, void *arg)h](jS)}(hjVh]hstruct}(hj$hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj$hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubje)}(h h]h }(hj$hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj$hhhj$hMubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNj j )}j ]j )}j xe_ggtt_insert_node_transformsbc.xe_ggtt_insert_node_transformasbuh1hhj$hhhj$hMubje)}(h h]h }(hj$hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj$hhhj$hMubj* )}(hj- h]h*}(hj%hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj$hhhj$hMubjv)}(hxe_ggtt_insert_node_transformh]j|)}(hj$h]hxe_ggtt_insert_node_transform}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj%ubah}(h]h ](jjeh"]h$]h&]hhuh1juhj$hhhj$hMubj )}(hw(struct xe_ggtt *ggtt, struct xe_bo *bo, u64 pte_flags, u64 size, u32 align, xe_ggtt_transform_cb transform, void *arg)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj3%hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj/%ubje)}(h h]h }(hj@%hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj/%ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hjQ%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjN%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjS%modnameN classnameNj j )}j ]j$c.xe_ggtt_insert_node_transformasbuh1hhj/%ubje)}(h h]h }(hjo%hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj/%ubj* )}(hj- h]h*}(hj}%hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj/%ubj|)}(hggtth]hggtt}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj/%ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+%ubj )}(hstruct xe_bo *boh](jS)}(hjVh]hstruct}(hj%hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj%ubje)}(h h]h }(hj%hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj%ubh)}(hhh]j|)}(hxe_boh]hxe_bo}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNj j )}j ]j$c.xe_ggtt_insert_node_transformasbuh1hhj%ubje)}(h h]h }(hj%hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj%ubj* )}(hj- h]h*}(hj%hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj%ubj|)}(hboh]hbo}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+%ubj )}(h u64 pte_flagsh](h)}(hhh]j|)}(hu64h]hu64}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNj j )}j ]j$c.xe_ggtt_insert_node_transformasbuh1hhj&ubje)}(h h]h }(hj4&hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj&ubj|)}(h pte_flagsh]h pte_flags}(hjB&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+%ubj )}(hu64 sizeh](h)}(hhh]j|)}(hu64h]hu64}(hj^&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj[&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`&modnameN classnameNj j )}j ]j$c.xe_ggtt_insert_node_transformasbuh1hhjW&ubje)}(h h]h }(hj|&hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjW&ubj|)}(hsizeh]hsize}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjW&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+%ubj )}(h u32 alignh](h)}(hhh]j|)}(hu32h]hu32}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNj j )}j ]j$c.xe_ggtt_insert_node_transformasbuh1hhj&ubje)}(h h]h }(hj&hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj&ubj|)}(halignh]halign}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+%ubj )}(hxe_ggtt_transform_cb transformh](h)}(hhh]j|)}(hxe_ggtt_transform_cbh]hxe_ggtt_transform_cb}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNj j )}j ]j$c.xe_ggtt_insert_node_transformasbuh1hhj&ubje)}(h h]h }(hj 'hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj&ubj|)}(h transformh]h transform}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+%ubj )}(h void *argh](j)}(hvoidh]hvoid}(hj3'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/'ubje)}(h h]h }(hjA'hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj/'ubj* )}(hj- h]h*}(hjO'hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj/'ubj|)}(hargh]harg}(hj\'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj/'ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+%ubeh}(h]h ]h"]h$]h&]hhuh1j hj$hhhj$hMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj$hhhj$hMubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1jFhj$hMhj$hhubj)}(hhh]h)}(h=Insert a newly allocated :c:type:`xe_ggtt_node` into the GGTTh](hInsert a newly allocated }(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&]uh1j.hj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]j$c.xe_ggtt_insert_node_transformasbj xe_ggtt_nodeuh1hhj`hKhj'ubh into the GGTT}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jAhhhjhNhNubj)}(hX**Parameters** ``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where the node will inserted/reserved. ``struct xe_bo *bo`` The bo to be transformed ``u64 pte_flags`` The extra GGTT flags to add to mapping. ``u64 size`` size of the node ``u32 align`` required alignment for node ``xe_ggtt_transform_cb transform`` transformation function that will populate the GGTT node, or NULL for linear mapping. ``void *arg`` Extra argument to pass to the transformation function. **Description** This function allows inserting a GGTT node with a custom transformation function. This is useful for display to allow inserting rotated framebuffers to GGTT. **Return** A pointer to ``xe_ggtt_node`` struct on success. An ERR_PTR otherwise.h](h)}(h**Parameters**h]j)}(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#)}(hV``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where the node will inserted/reserved. h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hj'h]hstruct xe_ggtt *ggtt}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj'ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj'ubjE)}(hhh]h)}(h*ubah}(h]h ](jjeh"]h$]h&]hhuh1juhj*hhhj/*hM]ubj )}(hS(struct xe_ggtt *ggtt, struct xe_bo *bo, u64 start, u64 end, struct drm_exec *exec)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj^*hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjZ*ubje)}(h h]h }(hjk*hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjZ*ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hj|*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjy*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~*modnameN classnameNj j )}j ]j )}j jD*sbc.xe_ggtt_insert_bo_atasbuh1hhjZ*ubje)}(h h]h }(hj*hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjZ*ubj* )}(hj- h]h*}(hj*hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjZ*ubj|)}(hggtth]hggtt}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjZ*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjV*ubj )}(hstruct xe_bo *boh](jS)}(hjVh]hstruct}(hj*hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj*ubje)}(h h]h }(hj*hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj*ubh)}(hhh]j|)}(hxe_boh]hxe_bo}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNj j )}j ]j*c.xe_ggtt_insert_bo_atasbuh1hhj*ubje)}(h h]h }(hj +hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj*ubj* )}(hj- h]h*}(hj+hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj*ubj|)}(hboh]hbo}(hj'+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjV*ubj )}(h u64 starth](h)}(hhh]j|)}(hu64h]hu64}(hjC+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj@+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjE+modnameN classnameNj j )}j ]j*c.xe_ggtt_insert_bo_atasbuh1hhj<+ubje)}(h h]h }(hja+hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj<+ubj|)}(hstarth]hstart}(hjo+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj<+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjV*ubj )}(hu64 endh](h)}(hhh]j|)}(hu64h]hu64}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNj j )}j ]j*c.xe_ggtt_insert_bo_atasbuh1hhj+ubje)}(h h]h }(hj+hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj+ubj|)}(hendh]hend}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjV*ubj )}(hstruct drm_exec *exech](jS)}(hjVh]hstruct}(hj+hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj+ubje)}(h h]h }(hj+hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj+ubh)}(hhh]j|)}(hdrm_exech]hdrm_exec}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNj j )}j ]j*c.xe_ggtt_insert_bo_atasbuh1hhj+ubje)}(h h]h }(hj ,hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj+ubj* )}(hj- h]h*}(hj,hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj+ubj|)}(hexech]hexec}(hj',hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjV*ubeh}(h]h ]h"]h$]h&]hhuh1j hj*hhhj/*hM]ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj*hhhj/*hM]ubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jFhj/*hM]hj*hhubj)}(hhh]h)}(h"Insert BO at a specific GGTT spaceh]h"Insert BO at a specific GGTT space}(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.chM]hjN,hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj/*hM]ubeh}(h]h ](jfunctioneh"]h$]h&]jjjji,jji,jjjuh1jAhhhjhNhNubj)}(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)}(hjs,h]h Parameters}(hju,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq,ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMahjm,ubj)}(hhh](j#)}(hI``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where bo will be inserted h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hj,h]hstruct xe_ggtt *ggtt}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj,ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM^hj,ubjE)}(hhh]h)}(h/the :c:type:`xe_ggtt` where bo will be insertedh](hthe }(hj,hhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hj,h]hxe_ggtt}(hj,hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj,ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj,hM^hj,ubh where bo will be inserted}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hM^hj,ubah}(h]h ]h"]h$]h&]uh1jDhj,ubeh}(h]h ]h"]h$]h&]uh1j"hj,hM^hj,ubj#)}(h8``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted h](j))}(h``struct xe_bo *bo``h]j/)}(hj,h]hstruct xe_bo *bo}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj,ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM_hj,ubjE)}(hhh]h)}(h"the :c:type:`xe_bo` to be insertedh](hthe }(hj-hhhNhNubh)}(h:c:type:`xe_bo`h]j/)}(hj-h]hxe_bo}(hj-hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhj-hM_hj-ubh to be inserted}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hM_hj-ubah}(h]h ]h"]h$]h&]uh1jDhj,ubeh}(h]h ]h"]h$]h&]uh1j"hj-hM_hj,ubj#)}(h0``u64 start`` address where it will be inserted h](j))}(h ``u64 start``h]j/)}(hjJ-h]h u64 start}(hjL-hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjH-ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM`hjD-ubjE)}(hhh]h)}(h!address where it will be insertedh]h!address where it will be inserted}(hjc-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_-hM`hj`-ubah}(h]h ]h"]h$]h&]uh1jDhjD-ubeh}(h]h ]h"]h$]h&]uh1j"hj_-hM`hj,ubj#)}(h7``u64 end`` end of the range where it will be inserted h](j))}(h ``u64 end``h]j/)}(hj-h]hu64 end}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj-ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMahj}-ubjE)}(hhh]h)}(h*end of the range where it will be insertedh]h*end of the range where it will be inserted}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMahj-ubah}(h]h ]h"]h$]h&]uh1jDhj}-ubeh}(h]h ]h"]h$]h&]uh1j"hj-hMahj,ubj#)}(hS``struct drm_exec *exec`` The drm_exec transaction to use for exhaustive eviction. h](j))}(h``struct drm_exec *exec``h]j/)}(hj-h]hstruct drm_exec *exec}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj-ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMbhj-ubjE)}(hhh]h)}(h8The drm_exec transaction to use for exhaustive eviction.h]h8The drm_exec transaction to use for exhaustive eviction.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMbhj-ubah}(h]h ]h"]h$]h&]uh1jDhj-ubeh}(h]h ]h"]h$]h&]uh1j"hj-hMbhj,ubeh}(h]h ]h"]h$]h&]uh1jhjm,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.chMdhjm,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.chMdhjm,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_insert_bo (C function)c.xe_ggtt_insert_bohNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hUint xe_ggtt_insert_bo (struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec)h]jM)}(hTint xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec)h](j)}(hinth]hint}(hj<.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8.hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMmubje)}(h h]h }(hjK.hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj8.hhhjJ.hMmubjv)}(hxe_ggtt_insert_boh]j|)}(hxe_ggtt_insert_boh]hxe_ggtt_insert_bo}(hj].hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjY.ubah}(h]h ](jjeh"]h$]h&]hhuh1juhj8.hhhjJ.hMmubj )}(h?(struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hjy.hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhju.ubje)}(h h]h }(hj.hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhju.ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNj j )}j ]j )}j j_.sbc.xe_ggtt_insert_boasbuh1hhju.ubje)}(h h]h }(hj.hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhju.ubj* )}(hj- h]h*}(hj.hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hju.ubj|)}(hggtth]hggtt}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hju.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjq.ubj )}(hstruct xe_bo *boh](jS)}(hjVh]hstruct}(hj.hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj.ubje)}(h h]h }(hj.hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj.ubh)}(hhh]j|)}(hxe_boh]hxe_bo}(hj /hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj /modnameN classnameNj j )}j ]j.c.xe_ggtt_insert_boasbuh1hhj.ubje)}(h h]h }(hj'/hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj.ubj* )}(hj- h]h*}(hj5/hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj.ubj|)}(hboh]hbo}(hjB/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjq.ubj )}(hstruct drm_exec *exech](jS)}(hjVh]hstruct}(hj[/hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjW/ubje)}(h h]h }(hjh/hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjW/ubh)}(hhh]j|)}(hdrm_exech]hdrm_exec}(hjy/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjv/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{/modnameN classnameNj j )}j ]j.c.xe_ggtt_insert_boasbuh1hhjW/ubje)}(h h]h }(hj/hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjW/ubj* )}(hj- h]h*}(hj/hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjW/ubj|)}(hexech]hexec}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjW/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjq.ubeh}(h]h ]h"]h$]h&]hhuh1j hj8.hhhjJ.hMmubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj4.hhhjJ.hMmubah}(h]j/.ah ](jjeh"]h$]h&]jj)jhuh1jFhjJ.hMmhj1.hhubj)}(hhh]h)}(hInsert BO into GGTTh]hInsert 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.chMmhj/hhubah}(h]h ]h"]h$]h&]uh1jhj1.hhhjJ.hMmubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/jj/jjjuh1jAhhhjhNhNubj)}(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)}(hj/h]h Parameters}(hj0hhhNhNubah}(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.chMqhj/ubj)}(hhh](j#)}(hI``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` where bo will be inserted h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hj0h]hstruct xe_ggtt *ggtt}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj0ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMnhj0ubjE)}(hhh]h)}(h/the :c:type:`xe_ggtt` where bo will be insertedh](hthe }(hj60hhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hj@0h]hxe_ggtt}(hjB0hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj>0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj20hMnhj60ubh where bo will be inserted}(hj60hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj20hMnhj30ubah}(h]h ]h"]h$]h&]uh1jDhj0ubeh}(h]h ]h"]h$]h&]uh1j"hj20hMnhj0ubj#)}(h8``struct xe_bo *bo`` the :c:type:`xe_bo` to be inserted h](j))}(h``struct xe_bo *bo``h]j/)}(hjy0h]hstruct xe_bo *bo}(hj{0hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjw0ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMohjs0ubjE)}(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&]uh1j.hj0ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhj0hMohj0ubh to be inserted}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hMohj0ubah}(h]h ]h"]h$]h&]uh1jDhjs0ubeh}(h]h ]h"]h$]h&]uh1j"hj0hMohj0ubj#)}(hS``struct drm_exec *exec`` The drm_exec transaction to use for exhaustive eviction. h](j))}(h``struct drm_exec *exec``h]j/)}(hj0h]hstruct drm_exec *exec}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj0ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMphj0ubjE)}(hhh]h)}(h8The drm_exec transaction to use for exhaustive eviction.h]h8The drm_exec transaction to use for exhaustive eviction.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMphj0ubah}(h]h ]h"]h$]h&]uh1jDhj0ubeh}(h]h ]h"]h$]h&]uh1j"hj0hMphj0ubeh}(h]h ]h"]h$]h&]uh1jhj/ubh)}(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.chMrhj/ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj&1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMrhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_remove_bo (C function)c.xe_ggtt_remove_bohNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h?void xe_ggtt_remove_bo (struct xe_ggtt *ggtt, struct xe_bo *bo)h]jM)}(h>void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)h](j)}(hvoidh]hvoid}(hjU1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ1hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM{ubje)}(h h]h }(hjd1hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjQ1hhhjc1hM{ubjv)}(hxe_ggtt_remove_boh]j|)}(hxe_ggtt_remove_boh]hxe_ggtt_remove_bo}(hjv1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjr1ubah}(h]h ](jjeh"]h$]h&]hhuh1juhjQ1hhhjc1hM{ubj )}(h((struct xe_ggtt *ggtt, struct xe_bo *bo)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj1hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj1ubje)}(h h]h }(hj1hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj1ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNj j )}j ]j )}j jx1sbc.xe_ggtt_remove_boasbuh1hhj1ubje)}(h h]h }(hj1hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj1ubj* )}(hj- h]h*}(hj1hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj1ubj|)}(hggtth]hggtt}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj1ubj )}(hstruct xe_bo *boh](jS)}(hjVh]hstruct}(hj2hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj2ubje)}(h h]h }(hj2hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj2ubh)}(hhh]j|)}(hxe_boh]hxe_bo}(hj"2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$2modnameN classnameNj j )}j ]j1c.xe_ggtt_remove_boasbuh1hhj2ubje)}(h h]h }(hj@2hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj2ubj* )}(hj- h]h*}(hjN2hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj2ubj|)}(hboh]hbo}(hj[2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj1ubeh}(h]h ]h"]h$]h&]hhuh1j hjQ1hhhjc1hM{ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjM1hhhjc1hM{ubah}(h]jH1ah ](jjeh"]h$]h&]jj)jhuh1jFhjc1hM{hjJ1hhubj)}(hhh]h)}(hRemove a BO from the GGTTh]hRemove a BO from the GGTT}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM{hj2hhubah}(h]h ]h"]h$]h&]uh1jhjJ1hhhjc1hM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1jAhhhjhNhNubj)}(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)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj2ubj)}(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/)}(hj2h]hstruct xe_ggtt *ggtt}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj2ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM|hj2ubjE)}(hhh]h)}(h0the :c:type:`xe_ggtt` where node will be removedh](hthe }(hj2hhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hj2h]hxe_ggtt}(hj2hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj2ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj2hM|hj2ubh where node will be removed}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2hM|hj2ubah}(h]h ]h"]h$]h&]uh1jDhj2ubeh}(h]h ]h"]h$]h&]uh1j"hj2hM|hj2ubj#)}(h6``struct xe_bo *bo`` the :c:type:`xe_bo` to be removedh](j))}(h``struct xe_bo *bo``h]j/)}(hj"3h]hstruct xe_bo *bo}(hj$3hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj 3ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM~hj3ubjE)}(hhh]h)}(h!the :c:type:`xe_bo` to be removedh](hthe }(hj;3hhhNhNubh)}(h:c:type:`xe_bo`h]j/)}(hjE3h]hxe_bo}(hjG3hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjC3ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM}hj;3ubh to be removed}(hj;3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb3hM}hj83ubah}(h]h ]h"]h$]h&]uh1jDhj3ubeh}(h]h ]h"]h$]h&]uh1j"hj73hM~hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=!xe_ggtt_largest_hole (C function)c.xe_ggtt_largest_holehNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hJu64 xe_ggtt_largest_hole (struct xe_ggtt *ggtt, u64 alignment, u64 *spare)h]jM)}(hIu64 xe_ggtt_largest_hole(struct xe_ggtt *ggtt, u64 alignment, u64 *spare)h](h)}(hhh]j|)}(hu64h]hu64}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNj j )}j ]j )}j xe_ggtt_largest_holesbc.xe_ggtt_largest_holeasbuh1hhj3hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubje)}(h h]h }(hj3hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj3hhhj3hMubjv)}(hxe_ggtt_largest_holeh]j|)}(hj3h]hxe_ggtt_largest_hole}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj3ubah}(h]h ](jjeh"]h$]h&]hhuh1juhj3hhhj3hMubj )}(h1(struct xe_ggtt *ggtt, u64 alignment, u64 *spare)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj3hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj3ubje)}(h h]h }(hj3hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj3ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj 4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNj j )}j ]j3c.xe_ggtt_largest_holeasbuh1hhj3ubje)}(h h]h }(hj-4hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj3ubj* )}(hj- h]h*}(hj;4hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj3ubj|)}(hggtth]hggtt}(hjH4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj3ubj )}(h u64 alignmenth](h)}(hhh]j|)}(hu64h]hu64}(hjd4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hja4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjf4modnameN classnameNj j )}j ]j3c.xe_ggtt_largest_holeasbuh1hhj]4ubje)}(h h]h }(hj4hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj]4ubj|)}(h alignmenth]h alignment}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj]4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj3ubj )}(h u64 *spareh](h)}(hhh]j|)}(hu64h]hu64}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNj j )}j ]j3c.xe_ggtt_largest_holeasbuh1hhj4ubje)}(h h]h }(hj4hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj4ubj* )}(hj- h]h*}(hj4hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj4ubj|)}(hspareh]hspare}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj3ubeh}(h]h ]h"]h$]h&]hhuh1j hj3hhhj3hMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj3hhhj3hMubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1jFhj3hMhj3hhubj)}(hhh]h)}(hLargest GGTT holeh]hLargest GGTT hole}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj 5hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'5jj'5jjjuh1jAhhhjhNhNubj)}(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)}(hj15h]h Parameters}(hj35hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/5ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj+5ubj)}(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/)}(hjP5h]hstruct xe_ggtt *ggtt}(hjR5hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjN5ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjJ5ubjE)}(hhh]h)}(h,the :c:type:`xe_ggtt` that will be inspectedh](hthe }(hji5hhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hjs5h]hxe_ggtt}(hju5hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjq5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhje5hMhji5ubh that will be inspected}(hji5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhje5hMhjf5ubah}(h]h ]h"]h$]h&]uh1jDhjJ5ubeh}(h]h ]h"]h$]h&]uh1j"hje5hMhjG5ubj#)}(h$``u64 alignment`` minimum alignment h](j))}(h``u64 alignment``h]j/)}(hj5h]h u64 alignment}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj5ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj5ubjE)}(hhh]h)}(hminimum alignmenth]hminimum alignment}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jDhj5ubeh}(h]h ]h"]h$]h&]uh1j"hj5hMhjG5ubj#)}(h```u64 *spare`` If not NULL: in: desired memory size to be spared / out: Adjusted possible spare h](j))}(h``u64 *spare``h]j/)}(hj5h]h u64 *spare}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj5ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj5ubjE)}(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}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jDhj5ubeh}(h]h ]h"]h$]h&]uh1j"hj5hMhjG5ubeh}(h]h ]h"]h$]h&]uh1jhj+5ubh)}(h **Return**h]j)}(hj 6h]hReturn}(hj"6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj+5ubh)}(h*size of the largest continuous GGTT regionh]h*size of the largest continuous GGTT region}(hj66hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj+5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_assign (C function)c.xe_ggtt_assignhNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h?void xe_ggtt_assign (const struct xe_ggtt_node *node, u16 vfid)h]jM)}(h>void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid)h](j)}(hvoidh]hvoid}(hje6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja6hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubje)}(h h]h }(hjt6hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhja6hhhjs6hMubjv)}(hxe_ggtt_assignh]j|)}(hxe_ggtt_assignh]hxe_ggtt_assign}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj6ubah}(h]h ](jjeh"]h$]h&]hhuh1juhja6hhhjs6hMubj )}(h+(const struct xe_ggtt_node *node, u16 vfid)h](j )}(hconst struct xe_ggtt_node *nodeh](jS)}(hj7h]hconst}(hj6hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj6ubje)}(h h]h }(hj6hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj6ubjS)}(hjVh]hstruct}(hj6hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj6ubje)}(h h]h }(hj6hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj6ubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6modnameN classnameNj j )}j ]j )}j j6sbc.xe_ggtt_assignasbuh1hhj6ubje)}(h h]h }(hj6hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj6ubj* )}(hj- h]h*}(hj 7hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj6ubj|)}(hnodeh]hnode}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubj )}(hu16 vfidh](h)}(hhh]j|)}(hu16h]hu16}(hj27hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj/7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj47modnameN classnameNj j )}j ]j6c.xe_ggtt_assignasbuh1hhj+7ubje)}(h h]h }(hjP7hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj+7ubj|)}(hvfidh]hvfid}(hj^7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj+7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubeh}(h]h ]h"]h$]h&]hhuh1j hja6hhhjs6hMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj]6hhhjs6hMubah}(h]jX6ah ](jjeh"]h$]h&]jj)jhuh1jFhjs6hMhjZ6hhubj)}(hhh]h)}(hassign a GGTT region to the VFh]hassign a GGTT region to the VF}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jhjZ6hhhjs6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jAhhhjhNhNubj)}(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)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj7ubj)}(hhh](j#)}(hI``const struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to update h](j))}(h#``const struct xe_ggtt_node *node``h]j/)}(hj7h]hconst struct xe_ggtt_node *node}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj7ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj7ubjE)}(hhh]h)}(h$the :c:type:`xe_ggtt_node` to updateh](hthe }(hj7hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j/)}(hj7h]h xe_ggtt_node}(hj7hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj7hMhj7ubh to update}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jDhj7ubeh}(h]h ]h"]h$]h&]uh1j"hj7hMhj7ubj#)}(h``u16 vfid`` the VF identifier h](j))}(h ``u16 vfid``h]j/)}(hj%8h]hu16 vfid}(hj'8hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj#8ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj8ubjE)}(hhh]h)}(hthe VF identifierh]hthe VF identifier}(hj>8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:8hMhj;8ubah}(h]h ]h"]h$]h&]uh1jDhj8ubeh}(h]h ]h"]h$]h&]uh1j"hj:8hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j)}(hj`8h]h Description}(hjb8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^8ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj7ubh)}(hThis function is used by the PF driver to assign a GGTT region to the VF. In addition to PTE's VFID bits 11:2 also PRESENT bit 0 is set as on some platforms VFs can't modify that either.h]hThis function is used by the PF driver to assign a GGTT region to the VF. In addition to PTE’s VFID bits 11:2 also PRESENT bit 0 is set as on some platforms VFs can’t modify that either.}(hjv8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_node_save (C function)c.xe_ggtt_node_savehNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hSint xe_ggtt_node_save (struct xe_ggtt_node *node, void *dst, size_t size, u16 vfid)h]jM)}(hRint xe_ggtt_node_save(struct xe_ggtt_node *node, void *dst, size_t size, u16 vfid)h](j)}(hinth]hint}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubje)}(h h]h }(hj8hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj8hhhj8hMubjv)}(hxe_ggtt_node_saveh]j|)}(hxe_ggtt_node_saveh]hxe_ggtt_node_save}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj8ubah}(h]h ](jjeh"]h$]h&]hhuh1juhj8hhhj8hMubj )}(h=(struct xe_ggtt_node *node, void *dst, size_t size, u16 vfid)h](j )}(hstruct xe_ggtt_node *nodeh](jS)}(hjVh]hstruct}(hj8hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj8ubje)}(h h]h }(hj8hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj8ubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNj j )}j ]j )}j j8sbc.xe_ggtt_node_saveasbuh1hhj8ubje)}(h h]h }(hj 9hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj8ubj* )}(hj- h]h*}(hj.9hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj8ubj|)}(hnodeh]hnode}(hj;9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj8ubj )}(h void *dsth](j)}(hvoidh]hvoid}(hjT9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP9ubje)}(h h]h }(hjb9hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjP9ubj* )}(hj- h]h*}(hjp9hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjP9ubj|)}(hdsth]hdst}(hj}9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjP9ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj8ubj )}(h size_t sizeh](h)}(hhh]j|)}(hsize_th]hsize_t}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNj j )}j ]j9c.xe_ggtt_node_saveasbuh1hhj9ubje)}(h h]h }(hj9hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj9ubj|)}(hsizeh]hsize}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj8ubj )}(hu16 vfidh](h)}(hhh]j|)}(hu16h]hu16}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNj j )}j ]j9c.xe_ggtt_node_saveasbuh1hhj9ubje)}(h h]h }(hj9hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj9ubj|)}(hvfidh]hvfid}(hj :hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj8ubeh}(h]h ]h"]h$]h&]hhuh1j hj8hhhj8hMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj8hhhj8hMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1jFhj8hMhj8hhubj)}(hhh]h)}(h*Save a :c:type:`xe_ggtt_node` to a buffer.h](hSave a }(hj7:hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j/)}(hjA:h]h xe_ggtt_node}(hjC:hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj?:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]j9c.xe_ggtt_node_saveasbj xe_ggtt_nodeuh1hhj`hKhj7:ubh to a buffer.}(hj7:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj4:hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjw:jjw:jjjuh1jAhhhjhNhNubj)}(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)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj{:ubj)}(hhh](j#)}(hE``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be saved h](j))}(h``struct xe_ggtt_node *node``h]j/)}(hj:h]hstruct xe_ggtt_node *node}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj:ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj:ubjE)}(hhh]h)}(h&the :c:type:`xe_ggtt_node` to be savedh](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&]uh1j.hj:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj:hMhj:ubh to be saved}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jDhj:ubeh}(h]h ]h"]h$]h&]uh1j"hj:hMhj: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&]uh1j.hj:ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj:ubjE)}(hhh]h)}(hdestination bufferh]hdestination buffer}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jDhj:ubeh}(h]h ]h"]h$]h&]uh1j"hj;hMhj:ubj#)}(h1``size_t size`` destination buffer size in bytes h](j))}(h``size_t size``h]j/)}(hj5;h]h size_t size}(hj7;hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj3;ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj/;ubjE)}(hhh]h)}(h destination buffer size in bytesh]h destination buffer size in bytes}(hjN;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ;hMhjK;ubah}(h]h ]h"]h$]h&]uh1jDhj/;ubeh}(h]h ]h"]h$]h&]uh1j"hjJ;hMhj:ubj#)}(h``u16 vfid`` VF identifier h](j))}(h ``u16 vfid``h]j/)}(hjn;h]hu16 vfid}(hjp;hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjl;ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjh;ubjE)}(hhh]h)}(h VF identifierh]h VF identifier}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jDhjh;ubeh}(h]h ]h"]h$]h&]uh1j"hj;hMhj:ubeh}(h]h ]h"]h$]h&]uh1jhj{:ubh)}(h **Return**h]j)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj{:ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj{:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_node_load (C function)c.xe_ggtt_node_loadhNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hYint xe_ggtt_node_load (struct xe_ggtt_node *node, const void *src, size_t size, u16 vfid)h]jM)}(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 ]jah"]h$]h&]uh1jhj;hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubje)}(h h]h }(hj;hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj;hhhj;hMubjv)}(hxe_ggtt_node_loadh]j|)}(hxe_ggtt_node_loadh]hxe_ggtt_node_load}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj <ubah}(h]h ](jjeh"]h$]h&]hhuh1juhj;hhhj;hMubj )}(hC(struct xe_ggtt_node *node, const void *src, size_t size, u16 vfid)h](j )}(hstruct xe_ggtt_node *nodeh](jS)}(hjVh]hstruct}(hj+<hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj'<ubje)}(h h]h }(hj8<hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj'<ubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjI<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjF<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjK<modnameN classnameNj j )}j ]j )}j j<sbc.xe_ggtt_node_loadasbuh1hhj'<ubje)}(h h]h }(hji<hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj'<ubj* )}(hj- h]h*}(hjw<hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj'<ubj|)}(hnodeh]hnode}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj'<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj#<ubj )}(hconst void *srch](jS)}(hj7h]hconst}(hj<hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj<ubje)}(h h]h }(hj<hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj<ubj)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubje)}(h h]h }(hj<hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj<ubj* )}(hj- h]h*}(hj<hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj<ubj|)}(hsrch]hsrc}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj#<ubj )}(h size_t sizeh](h)}(hhh]j|)}(hsize_th]hsize_t}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNj j )}j ]je<c.xe_ggtt_node_loadasbuh1hhj<ubje)}(h h]h }(hj=hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj<ubj|)}(hsizeh]hsize}(hj)=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj#<ubj )}(hu16 vfidh](h)}(hhh]j|)}(hu16h]hu16}(hjE=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjB=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjG=modnameN classnameNj j )}j ]je<c.xe_ggtt_node_loadasbuh1hhj>=ubje)}(h h]h }(hjc=hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj>=ubj|)}(hvfidh]hvfid}(hjq=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj>=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj#<ubeh}(h]h ]h"]h$]h&]hhuh1j hj;hhhj;hMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj;hhhj;hMubah}(h]j;ah ](jjeh"]h$]h&]jj)jhuh1jFhj;hMhj;hhubj)}(hhh]h)}(h,Load a :c:type:`xe_ggtt_node` from a buffer.h](hLoad 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&]uh1j.hj=ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]je<c.xe_ggtt_node_loadasbj xe_ggtt_nodeuh1hhj`hKhj=ubh from 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&]uh1jhj;hhhj;hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=jj=jjjuh1jAhhhjhNhNubj)}(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)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj=ubj)}(hhh](j#)}(hF``struct xe_ggtt_node *node`` the :c:type:`xe_ggtt_node` to be loaded h](j))}(h``struct xe_ggtt_node *node``h]j/)}(hj>h]hstruct xe_ggtt_node *node}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj>ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj=ubjE)}(hhh]h)}(h'the :c:type:`xe_ggtt_node` to be loadedh](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&]uh1j.hj%>ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj>hMhj>ubh to be loaded}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jDhj=ubeh}(h]h ]h"]h$]h&]uh1j"hj>hMhj=ubj#)}(h"``const void *src`` source buffer h](j))}(h``const void *src``h]j/)}(hj`>h]hconst void *src}(hjb>hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj^>ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjZ>ubjE)}(hhh]h)}(h source bufferh]h source buffer}(hjy>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju>hMhjv>ubah}(h]h ]h"]h$]h&]uh1jDhjZ>ubeh}(h]h ]h"]h$]h&]uh1j"hju>hMhj=ubj#)}(h,``size_t size`` source 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&]uh1j.hj>ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj>ubjE)}(hhh]h)}(hsource buffer size in bytesh]hsource buffer size in bytes}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jDhj>ubeh}(h]h ]h"]h$]h&]uh1j"hj>hMhj=ubj#)}(h``u16 vfid`` VF identifier h](j))}(h ``u16 vfid``h]j/)}(hj>h]hu16 vfid}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj>ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj>ubjE)}(hhh]h)}(h VF identifierh]h VF identifier}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jDhj>ubeh}(h]h ]h"]h$]h&]uh1j"hj>hMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubh)}(h **Return**h]j)}(hj ?h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ?ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj=ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj#?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_dump (C function)c.xe_ggtt_dumphNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h>int xe_ggtt_dump (struct xe_ggtt *ggtt, struct drm_printer *p)h]jM)}(h=int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p)h](j)}(hinth]hint}(hjR?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN?hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM&ubje)}(h h]h }(hja?hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjN?hhhj`?hM&ubjv)}(h xe_ggtt_dumph]j|)}(h xe_ggtt_dumph]h xe_ggtt_dump}(hjs?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjo?ubah}(h]h ](jjeh"]h$]h&]hhuh1juhjN?hhhj`?hM&ubj )}(h-(struct xe_ggtt *ggtt, struct drm_printer *p)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj?hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj?ubje)}(h h]h }(hj?hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj?ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNj j )}j ]j )}j ju?sbc.xe_ggtt_dumpasbuh1hhj?ubje)}(h h]h }(hj?hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj?ubj* )}(hj- h]h*}(hj?hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj?ubj|)}(hggtth]hggtt}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj?ubj )}(hstruct drm_printer *ph](jS)}(hjVh]hstruct}(hj@hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj?ubje)}(h h]h }(hj@hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj?ubh)}(hhh]j|)}(h drm_printerh]h drm_printer}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!@modnameN classnameNj j )}j ]j?c.xe_ggtt_dumpasbuh1hhj?ubje)}(h h]h }(hj=@hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj?ubj* )}(hj- h]h*}(hjK@hhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj?ubj|)}(hj6 h]hp}(hjX@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj?ubeh}(h]h ]h"]h$]h&]hhuh1j hjN?hhhj`?hM&ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjJ?hhhj`?hM&ubah}(h]jE?ah ](jjeh"]h$]h&]jj)jhuh1jFhj`?hM&hjG?hhubj)}(hhh]h)}(hDump GGTT for debugh]hDump GGTT for debug}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM&hj~@hhubah}(h]h ]h"]h$]h&]uh1jhjG?hhhj`?hM&ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1jAhhhjhNhNubj)}(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)}(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.chM*hj@ubj)}(hhh](j#)}(h<``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be dumped h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hj@h]hstruct xe_ggtt *ggtt}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj@ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM'hj@ubjE)}(hhh]h)}(h"the :c:type:`xe_ggtt` to be dumpedh](hthe }(hj@hhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hj@h]hxe_ggtt}(hj@hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj@ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj@hM'hj@ubh to be dumped}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hM'hj@ubah}(h]h ]h"]h$]h&]uh1jDhj@ubeh}(h]h ]h"]h$]h&]uh1j"hj@hM'hj@ubj#)}(hh``struct drm_printer *p`` the :c:type:`drm_mm_printer` helper handle to be used to dump the information h](j))}(h``struct drm_printer *p``h]j/)}(hjAh]hstruct drm_printer *p}(hj AhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjAubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM(hjAubjE)}(hhh]h)}(hMthe :c:type:`drm_mm_printer` helper handle to be used to dump the informationh](hthe }(hj7AhhhNhNubh)}(h:c:type:`drm_mm_printer`h]j/)}(hjAAh]hdrm_mm_printer}(hjCAhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj?Aubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j drm_mm_printeruh1hhj3AhM(hj7Aubh1 helper handle to be used to dump the information}(hj7AhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3AhM(hj4Aubah}(h]h ]h"]h$]h&]uh1jDhjAubeh}(h]h ]h"]h$]h&]uh1j"hj3AhM(hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h **Return**h]j)}(hj|Ah]hReturn}(hj~AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzAubah}(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.}(hjAhhhNhNubah}(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&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j= xe_ggtt_print_holes (C function)c.xe_ggtt_print_holeshNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hTu64 xe_ggtt_print_holes (struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p)h]jM)}(hSu64 xe_ggtt_print_holes(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p)h](h)}(hhh]j|)}(hu64h]hu64}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNj j )}j ]j )}j xe_ggtt_print_holessbc.xe_ggtt_print_holesasbuh1hhjAhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM:ubje)}(h h]h }(hjAhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjAhhhjAhM:ubjv)}(hxe_ggtt_print_holesh]j|)}(hjAh]hxe_ggtt_print_holes}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjAubah}(h]h ](jjeh"]h$]h&]hhuh1juhjAhhhjAhM:ubj )}(h<(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hjBhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjBubje)}(h h]h }(hj BhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjBubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hj1BhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj.Bubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3BmodnameN classnameNj j )}j ]jAc.xe_ggtt_print_holesasbuh1hhjBubje)}(h h]h }(hjOBhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjBubj* )}(hj- h]h*}(hj]BhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjBubj|)}(hggtth]hggtt}(hjjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjBubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj Bubj )}(h u64 alignmenth](h)}(hhh]j|)}(hu64h]hu64}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNj j )}j ]jAc.xe_ggtt_print_holesasbuh1hhjBubje)}(h h]h }(hjBhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjBubj|)}(h alignmenth]h alignment}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjBubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj Bubj )}(hstruct drm_printer *ph](jS)}(hjVh]hstruct}(hjBhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjBubje)}(h h]h }(hjBhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjBubh)}(hhh]j|)}(h drm_printerh]h drm_printer}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNj j )}j ]jAc.xe_ggtt_print_holesasbuh1hhjBubje)}(h h]h }(hjChhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjBubj* )}(hj- h]h*}(hjChhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjBubj|)}(hj6 h]hp}(hj"ChhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjBubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj Bubeh}(h]h ]h"]h$]h&]hhuh1j hjAhhhjAhM:ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjAhhhjAhM:ubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jFhjAhM:hjAhhubj)}(hhh]h)}(h Print holesh]h Print holes}(hjKChhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM:hjHChhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcCjjcCjjjuh1jAhhhjhNhNubj)}(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)}(hjmCh]h Parameters}(hjoChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkCubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM>hjgCubj)}(hhh](j#)}(h?``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be inspected h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hjCh]hstruct xe_ggtt *ggtt}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjCubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM;hjCubjE)}(hhh]h)}(h%the :c:type:`xe_ggtt` to be inspectedh](hthe }(hjChhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hjCh]hxe_ggtt}(hjChhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjCubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjChM;hjCubh to be inspected}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjChM;hjCubah}(h]h ]h"]h$]h&]uh1jDhjCubeh}(h]h ]h"]h$]h&]uh1j"hjChM;hjCubj#)}(h ``u64 alignment`` min alignment h](j))}(h``u64 alignment``h]j/)}(hjCh]h u64 alignment}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjCubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM<hjCubjE)}(hhh]h)}(h min alignmenth]h min alignment}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM<hjCubah}(h]h ]h"]h$]h&]uh1jDhjCubeh}(h]h ]h"]h$]h&]uh1j"hjChM<hjCubj#)}(h4``struct drm_printer *p`` the :c:type:`drm_printer` h](j))}(h``struct drm_printer *p``h]j/)}(hj!Dh]hstruct drm_printer *p}(hj#DhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjDubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM=hjDubjE)}(hhh]h)}(hthe :c:type:`drm_printer`h](hthe }(hj:DhhhNhNubh)}(h:c:type:`drm_printer`h]j/)}(hjDDh]h drm_printer}(hjFDhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjBDubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j drm_printeruh1hhj6DhM=hj:Dubeh}(h]h ]h"]h$]h&]uh1hhj6DhM=hj7Dubah}(h]h ]h"]h$]h&]uh1jDhjDubeh}(h]h ]h"]h$]h&]uh1j"hj6DhM=hjCubeh}(h]h ]h"]h$]h&]uh1jhjgCubh)}(h**Description**h]j)}(hj{Dh]h Description}(hj}DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyDubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM?hjgCubh)}(hEPrint GGTT ranges that are available and return total size available.h]hEPrint GGTT ranges that are available and return total size available.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM>hjgCubh)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(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.chM@hjgCubh)}(hTotal available size.h]hTotal available size.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMAhjgCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=%xe_ggtt_encode_pte_flags (C function)c.xe_ggtt_encode_pte_flagshNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(hTu64 xe_ggtt_encode_pte_flags (struct xe_ggtt *ggtt, struct xe_bo *bo, u16 pat_index)h]jM)}(hSu64 xe_ggtt_encode_pte_flags(struct xe_ggtt *ggtt, struct xe_bo *bo, u16 pat_index)h](h)}(hhh]j|)}(hu64h]hu64}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNj j )}j ]j )}j xe_ggtt_encode_pte_flagssbc.xe_ggtt_encode_pte_flagsasbuh1hhjDhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM`ubje)}(h h]h }(hj EhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjDhhhj EhM`ubjv)}(hxe_ggtt_encode_pte_flagsh]j|)}(hjEh]hxe_ggtt_encode_pte_flags}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjEubah}(h]h ](jjeh"]h$]h&]hhuh1juhjDhhhj EhM`ubj )}(h7(struct xe_ggtt *ggtt, struct xe_bo *bo, u16 pat_index)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj9EhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj5Eubje)}(h h]h }(hjFEhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj5Eubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hjWEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjTEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYEmodnameN classnameNj j )}j ]jEc.xe_ggtt_encode_pte_flagsasbuh1hhj5Eubje)}(h h]h }(hjuEhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj5Eubj* )}(hj- h]h*}(hjEhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj5Eubj|)}(hggtth]hggtt}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj5Eubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj1Eubj )}(hstruct xe_bo *boh](jS)}(hjVh]hstruct}(hjEhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjEubje)}(h h]h }(hjEhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjEubh)}(hhh]j|)}(hxe_boh]hxe_bo}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjEmodnameN classnameNj j )}j ]jEc.xe_ggtt_encode_pte_flagsasbuh1hhjEubje)}(h h]h }(hjEhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjEubj* )}(hj- h]h*}(hjEhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjEubj|)}(hboh]hbo}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjEubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj1Eubj )}(h u16 pat_indexh](h)}(hhh]j|)}(hu16h]hu16}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNj j )}j ]jEc.xe_ggtt_encode_pte_flagsasbuh1hhjFubje)}(h h]h }(hj:FhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjFubj|)}(h pat_indexh]h pat_index}(hjHFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjFubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj1Eubeh}(h]h ]h"]h$]h&]hhuh1j hjDhhhj EhM`ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjDhhhj EhM`ubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jFhj EhM`hjDhhubj)}(hhh]h)}(hGet PTE encoding flags for BOh]hGet PTE encoding flags for BO}(hjrFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM`hjoFhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj EhM`ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1jAhhhjhNhNubj)}(hX3**Parameters** ``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` ``struct xe_bo *bo`` :c:type:`xe_bo` ``u16 pat_index`` The pat_index for the PTE. **Description** This function returns the pte_flags for a given BO, without address. It's used for DPT to fill a GGTT mapped BO with a linear lookup table.h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjFhhhNhNubah}(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.chMdhjFubj)}(hhh](j#)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hjFh]hstruct xe_ggtt *ggtt}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjFubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMahjFubjE)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hjFh]j/)}(hjFh]hxe_ggtt}(hjFhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjFubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjFhMahjFubah}(h]h ]h"]h$]h&]uh1hhjFhMahjFubah}(h]h ]h"]h$]h&]uh1jDhjFubeh}(h]h ]h"]h$]h&]uh1j"hjFhMahjFubj#)}(h%``struct xe_bo *bo`` :c:type:`xe_bo` h](j))}(h``struct xe_bo *bo``h]j/)}(hjGh]hstruct xe_bo *bo}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjGubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMbhjGubjE)}(hhh]h)}(h:c:type:`xe_bo`h]h)}(hj!Gh]j/)}(hj!Gh]hxe_bo}(hj&GhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj#Gubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_bouh1hhjGhMbhjGubah}(h]h ]h"]h$]h&]uh1hhjGhMbhjGubah}(h]h ]h"]h$]h&]uh1jDhjGubeh}(h]h ]h"]h$]h&]uh1j"hjGhMbhjFubj#)}(h-``u16 pat_index`` The pat_index for the PTE. h](j))}(h``u16 pat_index``h]j/)}(hjYGh]h u16 pat_index}(hj[GhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjWGubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMchjSGubjE)}(hhh]h)}(hThe pat_index for the PTE.h]hThe pat_index for the PTE.}(hjrGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnGhMchjoGubah}(h]h ]h"]h$]h&]uh1jDhjSGubeh}(h]h ]h"]h$]h&]uh1j"hjnGhMchjFubeh}(h]h ]h"]h$]h&]uh1jhjFubh)}(h**Description**h]j)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMehjFubh)}(hThis function returns the pte_flags for a given BO, without address. It's used for DPT to fill a GGTT mapped BO with a linear lookup table.h]hThis function returns the pte_flags for a given BO, without address. It’s used for DPT to fill a GGTT mapped BO with a linear lookup table.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMdhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_read_pte (C function)c.xe_ggtt_read_ptehNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h7u64 xe_ggtt_read_pte (struct xe_ggtt *ggtt, u64 offset)h]jM)}(h6u64 xe_ggtt_read_pte(struct xe_ggtt *ggtt, u64 offset)h](h)}(hhh]j|)}(hu64h]hu64}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNj j )}j ]j )}j xe_ggtt_read_ptesbc.xe_ggtt_read_pteasbuh1hhjGhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMoubje)}(h h]h }(hjGhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjGhhhjGhMoubjv)}(hxe_ggtt_read_pteh]j|)}(hjGh]hxe_ggtt_read_pte}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj Hubah}(h]h ](jjeh"]h$]h&]hhuh1juhjGhhhjGhMoubj )}(h"(struct xe_ggtt *ggtt, u64 offset)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj+HhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj'Hubje)}(h h]h }(hj8HhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj'Hubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hjIHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjFHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKHmodnameN classnameNj j )}j ]jGc.xe_ggtt_read_pteasbuh1hhj'Hubje)}(h h]h }(hjgHhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj'Hubj* )}(hj- h]h*}(hjuHhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj'Hubj|)}(hggtth]hggtt}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj'Hubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj#Hubj )}(h u64 offseth](h)}(hhh]j|)}(hu64h]hu64}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNj j )}j ]jGc.xe_ggtt_read_pteasbuh1hhjHubje)}(h h]h }(hjHhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjHubj|)}(hoffseth]hoffset}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjHubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj#Hubeh}(h]h ]h"]h$]h&]hhuh1j hjGhhhjGhMoubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjGhhhjGhMoubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jFhjGhMohjGhhubj)}(hhh]h)}(hRead a PTE from the GGTTh]hRead a PTE from the GGTT}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMohjHhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhMoubeh}(h]h ](jfunctioneh"]h$]h&]jjjj Ijj Ijjjuh1jAhhhjhNhNubj)}(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)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMshjIubj)}(hhh](j#)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hj5Ih]hstruct xe_ggtt *ggtt}(hj7IhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj3Iubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMphj/IubjE)}(hhh]h)}(h:c:type:`xe_ggtt`h]h)}(hjPIh]j/)}(hjPIh]hxe_ggtt}(hjUIhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjRIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhjJIhMphjNIubah}(h]h ]h"]h$]h&]uh1hhjJIhMphjKIubah}(h]h ]h"]h$]h&]uh1jDhj/Iubeh}(h]h ]h"]h$]h&]uh1j"hjJIhMphj,Iubj#)}(h@``u64 offset`` the offset for which the mapping should be read. h](j))}(h``u64 offset``h]j/)}(hjIh]h u64 offset}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjIubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMqhjIubjE)}(hhh]h)}(h0the offset for which the mapping should be read.h]h0the offset for which the mapping should be read.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMqhjIubah}(h]h ]h"]h$]h&]uh1jDhjIubeh}(h]h ]h"]h$]h&]uh1j"hjIhMqhj,Iubeh}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMshjIubh)}(hCUsed by testcases, and by display reading out an inherited bios FB.h]hCUsed by testcases, and by display reading out an inherited bios FB.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMrhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_node_addr (C function)c.xe_ggtt_node_addrhNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h7u64 xe_ggtt_node_addr (const struct xe_ggtt_node *node)h]jM)}(h6u64 xe_ggtt_node_addr(const struct xe_ggtt_node *node)h](h)}(hhh]j|)}(hu64h]hu64}(hj JhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj JmodnameN classnameNj j )}j ]j )}j xe_ggtt_node_addrsbc.xe_ggtt_node_addrasbuh1hhjJhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM{ubje)}(h h]h }(hj-JhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjJhhhj,JhM{ubjv)}(hxe_ggtt_node_addrh]j|)}(hj)Jh]hxe_ggtt_node_addr}(hj?JhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj;Jubah}(h]h ](jjeh"]h$]h&]hhuh1juhjJhhhj,JhM{ubj )}(h!(const struct xe_ggtt_node *node)h]j )}(hconst struct xe_ggtt_node *nodeh](jS)}(hj7h]hconst}(hjZJhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjVJubje)}(h h]h }(hjgJhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjVJubjS)}(hjVh]hstruct}(hjuJhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjVJubje)}(h h]h }(hjJhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjVJubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNj j )}j ]j'Jc.xe_ggtt_node_addrasbuh1hhjVJubje)}(h h]h }(hjJhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjVJubj* )}(hj- h]h*}(hjJhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hjVJubj|)}(hnodeh]hnode}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjVJubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjRJubah}(h]h ]h"]h$]h&]hhuh1j hjJhhhj,JhM{ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjJhhhj,JhM{ubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1jFhj,JhM{hjIhhubj)}(hhh]h)}(hGet **node** offset in GGTT.h](hGet }(hjJhhhNhNubj)}(h**node**h]hnode}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh offset in GGTT.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM{hjJhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhj,JhM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj Kjj Kjjjuh1jAhhhjhNhNubj)}(h**Parameters** ``const struct xe_ggtt_node *node`` :c:type:`xe_ggtt_node` **Description** Get the GGTT offset for allocated node.h](h)}(h**Parameters**h]j)}(hj*Kh]h Parameters}(hj,KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Kubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj$Kubj)}(hhh]j#)}(h;``const struct xe_ggtt_node *node`` :c:type:`xe_ggtt_node` h](j))}(h#``const struct xe_ggtt_node *node``h]j/)}(hjIKh]hconst struct xe_ggtt_node *node}(hjKKhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjGKubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM|hjCKubjE)}(hhh]h)}(h:c:type:`xe_ggtt_node`h]h)}(hjdKh]j/)}(hjdKh]h xe_ggtt_node}(hjiKhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjfKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj^KhM|hjbKubah}(h]h ]h"]h$]h&]uh1hhj^KhM|hj_Kubah}(h]h ]h"]h$]h&]uh1jDhjCKubeh}(h]h ]h"]h$]h&]uh1j"hj^KhM|hj@Kubah}(h]h ]h"]h$]h&]uh1jhj$Kubh)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM~hj$Kubh)}(h'Get the GGTT offset for allocated node.h]h'Get the GGTT offset for allocated node.}(hjKhhhNhNubah}(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$Kubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j=xe_ggtt_node_size (C function)c.xe_ggtt_node_sizehNtauh1j0hjhhhNhNubjB)}(hhh](jG)}(h7u64 xe_ggtt_node_size (const struct xe_ggtt_node *node)h]jM)}(h6u64 xe_ggtt_node_size(const struct xe_ggtt_node *node)h](h)}(hhh]j|)}(hu64h]hu64}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNj j )}j ]j )}j xe_ggtt_node_sizesbc.xe_ggtt_node_sizeasbuh1hhjKhhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubje)}(h h]h }(hjLhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjKhhhjLhMubjv)}(hxe_ggtt_node_sizeh]j|)}(hjLh]hxe_ggtt_node_size}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjLubah}(h]h ](jjeh"]h$]h&]hhuh1juhjKhhhjLhMubj )}(h!(const struct xe_ggtt_node *node)h]j )}(hconst struct xe_ggtt_node *nodeh](jS)}(hj7h]hconst}(hj5LhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj1Lubje)}(h h]h }(hjBLhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj1LubjS)}(hjVh]hstruct}(hjPLhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj1Lubje)}(h h]h }(hj]LhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj1Lubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjnLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjkLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpLmodnameN classnameNj j )}j ]jLc.xe_ggtt_node_sizeasbuh1hhj1Lubje)}(h h]h }(hjLhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj1Lubj* )}(hj- h]h*}(hjLhhhNhNubah}(h]h ]j6 ah"]h$]h&]uh1j) hj1Lubj|)}(hnodeh]hnode}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj1Lubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj-Lubah}(h]h ]h"]h$]h&]hhuh1j hjKhhhjLhMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjKhhhjLhMubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jFhjLhMhjKhhubj)}(hhh]h)}(hGet **node** allocation size.h](hGet }(hjLhhhNhNubj)}(h**node**h]hnode}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh allocation size.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjLhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjLhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jAhhhjhNhNubj)}(h}**Parameters** ``const struct xe_ggtt_node *node`` :c:type:`xe_ggtt_node` **Description** Get the allocated node's size.h](h)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjLubj)}(hhh]j#)}(h;``const struct xe_ggtt_node *node`` :c:type:`xe_ggtt_node` h](j))}(h#``const struct xe_ggtt_node *node``h]j/)}(hj$Mh]hconst struct xe_ggtt_node *node}(hj&MhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj"Mubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjMubjE)}(hhh]h)}(h:c:type:`xe_ggtt_node`h]h)}(hj?Mh]j/)}(hj?Mh]h xe_ggtt_node}(hjDMhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjAMubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj9MhMhj=Mubah}(h]h ]h"]h$]h&]uh1hhj9MhMhj:Mubah}(h]h ]h"]h$]h&]uh1jDhjMubeh}(h]h ]h"]h$]h&]uh1j"hj9MhMhjMubah}(h]h ]h"]h$]h&]uh1jhjLubh)}(h**Description**h]j)}(hjyMh]h Description}(hj{MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwMubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjLubh)}(hGet the allocated node's size.h]h Get the allocated node’s size.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]ggtt-internal-apiah ]h"]ggtt internal apiah$]h&]uh1hhjhhhhhKubeh}(h]ggttah ]h"]ggttah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hPagetable buildingh]hPagetable building}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhhhhhKubh)}(hBelow we use the term "page-table" for both page-directories, containing pointers to lower level page-directories or page-tables, and level 0 page-tables that contain only page-table-entries pointing to memory pages.h]hBelow we use the term “page-table” for both page-directories, containing pointers to lower level page-directories or page-tables, and level 0 page-tables that contain only page-table-entries pointing to memory pages.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:28: ./drivers/gpu/drm/xe/xe_pt.chKhjMhhubh)}(hXWhen inserting an address range in an already existing page-table tree there will typically be a set of page-tables that are shared with other address ranges, and a set that are private to this address range. The set of shared page-tables can be at most two per level, and those can't be updated immediately because the entries of those page-tables may still be in use by the gpu for other mappings. Therefore when inserting entries into those, we instead stage those insertions by adding insertion data into struct xe_vm_pgtable_update structures. This data, (subtrees for the cpu and page-table-entries for the gpu) is then added in a separate commit step. CPU-data is committed while still under the vm lock, the object lock and for userptr, the notifier lock in read mode. The GPU async data is committed either by the GPU or CPU after fulfilling relevant dependencies. For non-shared page-tables (and, in fact, for shared ones that aren't existing at the time of staging), we add the data in-place without the special update structures. This private part of the page-table tree will remain disconnected from the vm page-table tree until data is committed to the shared page tables of the vm tree in the commit phase.h]hXWhen inserting an address range in an already existing page-table tree there will typically be a set of page-tables that are shared with other address ranges, and a set that are private to this address range. The set of shared page-tables can be at most two per level, and those can’t be updated immediately because the entries of those page-tables may still be in use by the gpu for other mappings. Therefore when inserting entries into those, we instead stage those insertions by adding insertion data into struct xe_vm_pgtable_update structures. This data, (subtrees for the cpu and page-table-entries for the gpu) is then added in a separate commit step. CPU-data is committed while still under the vm lock, the object lock and for userptr, the notifier lock in read mode. The GPU async data is committed either by the GPU or CPU after fulfilling relevant dependencies. For non-shared page-tables (and, in fact, for shared ones that aren’t existing at the time of staging), we add the data in-place without the special update structures. This private part of the page-table tree will remain disconnected from the vm page-table tree until data is committed to the shared page tables of the vm tree in the commit phase.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:28: ./drivers/gpu/drm/xe/xe_pt.chKhjMhhubeh}(h]pagetable-buildingah ]h"]pagetable buildingah$]h&]uh1hhhhhhhhKubeh}(h]memory-managementah ]h"]memory managementah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjNerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jMjMjjjjj[jXj jjjjjjjj:j7jjjjjjjYjVjj~jjjMjMjMjMjMjMu nametypes}(jMjjj[j jjjj:jjjjYjjjMjMjMuh}(jMhjhjjjXj'jj^jj~jjjjj7jjj=jj]jjjVjj~j\jjjMjjMjj?jHjOjTjjjt jy j[ j` j,j1jjj^jcjrjwjjjjjjjjj<"jA"j$j$j*j*j/.j4.jH1jM1j3j3jX6j]6j8j8j;j;jE?jJ?jAjAjDjDjGjGjIjJjKjKjMjMu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]h)}(hUnexpected indentation.h]hUnexpected indentation.}(hj~NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{Nubah}(h]h ]h"]h$]h&]levelKtypeERRORsourcejF lineK}uh1jyNhjG ubatransform_messages] transformerN include_log] decorationNhhub.