Skip to content

Commit 6b86758

Browse files
Jakub Kicinskiborkmann
authored andcommitted
xdp: don't make drivers report attachment mode
prog_attached of struct netdev_bpf should have been superseded by simply setting prog_id long time ago, but we kept it around to allow offloading drivers to communicate attachment mode (drv vs hw). Subsequently drivers were also allowed to report back attachment flags (prog_flags), and since nowadays only programs attached will XDP_FLAGS_HW_MODE can get offloaded, we can tell the attachment mode from the flags driver reports. Remove prog_attached member. Signed-off-by: Jakub Kicinski <[email protected]> Reviewed-by: Quentin Monnet <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]>
1 parent 4f91da2 commit 6b86758

File tree

15 files changed

+9
-25
lines changed

15 files changed

+9
-25
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,6 @@ int bnxt_xdp(struct net_device *dev, struct netdev_bpf *xdp)
219219
rc = bnxt_xdp_set(bp, xdp->prog);
220220
break;
221221
case XDP_QUERY_PROG:
222-
xdp->prog_attached = !!bp->xdp_prog;
223222
xdp->prog_id = bp->xdp_prog ? bp->xdp_prog->aux->id : 0;
224223
rc = 0;
225224
break;

drivers/net/ethernet/cavium/thunder/nicvf_main.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1848,7 +1848,6 @@ static int nicvf_xdp(struct net_device *netdev, struct netdev_bpf *xdp)
18481848
case XDP_SETUP_PROG:
18491849
return nicvf_xdp_setup(nic, xdp->prog);
18501850
case XDP_QUERY_PROG:
1851-
xdp->prog_attached = !!nic->xdp_prog;
18521851
xdp->prog_id = nic->xdp_prog ? nic->xdp_prog->aux->id : 0;
18531852
return 0;
18541853
default:

