• John Fastabend's avatar
    virtio_net: XDP support for adjust_head · 2de2f7f4
    John Fastabend authored
    Add support for XDP adjust head by allocating a 256B header region
    that XDP programs can grow into. This is only enabled when a XDP
    program is loaded.
    
    In order to ensure that we do not have to unwind queue headroom push
    queue setup below bpf_prog_add. It reads better to do a prog ref
    unwind vs another queue setup call.
    
    At the moment this code must do a full reset to ensure old buffers
    without headroom on program add or with headroom on program removal
    are not used incorrectly in the datapath. Ideally we would only
    have to disable/enable the RX queues being updated but there is no
    API to do this at the moment in virtio so use the big hammer. In
    practice it is likely not that big of a problem as this will only
    happen when XDP is enabled/disabled changing programs does not
    require the reset. There is some risk that the driver may either
    have an allocation failure or for some reason fail to correctly
    negotiate with the underlying backend in this case the driver will
    be left uninitialized. I have not seen this ever happen on my test
    systems and for what its worth this same failure case can occur
    from probe and other contexts in virtio framework.
    Signed-off-by: default avatarJohn Fastabend <john.r.fastabend@intel.com>
    Acked-by: default avatarJason Wang <jasowang@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2de2f7f4
virtio_net.c 66.3 KB