On Mon, Aug 19, 2024 at 6:53 PM Jakub Kicinski <kuba@xxxxxxxxxx> wrote: > > On Mon, 19 Aug 2024 00:44:27 +0900 Taehee Yoo wrote: > > > @@ -9537,6 +9540,10 @@ static int dev_xdp_attach(struct net_device *dev, struct netlink_ext_ack *extack > > > NL_SET_ERR_MSG(extack, "Native and generic XDP can't be active at the same time"); > > > return -EEXIST; > > > } > > > + if (dev_get_max_mp_channel(dev) != -1) { > > > + NL_SET_ERR_MSG(extack, "XDP can't be installed on a netdev using memory providers"); > > > + return -EINVAL; > > > + } > > > > Should we consider virtual interfaces like bonding, bridge, etc? > > Virtual interfaces as an upper interface of physical interfaces can > > still install XDP prog. > > > > # ip link add bond0 type bond > > # ip link set eth0 master bond0 > > # ip link set bond0 xdp pin /sys/fs/bpf/x/y > > and > > # ip link set bond0 xdpgeneric pin /sys/fs/bpf/x/y > > > > All virtual interfaces can install generic XDP prog. > > The bonding interface can install native XDP prog. > > Good point. We may need some common helpers to place the checks for XDP. > They are spread all over the place now. Took a bit of a look here. Forgive me, I'm not that familiar with XDP and virtual interfaces, so I'm a bit unsure what to do here. For veth, it seems, the device behind the veth is stored in veth_priv->peer, so it seems maybe a dev_get_max_mp_channel() check on veth_priv->peer is the way to go to disable this for veth? I think we need to do this check on creation of the veth and on the ndo_bpf of veth. For bonding, it seems we need to add mp channel check in bond_xdp_set, and bond_enslave? There are a few other drivers that define ndo_add_slave, seems a check in br_add_slave is needed as well. This seems like a potentially deep rabbit hole with a few checks to add all of the place. Is this blocking the series? AFAICT if XDP fails with mp-bound queues with a benign error, that seems fine to me; I don't have a use case for memory providers + xdp yet. This should only be blocking if someone can repro a very serious error (kernel crash) or something with this combination. I can try to add these checks locally and propose as a follow up series. Let me know if I'm on the right track with figuring out how to implement this, and, if you feel like it's blocking. -- Thanks, Mina