sfc: handle XDP_TX outcomes of XDP eBPF programs
Provide an ndo_xdp_xmit function that uses the XDP tx queue for this CPU to send the packet. Signed-off-by: Charles McLachlan <cmclachlan@solarflare.com> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
3990a8fffb
commit
dfe44c1f52
@@ -228,6 +228,8 @@ static void efx_start_all(struct efx_nic *efx);
|
||||
static void efx_stop_all(struct efx_nic *efx);
|
||||
static int efx_xdp_setup_prog(struct efx_nic *efx, struct bpf_prog *prog);
|
||||
static int efx_xdp(struct net_device *dev, struct netdev_bpf *xdp);
|
||||
static int efx_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **xdpfs,
|
||||
u32 flags);
|
||||
|
||||
#define EFX_ASSERT_RESET_SERIALISED(efx) \
|
||||
do { \
|
||||
@@ -2633,6 +2635,7 @@ static const struct net_device_ops efx_netdev_ops = {
|
||||
#endif
|
||||
.ndo_udp_tunnel_add = efx_udp_tunnel_add,
|
||||
.ndo_udp_tunnel_del = efx_udp_tunnel_del,
|
||||
.ndo_xdp_xmit = efx_xdp_xmit,
|
||||
.ndo_bpf = efx_xdp
|
||||
};
|
||||
|
||||
@@ -2680,6 +2683,17 @@ static int efx_xdp(struct net_device *dev, struct netdev_bpf *xdp)
|
||||
}
|
||||
}
|
||||
|
||||
static int efx_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **xdpfs,
|
||||
u32 flags)
|
||||
{
|
||||
struct efx_nic *efx = netdev_priv(dev);
|
||||
|
||||
if (!netif_running(dev))
|
||||
return -EINVAL;
|
||||
|
||||
return efx_xdp_tx_buffers(efx, n, xdpfs, flags & XDP_XMIT_FLUSH);
|
||||
}
|
||||
|
||||
static void efx_update_name(struct efx_nic *efx)
|
||||
{
|
||||
strcpy(efx->name, efx->net_dev->name);
|
||||
|
Reference in New Issue
Block a user