if (!is_valid_ether_addr(sa->sa_data))
                return -EADDRNOTAVAIL;
 
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
        return 0;
 }
        dev->flags &= ~IFF_MULTICAST;
        dev->features   |= NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_TSO;
        dev->features   |= NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_LLTX;
-       random_ether_addr(dev->dev_addr);
+       eth_hw_addr_random(dev);
 }
 
 static int dummy_validate(struct nlattr *tb[], struct nlattr *data[])
 
                        return rc;
        }
 
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
 
        if (netif_running(dev))
 
 
        if (BP_NOMCP(bp)) {
                BNX2X_ERROR("warning: random MAC workaround active\n");
-               random_ether_addr(bp->dev->dev_addr);
+               eth_hw_addr_random(bp->dev);
        } else if (IS_MF(bp)) {
                val2 = MF_CFG_RD(bp, func_mf_config[func].mac_upper);
                val = MF_CFG_RD(bp, func_mf_config[func].mac_lower);
 
         * address using the following linux command:
         *      ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx  */
        if (!is_valid_ether_addr(dev->dev_addr)) {
-               random_ether_addr(dev->dev_addr);
+               eth_hw_addr_random(dev);
                netdev_dbg(priv->dev, "generated random MAC address %pM\n",
                        dev->dev_addr);
        }
        if (!is_valid_ether_addr(addr->sa_data))
                return -EADDRNOTAVAIL;
 
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
 
        xgmac_set_mac_addr(ioaddr, dev->dev_addr, 0);
 
        if (!is_valid_ether_addr(sa->sa_data))
                return -EINVAL;
        memcpy(oldMac, dev->dev_addr, ETH_ALEN);
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
        netif_addr_lock_bh(dev);
        update_hash_table_mac_address(pep, oldMac, dev->dev_addr);
        INIT_WORK(&pep->tx_timeout_task, pxa168_eth_tx_timeout_task);
 
        printk(KERN_INFO "%s:Using random mac address\n", DRIVER_NAME);
-       random_ether_addr(dev->dev_addr);
+       eth_hw_addr_random(dev);
 
        pep->pd = pdev->dev.platform_data;
        pep->rx_ring_size = NUM_RX_DESCS;
 
        if (!is_valid_ether_addr(addr->sa_data))
                return -EADDRNOTAVAIL;
 
+       netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(netdev->dev_addr, mac, netdev->addr_len);
 
        ks8842_write_mac_addr(adapter, mac);
                ks8842_read_mac_addr(adapter, netdev->dev_addr);
 
                if (!is_valid_ether_addr(netdev->dev_addr))
-                       random_ether_addr(netdev->dev_addr);
+                       eth_hw_addr_random(netdev);
        }
 
        id = ks8842_read16(adapter, 32, REG_SW_ID_AND_ENABLE);
 
                                dev->dev_addr);
        }
 
-       random_ether_addr(dev->dev_addr);
+       eth_hw_addr_random(dev);
        ks8851_write_mac_addr(dev);
 }
 
        if (!is_valid_ether_addr(sa->sa_data))
                return -EADDRNOTAVAIL;
 
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
        return ks8851_write_mac_addr(dev);
 }
 
        struct sockaddr *addr = paddr;
        u8 *da;
 
+       netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
 
        da = (u8 *)netdev->dev_addr;
 
        if (!is_valid_ether_addr(address->sa_data))
                return -EADDRNOTAVAIL;
 
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(dev->dev_addr, address->sa_data, dev->addr_len);
        return enc28j60_set_hw_macaddr(dev);
 }
                ret = -EIO;
                goto error_irq;
        }
-       random_ether_addr(dev->dev_addr);
+       eth_hw_addr_random(dev);
        enc28j60_set_hw_macaddr(dev);
 
        /* Board setup must set the relevant edge trigger type;
 
 
        /* synchronized against open : rtnl_lock() held by caller */
        memcpy(dev->dev_addr, macaddr->sa_data, ETH_ALEN);
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
 
        if (netif_running(dev)) {
                netif_tx_lock_bh(dev);
                dev_err(&pci_dev->dev,
                        "Invalid MAC address detected: %pM - Please complain to your hardware vendor.\n",
                        dev->dev_addr);
-               random_ether_addr(dev->dev_addr);
+               eth_hw_addr_random(dev);
                dev_err(&pci_dev->dev,
                        "Using random MAC address: %pM\n", dev->dev_addr);
        }
 
        if (!is_valid_ether_addr(addr->sa_data))
                return -EADDRNOTAVAIL;
 
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
 
        spin_lock_irq(&pdata->mac_lock);
                                   "Mac Address is read from LAN911x EEPROM");
                } else {
                        /* eeprom values are invalid, generate random MAC */
-                       random_ether_addr(dev->dev_addr);
+                       eth_hw_addr_random(dev);
                        smsc911x_set_hw_mac_address(pdata, dev->dev_addr);
                        SMSC_TRACE(pdata, probe,
                                   "MAC Address is set to random_ether_addr");
 
 
        /* ISSUE: Note that "dev_addr" is now a pointer. */
        memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
 
        return 0;
 }
                 * can't get its MAC address, we are most likely running
                 * the simulator, so let's generate a random MAC address.
                 */
-               random_ether_addr(dev->dev_addr);
+               eth_hw_addr_random(dev);
        }
 
        return 0;
 
 
        if (!(dev->flags & IFF_UP)) {
                /* Just copy in the new address */
+               dev->addr_assign_type &= ~NET_ADDR_RANDOM;
                memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
        } else {
                /* Rehash and update the device filters */
                return -EINVAL;
 
        if (!tb[IFLA_ADDRESS])
-               random_ether_addr(dev->dev_addr);
+               eth_hw_addr_random(dev);
 
        if (!macvlan_port_exists(lowerdev)) {
                err = macvlan_port_create(lowerdev);
 
        struct team_port *port;
        struct sockaddr *addr = p;
 
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
        rcu_read_lock();
        list_for_each_entry_rcu(port, &team->port_list, list)
        int err;
 
        if (tb[IFLA_ADDRESS] == NULL)
-               random_ether_addr(dev->dev_addr);
+               eth_hw_addr_random(dev);
 
        err = register_netdevice(dev);
        if (err)
 
 
        spin_lock_bh(&br->lock);
        if (compare_ether_addr(dev->dev_addr, addr->sa_data)) {
+               dev->addr_assign_type &= ~NET_ADDR_RANDOM;
                memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
                br_fdb_change_mac_address(br, addr->sa_data);
                br_stp_change_bridge_id(br, addr->sa_data);
 {
        struct net_bridge *br = netdev_priv(dev);
 
-       random_ether_addr(dev->dev_addr);
+       eth_hw_addr_random(dev);
        ether_setup(dev);
 
        dev->netdev_ops = &br_netdev_ops;
 
 
        if (!is_valid_ether_addr(addr->sa_data))
                return -EADDRNOTAVAIL;
+       dev->addr_assign_type &= ~NET_ADDR_RANDOM;
        memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
        return 0;
 }
        netdev->vlan_features = netdev->features;
        netdev->features |= NETIF_F_HW_VLAN_TX;
        netdev->hw_features = netdev->features & ~NETIF_F_LLTX;
-       random_ether_addr(netdev->dev_addr);
+       eth_hw_addr_random(netdev);
 }
 
 static struct vport *internal_dev_create(const struct vport_parms *parms)