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

Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue

Tony Nguyen says:

====================
Intel Wired LAN Driver Updates 2022-08-17 (ice)

This series contains updates to ice driver only.

Grzegorz prevents modifications to VLAN 0 when setting VLAN promiscuous
as it will already be set. He also ignores -EEXIST error when attempting
to set promiscuous and ensures promiscuous mode is properly cleared from
the hardware when being removed.

Benjamin ignores additional -EEXIST errors when setting promiscuous mode
since the existing mode is the desired mode.

Sylwester fixes VFs to allow sending of tagged traffic when no VLAN filters
exist.

* '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue:
ice: Fix VF not able to send tagged traffic with no VLAN filters
ice: Ignore error message when setting same promiscuous mode
ice: Fix clearing of promisc mode with bridge over bond
ice: Ignore EEXIST when setting promisc mode
ice: Fix double VLAN error when entering promisc mode
====================

Link: https://lore.kernel.org/r/20220817171329.65285-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+85 -18
+4 -4
drivers/net/ethernet/intel/ice/ice_fltr.c
··· 62 62 int result; 63 63 64 64 result = ice_set_vlan_vsi_promisc(hw, vsi->idx, promisc_mask, false); 65 - if (result) 65 + if (result && result != -EEXIST) 66 66 dev_err(ice_pf_to_dev(pf), 67 67 "Error setting promisc mode on VSI %i (rc=%d)\n", 68 68 vsi->vsi_num, result); ··· 86 86 int result; 87 87 88 88 result = ice_set_vlan_vsi_promisc(hw, vsi->idx, promisc_mask, true); 89 - if (result) 89 + if (result && result != -EEXIST) 90 90 dev_err(ice_pf_to_dev(pf), 91 91 "Error clearing promisc mode on VSI %i (rc=%d)\n", 92 92 vsi->vsi_num, result); ··· 109 109 int result; 110 110 111 111 result = ice_clear_vsi_promisc(hw, vsi_handle, promisc_mask, vid); 112 - if (result) 112 + if (result && result != -EEXIST) 113 113 dev_err(ice_pf_to_dev(pf), 114 114 "Error clearing promisc mode on VSI %i for VID %u (rc=%d)\n", 115 115 ice_get_hw_vsi_num(hw, vsi_handle), vid, result); ··· 132 132 int result; 133 133 134 134 result = ice_set_vsi_promisc(hw, vsi_handle, promisc_mask, vid); 135 - if (result) 135 + if (result && result != -EEXIST) 136 136 dev_err(ice_pf_to_dev(pf), 137 137 "Error setting promisc mode on VSI %i for VID %u (rc=%d)\n", 138 138 ice_get_hw_vsi_num(hw, vsi_handle), vid, result);
+5 -1
drivers/net/ethernet/intel/ice/ice_lib.c
··· 4062 4062 if (err && err != -EEXIST) 4063 4063 return err; 4064 4064 4065 - return 0; 4065 + /* when deleting the last VLAN filter, make sure to disable the VLAN 4066 + * promisc mode so the filter isn't left by accident 4067 + */ 4068 + return ice_clear_vsi_promisc(&vsi->back->hw, vsi->idx, 4069 + ICE_MCAST_VLAN_PROMISC_BITS, 0); 4066 4070 } 4067 4071 4068 4072 /**
+11 -1
drivers/net/ethernet/intel/ice/ice_main.c
··· 267 267 status = ice_fltr_set_vsi_promisc(&vsi->back->hw, vsi->idx, 268 268 promisc_m, 0); 269 269 } 270 + if (status && status != -EEXIST) 271 + return status; 270 272 271 - return status; 273 + return 0; 272 274 } 273 275 274 276 /** ··· 3574 3572 3575 3573 while (test_and_set_bit(ICE_CFG_BUSY, vsi->state)) 3576 3574 usleep_range(1000, 2000); 3575 + 3576 + ret = ice_clear_vsi_promisc(&vsi->back->hw, vsi->idx, 3577 + ICE_MCAST_VLAN_PROMISC_BITS, vid); 3578 + if (ret) { 3579 + netdev_err(netdev, "Error clearing multicast promiscuous mode on VSI %i\n", 3580 + vsi->vsi_num); 3581 + vsi->current_netdev_flags |= IFF_ALLMULTI; 3582 + } 3577 3583 3578 3584 vlan_ops = ice_get_compat_vsi_vlan_ops(vsi); 3579 3585
+8 -1
drivers/net/ethernet/intel/ice/ice_switch.c
··· 4445 4445 goto free_fltr_list; 4446 4446 4447 4447 list_for_each_entry(list_itr, &vsi_list_head, list_entry) { 4448 + /* Avoid enabling or disabling VLAN zero twice when in double 4449 + * VLAN mode 4450 + */ 4451 + if (ice_is_dvm_ena(hw) && 4452 + list_itr->fltr_info.l_data.vlan.tpid == 0) 4453 + continue; 4454 + 4448 4455 vlan_id = list_itr->fltr_info.l_data.vlan.vlan_id; 4449 4456 if (rm_vlan_promisc) 4450 4457 status = ice_clear_vsi_promisc(hw, vsi_handle, ··· 4459 4452 else 4460 4453 status = ice_set_vsi_promisc(hw, vsi_handle, 4461 4454 promisc_mask, vlan_id); 4462 - if (status) 4455 + if (status && status != -EEXIST) 4463 4456 break; 4464 4457 } 4465 4458
+7 -4
drivers/net/ethernet/intel/ice/ice_vf_lib.c
··· 764 764 static int ice_vsi_ena_spoofchk(struct ice_vsi *vsi) 765 765 { 766 766 struct ice_vsi_vlan_ops *vlan_ops; 767 - int err; 767 + int err = 0; 768 768 769 769 vlan_ops = ice_get_compat_vsi_vlan_ops(vsi); 770 770 771 - err = vlan_ops->ena_tx_filtering(vsi); 772 - if (err) 773 - return err; 771 + /* Allow VF with VLAN 0 only to send all tagged traffic */ 772 + if (vsi->type != ICE_VSI_VF || ice_vsi_has_non_zero_vlans(vsi)) { 773 + err = vlan_ops->ena_tx_filtering(vsi); 774 + if (err) 775 + return err; 776 + } 774 777 775 778 return ice_cfg_mac_antispoof(vsi, true); 776 779 }
+50 -7
drivers/net/ethernet/intel/ice/ice_virtchnl.c
··· 2288 2288 2289 2289 /* Enable VLAN filtering on first non-zero VLAN */ 2290 2290 if (!vlan_promisc && vid && !ice_is_dvm_ena(&pf->hw)) { 2291 + if (vf->spoofchk) { 2292 + status = vsi->inner_vlan_ops.ena_tx_filtering(vsi); 2293 + if (status) { 2294 + v_ret = VIRTCHNL_STATUS_ERR_PARAM; 2295 + dev_err(dev, "Enable VLAN anti-spoofing on VLAN ID: %d failed error-%d\n", 2296 + vid, status); 2297 + goto error_param; 2298 + } 2299 + } 2291 2300 if (vsi->inner_vlan_ops.ena_rx_filtering(vsi)) { 2292 2301 v_ret = VIRTCHNL_STATUS_ERR_PARAM; 2293 2302 dev_err(dev, "Enable VLAN pruning on VLAN ID: %d failed error-%d\n", ··· 2342 2333 } 2343 2334 2344 2335 /* Disable VLAN filtering when only VLAN 0 is left */ 2345 - if (!ice_vsi_has_non_zero_vlans(vsi)) 2336 + if (!ice_vsi_has_non_zero_vlans(vsi)) { 2337 + vsi->inner_vlan_ops.dis_tx_filtering(vsi); 2346 2338 vsi->inner_vlan_ops.dis_rx_filtering(vsi); 2339 + } 2347 2340 2348 2341 if (vlan_promisc) 2349 2342 ice_vf_dis_vlan_promisc(vsi, &vlan); ··· 2849 2838 2850 2839 if (vlan_promisc) 2851 2840 ice_vf_dis_vlan_promisc(vsi, &vlan); 2841 + 2842 + /* Disable VLAN filtering when only VLAN 0 is left */ 2843 + if (!ice_vsi_has_non_zero_vlans(vsi) && ice_is_dvm_ena(&vsi->back->hw)) { 2844 + err = vsi->outer_vlan_ops.dis_tx_filtering(vsi); 2845 + if (err) 2846 + return err; 2847 + } 2852 2848 } 2853 2849 2854 2850 vc_vlan = &vlan_fltr->inner; ··· 2871 2853 /* no support for VLAN promiscuous on inner VLAN unless 2872 2854 * we are in Single VLAN Mode (SVM) 2873 2855 */ 2874 - if (!ice_is_dvm_ena(&vsi->back->hw) && vlan_promisc) 2875 - ice_vf_dis_vlan_promisc(vsi, &vlan); 2856 + if (!ice_is_dvm_ena(&vsi->back->hw)) { 2857 + if (vlan_promisc) 2858 + ice_vf_dis_vlan_promisc(vsi, &vlan); 2859 + 2860 + /* Disable VLAN filtering when only VLAN 0 is left */ 2861 + if (!ice_vsi_has_non_zero_vlans(vsi)) { 2862 + err = vsi->inner_vlan_ops.dis_tx_filtering(vsi); 2863 + if (err) 2864 + return err; 2865 + } 2866 + } 2876 2867 } 2877 2868 } 2878 2869 ··· 2958 2931 if (err) 2959 2932 return err; 2960 2933 } 2934 + 2935 + /* Enable VLAN filtering on first non-zero VLAN */ 2936 + if (vf->spoofchk && vlan.vid && ice_is_dvm_ena(&vsi->back->hw)) { 2937 + err = vsi->outer_vlan_ops.ena_tx_filtering(vsi); 2938 + if (err) 2939 + return err; 2940 + } 2961 2941 } 2962 2942 2963 2943 vc_vlan = &vlan_fltr->inner; ··· 2980 2946 /* no support for VLAN promiscuous on inner VLAN unless 2981 2947 * we are in Single VLAN Mode (SVM) 2982 2948 */ 2983 - if (!ice_is_dvm_ena(&vsi->back->hw) && vlan_promisc) { 2984 - err = ice_vf_ena_vlan_promisc(vsi, &vlan); 2985 - if (err) 2986 - return err; 2949 + if (!ice_is_dvm_ena(&vsi->back->hw)) { 2950 + if (vlan_promisc) { 2951 + err = ice_vf_ena_vlan_promisc(vsi, &vlan); 2952 + if (err) 2953 + return err; 2954 + } 2955 + 2956 + /* Enable VLAN filtering on first non-zero VLAN */ 2957 + if (vf->spoofchk && vlan.vid) { 2958 + err = vsi->inner_vlan_ops.ena_tx_filtering(vsi); 2959 + if (err) 2960 + return err; 2961 + } 2987 2962 } 2988 2963 } 2989 2964 }