drivers/net/ethernet/intel/i40e/i40e_main.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11841,7 +11841,6 @@ static int i40e_xdp(struct net_device *dev,
1184111841
case XDP_SETUP_PROG:
1184211842
return i40e_xdp_setup(vsi, xdp->prog);
1184311843
case XDP_QUERY_PROG:
11844-
xdp->prog_attached = i40e_enabled_xdp_vsi(vsi);
1184511844
xdp->prog_id = vsi->xdp_prog ? vsi->xdp_prog->aux->id : 0;
1184611845
return 0;
1184711846
default:

drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9966,7 +9966,6 @@ static int ixgbe_xdp(struct net_device *dev, struct netdev_bpf *xdp)
99669966
case XDP_SETUP_PROG:
99679967
return ixgbe_xdp_setup(dev, xdp->prog);
99689968
case XDP_QUERY_PROG:
9969-
xdp->prog_attached = !!(adapter->xdp_prog);
99709969
xdp->prog_id = adapter->xdp_prog ?
99719970
adapter->xdp_prog->aux->id : 0;
99729971
return 0;

drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4462,7 +4462,6 @@ static int ixgbevf_xdp(struct net_device *dev, struct netdev_bpf *xdp)
44624462
case XDP_SETUP_PROG:
44634463
return ixgbevf_xdp_setup(dev, xdp->prog);
44644464
case XDP_QUERY_PROG:
4465-
xdp->prog_attached = !!(adapter->xdp_prog);
44664465
xdp->prog_id = adapter->xdp_prog ?
44674466
adapter->xdp_prog->aux->id : 0;
44684467
return 0;

drivers/net/ethernet/mellanox/mlx4/en_netdev.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2926,7 +2926,6 @@ static int mlx4_xdp(struct net_device *dev, struct netdev_bpf *xdp)
29262926
return mlx4_xdp_set(dev, xdp->prog);
29272927
case XDP_QUERY_PROG:
29282928
xdp->prog_id = mlx4_xdp_query(dev);
2929-
xdp->prog_attached = !!xdp->prog_id;
29302929
return 0;
29312930
default:
29322931
return -EINVAL;

drivers/net/ethernet/mellanox/mlx5/core/en_main.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4192,7 +4192,6 @@ static int mlx5e_xdp(struct net_device *dev, struct netdev_bpf *xdp)
41924192
return mlx5e_xdp_set(dev, xdp->prog);
41934193
case XDP_QUERY_PROG:
41944194
xdp->prog_id = mlx5e_xdp_query(dev);
4195-
xdp->prog_attached = !!xdp->prog_id;
41964195
return 0;
41974196
default:
41984197
return -EINVAL;

drivers/net/ethernet/netronome/nfp/nfp_net_common.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3459,9 +3459,6 @@ static int nfp_net_xdp(struct net_device *netdev, struct netdev_bpf *xdp)
34593459
return nfp_net_xdp_setup(nn, xdp->prog, xdp->flags,
34603460
xdp->extack);
34613461
case XDP_QUERY_PROG:
3462-
xdp->prog_attached = !!nn->xdp_prog;
3463-
if (nn->dp.bpf_offload_xdp)
3464-
xdp->prog_attached = XDP_ATTACHED_HW;
34653462
xdp->prog_id = nn->xdp_prog ? nn->xdp_prog->aux->id : 0;
34663463
xdp->prog_flags = nn->xdp_prog ? nn->xdp_flags : 0;
34673464
return 0;

drivers/net/ethernet/qlogic/qede/qede_filter.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1116,7 +1116,6 @@ int qede_xdp(struct net_device *dev, struct netdev_bpf *xdp)
11161116
case XDP_SETUP_PROG:
11171117
return qede_xdp_set(edev, xdp->prog);
11181118
case XDP_QUERY_PROG:
1119-
xdp->prog_attached = !!edev->xdp_prog;
11201119
xdp->prog_id = edev->xdp_prog ? edev->xdp_prog->aux->id : 0;
11211120
return 0;
11221121
default:

drivers/net/netdevsim/bpf.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,6 @@ int nsim_bpf(struct net_device *dev, struct netdev_bpf *bpf)
567567
nsim_bpf_destroy_prog(bpf->offload.prog);
568568
return 0;
569569
case XDP_QUERY_PROG:
570-
bpf->prog_attached = ns->xdp_prog_mode;
571570
bpf->prog_id = ns->xdp_prog ? ns->xdp_prog->aux->id : 0;
572571
bpf->prog_flags = ns->xdp_prog ? ns->xdp_flags : 0;
573572
return 0;

drivers/net/tun.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1268,7 +1268,6 @@ static int tun_xdp(struct net_device *dev, struct netdev_bpf *xdp)
12681268
return tun_xdp_set(dev, xdp->prog, xdp->extack);
12691269
case XDP_QUERY_PROG:
12701270
xdp->prog_id = tun_xdp_query(dev);
1271-
xdp->prog_attached = !!xdp->prog_id;
12721271
return 0;
12731272
default:
12741273
return -EINVAL;

drivers/net/virtio_net.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2343,7 +2343,6 @@ static int virtnet_xdp(struct net_device *dev, struct netdev_bpf *xdp)
23432343
return virtnet_xdp_set(dev, xdp->prog, xdp->extack);
23442344
case XDP_QUERY_PROG:
23452345
xdp->prog_id = virtnet_xdp_query(dev);
2346-
xdp->prog_attached = !!xdp->prog_id;
23472346
return 0;
23482347
default:
23492348
return -EINVAL;

include/linux/netdevice.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -819,10 +819,6 @@ enum bpf_netdev_command {
819819
*/
820820
XDP_SETUP_PROG,
821821
XDP_SETUP_PROG_HW,
822-
/* Check if a bpf program is set on the device. The callee should
823-
* set @prog_attached to one of XDP_ATTACHED_* values, note that "true"
824-
* is equivalent to XDP_ATTACHED_DRV.
825-
*/
826822
XDP_QUERY_PROG,
827823
/* BPF program for offload callbacks, invoked at program load time. */
828824
BPF_OFFLOAD_VERIFIER_PREP,
@@ -849,7 +845,6 @@ struct netdev_bpf {
849845
};
850846
/* XDP_QUERY_PROG */
851847
struct {
852-
u8 prog_attached;
853848
u32 prog_id;
854849
/* flags with which program was installed */
855850
u32 prog_flags;

net/core/dev.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4926,7 +4926,6 @@ static int generic_xdp_install(struct net_device *dev, struct netdev_bpf *xdp)
49264926
break;
49274927

49284928
case XDP_QUERY_PROG:
4929-
xdp->prog_attached = !!old;
49304929
xdp->prog_id = old ? old->aux->id : 0;
49314930
break;
49324931

@@ -7593,13 +7592,13 @@ void __dev_xdp_query(struct net_device *dev, bpf_op_t bpf_op,
75937592
WARN_ON(bpf_op(dev, xdp) < 0);
75947593
}
75957594

7596-
static u8 __dev_xdp_attached(struct net_device *dev, bpf_op_t bpf_op)
7595+
static bool __dev_xdp_attached(struct net_device *dev, bpf_op_t bpf_op)
75977596
{
75987597
struct netdev_bpf xdp;
75997598

76007599
__dev_xdp_query(dev, bpf_op, &xdp);
76017600

7602-
return xdp.prog_attached;
7601+
return xdp.prog_id;
76037602
}
76047603

76057604
static int dev_xdp_install(struct net_device *dev, bpf_op_t bpf_op,
@@ -7634,7 +7633,7 @@ static void dev_xdp_uninstall(struct net_device *dev)
76347633
return;
76357634

76367635
__dev_xdp_query(dev, ndo_bpf, &xdp);
7637-
if (xdp.prog_attached == XDP_ATTACHED_NONE)
7636+
if (!xdp.prog_id)
76387637
return;
76397638

76407639
/* Program removal should always succeed */

net/core/rtnetlink.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,9 +1372,13 @@ static u8 rtnl_xdp_attached_mode(struct net_device *dev, u32 *prog_id)
13721372
return XDP_ATTACHED_NONE;
13731373

13741374
__dev_xdp_query(dev, ops->ndo_bpf, &xdp);
1375-
*prog_id = xdp.prog_id;
1375+
if (!xdp.prog_id)
1376+
return XDP_ATTACHED_NONE;
13761377

1377-
return xdp.prog_attached;
1378+
*prog_id = xdp.prog_id;
1379+
if (xdp.prog_flags & XDP_FLAGS_HW_MODE)
1380+
return XDP_ATTACHED_HW;
1381+
return XDP_ATTACHED_DRV;
13781382
}
13791383

13801384
static int rtnl_xdp_fill(struct sk_buff *skb, struct net_device *dev)

0 commit comments

Comments
 (0)