idpf_tx_read_tstamp(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… idpf_tx_read_tstamp(9) β€” from the Kernel API Manual, bestie πŸŽ€

okay so picture this: it's the Intel idpf driver, it's in the kernel API manual, and there's exactly one little function whose whole job is scheduling a work item to go fetch the Tx timestamp value. That's it. That's the whole gig. Let's get into it ✨


🌸 NAME 🌸

idpf_tx_read_tstamp β€” schedule a work to read Tx timestamp value πŸ•πŸ«Ά

Like, it doesn't even read the timestamp itself. It schedules a work to read the Tx timestamp value. Delegation icon. Main character energy is outsourcing.


✨ SYNOPSIS ✨

void idpf_tx_read_tstamp(struct idpf_tx_queue *txq, struct sk_buff *skb);

Returns void, meaning it gives you absolutely nothing back and expects you to be cool with that πŸ’€ no return value, no drama, no notes.


πŸ¦‹ ARGUMENTS πŸ¦‹

  • txq β€” the queue to read the timestamp from. This is your struct idpf_tx_queue *, the actual transmitter queue in question πŸ‘‘
  • skb β€” the socket buffer that provides the Tx timestamp value. This is your struct sk_buff *, the packet's little luggage tag πŸŽ€

Both pointers, both required, no defaults, no shortcuts. Slay.


πŸ’– DESCRIPTION πŸ’–

So here's the vibe: this function schedules a work to read the Tx timestamp value, and that value is generated once the packet is transmitted πŸ•βœ¨

Read that again, bestie, because the ordering is the whole point β€” the timestamp literally does not exist yet at the moment you'd be tempted to grab it. The packet has to actually go out the door first. So instead of standing there refreshing the page like a maniac, idpf_tx_read_tstamp hands the whole "go get it later" job off to a work item. Lowkey the most emotionally mature function in the file 🫢

ngl, there's no return value here, so don't go checking for an error code that will never arrive. It's void. It said what it said πŸ’…

🌈 SEE ALSO 🌈

First up, the actual source, all pretty in its natural habitat:

Kernel file ./drivers/net/ethernet/intel/idpf/idpf_txrx.c

And now the friend group. Every single one of these, no cap, in order:

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_splitq_clean(9),
idpf_tx_clean_bufs(9), idpf_tx_handle_rs_completion(9),
idpf_tx_clean_complq(9), idpf_wait_for_sw_marker_completion(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 the whole squad, iykyk πŸ’œ And if you actually read all of them: obsessed, you ate, no crumbs left πŸ“


and that's the page!! πŸ’… source and version live at ./drivers/net/ethernet/intel/idpf, dated October 2026 β€” stamp it, timestamp it, whatever, it's been scheduled πŸ•πŸŽ€

πŸ“¦ where this page comes from