STRUCT PGT_INFO(9)
π struct pgt_info(9) π
okay so bestie, welcome to the kernel API manual for struct pgt_info β this is the MMU hop page info situation and it's lowkey iconic. no cap, this struct is carrying the whole page table hierarchy on its back and we're gonna get into it. β¨
πΈ SYNOPSIS πΈ
like, here's the whole vibe in code form:
struct pgt_info {
struct hlist_node node;
u64 phys_addr;
u64 virt_addr;
u64 shadow_addr;
struct hl_ctx *ctx;
int num_of_ptes;
};
π Members π
nodeβ this is the hash linked-list node for the pgts on the host, and okay let me explain: for device resident MMU it's the shadow pgts, and for host resident MMU it's the actual pgts. basically it's the social network of page tables andnodeis the link in the group chat. π«Άphys_addrβ the physical address of the pgt. that's it, that's the whole thing. literally just where it lives in physical memory. πvirt_addrβ the host virtual address of the pgt (see above for the whole device/host resident thing β iykyk). it's giving "address but make it virtual." β¨shadow_addrβ this one's the shadow hop in the host for device resident MMU. ngl, shadow work is real and this field is doing it. πctxβ pointer to the owner ctx. like, who does this pgt belong to? this pointer knows. main character energy for real. πnum_of_ptesβ indicates how many ptes are used in the pgt. and bestie listen, this one's only used for dynamically allocated HOPs (so like, all HOPs but HOP0). don't forget the HOP0 exception, that's important. π
π¦ Description π¦
so here's the tea. the MMU page tables hierarchy can be placed either on the device's DRAM β in which case shadow pgts will be stored on host memory β or on host memory β in which case no shadow is required. it's giving "choose your fighter" but both options are valid. periodt. π
when a new level (hop) is needed during mapping, this structure will be used to describe the newly allocated hop as well as to track the number of PTEs in it. lowkey obsessed with how organized this is. β¨
during unmapping, if no valid PTEs remained in the page of a newly allocated hop, it is freed with its pgt_info structure. so like, when it's empty it gets yeeted along with the struct. no valid PTEs, no pgt_info. that's the rule. π¦
π₯ SEE ALSO π₯
okay bestie, this list is LONG and honestly it ate. here's every single one, no skipping, fr fr:
Kernel file ./drivers/accel/habanalabs/common/habanalabs.h enum hl_mmu_page_table_location(9), struct iterate_module_ctx(9), struct hl_gen_wait_properties(9), enum hl_pci_match_mode(9), enum hl_fw_component(9), enum hl_fw_types(9), enum hl_queue_type(9), struct hw_queue_properties(9), enum vm_type(9), enum mmu_op_flags(9), enum hl_device_hw_state(9), struct hl_mmu_properties(9), struct hl_hints_range(9), struct asic_fixed_properties(9), struct hl_fence(9), struct hl_cs_compl(9), struct hl_ts_buff(9), struct hl_mem_mgr(9), struct hl_mem_mgr_fini_stats(9), struct hl_mmap_mem_buf_behavior(9), struct hl_mmap_mem_buf(9), struct hl_cb(9), struct hl_sync_stream_properties(9), struct hl_encaps_signals_mgr(9), struct hl_hw_queue(9), struct hl_cq(9), struct hl_ts_free_jobs(9), struct hl_user_interrupt(9), struct timestamp_reg_free_node(9), struct hl_user_pending_interrupt(9), struct hl_eq(9), struct hl_dec(9), enum hl_asic_type(9), enum hl_pm_mng_profile(9), enum hl_pll_frequency(9), struct pci_mem_region(9), struct static_fw_load_mgr(9), struct fw_response(9), struct dynamic_fw_load_mgr(9), struct pre_fw_load_props(9), struct fw_image_props(9), struct fw_load_mgr(9), struct engines_data(9), struct hl_asic_funcs(9), enum hl_va_range_type(9), struct hl_va_range(9), struct hl_cs_counters_atomic(9), struct hl_dmabuf_priv(9), struct hl_cs_outcome(9), struct hl_cs_outcome_store(9), struct hl_ctx(9), struct hl_ctx_mgr(9), struct hl_userptr(9), struct hl_cs(9), struct hl_cs_job(9), struct hl_cs_parser(9), struct hl_vm_hash_node(9), struct hl_vm_hw_block_list_node(9), struct hl_vm_phys_pg_pack(9), struct hl_vm_va_block(9), struct hl_vm(9), struct hl_debug_params(9), struct hl_notifier_event(9), struct hl_fpriv(9), struct hl_info_list(9), struct hl_debugfs_entry(9), struct hl_dbg_device_entry(9), struct hl_debugfs_cfg_access_entry(9), struct hl_debugfs_cfg_access(9), struct hl_hw_obj_name_entry(9), struct hl_mon_state_dump(9), struct hl_sync_to_engine_map_entry(9), struct hl_sync_to_engine_map(9), struct hl_state_dump_specs_funcs(9), struct hl_state_dump_specs(9), struct hl_device_reset_work(9), struct hl_mmu_priv(9), struct hl_mmu_per_hop_info(9), struct hl_mmu_hop_info(9), struct hl_hr_mmu_funcs(9), struct hl_mmu_funcs(9), struct hl_prefetch_work(9), struct multi_cs_completion(9), struct multi_cs_data(9), struct hl_clk_throttle_timestamp(9), struct hl_clk_throttle(9), struct user_mapped_block(9), struct cs_timeout_info(9), struct undefined_opcode_info(9), struct page_fault_info(9), struct razwi_info(9), struct hw_err_info(9), struct fw_err_info(9), struct engine_err_info(9), struct hl_error_info(9), struct hl_reset_info(9), struct eq_heartbeat_debug_info(9), struct hl_device(9), struct hl_cs_encaps_sig_handle(9), struct hl_info_fw_err_info(9), hl_ioctl_t(9), struct hl_ioctl_desc(9), hl_get_sg_info(9), hl_mem_area_inside_range(9), hl_mem_area_crosses_range(9).
like i said β it ate. every single one is there, i checked. πβ¨
and that's the whole page bestie! this was struct pgt_info(9) from the Kernel API Manual, straight out of ./drivers/accel/habanalabs/common, dated October 2026. you understood the assignment, and honestly? so did this struct. periodt. πππ¦πΈπ
π«Άβ¨
π¦ 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