• Jason Wang's avatar
    tuntap: add missing xdp flush · 762c330d
    Jason Wang authored
    When using devmap to redirect packets between interfaces,
    xdp_do_flush() is usually a must to flush any batched
    packets. Unfortunately this is missed in current tuntap
    implementation.
    
    Unlike most hardware driver which did XDP inside NAPI loop and call
    xdp_do_flush() at then end of each round of poll. TAP did it in the
    context of process e.g tun_get_user(). So fix this by count the
    pending redirected packets and flush when it exceeds NAPI_POLL_WEIGHT
    or MSG_MORE was cleared by sendmsg() caller.
    
    With this fix, xdp_redirect_map works again between two TAPs.
    
    Fixes: 761876c8 ("tap: XDP support")
    Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    762c330d
tun.c 78.8 KB