__i40e_chk_linearize(9)
π
__i40e_chk_linearize β Kernel API Manual, bestie edition β¨
Okay so picture this: it's a kernel API manual page, the function is called __i40e_chk_linearize, and it lives in section (9). That's the whole vibe check up top. Now let's get into it π
πΈ NAME πΈ
__i40e_chk_linearize β lowkey just checking if there are more than 8 buffers per packet, no big deal π
β¨ SYNOPSIS β¨
bool __i40e_chk_linearize (struct sk_buff *skb );
π¦ ARGUMENTS π¦
skbβ the send buffer. that's it. that's the argument. she's simple, she's iconic π«Ά
π NOTE π
Okay so here's the tea, and it's actually important: our HW can't DMA more than 8 buffers to build a packet on the wire π so we literally have to figure out the cases where we need to linearize the skb. no cap, that's the whole job.
And for TSO we need to count the TSO header and the segment payload separately β two different little guys, one function. as such π we need to check cases where we have 7 fragments or more, because we can potentially require 9 DMA transactions:
- 1 for the TSO header
- 1 for the segment payload in the first descriptor
- another 7 for the fragments
math is mathing, the vibes are immaculate, the hardware budget is absolutely not π₯
π§ SEE ALSO π§
Kernel file ./drivers/net/ethernet/intel/i40e/i40e_txrx.c β and honestly? a whole friend group of functions tagged along. bestie squad incoming, all (9), all iconic:
i40e_fdir(9)i40e_program_fdir_filter(9)i40e_create_dummy_packet(9)i40e_create_dummy_udp_packet(9)i40e_create_dummy_tcp_packet(9)i40e_create_dummy_sctp_packet(9)i40e_prepare_fdir_filter(9)i40e_change_filter_num(9)i40e_add_del_fdir_udp(9)i40e_add_del_fdir_tcp(9)i40e_add_del_fdir_sctp(9)i40e_add_del_fdir_ip(9)i40e_add_del_fdir(9)i40e_fd_handle_status(9)i40e_unmap_and_free_tx_resource(9)i40e_clean_tx_ring(9)i40e_free_tx_resources(9)i40e_get_tx_pending(9)i40e_detect_recover_hung(9)i40e_clean_tx_irq(9)i40e_enable_wb_on_itr(9)i40e_force_wb(9)i40e_update_itr(9)i40e_reuse_rx_page(9)i40e_clean_programming_status(9)i40e_setup_tx_descriptors(9)i40e_clean_rx_ring(9)i40e_free_rx_resources(9)i40e_setup_rx_descriptors(9)i40e_release_rx_desc(9)i40e_alloc_mapped_page(9)i40e_alloc_rx_buffers(9)i40e_rx_checksum(9)i40e_rx_hash(9)i40e_process_skb_fields(9)i40e_cleanup_headers(9)i40e_can_reuse_rx_page(9)i40e_rx_buffer_flip(9)i40e_get_rx_buffer(9)i40e_put_rx_buffer(9)i40e_process_rx_buffs(9)i40e_construct_skb(9)i40e_build_skb(9)i40e_is_non_eop(9)i40e_run_xdp(9)i40e_xdp_ring_update_tail(9)i40e_update_rx_stats(9)i40e_finalize_xdp_rx(9)i40e_inc_ntp(9)i40e_add_xdp_frag(9)i40e_consume_xdp_buff(9)i40e_clean_rx_irq(9)i40e_buildreg_itr(9)i40e_update_enable_itr(9)i40e_napi_poll(9)i40e_atr(9)i40e_tx_prepare_vlan_flags(9)i40e_tso(9)i40e_tsyn(9)i40e_tx_enable_csum(9)i40e_create_tx_ctx(9)__i40e_maybe_stop_tx(9)i40e_tx_map(9)i40e_xmit_xdp_ring(9)i40e_xmit_frame_ring(9)i40e_lan_xmit_frame(9)i40e_xdp_xmit(9)
like I said. friend group. ππ
and that's the page!! mwah π this whole thing ships out of ./drivers/net/ethernet/intel/i40e, dated October 2026, and it's still out here answering to __i40e_chk_linearize(9) β go read the source bestie, ily, drink some water πβ¨
π¦ 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