STRUCT HL_CB(9)
π struct hl_cb β Kernel API Manual π
okay bestie, so this one is from the Kernel API Manual, and it's literally all about struct hl_cb. no cap, it's giving "the blueprint of a Command Buffer" and i'm obsessed π
β¨ NAME β¨
struct hl_cb β describes a Command Buffer. that's it, that's the vibe π¦
struct hl_cb {
struct hl_device *hdev;
struct hl_ctx *ctx;
struct hl_mmap_mem_buf *buf;
struct list_head debugfs_list;
struct list_head pool_list;
void *kernel_address;
u64 virtual_addr;
dma_addr_t bus_address;
u32 size;
u32 roundup_size;
atomic_t cs_cnt;
atomic_t is_handle_destroyed;
u8 is_pool;
u8 is_internal;
u8 is_mmu_mapped;
};
look at her. 15 fields. main character energy fr fr π
πΈ SYNOPSIS πΈ
here's the whole struct, copy-pasted exactly because you know i don't play about details:
struct hl_cb {
struct hl_device *hdev;
struct hl_ctx *ctx;
struct hl_mmap_mem_buf *buf;
struct list_head debugfs_list;
struct list_head pool_list;
void *kernel_address;
u64 virtual_addr;
dma_addr_t bus_address;
u32 size;
u32 roundup_size;
atomic_t cs_cnt;
atomic_t is_handle_destroyed;
u8 is_pool;
u8 is_internal;
u8 is_mmu_mapped;
};
π Members π
okay now the fun part β every single member, explained, no skips, no "etc." (we don't do that here) π«Ά
hdevβ pointer to device this CB belongs to. like, which device is she serving? that one.ctxβ pointer to the CB owner's context. the whole "who's your owner" situation.bufβ back pointer to the parent mappable memory bufferdebugfs_listβ node in debugfs list of command buffers. yes she's in the list, she's networking β¨pool_listβ node in pool list of command buffers. pool-side representation, iconic.kernel_addressβ Holds the CB's kernel virtual address. that's her kernel-side address, stored right here.virtual_addrβ Holds the CB's virtual address. the virtual one. different from the one above, don't mix them up πbus_addressβ Holds the CB's DMA address. bus girlies rise πsizeβ holds the CB's size. the actual size, before any rounding shenanigans.roundup_sizeβ holds the cb size after roundup to page size. that's the glowed-up, page-aligned size πcs_cntβ holds number of CS that this CB participates in. she's popular, she's in that many command submissions.is_handle_destroyedβ atomic boolean indicating whether or not the CB handle was destroyed. atomic because we're not about to have a race condition at the function, periodt πis_poolβ true if CB was acquired from the pool, false otherwise. literally just a yes/no about pool origin.is_internalβ internally allocated. that's the whole note. πis_mmu_mappedβ true if the CB is mapped to the device's MMU. mmu-mapped or not, no in-between.
π¦ SEE ALSO π¦
the friend group is huge, i'm not exaggerating. first up, the source file:
- Kernel file
./drivers/accel/habanalabs/common/habanalabs.h
and now the whole squad, in order, exactly as listed β grab a snack, this is a long one π
enum hl_mmu_page_table_location(9)struct iterate_module_ctx(9)struct hl_gen_wait_properties(9)struct pgt_info(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_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)
okay that's literally everyone, i checked twice π€ and yes, struct hl_cb is lowkey the moment.
real talk: this is kernel API stuff from ./drivers/accel/habanalabs/common, dated October 2026 β so if you're reading this in some other era, hi from the future bestie ππ
mwah, go read habanalabs.h, ily, bye π§ββοΈβ
π¦ 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