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.
Read the address into an array on the stack, then call
eth_hw_addr_set().
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
 
 {
        struct skge_port *skge;
        struct net_device *dev = alloc_etherdev(sizeof(*skge));
+       u8 addr[ETH_ALEN];
 
        if (!dev)
                return NULL;
        }
 
        /* read the mac address */
-       memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port*8, ETH_ALEN);
+       memcpy_fromio(addr, hw->regs + B2_MAC_1 + port*8, ETH_ALEN);
+       eth_hw_addr_set(dev, addr);
 
        return dev;
 }
 
         * 2) from internal registers set by bootloader
         */
        ret = of_get_ethdev_address(hw->pdev->dev.of_node, dev);
-       if (ret)
-               memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8,
-                             ETH_ALEN);
+       if (ret) {
+               u8 addr[ETH_ALEN];
+
+               memcpy_fromio(addr, hw->regs + B2_MAC_1 + port * 8, ETH_ALEN);
+               eth_hw_addr_set(dev, addr);
+       }
 
        /* if the address is invalid, use a random value */
        if (!is_valid_ether_addr(dev->dev_addr)) {