• Jeroen de Borst's avatar
    gve: Add header split data path · 5e37d825
    Jeroen de Borst authored
    Add header buffers and ethtool support to enable header split via the
    tcp-data-split flag in ethtool's ringparam config. A coherent dma memory
    is allocated for the header buffers. There is one header buffer per ring
    entry by calculating the offset to the header-buffers starting address.
    The header buffer is always copied directly into the skb and payload is
    always added as frags. When there is a header buffer overflow or the
    header length is 0, the driver places the whole unsplit packet in frags.
    
    When toggling header split, the driver will call gve_adjust_config to
    set its queues appropriately. If header split is enabled by the user and
    the max packet buffer size is no less than 4KB, driver will set the
    packet buffer size as 4KB to support TCP_ZEROCOPY_RECEIVE. Otherwise the
    driver will use the default 2KB as the packet buffer size.
    
    `ethtool -G <dev> tcp-data-split on/off` is the command to toggle header
    split.
    `ethtool -g <dev>` will show the status of header split with the field
    of `tcp-data-split`.
    Co-developed-by: default avatarZiwei Xiao <ziweixiao@google.com>
    Signed-off-by: default avatarZiwei Xiao <ziweixiao@google.com>
    Signed-off-by: default avatarJeroen de Borst <jeroendb@google.com>
    Reviewed-by: default avatarPraveen Kaligineedi <pkaligineedi@google.com>
    Reviewed-by: default avatarHarshitha Ramamurthy <hramamurthy@google.com>
    Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5e37d825
gve_utils.h 1.18 KB