xe_bo_decompress(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– xe_bo_decompress β€” the Linux kernel API manual, bestie edition πŸ’–

okay so real talk, this is the xe_bo_decompress(9) kernel API manual page β€” that's the title, that's the manual name, we're not copying the literal header line because we're better than that. it lives in the kernel API manual and it's all about scheduling an in-place decompress and installing a fence ✨


🌸 SYNOPSIS 🌸

int xe_bo_decompress (struct xe_bo *bo );

that's it. that's the whole call. one arg, one int back. slay πŸ’…


πŸŽ€ ARGUMENTS πŸŽ€

  • bo β€” the buffer object, bestie. heads up though: the caller should hold drm_exec reservations for VM+BO. that's on you, not on this function. no cap 🫢

✨ DESCRIPTION ✨

so what does it actually do? it schedules an in-place resolve via the migrate layer, and then it installs the returned dma_fence into the BO kernel reservation slot β€” that's DMA_RESV_USAGE_KERNEL, for the record. iconic behavior honestly 🌟

now here's the tea β˜•: in preempt fence mode, this operation interrupts hardware execution, which is expensive. like, expensive expensive. so page fault mode is recommended for better performance. do with that what you will πŸ™ˆ

another thing β€” the resolve path only runs for VRAM-backed buffers (currently dGPU-only). iGPU/system-memory objects will fail the resource check and just bypass the resolve entirely. not me getting skipped πŸ’€

returns 0 on success, negative errno on error. that's the whole vibe check πŸ”₯

⚠️ please actually hold those drm_exec reservations for VM+BO when you call this. it's in the arguments section for a reason 🧚

πŸ¦‹ SEE ALSO πŸ¦‹

literally the entire xe_bo friend group, and the kernel file that started it all: ./drivers/gpu/drm/xe/xe_bo.c

xe_bo_has_single_placement(9), xe_bo_is_stolen_devmem(9), xe_bo_is_vm_bound(9), xe_bo_pin_account(9), xe_bo_unpin_account(9), xe_bo_is_visible_vram(9), xe_bo_move_notify(9), xe_bo_set_purgeable_shrinker(9), xe_bo_set_purgeable_state(9), xe_ttm_bo_purge(9), xe_bo_shrink(9), xe_bo_notifier_prepare_pinned(9), xe_bo_notifier_unprepare_pinned(9), xe_bo_evict_pinned(9), xe_bo_restore_pinned(9), xe_bo_read(9), xe_bo_alloc(9), xe_bo_free(9), xe_bo_init_locked(9), xe_bo_create_locked(9), xe_bo_create_user(9), xe_bo_create_pin_range_novm(9), xe_bo_create_pin_map_at_novm(9), xe_bo_create_pin_map(9), xe_bo_create_pin_map_novm(9), xe_managed_bo_reinit_in_vram(9), xe_bo_pin_external(9), xe_bo_pin(9), xe_bo_unpin_external(9), xe_bo_validate(9), xe_bo_lock(9), xe_bo_unlock(9), xe_bo_can_migrate(9), xe_bo_migrate(9), xe_bo_evict(9), xe_bo_needs_ccs_pages(9), __xe_bo_release_dummy(9), xe_bo_put_commit(9), xe_bo_dev_init(9), xe_bo_dev_fini(9), xe_bo_dumb_create(9)


and that's the page!! πŸŽ€ mwah πŸ’‹ this one ships out of ./drivers/gpu/drm/xe, dated October 2026 β€” so basically it's from the future, which tracks, because it's giving main character energy πŸ‘‘ go decompress something, bestie 🌈

πŸ“¦ where this page comes from