spin_lock(&dev->addr_list_lock);
 }
 
+static inline void netif_addr_lock_nested(struct net_device *dev)
+{
+       spin_lock_nested(&dev->addr_list_lock, SINGLE_DEPTH_NESTING);
+}
+
 static inline void netif_addr_lock_bh(struct net_device *dev)
 {
        spin_lock_bh(&dev->addr_list_lock);
 
        if (to->addr_len != from->addr_len)
                return -EINVAL;
 
-       netif_addr_lock_bh(to);
+       netif_addr_lock_nested(to);
        err = __hw_addr_sync(&to->uc, &from->uc, to->addr_len);
        if (!err)
                __dev_set_rx_mode(to);
-       netif_addr_unlock_bh(to);
+       netif_addr_unlock(to);
        return err;
 }
 EXPORT_SYMBOL(dev_uc_sync);
                return;
 
        netif_addr_lock_bh(from);
-       netif_addr_lock(to);
+       netif_addr_lock_nested(to);
        __hw_addr_unsync(&to->uc, &from->uc, to->addr_len);
        __dev_set_rx_mode(to);
        netif_addr_unlock(to);
        if (to->addr_len != from->addr_len)
                return -EINVAL;
 
-       netif_addr_lock_bh(to);
+       netif_addr_lock_nested(to);
        err = __hw_addr_sync(&to->mc, &from->mc, to->addr_len);
        if (!err)
                __dev_set_rx_mode(to);
-       netif_addr_unlock_bh(to);
+       netif_addr_unlock(to);
        return err;
 }
 EXPORT_SYMBOL(dev_mc_sync);
                return;
 
        netif_addr_lock_bh(from);
-       netif_addr_lock(to);
+       netif_addr_lock_nested(to);
        __hw_addr_unsync(&to->mc, &from->mc, to->addr_len);
        __dev_set_rx_mode(to);
        netif_addr_unlock(to);