• Ong Boon Leong's avatar
    net: stmmac: Add TX via XDP zero-copy socket · 132c32ee
    Ong Boon Leong authored
    We add the support of XDP ZC TX submission and cleaning into
    stmmac_tx_clean(). The function is made to clean as many TX complete
    frames as possible, i.e. limit by priv->dma_tx_size instead of NAPI
    budget. For TX ring that is associated with XSK pool, the function
    stmmac_xdp_xmit_zc() is introduced to TX frame buffers from XSK pool by
    using xsk_tx_peek_desc(). To make stmmac_tx_clean() support the cleaning
    of XSK TX frames, STMMAC_TXBUF_T_XSK_TX TX buffer type is introduced.
    
    As stmmac_tx_clean() uses the return value to cue whether NAPI function
    should continue to poll, we augment the caller of stmmac_tx_clean() to
    pass NAPI budget instead of priv->dma_tx_size through 'budget' input and
    made stmmac_tx_clean() to always clean up-to the TX ring size instead.
    This allows us to use the return boolean status of stmmac_xdp_xmit_zc()
    to decide if XSK TX work is done or not: If true, set 'xmits' to return
    'budget - 1' so that NAPI poll may exit. Else, set 'xmits' to return
    'budget' to make NAPI poll continue to poll since XSK TX work is not
    done. Finally, at the end of stmmac_tx_clean(), the function now take
    a maximum value between 'count' and 'xmits' so that status from both
    TX cleaning and XSK TX (only for XDP ZC) is considered.
    
    This patch adds a new NAPI poll called stmmac_napi_poll_rxtx() that is
    meant to be enabled/disabled for RX and TX ring that are bound to XSK
    pool. This NAPI poll function starts with cleaning TX ring, then submits
    XSK TX frames to TX ring before proceed to perform RX operations, i.e.
    , receiving RX frames and replenishing RX ring with RX free buffers
    obtained from XSK pool. Therefore, during XSK RX and TX setup, the driver
    enables stmmac_napi_poll_rxtx() for RX and TX operations, then during
    XSK RX and TX pool tear-down, the driver reenables the exisiting
    independent NAPI poll functions accordingly: stmmac_napi_poll_rx() and
    stmmac_napi_poll_tx().
    Signed-off-by: default avatarOng Boon Leong <boon.leong.ong@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    132c32ee
stmmac_xdp.c 3.18 KB