pvr_mmu_flush_exec(9)
π pvr_mmu_flush_exec(9) π
okay bestie, welcome to the Kernel API Manual page for pvr_mmu_flush_exec(9) β yes that's the whole title, no she did NOT come to play with the long name, and honestly? iconic.
β¨ NAME β¨
pvr_mmu_flush_exec β actually go out there and execute a flush of every MMU cache you've been out here requesting. like, all of them. the ones you asked for earlier. those. π«Ά
β¨ SYNOPSIS β¨
int pvr_mmu_flush_exec (struct pvr_device *pvr_dev , bool wait );
πΈ ARGUMENTS πΈ
pvr_devβ the PowerVR device you're targeting. your main character, literally.waitβ if true, do not come back until the flush is fully completed. no sneaking off early, bestie. π
π¦ DESCRIPTION π¦
okay so here's the tea: you must call this function before you submit any new GPU job. the flush finishes up before the jobs get scheduled, so lowkey you can just call it once after a whole series of maps β slay, batch it, be efficient. β¨
but β and this is the part where you pay attention β a single unmap should always be immediately followed by a flush, and you should explicitly wait on it by setting wait. no exceptions, fr fr. π
now for the dramatic part: failing to flush the MMU caches could risk memory corruption. so if the flush fails (which implies the firmware is straight-up not responding, like it's ghosting you π), the GPU device gets marked as lost. that's the whole vibe check failed. periodt.
β RETURN β
0on success whenwaitis true, or-EIOif the device is unavailable, or- any error encountered while submitting the flush command via the KCCB.
π SEE ALSO π
the kernel file in question, chef's kiss:
./drivers/gpu/drm/imagination/pvr_mmu.c
and now the whole friend group β everyone's here, nobody got left out π:
pvr_mmu_set_flush_flags(9)pvr_mmu_flush_request_all(9)- PowerVR Virtual Memory Handling(9)
- PowerVR Virtual Memory Handling (constants)(9)
- MMU backing pages(9)
- MMU backing pages (constants)(9)
struct pvr_mmu_backing_page(9)pvr_mmu_backing_page_init(9)pvr_mmu_backing_page_fini(9)pvr_mmu_backing_page_sync(9)- Raw page tables(9)
struct pvr_page_table_l2_entry_raw(9)pvr_page_table_l2_entry_raw_set(9)struct pvr_page_table_l1_entry_raw(9)pvr_page_table_l1_entry_raw_set(9)struct pvr_page_table_l0_entry_raw(9)struct pvr_page_flags_raw(9)pvr_page_table_l0_entry_raw_set(9)pvr_page_flags_raw_create(9)struct pvr_page_table_l2_raw(9)struct pvr_page_table_l1_raw(9)struct pvr_page_table_l0_raw(9)- Mirror page tables(9)
struct pvr_page_table_l2(9)pvr_page_table_l2_init(9)pvr_page_table_l2_fini(9)pvr_page_table_l2_sync(9)pvr_page_table_l2_get_raw(9)pvr_page_table_l2_get_entry_raw(9)pvr_page_table_l2_entry_is_valid(9)struct pvr_page_table_l1(9)pvr_page_table_l1_init(9)pvr_page_table_l1_free(9)pvr_page_table_l1_sync(9)pvr_page_table_l1_get_raw(9)pvr_page_table_l1_get_entry_raw(9)pvr_page_table_l1_entry_is_valid(9)struct pvr_page_table_l0(9)pvr_page_table_l0_init(9)pvr_page_table_l0_free(9)pvr_page_table_l0_sync(9)pvr_page_table_l0_get_raw(9)pvr_page_table_l0_get_entry_raw(9)pvr_page_table_l0_entry_is_valid(9)struct pvr_mmu_context(9)struct pvr_page_table_ptr(9)struct pvr_mmu_op_context(9)pvr_page_table_l2_insert(9)pvr_page_table_l2_remove(9)pvr_page_table_l1_insert(9)pvr_page_table_l1_remove(9)pvr_page_table_l0_insert(9)pvr_page_table_l0_remove(9)- Page table index utilities(9)
pvr_page_table_l2_idx(9)pvr_page_table_l1_idx(9)pvr_page_table_l0_idx(9)- High-level page table operations(9)
pvr_page_table_l1_get_or_insert(9)pvr_page_table_l0_get_or_insert(9)pvr_mmu_context_create(9)pvr_mmu_context_destroy(9)pvr_mmu_get_root_table_dma_addr(9)pvr_page_table_l1_alloc(9)pvr_page_table_l0_alloc(9)pvr_mmu_op_context_require_sync(9)pvr_mmu_op_context_sync_manual(9)pvr_mmu_op_context_sync_partial(9)pvr_mmu_op_context_sync(9)pvr_mmu_op_context_load_tables(9)pvr_mmu_op_context_set_curr_page(9)pvr_mmu_op_context_next_page(9)- Single page operations(9)
pvr_page_create(9)pvr_page_destroy(9)pvr_mmu_op_context_destroy(9)pvr_mmu_op_context_create(9)pvr_mmu_op_context_unmap_curr_page(9)pvr_mmu_unmap(9)pvr_mmu_map_sgl(9)pvr_mmu_map(9)
β οΈ reminder bestie: never skip the flush after a single unmap. set wait, hold the line, protect the memory. your future self will thank you. π§
and that's the page!! brought to you by the lovely humans at ./drivers/gpu/drm/imagination, dated October 2026, in the Kernel API Manual. go forth and flush responsibly πβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms