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.chKJhjhhubah}(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.chKNhjubh 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.chKPhjubh)}(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.chKWhjubhdefinition_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.chKQhj$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&]uh1hhjChKQhjFubah}(h]h ]h"]h$]h&]uh1jDhj$ubeh}(h]h ]h"]h$]h&]uh1j"hjChKQhjubj#)}(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.chKShjcubjE)}(hhh]h)}(h A drm_mm_nodeh]h A drm_mm_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKShjubah}(h]h ]h"]h$]h&]uh1jDhjcubeh}(h]h ]h"]h$]h&]uh1j"hj~hKShjubj#)}(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.chKUhjubjE)}(hhh]h)}(h'The work struct for the delayed removalh]h'The work struct for the delayed removal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKUhjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhKUhjubj#)}(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.chKVhjubjE)}(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.chKWhjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhKVhjubeh}(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.chKZhjhhubh)}(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.chKKhjhhubj1)}(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.chKQubje)}(h h]h }(hjjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjXhhhjihKQubjv)}(hxe_ggtt_pt_opsh]j|)}(hjVh]hxe_ggtt_pt_ops}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjxubah}(h]h ](jjeh"]h$]h&]hhuh1juhjXhhhjihKQubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjThhhjihKQubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1jFhjihKQhjQhhubj)}(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.chK[hjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjihKQubeh}(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.chKahjubh)}(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.chKghjubj)}(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.chKchj>ubjE)}(hhh]h)}(hDirectly write into GGTT's PTEh]h Directly write into GGTT’s PTE}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhKchjZubah}(h]h ]h"]h$]h&]uh1jDhj>ubeh}(h]h ]h"]h$]h&]uh1j"hjYhKchjubj#)}(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.chKehjwubjE)}(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.chKfhjubah}(h]h ]h"]h$]h&]uh1jDhjwubeh}(h]h ]h"]h$]h&]uh1j"hjhKehjubeh}(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.chKlubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhjhKlubjv)}(hxe_ggtth]j|)}(hjh]hxe_ggtt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ](jjeh"]h$]h&]hhuh1juhjhhhjhKlubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjhhhjhKlubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jFhjhKlhjhhubj)}(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.chKjhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKlubeh}(h]h ](jstructeh"]h$]h&]jjjj1jj1jjjuh1jAhhhjhNhNubj)}(hX**Definition**:: struct xe_ggtt { struct xe_tile *tile; u64 start; u64 size; 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.chKnhj5ubj)}(hX)struct xe_ggtt { struct xe_tile *tile; u64 start; u64 size; unsigned int flags; struct xe_bo *scratch; struct mutex lock; u64 __iomem *gsm; const struct xe_ggtt_pt_ops *pt_ops; struct drm_mm mm; unsigned int access_count; struct workqueue_struct *wq; };h]hX)struct xe_ggtt { struct xe_tile *tile; u64 start; u64 size; 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.chKphj5ubh)}(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.chKqhjubjE)}(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&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhKqhj}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.chKshjubjE)}(hhh]h)}(hStart offset of GGTTh]hStart offset of GGTT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKshjubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhKshj}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.chKuhjubjE)}(hhh]h)}(hTotal usable size of this GGTTh]hTotal usable size of this GGTT}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKuhj ubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hj hKuhj}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)}(h&Flags for this GGTT. Acceptable flags:h]h&Flags for this GGTT. Acceptable flags:}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKxhjG ubh bullet_list)}(hhh](h list_item)}(hE``XE_GGTT_FLAGS_64K`` - if PTE size is 64K. Otherwise, regular is 4K.h]h)}(hjb h](j/)}(h``XE_GGTT_FLAGS_64K``h]hXE_GGTT_FLAGS_64K}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjd ubh0 - if PTE size is 64K. Otherwise, regular is 4K.}(hjd hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chK{hj` ubah}(h]h ]h"]h$]h&]uh1j^ hj[ ubj_ )}(hN``XE_GGTT_FLAGS_ONLINE`` - is GGTT online, protected by ggtt->lock after init h]h)}(hM``XE_GGTT_FLAGS_ONLINE`` - is GGTT online, protected by ggtt->lock after inith](j/)}(h``XE_GGTT_FLAGS_ONLINE``h]hXE_GGTT_FLAGS_ONLINE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj ubh5 - is GGTT online, protected by ggtt->lock after init}(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.chK|hj ubah}(h]h ]h"]h$]h&]uh1j^ hj[ ubeh}(h]h ]h"]h$]h&]bullet-uh1jY hj 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/)}(hj9 h]hgsm}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj7 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.chKhj3 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}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjO ubah}(h]h ]h"]h$]h&]uh1jDhj3 ubeh}(h]h ]h"]h$]h&]uh1j"hjN hKhj}ubj#)}(h.``pt_ops`` Page Table operations per platform h](j))}(h ``pt_ops``h]j/)}(hjs h]hpt_ops}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjq 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.chKhjm ubjE)}(hhh]h)}(h"Page Table operations per platformh]h"Page Table operations per platform}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jDhjm ubeh}(h]h ]h"]h$]h&]uh1j"hj 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}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj4 ubah}(h]h ]h"]h$]h&]uh1jDhj ubeh}(h]h ]h"]h$]h&]uh1j"hj3 hKhj}ubeh}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hja h]h Description}(hjc 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.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.}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKkhjhhubj1)}(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 }(hj9 hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubhdesc_sig_punctuation)}(h*h]h*}(hjI hhhNhNubah}(h]h ]pah"]h$]h&]uh1jG hj ubj|)}(hggtth]hggtt}(hjX 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&]hhjuh1jLjjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jFhj hKhj hhubj)}(hhh]h)}(hGet starting offset of GGTT.h]hGet starting offset of GGTT.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhj 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 }(hj4 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.chKhj4 ubh.}(hj4 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}(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_sizesbc.xe_ggtt_sizeasbuh1hhj 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_sizeh]j|)}(hj h]h xe_ggtt_size}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj ubah}(h]h ](jjeh"]h$]h&]hhuh1juhj 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 }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubjH )}(hjK h]h*}(hj"hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG 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&]hhjuh1jLjjhj~ hhhj hKubah}(h]jy ah ](jjeh"]h$]h&]jj)jhuh1jFhj hKhj{ hhubj)}(hhh]h)}(hGet size of GGTT.h]hGet size of GGTT.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjVhhubah}(h]h ]h"]h$]h&]uh1jhj{ hhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jAhhhjhNhNubj)}(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&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjuubj)}(hhh]j#)}(h+``struct xe_ggtt *ggtt`` :c:type:`xe_ggtt` 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.chKhjubjE)}(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&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjuubh)}(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.chKhjuubh)}(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.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.chKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hKhjuubeh}(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}(hjWhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjShhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM$ubje)}(h h]h }(hjehhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjShhhjdhM$ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNj j )}j ]j )}j xe_ggtt_allocsbc.xe_ggtt_allocasbuh1hhjShhhjdhM$ubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjShhhjdhM$ubjH )}(hjK h]h*}(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjShhhjdhM$ubjv)}(h xe_ggtt_alloch]j|)}(hjh]h xe_ggtt_alloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubah}(h]h ](jjeh"]h$]h&]hhuh1juhjShhhjdhM$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 ]jc.xe_ggtt_allocasbuh1hhjubje)}(h h]h }(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjH )}(hjK h]h*}(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG 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 hjShhhjdhM$ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjOhhhjdhM$ubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1jFhjdhM$hjLhhubj)}(hhh]h)}(h-Allocate a GGTT for a given :c:type:`xe_tile`h](hAllocate a GGTT for a given }(hjRhhhNhNubh)}(h:c:type:`xe_tile`h]j/)}(hj\h]hxe_tile}(hj^hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjZubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]jc.xe_ggtt_allocasbj xe_tileuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chKhjRubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM$hjOhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjdhM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jAhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM(hjubj)}(hhh]j#)}(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&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM'hjubh)}(h/Allocates a :c:type:`xe_ggtt` for a given tile.h](h Allocates a }(hj#hhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hj-h]hxe_ggtt}(hj/hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]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&hj#ubh for a given tile.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhM&hjubh)}(h **Return**h]j)}(hjWh]hReturn}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM(hjubh)}(h9:c:type:`xe_ggtt` on success, or NULL when out of memory.h](h)}(h:c:type:`xe_ggtt`h]j/)}(hjsh]hxe_ggtt}(hjuhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjqubah}(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)hjmubh( on success, or NULL when out of memory.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM)hjubeh}(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 }(hj9hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjH )}(hjK h]h*}(hjGhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjubj|)}(hggtth]hggtt}(hjThhhNhNubah}(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&]jjjjjjjjjuh1jAhhhjhNhNubj)}(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.chMhjubj)}(hhh]j#)}(hA``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` to be initialized h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(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&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubh)}(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.}(hj3hhhNhNubah}(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 **Return**h]j)}(hjDh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubeh}(h]h ] kernelindentah"]h$]h&]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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/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&]uh1jdhjhhhjhMubjv)}(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&]hhuh1juhjhhhjhMubj )}(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&]uh1jdhjubjH )}(hjK h]h*}(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjubj|)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hbool invalidateh](j)}(hboolh]hbool}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubje)}(h h]h }(hjFhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj4ubj|)}(h invalidateh]h invalidate}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjhhhjhMubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1jFhjhMhj~hhubj)}(hhh]h)}(h-Remove a :c:type:`xe_ggtt_node` from the GGTTh](h Remove a }(hj~hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j/)}(hjh]h xe_ggtt_node}(hjhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjubah}(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~hhhjhMubeh}(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/)}(hj h]h xe_ggtt_node}(hj hhhNhNubah}(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/)}(hjCh]hbool invalidate}(hjEhhhNhNubah}(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.chMhj=ubjE)}(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.chMhjYubah}(h]h ]h"]h$]h&]uh1jDhj=ubeh}(h]h ]h"]h$]h&]uh1j"hjXhMhjubeh}(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&]uh1jhjhhhY/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&]uh1jdhjhhhjhMubjv)}(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&]hhuh1juhjhhhjhMubj )}(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&]uh1jdhjubjH )}(hjK h]h*}(hj&hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjubj|)}(hggtth]hggtt}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jFhjhMhjhhubj)}(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.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1jAhhhjhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjyubj)}(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.chMhjubjE)}(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&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubh)}(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.chMhjyubh)}(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.chMhjyubeh}(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}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMSubje)}(h h]h }(hjPhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj=hhhjOhMSubjv)}(hxe_ggtt_shift_nodesh]j|)}(hxe_ggtt_shift_nodesh]hxe_ggtt_shift_nodes}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj^ubah}(h]h ](jjeh"]h$]h&]hhuh1juhj=hhhjOhMSubj )}(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&]uh1jRhjzubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjzubh)}(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 jdsbc.xe_ggtt_shift_nodesasbuh1hhjzubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjzubjH )}(hjK h]h*}(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjzubj|)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjzubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjvubj )}(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 hjvubeh}(h]h ]h"]h$]h&]hhuh1j hj=hhhjOhMSubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj9hhhjOhMSubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jFhjOhMShj6hhubj)}(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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMShjFhhubah}(h]h ]h"]h$]h&]uh1jhj6hhhjOhMSubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jAhhhjhNhNubj)}(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)}(hjkh]h Parameters}(hjmhhhNhNubah}(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.chMWhjeubj)}(hhh](j#)}(h?``struct xe_ggtt *ggtt`` the :c:type:`xe_ggtt` struct instance h](j))}(h``struct xe_ggtt *ggtt``h]j/)}(hjh]hstruct xe_ggtt *ggtt}(hjhhhNhNubah}(h]h ]h"]h$]h&]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.chMThjubjE)}(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&]uh1jDhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMThjubj#)}(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"hjhMUhjubeh}(h]h ]h"]h$]h&]uh1jhjeubh)}(h**Description**h]j)}(hj!h]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.chMWhjeubh)}(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 }(hj7hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j/)}(hjAh]h xe_ggtt_node}(hjChhhNhNubah}(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.chMVhj7ubh are moved to the }(hj7hhhNhNubj)}(h **new_start**h]h new_start}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh6 base address by changing the base offset of the GGTT.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hMVhjeubh)}(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}(hjhhhNhNubah}(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.chMYhjeubh)}(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&]uh1jhjubh= should be a value between xe_wopcm_size() and #GUC_GGTT_TOP.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM\hjeubeh}(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&]uh1jdhjhhhjhMubjH )}(hjK h]h*}(hj'hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjhhhjhMubjv)}(hxe_ggtt_insert_nodeh]j|)}(hjh]hxe_ggtt_insert_node}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj4ubah}(h]h ](jjeh"]h$]h&]hhuh1juhjhhhjhMubj )}(h+(struct xe_ggtt *ggtt, u32 size, u32 align)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hjShhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjOubje)}(h h]h }(hj`hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjOubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNj j )}j ]jc.xe_ggtt_insert_nodeasbuh1hhjOubje)}(h h]h }(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjOubjH )}(hjK h]h*}(hjhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjOubj|)}(hggtth]hggtt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjOubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjKubj )}(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 hjKubj )}(h u32 alignh](h)}(hhh]j|)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jc.xe_ggtt_insert_nodeasbuh1hhjubje)}(h h]h }(hj,hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubj|)}(halignh]halign}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjKubeh}(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 }(hjdhhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j/)}(hjnh]h xe_ggtt_node}(hjphhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjlubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]jc.xe_ggtt_insert_nodeasbj xe_ggtt_nodeuh1hhj~hKhjdubh into the GGTT}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjahhubah}(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.chMhj#ubjE)}(hhh]h)}(hsize of the nodeh]hsize of the node}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jDhj#ubeh}(h]h ]h"]h$]h&]uh1j"hj>hMhjubj#)}(h.``u32 align`` alignment constrain of the node h](j))}(h ``u32 align``h]j/)}(hjbh]h u32 align}(hjdhhhNhNubah}(h]h ]h"]h$]h&]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)}(halignment constrain of the nodeh]halignment constrain of the node}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jDhj\ubeh}(h]h ]h"]h$]h&]uh1j"hjwhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjubh)}(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)}(hvoid xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)h](j)}(hvoidh]hvoid}(hjs1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo1hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM{ubje)}(h h]h }(hj1hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjo1hhhj1hM{ubjv)}(hxe_ggtt_remove_boh]j|)}(hxe_ggtt_remove_boh]hxe_ggtt_remove_bo}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj1ubah}(h]h ](jjeh"]h$]h&]hhuh1juhjo1hhhj1hM{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 j1sbc.xe_ggtt_remove_boasbuh1hhj1ubje)}(h h]h }(hj1hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj1ubjH )}(hjK h]h*}(hj1hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj1ubj|)}(hggtth]hggtt}(hj 2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj1ubj )}(hstruct xe_bo *boh](jS)}(hjVh]hstruct}(hj"2hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj2ubje)}(h h]h }(hj/2hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj2ubh)}(hhh]j|)}(hxe_boh]hxe_bo}(hj@2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj=2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjB2modnameN classnameNj j )}j ]j1c.xe_ggtt_remove_boasbuh1hhj2ubje)}(h h]h }(hj^2hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj2ubjH )}(hjK h]h*}(hjl2hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj2ubj|)}(hboh]hbo}(hjy2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj1ubeh}(h]h ]h"]h$]h&]hhuh1j hjo1hhhj1hM{ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjk1hhhj1hM{ubah}(h]jf1ah ](jjeh"]h$]h&]jj)jhuh1jFhj1hM{hjh1hhubj)}(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&]uh1jhjh1hhhj1hM{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/)}(hj3h]hxe_ggtt}(hj 3hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj3ubah}(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}(hjB3hhhNhNubah}(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~hj:3ubjE)}(hhh]h)}(h!the :c:type:`xe_bo` to be removedh](hthe }(hjY3hhhNhNubh)}(h:c:type:`xe_bo`h]j/)}(hjc3h]hxe_bo}(hje3hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hja3ubah}(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}hjY3ubh to be removed}(hjY3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hM}hjV3ubah}(h]h ]h"]h$]h&]uh1jDhj:3ubeh}(h]h ]h"]h$]h&]uh1j"hjU3hM~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}(hj4hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj 4ubje)}(h h]h }(hj4hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj 4ubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hj-4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj*4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/4modnameN classnameNj j )}j ]j3c.xe_ggtt_largest_holeasbuh1hhj 4ubje)}(h h]h }(hjK4hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj 4ubjH )}(hjK h]h*}(hjY4hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj 4ubj|)}(hggtth]hggtt}(hjf4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj 4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj4ubj )}(h u64 alignmenth](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_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 hj4ubj )}(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&]uh1jdhj4ubjH )}(hjK h]h*}(hj4hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj4ubj|)}(hspareh]hspare}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj4ubeh}(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}(hj-5hhhNhNubah}(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&]jjjjE5jjE5jjjuh1jAhhhjhNhNubj)}(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)}(hjO5h]h Parameters}(hjQ5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM5ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjI5ubj)}(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/)}(hjn5h]hstruct xe_ggtt *ggtt}(hjp5hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjl5ubah}(h]h ]h"]h$]h&]uh1j(hY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjh5ubjE)}(hhh]h)}(h,the :c:type:`xe_ggtt` that will be inspectedh](hthe }(hj5hhhNhNubh)}(h:c:type:`xe_ggtt`h]j/)}(hj5h]hxe_ggtt}(hj5hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj5ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggttuh1hhj5hMhj5ubh that will be inspected}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jDhjh5ubeh}(h]h ]h"]h$]h&]uh1j"hj5hMhje5ubj#)}(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"hj5hMhje5ubj#)}(h```u64 *spare`` If not NULL: in: desired memory size to be spared / out: Adjusted possible spare h](j))}(h``u64 *spare``h]j/)}(hj6h]h u64 *spare}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj6ubah}(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}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jDhj5ubeh}(h]h ]h"]h$]h&]uh1j"hj6hMhje5ubeh}(h]h ]h"]h$]h&]uh1jhjI5ubh)}(h **Return**h]j)}(hj>6h]hReturn}(hj@6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<6ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjI5ubh)}(h*size of the largest continuous GGTT regionh]h*size of the largest continuous GGTT region}(hjT6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjI5ubeh}(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}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMubje)}(h h]h }(hj6hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj6hhhj6hMubjv)}(hxe_ggtt_assignh]j|)}(hxe_ggtt_assignh]hxe_ggtt_assign}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj6ubah}(h]h ](jjeh"]h$]h&]hhuh1juhj6hhhj6hMubj )}(h+(const struct xe_ggtt_node *node, u16 vfid)h](j )}(hconst struct xe_ggtt_node *nodeh](jS)}(hjUh]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 }(hj7hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj6ubjH )}(hjK h]h*}(hj'7hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj6ubj|)}(hnodeh]hnode}(hj47hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubj )}(hu16 vfidh](h)}(hhh]j|)}(hu16h]hu16}(hjP7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjM7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjR7modnameN classnameNj j )}j ]j7c.xe_ggtt_assignasbuh1hhjI7ubje)}(h h]h }(hjn7hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjI7ubj|)}(hvfidh]hvfid}(hj|7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjI7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubeh}(h]h ]h"]h$]h&]hhuh1j hj6hhhj6hMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhj{6hhhj6hMubah}(h]jv6ah ](jjeh"]h$]h&]jj)jhuh1jFhj6hMhjx6hhubj)}(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&]uh1jhjx6hhhj6hMubeh}(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 }(hj8hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j/)}(hj 8h]h xe_ggtt_node}(hj 8hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj7hMhj8ubh to update}(hj8hhhNhNubeh}(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/)}(hjC8h]hu16 vfid}(hjE8hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjA8ubah}(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=8ubjE)}(hhh]h)}(hthe VF identifierh]hthe VF identifier}(hj\8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX8hMhjY8ubah}(h]h ]h"]h$]h&]uh1jDhj=8ubeh}(h]h ]h"]h$]h&]uh1j"hjX8hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j)}(hj~8h]h Description}(hj8hhhNhNubah}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]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}(hj9hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj8ubje)}(h h]h }(hj 9hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj8ubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj 9modnameN classnameNj j )}j ]j )}j j8sbc.xe_ggtt_node_saveasbuh1hhj8ubje)}(h h]h }(hj>9hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj8ubjH )}(hjK h]h*}(hjL9hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj8ubj|)}(hnodeh]hnode}(hjY9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj8ubj )}(h void *dsth](j)}(hvoidh]hvoid}(hjr9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn9ubje)}(h h]h }(hj9hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjn9ubjH )}(hjK h]h*}(hj9hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjn9ubj|)}(hdsth]hdst}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjn9ubeh}(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 ]j:9c.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 reftargetj:modnameN classnameNj j )}j ]j:9c.xe_ggtt_node_saveasbuh1hhj9ubje)}(h h]h }(hj:hhhNhNubah}(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 }(hjU:hhhNhNubh)}(h:c:type:`xe_ggtt_node`h]j/)}(hj_:h]h xe_ggtt_node}(hja:hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj]:ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j )}j ]j:9c.xe_ggtt_node_saveasbj xe_ggtt_nodeuh1hhj~hKhjU:ubh to a buffer.}(hjU:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjR:hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:jj: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}(hj3;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/;hMhj0;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/)}(hjS;h]h size_t size}(hjU;hhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjQ;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.chMhjM;ubjE)}(hhh]h)}(h destination buffer size in bytesh]h destination buffer size in bytes}(hjl;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh;hMhji;ubah}(h]h ]h"]h$]h&]uh1jDhjM;ubeh}(h]h ]h"]h$]h&]uh1j"hjh;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_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}(hjI<hhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjE<ubje)}(h h]h }(hjV<hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjE<ubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjg<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjd<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetji<modnameN classnameNj j )}j ]j )}j j/<sbc.xe_ggtt_node_loadasbuh1hhjE<ubje)}(h h]h }(hj<hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjE<ubjH )}(hjK h]h*}(hj<hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjE<ubj|)}(hnodeh]hnode}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjE<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjA<ubj )}(hconst void *srch](jS)}(hjUh]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<ubjH )}(hjK h]h*}(hj<hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj<ubj|)}(hsrch]hsrc}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjA<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 ]j<c.xe_ggtt_node_loadasbuh1hhj=ubje)}(h h]h }(hj9=hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj=ubj|)}(hsizeh]hsize}(hjG=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjA<ubj )}(hu16 vfidh](h)}(hhh]j|)}(hu16h]hu16}(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_node_loadasbuh1hhj\=ubje)}(h h]h }(hj=hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj\=ubj|)}(hvfidh]hvfid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj\=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjA<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 ]j<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/)}(hjE>h]h xe_ggtt_node}(hjG>hhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjC>ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj7>hMhj;>ubh to be loaded}(hj;>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7>hMhj8>ubah}(h]h ]h"]h$]h&]uh1jDhj>ubeh}(h]h ]h"]h$]h&]uh1j"hj7>hMhj>ubj#)}(h"``const void *src`` source buffer h](j))}(h``const void *src``h]j/)}(hj~>h]hconst void *src}(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.chMhjx>ubjE)}(hhh]h)}(ɽh source bufferh]h source buffer}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jDhjx>ubeh}(h]h ]h"]h$]h&]uh1j"hj>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.}(hjA?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}(hjp?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl?hhhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM&ubje)}(h h]h }(hj?hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjl?hhhj~?hM&ubjv)}(h xe_ggtt_dumph]j|)}(h xe_ggtt_dumph]h xe_ggtt_dump}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj?ubah}(h]h ](jjeh"]h$]h&]hhuh1juhjl?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 j?sbc.xe_ggtt_dumpasbuh1hhj?ubje)}(h h]h }(hj?hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj?ubjH )}(hjK h]h*}(hj?hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG 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@ubjH )}(hjK h]h*}(hji@hhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj@ubj|)}(hjT h]hp}(hjv@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj?ubeh}(h]h ]h"]h$]h&]hhuh1j hjl?hhhj~?hM&ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjh?hhhj~?hM&ubah}(h]jc?ah ](jjeh"]h$]h&]jj)jhuh1jFhj~?hM&hje?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&]uh1jhje?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/)}(hjAh]hxe_ggtt}(hjAhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjAubah}(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/)}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj:Aubah}(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(hj6AubjE)}(hhh]h)}(hMthe :c:type:`drm_mm_printer` helper handle to be used to dump the informationh](hthe }(hjUAhhhNhNubh)}(h:c:type:`drm_mm_printer`h]j/)}(hj_Ah]hdrm_mm_printer}(hjaAhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj]Aubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j drm_mm_printeruh1hhjQAhM(hjUAubh1 helper handle to be used to dump the information}(hjUAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQAhM(hjRAubah}(h]h ]h"]h$]h&]uh1jDhj6Aubeh}(h]h ]h"]h$]h&]uh1j"hjQAhM(hj@ubeh}(h]h ]h"]h$]h&]uh1jhj@ubh)}(h **Return**h]j)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.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 }(hjBhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjAhhhjBhM:ubjv)}(hxe_ggtt_print_holesh]j|)}(hjBh]hxe_ggtt_print_holes}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjBubah}(h]h ](jjeh"]h$]h&]hhuh1juhjAhhhjBhM:ubj )}(h<(struct xe_ggtt *ggtt, u64 alignment, struct drm_printer *p)h](j )}(hstruct xe_ggtt *ggtth](jS)}(hjVh]hstruct}(hj1BhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhj-Bubje)}(h h]h }(hj>BhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj-Bubh)}(hhh]j|)}(hxe_ggtth]hxe_ggtt}(hjOBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjLBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQBmodnameN classnameNj j )}j ]jAc.xe_ggtt_print_holesasbuh1hhj-Bubje)}(h h]h }(hjmBhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj-BubjH )}(hjK h]h*}(hj{BhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hj-Bubj|)}(hggtth]hggtt}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj-Bubeh}(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}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj CmodnameN classnameNj j )}j ]jAc.xe_ggtt_print_holesasbuh1hhjBubje)}(h h]h }(hj%ChhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjBubjH )}(hjK h]h*}(hj3ChhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjBubj|)}(hjT 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 hjAhhhjBhM:ubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjAhhhjBhM:ubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jFhjBhM:hjAhhubj)}(hhh]h)}(h Print holesh]h Print holes}(hjiChhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM:hjfChhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjBhM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jAhhhjhNhNubj)}(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)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chM>hjCubj)}(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/)}(hjDh]h u64 alignment}(hjDhhhNhNubah}(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)}(h min alignmenth]h min alignment}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM<hjDubah}(h]h ]h"]h$]h&]uh1jDhjDubeh}(h]h ]h"]h$]h&]uh1j"hjDhM<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}(hjADhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hj=Dubah}(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=hj9DubjE)}(hhh]h)}(hthe :c:type:`drm_printer`h](hthe }(hjXDhhhNhNubh)}(h:c:type:`drm_printer`h]j/)}(hjbDh]h drm_printer}(hjdDhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hj`Dubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j drm_printeruh1hhjTDhM=hjXDubeh}(h]h ]h"]h$]h&]uh1hhjTDhM=hjUDubah}(h]h ]h"]h$]h&]uh1jDhj9Dubeh}(h]h ]h"]h$]h&]uh1j"hjTDhM=hjCubeh}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]j)}(hjDh]h Description}(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?hjCubh)}(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>hjCubh)}(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@hjCubh)}(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.chMAhjCubeh}(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}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj EmodnameN classnameNj j )}j ]j )}j xe_ggtt_encode_pte_flagssbc.xe_ggtt_encode_pte_flagsasbuh1hhjEhhhY/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&]uh1jdhjEhhhj)EhM`ubjv)}(hxe_ggtt_encode_pte_flagsh]j|)}(hj&Eh]hxe_ggtt_encode_pte_flags}(hjKjj>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)}(hjHKh]h Parameters}(hjJKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFKubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjBKubj)}(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/)}(hjgKh]hconst struct xe_ggtt_node *node}(hjiKhhhNhNubah}(h]h ]h"]h$]h&]uh1j.hjeKubah}(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|hjaKubjE)}(hhh]h)}(h:c:type:`xe_ggtt_node`h]h)}(hjKh]j/)}(hjKh]h xe_ggtt_node}(hjKhhhNhNubah}(h]h ](j jc-typeeh"]h$]h&]uh1j.hjKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnj j j xe_ggtt_nodeuh1hhj|KhM|hjKubah}(h]h ]h"]h$]h&]uh1hhj|KhM|hj}Kubah}(h]h ]h"]h$]h&]uh1jDhjaKubeh}(h]h ]h"]h$]h&]uh1j"hj|KhM|hj^Kubah}(h]h ]h"]h$]h&]uh1jhjBKubh)}(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~hjBKubh)}(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}hjBKubeh}(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}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN 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 }(hj&LhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjKhhhj%LhMubjv)}(hxe_ggtt_node_sizeh]j|)}(hj"Lh]hxe_ggtt_node_size}(hj8LhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hj4Lubah}(h]h ](jjeh"]h$]h&]hhuh1juhjKhhhj%LhMubj )}(h!(const struct xe_ggtt_node *node)h]j )}(hconst struct xe_ggtt_node *nodeh](jS)}(hjUh]hconst}(hjSLhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjOLubje)}(h h]h }(hj`LhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjOLubjS)}(hjVh]hstruct}(hjnLhhhNhNubah}(h]h ]j_ah"]h$]h&]uh1jRhjOLubje)}(h h]h }(hj{LhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjOLubh)}(hhh]j|)}(h xe_ggtt_nodeh]h xe_ggtt_node}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNj j )}j ]j Lc.xe_ggtt_node_sizeasbuh1hhjOLubje)}(h h]h }(hjLhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjOLubjH )}(hjK h]h*}(hjLhhhNhNubah}(h]h ]jT ah"]h$]h&]uh1jG hjOLubj|)}(hnodeh]hnode}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j{hjOLubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjKLubah}(h]h ]h"]h$]h&]hhuh1j hjKhhhj%LhMubeh}(h]h ]h"]h$]h&]hhjuh1jLjjhjKhhhj%LhMubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jFhj%LhMhjKhhubj)}(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&]uh1jhjKhhhj%LhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1jAhhhjhNhNubj)}(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)}(hj#Mh]h Parameters}(hj%MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Mubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_mm:22: ./drivers/gpu/drm/xe/xe_ggtt.chMhjMubj)}(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/)}(hjBMh]hconst struct xe_ggtt_node *node}(hjDMhhhNhNubah}(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.chMhj