• Maciej Fijalkowski's avatar
    xsk: support mbuf on ZC RX · 24ea5012
    Maciej Fijalkowski authored
    Given that skb_shared_info relies on skb_frag_t, in order to support
    xskb chaining, introduce xdp_buff_xsk::xskb_list_node and
    xsk_buff_pool::xskb_list.
    
    This is needed so ZC drivers can add frags as xskb nodes which will make
    it possible to handle it both when producing AF_XDP Rx descriptors as
    well as freeing/recycling all the frags that a single frame carries.
    
    Speaking of latter, update xsk_buff_free() to take care of list nodes.
    For the former (adding as frags), introduce xsk_buff_add_frag() for ZC
    drivers usage that is going to be used to add a frag to xskb list from
    pool.
    
    xsk_buff_get_frag() will be utilized by XDP_TX and, on contrary, will
    return xdp_buff.
    
    One of the previous patches added a wrapper for ZC Rx so implement xskb
    list walk and production of Rx descriptors there.
    
    On bind() path, bail out if socket wants to use ZC multi-buffer but
    underlying netdev does not support it.
    Signed-off-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
    Link: https://lore.kernel.org/r/20230719132421.584801-12-maciej.fijalkowski@intel.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    24ea5012
xdp_sock_drv.h 7.63 KB