Skip to content

Commit be47c55

Browse files
Mintz, Yuvaldavem330
authored andcommitted
qede: Split PF/VF ndos.
PFs and VFs share the same structure of NDOs today, and the VFs explicitly fails the ndo_xdp() callback stating it doesn't support XDP. This results in lots of: [qede_xdp:1032(enp131s2)]VFs don't support XDP ------------[ cut here ]------------ WARNING: CPU: 4 PID: 1426 at net/core/rtnetlink.c:1637 rtnl_dump_ifinfo+0x354/0x3c0 ... Call Trace: ? __alloc_skb+0x9b/0x1d0 netlink_dump+0x122/0x290 netlink_recvmsg+0x27d/0x430 sock_recvmsg+0x3d/0x50 ... As every dump request for the VF interface info would fail due to rtnl_xdp_fill() returning an error code. To resolve this, introduce a subset of the NDOs meant for the VF in a seperate structure and register that one instead for VFs, and omit the ndo_xdp initialization. Fixes: 40b8c45 ("qede: Prevent VFs from using XDP") Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent a82dadb commit be47c55

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,11 +1028,6 @@ int qede_xdp(struct net_device *dev, struct netdev_xdp *xdp)
10281028
{
10291029
struct qede_dev *edev = netdev_priv(dev);
10301030

1031-
if (IS_VF(edev)) {
1032-
DP_NOTICE(edev, "VFs don't support XDP\n");
1033-
return -EOPNOTSUPP;
1034-
}
1035-
10361031
switch (xdp->command) {
10371032
case XDP_SETUP_PROG:
10381033
return qede_xdp_set(edev, xdp->prog);

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,23 @@ static const struct net_device_ops qede_netdev_ops = {
563563
#endif
564564
};
565565

566+
static const struct net_device_ops qede_netdev_vf_ops = {
567+
.ndo_open = qede_open,
568+
.ndo_stop = qede_close,
569+
.ndo_start_xmit = qede_start_xmit,
570+
.ndo_set_rx_mode = qede_set_rx_mode,
571+
.ndo_set_mac_address = qede_set_mac_addr,
572+
.ndo_validate_addr = eth_validate_addr,
573+
.ndo_change_mtu = qede_change_mtu,
574+
.ndo_vlan_rx_add_vid = qede_vlan_rx_add_vid,
575+
.ndo_vlan_rx_kill_vid = qede_vlan_rx_kill_vid,
576+
.ndo_set_features = qede_set_features,
577+
.ndo_get_stats64 = qede_get_stats64,
578+
.ndo_udp_tunnel_add = qede_udp_tunnel_add,
579+
.ndo_udp_tunnel_del = qede_udp_tunnel_del,
580+
.ndo_features_check = qede_features_check,
581+
};
582+
566583
/* -------------------------------------------------------------------------
567584
* START OF PROBE / REMOVE
568585
* -------------------------------------------------------------------------
@@ -622,7 +639,10 @@ static void qede_init_ndev(struct qede_dev *edev)
622639

623640
ndev->watchdog_timeo = TX_TIMEOUT;
624641

625-
ndev->netdev_ops = &qede_netdev_ops;
642+
if (IS_VF(edev))
643+
ndev->netdev_ops = &qede_netdev_vf_ops;
644+
else
645+
ndev->netdev_ops = &qede_netdev_ops;
626646

627647
qede_set_ethtool_ops(ndev);
628648

0 commit comments

Comments
 (0)