• I
    net: ethernet: ti: cpsw: add XDP support · 9ed4050c
    Ivan Khoronzhuk 提交于
    Add XDP support based on rx page_pool allocator, one frame per page.
    Page pool allocator is used with assumption that only one rx_handler
    is running simultaneously. DMA map/unmap is reused from page pool
    despite there is no need to map whole page.
    
    Due to specific of cpsw, the same TX/RX handler can be used by 2
    network devices, so special fields in buffer are added to identify
    an interface the frame is destined to. Thus XDP works for both
    interfaces, that allows to test xdp redirect between two interfaces
    easily. Also, each rx queue have own page pools, but common for both
    netdevs.
    
    XDP prog is common for all channels till appropriate changes are added
    in XDP infrastructure. Also, once page_pool recycling becomes part of
    skb netstack some simplifications can be added, like removing
    page_pool_release_page() before skb receive.
    
    In order to keep rx_dev while redirect, that can be somehow used in
    future, do flush in rx_handler, that allows to keep rx dev the same
    while redirect. It allows to conform with tracing rx_dev pointed
    by Jesper.
    
    Also, there is probability, that XDP generic code can be extended to
    support multi ndev drivers like this one, using same rx queue for
    several ndevs, based on switchdev for instance or else. In this case,
    driver can be modified like exposed here:
    https://lkml.org/lkml/2019/7/3/243Acked-by: NJesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: NIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    9ed4050c
cpsw.c 74.1 KB