Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'udp_tunnel_nic-post-conversion-cleanup'

udp_tunnel_nic: post conversion cleanup

It has been two releases since we added the common infra for UDP
tunnel port offload, and we have not heard of any major issues.
Remove the old direct driver NDOs completely, and perform minor
simplifications in the tunnel drivers.

Link: https://lore.kernel.org/r/20210106210637.1839662-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+22 -106
-2
drivers/net/ethernet/amd/xgbe/xgbe-drv.c
··· 2295 2295 .ndo_setup_tc = xgbe_setup_tc, 2296 2296 .ndo_fix_features = xgbe_fix_features, 2297 2297 .ndo_set_features = xgbe_set_features, 2298 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 2299 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 2300 2298 .ndo_features_check = xgbe_features_check, 2301 2299 }; 2302 2300
-2
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
··· 13071 13071 .ndo_get_phys_port_id = bnx2x_get_phys_port_id, 13072 13072 .ndo_set_vf_link_state = bnx2x_set_vf_link_state, 13073 13073 .ndo_features_check = bnx2x_features_check, 13074 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 13075 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 13076 13074 }; 13077 13075 13078 13076 static int bnx2x_set_coherency_mask(struct bnx2x *bp)
-2
drivers/net/ethernet/broadcom/bnxt/bnxt.c
··· 12091 12091 #ifdef CONFIG_RFS_ACCEL 12092 12092 .ndo_rx_flow_steer = bnxt_rx_flow_steer, 12093 12093 #endif 12094 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 12095 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 12096 12094 .ndo_bpf = bnxt_xdp, 12097 12095 .ndo_xdp_xmit = bnxt_xdp_xmit, 12098 12096 .ndo_bridge_getlink = bnxt_bridge_getlink,
-2
drivers/net/ethernet/cavium/liquidio/lio_main.c
··· 3219 3219 .ndo_do_ioctl = liquidio_ioctl, 3220 3220 .ndo_fix_features = liquidio_fix_features, 3221 3221 .ndo_set_features = liquidio_set_features, 3222 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 3223 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 3224 3222 .ndo_set_vf_mac = liquidio_set_vf_mac, 3225 3223 .ndo_set_vf_vlan = liquidio_set_vf_vlan, 3226 3224 .ndo_get_vf_config = liquidio_get_vf_config,
-2
drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
··· 1879 1879 .ndo_do_ioctl = liquidio_ioctl, 1880 1880 .ndo_fix_features = liquidio_fix_features, 1881 1881 .ndo_set_features = liquidio_set_features, 1882 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 1883 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 1884 1882 }; 1885 1883 1886 1884 static int lio_nic_info(struct octeon_recv_info *recv_info, void *buf)
-2
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
··· 3882 3882 #endif /* CONFIG_CHELSIO_T4_FCOE */ 3883 3883 .ndo_set_tx_maxrate = cxgb_set_tx_maxrate, 3884 3884 .ndo_setup_tc = cxgb_setup_tc, 3885 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 3886 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 3887 3885 .ndo_features_check = cxgb_features_check, 3888 3886 .ndo_fix_features = cxgb_fix_features, 3889 3887 };
-4
drivers/net/ethernet/cisco/enic/enic_main.c
··· 2509 2509 #ifdef CONFIG_RFS_ACCEL 2510 2510 .ndo_rx_flow_steer = enic_rx_flow_steer, 2511 2511 #endif 2512 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 2513 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 2514 2512 .ndo_features_check = enic_features_check, 2515 2513 }; 2516 2514 ··· 2533 2535 #ifdef CONFIG_RFS_ACCEL 2534 2536 .ndo_rx_flow_steer = enic_rx_flow_steer, 2535 2537 #endif 2536 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 2537 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 2538 2538 .ndo_features_check = enic_features_check, 2539 2539 }; 2540 2540
-2
drivers/net/ethernet/emulex/benet/be_main.c
··· 5179 5179 #endif 5180 5180 .ndo_bridge_setlink = be_ndo_bridge_setlink, 5181 5181 .ndo_bridge_getlink = be_ndo_bridge_getlink, 5182 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 5183 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 5184 5182 .ndo_features_check = be_features_check, 5185 5183 .ndo_get_phys_port_id = be_get_phys_port_id, 5186 5184 };
-2
drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
··· 1531 1531 .ndo_set_vf_rate = fm10k_ndo_set_vf_bw, 1532 1532 .ndo_get_vf_config = fm10k_ndo_get_vf_config, 1533 1533 .ndo_get_vf_stats = fm10k_ndo_get_vf_stats, 1534 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 1535 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 1536 1534 .ndo_dfwd_add_station = fm10k_dfwd_add_station, 1537 1535 .ndo_dfwd_del_station = fm10k_dfwd_del_station, 1538 1536 .ndo_features_check = fm10k_features_check,
-2
drivers/net/ethernet/intel/i40e/i40e_main.c
··· 12804 12804 .ndo_set_vf_link_state = i40e_ndo_set_vf_link_state, 12805 12805 .ndo_set_vf_spoofchk = i40e_ndo_set_vf_spoofchk, 12806 12806 .ndo_set_vf_trust = i40e_ndo_set_vf_trust, 12807 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 12808 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 12809 12807 .ndo_get_phys_port_id = i40e_get_phys_port_id, 12810 12808 .ndo_fdb_add = i40e_ndo_fdb_add, 12811 12809 .ndo_features_check = i40e_features_check,
-2
drivers/net/ethernet/intel/ice/ice_main.c
··· 6790 6790 .ndo_bpf = ice_xdp, 6791 6791 .ndo_xdp_xmit = ice_xdp_xmit, 6792 6792 .ndo_xsk_wakeup = ice_xsk_wakeup, 6793 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 6794 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 6795 6793 };
-2
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
··· 10278 10278 .ndo_bridge_getlink = ixgbe_ndo_bridge_getlink, 10279 10279 .ndo_dfwd_add_station = ixgbe_fwd_add, 10280 10280 .ndo_dfwd_del_station = ixgbe_fwd_del, 10281 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 10282 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 10283 10281 .ndo_features_check = ixgbe_features_check, 10284 10282 .ndo_bpf = ixgbe_xdp, 10285 10283 .ndo_xdp_xmit = ixgbe_xdp_xmit,
-4
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
··· 2839 2839 .ndo_rx_flow_steer = mlx4_en_filter_rfs, 2840 2840 #endif 2841 2841 .ndo_get_phys_port_id = mlx4_en_get_phys_port_id, 2842 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 2843 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 2844 2842 .ndo_features_check = mlx4_en_features_check, 2845 2843 .ndo_set_tx_maxrate = mlx4_en_set_tx_maxrate, 2846 2844 .ndo_bpf = mlx4_xdp, ··· 2871 2873 .ndo_rx_flow_steer = mlx4_en_filter_rfs, 2872 2874 #endif 2873 2875 .ndo_get_phys_port_id = mlx4_en_get_phys_port_id, 2874 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 2875 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 2876 2876 .ndo_features_check = mlx4_en_features_check, 2877 2877 .ndo_set_tx_maxrate = mlx4_en_set_tx_maxrate, 2878 2878 .ndo_bpf = mlx4_xdp,
-2
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
··· 4621 4621 .ndo_change_mtu = mlx5e_change_nic_mtu, 4622 4622 .ndo_do_ioctl = mlx5e_ioctl, 4623 4623 .ndo_set_tx_maxrate = mlx5e_set_tx_maxrate, 4624 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 4625 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 4626 4624 .ndo_features_check = mlx5e_features_check, 4627 4625 .ndo_tx_timeout = mlx5e_tx_timeout, 4628 4626 .ndo_bpf = mlx5e_xdp,
-2
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
··· 653 653 .ndo_has_offload_stats = mlx5e_rep_has_offload_stats, 654 654 .ndo_get_offload_stats = mlx5e_rep_get_offload_stats, 655 655 .ndo_change_mtu = mlx5e_uplink_rep_change_mtu, 656 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 657 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 658 656 .ndo_features_check = mlx5e_features_check, 659 657 .ndo_set_vf_mac = mlx5e_set_vf_mac, 660 658 .ndo_set_vf_rate = mlx5e_set_vf_rate,
-2
drivers/net/ethernet/netronome/nfp/nfp_net_common.c
··· 3656 3656 .ndo_set_features = nfp_net_set_features, 3657 3657 .ndo_features_check = nfp_net_features_check, 3658 3658 .ndo_get_phys_port_name = nfp_net_get_phys_port_name, 3659 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 3660 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 3661 3659 .ndo_bpf = nfp_net_xdp, 3662 3660 .ndo_get_devlink_port = nfp_devlink_get_devlink_port, 3663 3661 };
-6
drivers/net/ethernet/qlogic/qede/qede_main.c
··· 663 663 .ndo_get_vf_config = qede_get_vf_config, 664 664 .ndo_set_vf_rate = qede_set_vf_rate, 665 665 #endif 666 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 667 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 668 666 .ndo_features_check = qede_features_check, 669 667 .ndo_bpf = qede_xdp, 670 668 #ifdef CONFIG_RFS_ACCEL ··· 686 688 .ndo_fix_features = qede_fix_features, 687 689 .ndo_set_features = qede_set_features, 688 690 .ndo_get_stats64 = qede_get_stats64, 689 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 690 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 691 691 .ndo_features_check = qede_features_check, 692 692 }; 693 693 ··· 703 707 .ndo_fix_features = qede_fix_features, 704 708 .ndo_set_features = qede_set_features, 705 709 .ndo_get_stats64 = qede_get_stats64, 706 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 707 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 708 710 .ndo_features_check = qede_features_check, 709 711 .ndo_bpf = qede_xdp, 710 712 .ndo_xdp_xmit = qede_xdp_transmit,
-2
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
··· 520 520 .ndo_fdb_del = qlcnic_fdb_del, 521 521 .ndo_fdb_dump = qlcnic_fdb_dump, 522 522 .ndo_get_phys_port_id = qlcnic_get_phys_port_id, 523 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 524 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 525 523 .ndo_features_check = qlcnic_features_check, 526 524 #ifdef CONFIG_QLCNIC_SRIOV 527 525 .ndo_set_vf_mac = qlcnic_sriov_set_vf_mac,
-2
drivers/net/ethernet/sfc/efx.c
··· 612 612 #ifdef CONFIG_RFS_ACCEL 613 613 .ndo_rx_flow_steer = efx_filter_rfs, 614 614 #endif 615 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 616 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 617 615 .ndo_xdp_xmit = efx_xdp_xmit, 618 616 .ndo_bpf = efx_xdp 619 617 };
+4 -10
drivers/net/geneve.c
··· 1851 1851 { 1852 1852 struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1853 1853 1854 - if (event == NETDEV_UDP_TUNNEL_PUSH_INFO || 1855 - event == NETDEV_UDP_TUNNEL_DROP_INFO) { 1856 - geneve_offload_rx_ports(dev, event == NETDEV_UDP_TUNNEL_PUSH_INFO); 1857 - } else if (event == NETDEV_UNREGISTER) { 1858 - if (!dev->udp_tunnel_nic_info) 1859 - geneve_offload_rx_ports(dev, false); 1860 - } else if (event == NETDEV_REGISTER) { 1861 - if (!dev->udp_tunnel_nic_info) 1862 - geneve_offload_rx_ports(dev, true); 1863 - } 1854 + if (event == NETDEV_UDP_TUNNEL_PUSH_INFO) 1855 + geneve_offload_rx_ports(dev, true); 1856 + else if (event == NETDEV_UDP_TUNNEL_DROP_INFO) 1857 + geneve_offload_rx_ports(dev, false); 1864 1858 1865 1859 return NOTIFY_DONE; 1866 1860 }
-2
drivers/net/netdevsim/netdev.c
··· 258 258 .ndo_setup_tc = nsim_setup_tc, 259 259 .ndo_set_features = nsim_set_features, 260 260 .ndo_bpf = nsim_bpf, 261 - .ndo_udp_tunnel_add = udp_tunnel_nic_add_port, 262 - .ndo_udp_tunnel_del = udp_tunnel_nic_del_port, 263 261 .ndo_get_devlink_port = nsim_get_devlink_port, 264 262 }; 265 263
+5 -10
drivers/net/vxlan.c
··· 4521 4521 struct net_device *dev = netdev_notifier_info_to_dev(ptr); 4522 4522 struct vxlan_net *vn = net_generic(dev_net(dev), vxlan_net_id); 4523 4523 4524 - if (event == NETDEV_UNREGISTER) { 4525 - if (!dev->udp_tunnel_nic_info) 4526 - vxlan_offload_rx_ports(dev, false); 4524 + if (event == NETDEV_UNREGISTER) 4527 4525 vxlan_handle_lowerdev_unregister(vn, dev); 4528 - } else if (event == NETDEV_REGISTER) { 4529 - if (!dev->udp_tunnel_nic_info) 4530 - vxlan_offload_rx_ports(dev, true); 4531 - } else if (event == NETDEV_UDP_TUNNEL_PUSH_INFO || 4532 - event == NETDEV_UDP_TUNNEL_DROP_INFO) { 4533 - vxlan_offload_rx_ports(dev, event == NETDEV_UDP_TUNNEL_PUSH_INFO); 4534 - } 4526 + else if (event == NETDEV_UDP_TUNNEL_PUSH_INFO) 4527 + vxlan_offload_rx_ports(dev, true); 4528 + else if (event == NETDEV_UDP_TUNNEL_DROP_INFO) 4529 + vxlan_offload_rx_ports(dev, false); 4535 4530 4536 4531 return NOTIFY_DONE; 4537 4532 }
-17
include/linux/netdevice.h
··· 1213 1213 * struct netdev_phys_item_id *ppid) 1214 1214 * Called to get the parent ID of the physical port of this device. 1215 1215 * 1216 - * void (*ndo_udp_tunnel_add)(struct net_device *dev, 1217 - * struct udp_tunnel_info *ti); 1218 - * Called by UDP tunnel to notify a driver about the UDP port and socket 1219 - * address family that a UDP tunnel is listnening to. It is called only 1220 - * when a new port starts listening. The operation is protected by the 1221 - * RTNL. 1222 - * 1223 - * void (*ndo_udp_tunnel_del)(struct net_device *dev, 1224 - * struct udp_tunnel_info *ti); 1225 - * Called by UDP tunnel to notify the driver about a UDP port and socket 1226 - * address family that the UDP tunnel is not listening to anymore. The 1227 - * operation is protected by the RTNL. 1228 - * 1229 1216 * void* (*ndo_dfwd_add_station)(struct net_device *pdev, 1230 1217 * struct net_device *dev) 1231 1218 * Called by upper layer devices to accelerate switching or other ··· 1451 1464 struct netdev_phys_item_id *ppid); 1452 1465 int (*ndo_get_phys_port_name)(struct net_device *dev, 1453 1466 char *name, size_t len); 1454 - void (*ndo_udp_tunnel_add)(struct net_device *dev, 1455 - struct udp_tunnel_info *ti); 1456 - void (*ndo_udp_tunnel_del)(struct net_device *dev, 1457 - struct udp_tunnel_info *ti); 1458 1467 void* (*ndo_dfwd_add_station)(struct net_device *pdev, 1459 1468 struct net_device *dev); 1460 1469 void (*ndo_dfwd_del_station)(struct net_device *pdev,
+8
include/net/udp_tunnel.h
··· 129 129 static inline void udp_tunnel_get_rx_info(struct net_device *dev) 130 130 { 131 131 ASSERT_RTNL(); 132 + if (!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) 133 + return; 132 134 call_netdevice_notifiers(NETDEV_UDP_TUNNEL_PUSH_INFO, dev); 133 135 } 134 136 135 137 static inline void udp_tunnel_drop_rx_info(struct net_device *dev) 136 138 { 137 139 ASSERT_RTNL(); 140 + if (!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) 141 + return; 138 142 call_netdevice_notifiers(NETDEV_UDP_TUNNEL_DROP_INFO, dev); 139 143 } 140 144 ··· 327 323 static inline void 328 324 udp_tunnel_nic_add_port(struct net_device *dev, struct udp_tunnel_info *ti) 329 325 { 326 + if (!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) 327 + return; 330 328 if (udp_tunnel_nic_ops) 331 329 udp_tunnel_nic_ops->add_port(dev, ti); 332 330 } ··· 336 330 static inline void 337 331 udp_tunnel_nic_del_port(struct net_device *dev, struct udp_tunnel_info *ti) 338 332 { 333 + if (!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) 334 + return; 339 335 if (udp_tunnel_nic_ops) 340 336 udp_tunnel_nic_ops->del_port(dev, ti); 341 337 }
+1 -1
net/core/dev.c
··· 10002 10002 dev->hw_features |= (NETIF_F_SOFT_FEATURES | NETIF_F_SOFT_FEATURES_OFF); 10003 10003 dev->features |= NETIF_F_SOFT_FEATURES; 10004 10004 10005 - if (dev->netdev_ops->ndo_udp_tunnel_add) { 10005 + if (dev->udp_tunnel_nic_info) { 10006 10006 dev->features |= NETIF_F_RX_UDP_TUNNEL_PORT; 10007 10007 dev->hw_features |= NETIF_F_RX_UDP_TUNNEL_PORT; 10008 10008 }
+4 -20
net/ipv4/udp_tunnel_core.c
··· 90 90 struct sock *sk = sock->sk; 91 91 struct udp_tunnel_info ti; 92 92 93 - if (!dev->netdev_ops->ndo_udp_tunnel_add || 94 - !(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) 95 - return; 96 - 97 93 ti.type = type; 98 94 ti.sa_family = sk->sk_family; 99 95 ti.port = inet_sk(sk)->inet_sport; 100 96 101 - dev->netdev_ops->ndo_udp_tunnel_add(dev, &ti); 97 + udp_tunnel_nic_add_port(dev, &ti); 102 98 } 103 99 EXPORT_SYMBOL_GPL(udp_tunnel_push_rx_port); 104 100 ··· 104 108 struct sock *sk = sock->sk; 105 109 struct udp_tunnel_info ti; 106 110 107 - if (!dev->netdev_ops->ndo_udp_tunnel_del || 108 - !(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) 109 - return; 110 - 111 111 ti.type = type; 112 112 ti.sa_family = sk->sk_family; 113 113 ti.port = inet_sk(sk)->inet_sport; 114 114 115 - dev->netdev_ops->ndo_udp_tunnel_del(dev, &ti); 115 + udp_tunnel_nic_del_port(dev, &ti); 116 116 } 117 117 EXPORT_SYMBOL_GPL(udp_tunnel_drop_rx_port); 118 118 ··· 126 134 127 135 rcu_read_lock(); 128 136 for_each_netdev_rcu(net, dev) { 129 - if (!dev->netdev_ops->ndo_udp_tunnel_add) 130 - continue; 131 - if (!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) 132 - continue; 133 - dev->netdev_ops->ndo_udp_tunnel_add(dev, &ti); 137 + udp_tunnel_nic_add_port(dev, &ti); 134 138 } 135 139 rcu_read_unlock(); 136 140 } ··· 146 158 147 159 rcu_read_lock(); 148 160 for_each_netdev_rcu(net, dev) { 149 - if (!dev->netdev_ops->ndo_udp_tunnel_del) 150 - continue; 151 - if (!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT)) 152 - continue; 153 - dev->netdev_ops->ndo_udp_tunnel_del(dev, &ti); 161 + udp_tunnel_nic_del_port(dev, &ti); 154 162 } 155 163 rcu_read_unlock(); 156 164 }