]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mlxsw: spectrum_router: Apply user-defined multipath hash seed
authorPetr Machata <petrm@nvidia.com>
Fri, 7 Jun 2024 15:13:55 +0000 (17:13 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 12 Jun 2024 23:42:11 +0000 (16:42 -0700)
When Spectrum machines compute hash for the purposes of ECMP routing, they
use a seed specified through RECR_v2 (Router ECMP Configuration Register).
Up until now mlxsw computed the seed by hashing the machine's base MAC.
Now that we can optionally have a user-provided seed, use that if possible.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20240607151357.421181-4-petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index 40ba314fbc72acf7e4e64413e655f07f23bdda43..800dfb64ec830391e462da153ac938bc2e7bf0cd 100644 (file)
@@ -11450,12 +11450,16 @@ static int mlxsw_sp_mp_hash_init(struct mlxsw_sp *mlxsw_sp)
 {
        bool old_inc_parsing_depth, new_inc_parsing_depth;
        struct mlxsw_sp_mp_hash_config config = {};
+       struct net *net = mlxsw_sp_net(mlxsw_sp);
        char recr2_pl[MLXSW_REG_RECR2_LEN];
        unsigned long bit;
        u32 seed;
        int err;
 
-       seed = jhash(mlxsw_sp->base_mac, sizeof(mlxsw_sp->base_mac), 0);
+       seed = READ_ONCE(net->ipv4.sysctl_fib_multipath_hash_seed).user_seed;
+       if (!seed)
+               seed = jhash(mlxsw_sp->base_mac, sizeof(mlxsw_sp->base_mac), 0);
+
        mlxsw_reg_recr2_pack(recr2_pl, seed);
        mlxsw_sp_mp4_hash_init(mlxsw_sp, &config);
        mlxsw_sp_mp6_hash_init(mlxsw_sp, &config);