ethernet: mlxsw: use eth_hw_addr_gen()
authorJakub Kicinski <kuba@kernel.org>
Mon, 18 Oct 2021 21:10:06 +0000 (14:10 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 19 Oct 2021 11:46:25 +0000 (12:46 +0100)
Commit 406f42fa0d3c ("net-next: When a bond have a massive amount
of VLANs...") introduced a rbtree for faster Ethernet address look
up. To maintain netdev->dev_addr in this tree we need to make all
the writes to it got through appropriate helpers.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/minimal.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.c

index e0892f2..5d4dfa5 100644 (file)
@@ -200,20 +200,16 @@ static int
 mlxsw_m_port_dev_addr_get(struct mlxsw_m_port *mlxsw_m_port)
 {
        struct mlxsw_m *mlxsw_m = mlxsw_m_port->mlxsw_m;
-       struct net_device *dev = mlxsw_m_port->dev;
        char ppad_pl[MLXSW_REG_PPAD_LEN];
+       u8 addr[ETH_ALEN];
        int err;
 
        mlxsw_reg_ppad_pack(ppad_pl, false, 0);
        err = mlxsw_reg_query(mlxsw_m->core, MLXSW_REG(ppad), ppad_pl);
        if (err)
                return err;
-       mlxsw_reg_ppad_mac_memcpy_from(ppad_pl, dev->dev_addr);
-       /* The last byte value in base mac address is guaranteed
-        * to be such it does not overflow when adding local_port
-        * value.
-        */
-       dev->dev_addr[ETH_ALEN - 1] += mlxsw_m_port->module + 1;
+       mlxsw_reg_ppad_mac_memcpy_from(ppad_pl, addr);
+       eth_hw_addr_gen(mlxsw_m_port->dev, addr, mlxsw_m_port->module + 1);
        return 0;
 }
 
index d05850f..66c346a 100644 (file)
@@ -316,11 +316,11 @@ static int mlxsw_sp_port_dev_addr_set(struct mlxsw_sp_port *mlxsw_sp_port,
 static int mlxsw_sp_port_dev_addr_init(struct mlxsw_sp_port *mlxsw_sp_port)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
-       unsigned char *addr = mlxsw_sp_port->dev->dev_addr;
 
-       ether_addr_copy(addr, mlxsw_sp->base_mac);
-       addr[ETH_ALEN - 1] += mlxsw_sp_port->local_port;
-       return mlxsw_sp_port_dev_addr_set(mlxsw_sp_port, addr);
+       eth_hw_addr_gen(mlxsw_sp_port->dev, mlxsw_sp->base_mac,
+                       mlxsw_sp_port->local_port);
+       return mlxsw_sp_port_dev_addr_set(mlxsw_sp_port,
+                                         mlxsw_sp_port->dev->dev_addr);
 }
 
 static int mlxsw_sp_port_max_mtu_get(struct mlxsw_sp_port *mlxsw_sp_port, int *p_max_mtu)