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

Merge branch 'mlxsw-selftests-cleanups'

Petr Machata says:

====================
mlxsw, selftests: Cleanups

This patchset consolidates a number of disparate items that can all be
considered cleanups. They are all related to mlxsw in that they are
directly in mlxsw code, or in selftests that mlxsw heavily uses.

- patch #1 fixes a comment, patch #2 propagates an extack

- patches #3 and #4 tweak several loops to query a resource once and cache
in a local variable instead of querying on each iteration

- patches #5 and #6 fix selftest diagrams, and #7 adds a missing diagram
into an existing test

- patch #8 disables a PVID on a bridge in a selftest that should not need
said PVID
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+43 -17
+16 -10
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
··· 96 96 struct mlxsw_sp_rif_ipip_lb { 97 97 struct mlxsw_sp_rif common; 98 98 struct mlxsw_sp_rif_ipip_lb_config lb_config; 99 - u16 ul_vr_id; /* Reserved for Spectrum-2. */ 100 - u16 ul_rif_id; /* Reserved for Spectrum. */ 99 + u16 ul_vr_id; /* Spectrum-1. */ 100 + u16 ul_rif_id; /* Spectrum-2+. */ 101 101 }; 102 102 103 103 struct mlxsw_sp_rif_params_ipip_lb { ··· 748 748 749 749 static struct mlxsw_sp_vr *mlxsw_sp_vr_find_unused(struct mlxsw_sp *mlxsw_sp) 750 750 { 751 + int max_vrs = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_VRS); 751 752 struct mlxsw_sp_vr *vr; 752 753 int i; 753 754 754 - for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_VRS); i++) { 755 + for (i = 0; i < max_vrs; i++) { 755 756 vr = &mlxsw_sp->router->vrs[i]; 756 757 if (!mlxsw_sp_vr_is_used(vr)) 757 758 return vr; ··· 793 792 static struct mlxsw_sp_vr *mlxsw_sp_vr_find(struct mlxsw_sp *mlxsw_sp, 794 793 u32 tb_id) 795 794 { 795 + int max_vrs = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_VRS); 796 796 struct mlxsw_sp_vr *vr; 797 797 int i; 798 798 799 799 tb_id = mlxsw_sp_fix_tb_id(tb_id); 800 800 801 - for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_VRS); i++) { 801 + for (i = 0; i < max_vrs; i++) { 802 802 vr = &mlxsw_sp->router->vrs[i]; 803 803 if (mlxsw_sp_vr_is_used(vr) && vr->tb_id == tb_id) 804 804 return vr; ··· 961 959 struct mlxsw_sp_fib *fib, 962 960 struct mlxsw_sp_lpm_tree *new_tree) 963 961 { 962 + int max_vrs = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_VRS); 964 963 enum mlxsw_sp_l3proto proto = fib->proto; 965 964 struct mlxsw_sp_lpm_tree *old_tree; 966 965 u8 old_id, new_id = new_tree->id; ··· 971 968 old_tree = mlxsw_sp->router->lpm.proto_trees[proto]; 972 969 old_id = old_tree->id; 973 970 974 - for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_VRS); i++) { 971 + for (i = 0; i < max_vrs; i++) { 975 972 vr = &mlxsw_sp->router->vrs[i]; 976 973 if (!mlxsw_sp_vr_lpm_tree_should_replace(vr, proto, old_id)) 977 974 continue; ··· 7301 7298 7302 7299 static void mlxsw_sp_router_fib_flush(struct mlxsw_sp *mlxsw_sp) 7303 7300 { 7301 + int max_vrs = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_VRS); 7304 7302 int i, j; 7305 7303 7306 - for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_VRS); i++) { 7304 + for (i = 0; i < max_vrs; i++) { 7307 7305 struct mlxsw_sp_vr *vr = &mlxsw_sp->router->vrs[i]; 7308 7306 7309 7307 if (!mlxsw_sp_vr_is_used(vr)) ··· 7703 7699 mlxsw_sp_rif_find_by_dev(const struct mlxsw_sp *mlxsw_sp, 7704 7700 const struct net_device *dev) 7705 7701 { 7702 + int max_rifs = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); 7706 7703 int i; 7707 7704 7708 - for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) 7705 + for (i = 0; i < max_rifs; i++) 7709 7706 if (mlxsw_sp->router->rifs[i] && 7710 7707 mlxsw_sp->router->rifs[i]->dev == dev) 7711 7708 return mlxsw_sp->router->rifs[i]; ··· 9729 9724 struct mlxsw_sp_vr *ul_vr; 9730 9725 int err; 9731 9726 9732 - ul_vr = mlxsw_sp_vr_get(mlxsw_sp, ul_tb_id, NULL); 9727 + ul_vr = mlxsw_sp_vr_get(mlxsw_sp, ul_tb_id, extack); 9733 9728 if (IS_ERR(ul_vr)) 9734 9729 return PTR_ERR(ul_vr); 9735 9730 ··· 9928 9923 struct mlxsw_sp_rif *ul_rif; 9929 9924 int err; 9930 9925 9931 - ul_rif = mlxsw_sp_ul_rif_get(mlxsw_sp, ul_tb_id, NULL); 9926 + ul_rif = mlxsw_sp_ul_rif_get(mlxsw_sp, ul_tb_id, extack); 9932 9927 if (IS_ERR(ul_rif)) 9933 9928 return PTR_ERR(ul_rif); 9934 9929 ··· 10046 10041 10047 10042 static void mlxsw_sp_rifs_fini(struct mlxsw_sp *mlxsw_sp) 10048 10043 { 10044 + int max_rifs = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); 10049 10045 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); 10050 10046 int i; 10051 10047 10052 10048 WARN_ON_ONCE(atomic_read(&mlxsw_sp->router->rifs_count)); 10053 - for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) 10049 + for (i = 0; i < max_rifs; i++) 10054 10050 WARN_ON_ONCE(mlxsw_sp->router->rifs[i]); 10055 10051 10056 10052 devl_resource_occ_get_unregister(devlink, MLXSW_SP_RESOURCE_RIFS);
+2 -3
tools/testing/selftests/drivers/net/mlxsw/egress_vid_classification.sh
··· 16 16 # +----------------|--+ +--|-----------------+ 17 17 # | | 18 18 # +----------------|-------------------------|-----------------+ 19 - # | SW | | | 19 + # | SW $swp1 + + $swp2 | 20 + # | | | | 20 21 # | +--------------|-------------------------|---------------+ | 21 - # | | $swp1 + + $swp2 | | 22 - # | | | | | | 23 22 # | | $swp1.10 + + $swp2.10 | | 24 23 # | | | | 25 24 # | | br0 | |
+2 -3
tools/testing/selftests/drivers/net/mlxsw/ingress_rif_conf_1d.sh
··· 15 15 # +----------------|--+ +--|-----------------+ 16 16 # | | 17 17 # +----------------|-------------------------|-----------------+ 18 - # | SW | | | 18 + # | SW $swp1 + + $swp2 | 19 + # | | | | 19 20 # | +--------------|-------------------------|---------------+ | 20 - # | | $swp1 + + $swp2 | | 21 - # | | | | | | 22 21 # | | $swp1.10 + + $swp2.10 | | 23 22 # | | | | 24 23 # | | br0 | |
+23 -1
tools/testing/selftests/net/forwarding/router_bridge_vlan.sh
··· 1 1 #!/bin/bash 2 2 # SPDX-License-Identifier: GPL-2.0 3 3 4 + # +------------------------+ +----------------------+ 5 + # | H1 (vrf) | | H2 (vrf) | 6 + # | + $h1.555 | | + $h2 | 7 + # | | 192.0.2.1/28 | | | 192.0.2.130/28 | 8 + # | | 2001:db8:1::1/64 | | | 2001:db8:2::2/64 | 9 + # | | | | | | 10 + # | + $h1 | | | | 11 + # +----|-------------------+ +--|-------------------+ 12 + # | | 13 + # +----|--------------------------------------------------|-------------------+ 14 + # | SW | | | 15 + # | +--|-------------------------------+ + $swp2 | 16 + # | | + $swp1 | 192.0.2.129/28 | 17 + # | | vid 555 | 2001:db8:2::1/64 | 18 + # | | | | 19 + # | | + BR1 (802.1q) | | 20 + # | | vid 555 pvid untagged | | 21 + # | | 192.0.2.2/28 | | 22 + # | | 2001:db8:1::2/64 | | 23 + # | +----------------------------------+ | 24 + # +---------------------------------------------------------------------------+ 25 + 4 26 ALL_TESTS=" 5 27 ping_ipv4 6 28 ping_ipv6 ··· 63 41 64 42 router_create() 65 43 { 66 - ip link add name br1 type bridge vlan_filtering 1 44 + ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 67 45 ip link set dev br1 up 68 46 69 47 ip link set dev $swp1 master br1