STRUCT HL_CB(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸŽ€ 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 buffer
  • debugfs_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