[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC net-next 13/18] virtio_net: use XDP attachment helpers
From: |
Prashant Bhole |
Subject: |
[RFC net-next 13/18] virtio_net: use XDP attachment helpers |
Date: |
Tue, 26 Nov 2019 19:07:39 +0900 |
Next patches will introduce virtio_net XDP offloading. In that case
we need to manage offloaded and non-offload program. In order to make
it consistent this patch introduces use of XDP attachment helpers.
Signed-off-by: Prashant Bhole <address@hidden>
---
drivers/net/virtio_net.c | 30 +++++++++++-------------------
1 file changed, 11 insertions(+), 19 deletions(-)
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index c8bbb1b90c1c..cee5c2b15c62 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -229,6 +229,8 @@ struct virtnet_info {
struct failover *failover;
struct bpf_prog __rcu *xdp_prog;
+
+ struct xdp_attachment_info xdp;
};
struct padded_vnet_hdr {
@@ -2398,15 +2400,19 @@ static int virtnet_restore_guest_offloads(struct
virtnet_info *vi)
return virtnet_set_guest_offloads(vi, offloads);
}
-static int virtnet_xdp_set(struct net_device *dev, struct bpf_prog *prog,
- struct netlink_ext_ack *extack)
+static int virtnet_xdp_set(struct net_device *dev, struct netdev_bpf *bpf)
{
unsigned long int max_sz = PAGE_SIZE - sizeof(struct padded_vnet_hdr);
+ struct netlink_ext_ack *extack = bpf->extack;
struct virtnet_info *vi = netdev_priv(dev);
+ struct bpf_prog *prog = bpf->prog;
struct bpf_prog *old_prog;
u16 xdp_qp = 0, curr_qp;
int i, err;
+ if (!xdp_attachment_flags_ok(&vi->xdp, bpf))
+ return -EBUSY;
+
if (!virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS)
&& (virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_TSO4) ||
virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_TSO6) ||
@@ -2478,8 +2484,7 @@ static int virtnet_xdp_set(struct net_device *dev, struct
bpf_prog *prog,
}
}
- if (old_prog)
- bpf_prog_put(old_prog);
+ xdp_attachment_setup(&vi->xdp, bpf);
return 0;
@@ -2501,26 +2506,13 @@ static int virtnet_xdp_set(struct net_device *dev,
struct bpf_prog *prog,
return err;
}
-static u32 virtnet_xdp_query(struct net_device *dev)
-{
- struct virtnet_info *vi = netdev_priv(dev);
- const struct bpf_prog *xdp_prog;
-
- xdp_prog = rtnl_dereference(vi->xdp_prog);
- if (xdp_prog)
- return xdp_prog->aux->id;
-
- return 0;
-}
-
static int virtnet_xdp(struct net_device *dev, struct netdev_bpf *xdp)
{
switch (xdp->command) {
case XDP_SETUP_PROG:
- return virtnet_xdp_set(dev, xdp->prog, xdp->extack);
+ return virtnet_xdp_set(dev, xdp);
case XDP_QUERY_PROG:
- xdp->prog_id = virtnet_xdp_query(dev);
- return 0;
+ return xdp_attachment_query(&vi->xdp, xdp);
default:
return -EINVAL;
}
--
2.20.1
- [RFC net-next 12/18] virtio-net: store xdp_prog in device, (continued)
- [RFC net-next 12/18] virtio-net: store xdp_prog in device, Prashant Bhole, 2019/11/26
- [RFC net-next 17/18] virtio_net: implment XDP map offload functionality, Prashant Bhole, 2019/11/26
- [RFC net-next 15/18] virtio_net: implement XDP prog offload functionality, Prashant Bhole, 2019/11/26
- [RFC net-next 10/18] tun: handle XDP_TX action of offloaded program, Prashant Bhole, 2019/11/26
- [RFC net-next 09/18] tun: add a way to inject Tx path packet into Rx path, Prashant Bhole, 2019/11/26
- [RFC net-next 07/18] tun: set offloaded xdp program, Prashant Bhole, 2019/11/26
- [RFC net-next 02/18] net: core: rename netif_receive_generic_xdp() to do_generic_xdp_core(), Prashant Bhole, 2019/11/26
- [RFC net-next 01/18] bpf: introduce bpf_prog_offload_verifier_setup(), Prashant Bhole, 2019/11/26
- [RFC net-next 13/18] virtio_net: use XDP attachment helpers,
Prashant Bhole <=
- [RFC net-next 11/18] tun: run xdp prog when tun is read from file interface, Prashant Bhole, 2019/11/26
- [RFC net-next 08/18] tun: run offloaded XDP program in Tx path, Prashant Bhole, 2019/11/26
- [RFC net-next 06/18] tuntap: remove usage of ptr ring in vhost_net, Prashant Bhole, 2019/11/26
- [RFC net-next 03/18] net: core: export do_xdp_generic_core(), Prashant Bhole, 2019/11/26
- [RFC net-next 05/18] vhost_net: user tap recvmsg api to access ptr ring, Prashant Bhole, 2019/11/26
- Re: [RFC net-next 00/18] virtio_net XDP offload, Jakub Kicinski, 2019/11/26
- Re: [RFC net-next 00/18] virtio_net XDP offload, Michael S. Tsirkin, 2019/11/27