STRUCT HL_CS_JOB(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ 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 than user_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 β€” true if the CB handle we got from the user holds a handle to a kernel-allocated CB object, false otherwise (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 the 2xMSG_PROT at the end of the JOB, to know which barriers to put in the MSG_PROT packets. 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