drivers/gpu/drm/xe/xe_svm.h
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/xe/xe_svm.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/xe/xe_svm.h- Extension
.h- Size
- 10085 bytes
- Lines
- 431
- Domain
- Driver Families
- Bucket
- drivers/gpu
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
drm/drm_pagemap.hdrm/drm_gpusvm.hdrm/drm_pagemap_util.hlinux/interval_tree.hxe_vm.h
Detected Declarations
struct drm_devicestruct drm_filestruct xe_bostruct xe_gtstruct xe_devicestruct xe_vram_regionstruct xe_tilestruct xe_vmstruct xe_vmastruct xe_vram_regionstruct xe_svm_rangestruct xe_pagemapstruct drm_pagemap_addrstruct drm_gpusvm_ctxstruct drm_gpusvm_rangestruct xe_bostruct xe_devicestruct xe_vmstruct xe_vmastruct xe_tilestruct xe_vram_regionstruct xe_svm_rangefunction xe_svm_range_pages_validfunction xe_svm_range_has_dma_mappingfunction xe_svm_range_startfunction xe_svm_range_endfunction xe_svm_range_sizefunction xe_svm_range_pages_validfunction xe_devm_addfunction xe_svm_initfunction xe_svm_finifunction xe_svm_closefunction xe_svm_has_mappingfunction xe_svm_bo_evictfunction xe_svm_range_debugfunction xe_svm_range_get_pagesfunction xe_svm_range_startfunction xe_svm_range_endfunction xe_svm_range_sizefunction xe_svm_range_needs_migrate_to_vramfunction xe_svm_range_migrate_to_smemfunction xe_svm_find_vma_startfunction xe_svm_unmap_address_rangefunction xe_svm_flushfunction xe_pagemap_cache_createfunction xe_svm_assert_held_readfunction xe_svm_notifier_unlock
Annotated Snippet
struct xe_svm_range {
/** @base: base drm_gpusvm_range */
struct drm_gpusvm_range base;
/**
* @garbage_collector_link: Link into VM's garbage collect SVM range
* list. Protected by VM's garbage collect lock.
*/
struct list_head garbage_collector_link;
/**
* @tile_present: Tile mask of binding is present for this range.
* Protected by GPU SVM notifier lock.
*/
u8 tile_present;
/**
* @tile_invalidated: Tile mask of binding is invalidated for this
* range. Protected by GPU SVM notifier lock.
*/
u8 tile_invalidated;
};
/**
* struct xe_pagemap - Manages xe device_private memory for SVM.
* @pagemap: The struct dev_pagemap providing the struct pages.
* @dpagemap: The drm_pagemap managing allocation and migration.
* @destroy_work: Handles asnynchronous destruction and caching.
* @peer: Used for pagemap owner computation.
* @hpa_base: The host physical address base for the managemd memory.
* @vr: Backpointer to the xe_vram region.
*/
struct xe_pagemap {
struct dev_pagemap pagemap;
struct drm_pagemap dpagemap;
struct work_struct destroy_work;
struct drm_pagemap_peer peer;
resource_size_t hpa_base;
struct xe_vram_region *vr;
};
/**
* xe_svm_range_pages_valid() - SVM range pages valid
* @range: SVM range
*
* Return: True if SVM range pages are valid, False otherwise
*/
static inline bool xe_svm_range_pages_valid(struct xe_svm_range *range)
{
return drm_gpusvm_range_pages_valid(range->base.gpusvm, &range->base);
}
int xe_devm_add(struct xe_tile *tile, struct xe_vram_region *vr);
int xe_svm_init(struct xe_vm *vm);
void xe_svm_fini(struct xe_vm *vm);
void xe_svm_close(struct xe_vm *vm);
int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
struct xe_gt *gt, u64 fault_addr,
bool atomic);
bool xe_svm_has_mapping(struct xe_vm *vm, u64 start, u64 end);
int xe_svm_bo_evict(struct xe_bo *bo);
void xe_svm_range_debug(struct xe_svm_range *range, const char *operation);
int xe_svm_alloc_vram(struct xe_svm_range *range, const struct drm_gpusvm_ctx *ctx,
struct drm_pagemap *dpagemap);
struct xe_svm_range *xe_svm_range_find_or_insert(struct xe_vm *vm, u64 addr,
struct xe_vma *vma, struct drm_gpusvm_ctx *ctx);
int xe_svm_range_get_pages(struct xe_vm *vm, struct xe_svm_range *range,
struct drm_gpusvm_ctx *ctx);
bool xe_svm_range_needs_migrate_to_vram(struct xe_svm_range *range, struct xe_vma *vma,
const struct drm_pagemap *dpagemap);
void xe_svm_range_migrate_to_smem(struct xe_vm *vm, struct xe_svm_range *range);
bool xe_svm_range_validate(struct xe_vm *vm,
struct xe_svm_range *range,
u8 tile_mask, const struct drm_pagemap *dpagemap);
u64 xe_svm_find_vma_start(struct xe_vm *vm, u64 addr, u64 end, struct xe_vma *vma);
void xe_svm_unmap_address_range(struct xe_vm *vm, u64 start, u64 end);
u8 xe_svm_ranges_zap_ptes_in_range(struct xe_vm *vm, u64 start, u64 end);
Annotation
- Immediate include surface: `drm/drm_pagemap.h`, `drm/drm_gpusvm.h`, `drm/drm_pagemap_util.h`, `linux/interval_tree.h`, `xe_vm.h`.
- Detected declarations: `struct drm_device`, `struct drm_file`, `struct xe_bo`, `struct xe_gt`, `struct xe_device`, `struct xe_vram_region`, `struct xe_tile`, `struct xe_vm`, `struct xe_vma`, `struct xe_vram_region`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.