idpf_wait_fo...r_completion(9)
π idpf_wait_for_sw_marker_completion(9) β hi bestie, welcome to the Kernel API Manual π
okay so this is the page for idpf_wait_for_sw_marker_completion(9) β yes the title in the header gets truncated to idpf_wait_fo...r_completion(9) and no, that's not me being chaotic, that's just how it prints π. Anyway. Sit down, grab a strawberry π, we're learning a lil kernel function together.
β¨ NAME β¨
idpf_wait_for_sw_marker_completion β literally just waits for the SW marker of a disabled Tx queue. that's the whole vibe. π
πΈ SYNOPSIS πΈ
void idpf_wait_for_sw_marker_completion (const struct idpf_tx_queue *txq
);
yes she takes one argument, yes she returns void, yes she's iconic for it π
π¦ ARGUMENTS π¦
txqβ the disabled Tx queue. that's it. that's the whole argument. she's already disabled, we're just waiting on her π
β DESCRIPTION β
okay so picture this: a Tx queue gets requested for disabling. the moment that happens, the CP sends over a special little completion descriptor called the "SW marker" β and what that means is the queue is ready to be destroyed. slay. that's the green light. π’β¨
but β and this is the important part bestie, do not skip it β if for some reason that marker is not received within 500 ms, the polling gets broken so the driver doesn't just hang forever. not the driver hanging π that would be so embarrassing. so: 500 ms, then bail. periodt.
ngl the whole point of this function is "wait politely, but not forever." five hundred milliseconds of patience and then we move on. π«Ά
π SEE ALSO π
the kernel file lives right here, bestie:
./drivers/net/ethernet/intel/idpf/idpf_txrx.c
and because the manpage author was feeling generous, here's the entire friend group β every single one of these, no cap, in order, no skips:
idpf_chk_linearize(9),idpf_tx_timeout(9),idpf_tx_buf_rel_all(9),idpf_tx_desc_rel(9),idpf_compl_desc_rel(9),idpf_tx_desc_rel_all(9),idpf_tx_buf_alloc_all(9),idpf_tx_desc_alloc(9),idpf_compl_desc_alloc(9),idpf_tx_desc_alloc_all(9)idpf_rx_page_rel(9),idpf_rx_hdr_buf_rel_all(9),idpf_rx_buf_rel_bufq(9),idpf_rx_buf_rel_all(9),idpf_rx_desc_rel(9),idpf_rx_desc_rel_bufq(9),idpf_rx_desc_rel_all(9),idpf_rx_buf_hw_update(9),idpf_rx_hdr_buf_alloc_all(9),idpf_post_buf_refill(9),idpf_rx_post_buf_desc(9),idpf_rx_post_init_bufs(9),idpf_rx_buf_alloc_singleq(9),idpf_rx_bufs_init_singleq(9),idpf_rx_buf_alloc_all(9),idpf_rx_bufs_init(9),idpf_rx_bufs_init_all(9),idpf_rx_desc_alloc(9),idpf_bufq_desc_alloc(9),idpf_rx_desc_alloc_all(9)idpf_vector_to_queue_set(9),idpf_qp_switch(9),idpf_txq_group_rel(9),idpf_rxq_sw_queue_rel(9),idpf_rxq_group_rel(9),idpf_vport_queue_grp_rel_all(9),idpf_vport_queues_rel(9),idpf_vport_init_fast_path_txqs(9),idpf_vport_init_num_qs(9),idpf_vport_calc_num_q_desc(9),idpf_vport_calc_total_qs(9),idpf_vport_calc_num_q_groups(9),idpf_vport_calc_numq_per_grp(9),idpf_rxq_set_descids(9),idpf_txq_group_alloc(9),idpf_rxq_group_alloc(9),idpf_vport_queue_grp_alloc_all(9),idpf_vport_queues_alloc(9)idpf_tx_read_tstamp(9),idpf_tx_splitq_clean(9),idpf_tx_clean_bufs(9),idpf_tx_handle_rs_completion(9),idpf_tx_clean_complq(9),idpf_tx_splitq_build_ctb(9),idpf_tx_splitq_build_flow_desc(9),idpf_txq_has_room(9),idpf_tx_maybe_stop_splitq(9),idpf_tx_buf_hw_update(9),idpf_tx_res_count_required(9),idpf_tx_splitq_bump_ntu(9),idpf_tx_get_free_buf_id(9),idpf_tx_splitq_pkt_err_unmap(9),idpf_tx_splitq_map(9),idpf_tso(9),idpf_tx_splitq_get_ctx_desc(9),idpf_tx_drop_skb(9),idpf_tx_tstamp(9),idpf_tx_set_tstamp_desc(9),idpf_tx_splitq_need_re(9),idpf_tx_splitq_frame(9),idpf_tx_start(9)idpf_rx_hash(9),idpf_rx_csum(9),idpf_rx_splitq_extract_csum_bits(9),idpf_rx_rsc(9),idpf_rx_hwtstamp(9),__idpf_rx_process_skb_fields(9),idpf_rx_hsplit_wa(9),idpf_rx_splitq_test_staterr(9),idpf_rx_splitq_is_eop(9),idpf_rx_splitq_clean(9),idpf_rx_update_bufq_desc(9),idpf_rx_clean_refillq(9),idpf_rx_clean_refillq_all(9)idpf_vport_intr_clean_queues(9),idpf_vport_intr_napi_del_all(9),idpf_vport_intr_napi_dis_all(9),idpf_vport_intr_rel(9),idpf_vport_intr_rel_irq(9),idpf_vport_intr_dis_irq_all(9),idpf_vport_intr_buildreg_itr(9),idpf_update_dim_sample(9),idpf_net_dim(9),idpf_vport_intr_update_itr_ena_irq(9),idpf_vport_intr_req_irq(9),idpf_vport_intr_write_itr(9),idpf_vport_intr_ena_irq_all(9),idpf_vport_intr_dis_dim_all(9),idpf_vport_intr_deinit(9),idpf_tx_dim_work(9),idpf_rx_dim_work(9),idpf_init_dim(9),idpf_vport_intr_napi_ena_all(9),idpf_tx_splitq_clean_all(9),idpf_rx_splitq_clean_all(9),idpf_vport_splitq_napi_poll(9),idpf_vport_intr_map_vector_to_qs(9),idpf_vport_intr_init_vec_idx(9),idpf_vport_intr_napi_add_all(9),idpf_vport_intr_alloc(9),idpf_vport_intr_init(9),idpf_config_rss(9),idpf_fill_dflt_rss_lut(9),idpf_init_rss_lut(9),idpf_deinit_rss_lut(9)
π§ that's a lot of friends. go say hi to some of them. iykyk.
and that's the page, bestie!! π mwah π
this lil cutie lives under ./drivers/net/ethernet/intel/idpf, she's stamped October 2026, and she answers to idpf_wait_fo...r_completion(9) in the footers β go forth and wait for your SW marker responsibly π«Άβ¨π
π¦ 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