STRUCT HL_CS_JOB(9)
β¨ struct hl_cs_job(9) β command submission job β¨
okay bestie, this is a page from the Kernel API Manual (yes, the kernel really does have a manual, and yes it's as extra as it sounds π
). Sit down, grab a strawberry drink π, and let's talk about struct hl_cs_job β literally the command submission job. It's giving "one lil' unit of work in the queue" and honestly? kind of iconic.
πΈ SYNOPSIS πΈ
Here's the whole struct, verbatim, no cap β every field exactly as the kernel gods wrote it:
struct hl_cs_job {
struct list_head cs_node;
struct hl_cs *cs;
struct hl_cb *user_cb;
struct hl_cb *patched_cb;
struct work_struct finish_work;
struct list_head userptr_list;
struct list_head debugfs_list;
struct kref refcount;
enum hl_queue_type queue_type;
ktime_t timestamp;
u32 id;
u32 hw_queue_id;
u32 user_cb_size;
u32 job_cb_size;
u32 encaps_sig_wait_offset;
u8 is_kernel_allocated_cb;
u8 contains_dma_pkt;
};
π Members π
cs_nodeβ the node that hangs out on the CS jobs list. it's the little hook that keeps this job attached to the group chat π«Άcsβ the CS this job belongs to. every job's gotta have a home.user_cbβ the CB we got from the user. theirs, not ours.patched_cbβ lowkey the glow-up version: in case of patching, this is the internal CB which is submitted on the queue instead of the CB we got from the IOCTL. swap era β¨finish_workβ a workqueue object to run when the job is completed. it's the "we're done here" party πuserptr_listβ linked-list of userptr mappings that belong to this job and wait for completion. they're literally just waiting their turn, so patient πdebugfs_listβ node in the debugfs list of command submission jobs.refcountβ reference counter for usage of the CS job. classic kref behaviour, no drama.queue_typeβ the type of the H/W queue this job is submitted to.timestampβ timestamp upon job completion. time-stamped, main character behaviour fr.idβ the id of this job inside a CS.hw_queue_idβ the id of the H/W queue this job is submitted to.user_cb_sizeβ the actual size of the CB we got from the user.job_cb_sizeβ the actual size of the CB that we put on the queue. (yes, it can be a different size thanuser_cb_sizeβ that's the whole patching vibe π)encaps_sig_wait_offsetβ encapsulated signals offset, which allow the user to wait on part of the reserved signals. a lil' slice of the signals, not the whole buffet πis_kernel_allocated_cbβtrueif the CB handle we got from the user holds a handle to a kernel-allocated CB object,falseotherwise (SRAM/DRAM/host address). just a truthy lil'u8.contains_dma_pktβ whether the JOB contains at least one DMA packet. This info is needed later, when adding the2xMSG_PROTat the end of the JOB, to know which barriers to put in theMSG_PROTpackets. Relevant only for GAUDI as GOYA doesn't have streams so the engine can't be busy by another stream. π§ iykyk
ngl, that last one is the β¨loreβ¨ field. it only matters on GAUDI, so don't come for GOYA about it.
π¦ SEE ALSO π¦
the friend group is huge, bestie. here's literally everyone:
- 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)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_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_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)
π that's a lot of friends. but hey β network is everything, bestie.
and that's the whole page! this one lives in ./drivers/accel/habanalabs/common, dated October 2026, and it's page struct hl_cs_job(9) of the Kernel API Manual. go read a struct hl_cs(9) next, slay πβ¨π
π¦ 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