Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b9e40857 authored by David S. Miller's avatar David S. Miller
Browse files

netdev: Do not use TX lock to protect address lists.



Now that we have a specific lock to protect the network
device unicast and multicast lists, remove extraneous
grabs of the TX lock in cases where the code only needs
address list protection.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e308a5d8
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -774,7 +774,6 @@ void ipoib_mcast_restart_task(struct work_struct *work)
	ipoib_mcast_stop_thread(dev, 0);

	local_irq_save(flags);
	netif_tx_lock(dev);
	netif_addr_lock(dev);
	spin_lock(&priv->lock);

@@ -853,7 +852,6 @@ void ipoib_mcast_restart_task(struct work_struct *work)

	spin_unlock(&priv->lock);
	netif_addr_unlock(dev);
	netif_tx_unlock(dev);
	local_irq_restore(flags);

	/* We have to cancel outside of the spinlock */
+2 −4
Original line number Diff line number Diff line
@@ -1133,8 +1133,7 @@ static void wq_set_multicast_list (struct work_struct *work)

	dvb_net_feed_stop(dev);
	priv->rx_mode = RX_MODE_UNI;
	netif_tx_lock_bh(dev);
	netif_addr_lock(dev);
	netif_addr_lock_bh(dev);

	if (dev->flags & IFF_PROMISC) {
		dprintk("%s: promiscuous mode\n", dev->name);
@@ -1159,8 +1158,7 @@ static void wq_set_multicast_list (struct work_struct *work)
		}
	}

	netif_addr_unlock(dev);
	netif_tx_unlock_bh(dev);
	netif_addr_unlock_bh(dev);
	dvb_net_feed_start(dev);
}

+8 −16
Original line number Diff line number Diff line
@@ -1567,14 +1567,12 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
				goto err_close;
		}

		netif_tx_lock_bh(bond_dev);
		netif_addr_lock(bond_dev);
		netif_addr_lock_bh(bond_dev);
		/* upload master's mc_list to new slave */
		for (dmi = bond_dev->mc_list; dmi; dmi = dmi->next) {
			dev_mc_add (slave_dev, dmi->dmi_addr, dmi->dmi_addrlen, 0);
		}
		netif_addr_unlock(bond_dev);
		netif_tx_unlock_bh(bond_dev);
		netif_addr_unlock_bh(bond_dev);
	}

	if (bond->params.mode == BOND_MODE_8023AD) {
@@ -1938,11 +1936,9 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
		}

		/* flush master's mc_list from slave */
		netif_tx_lock_bh(bond_dev);
		netif_addr_lock(bond_dev);
		netif_addr_lock_bh(bond_dev);
		bond_mc_list_flush(bond_dev, slave_dev);
		netif_addr_unlock(bond_dev);
		netif_tx_unlock_bh(bond_dev);
		netif_addr_unlock_bh(bond_dev);
	}

	netdev_set_master(slave_dev, NULL);
@@ -2063,11 +2059,9 @@ static int bond_release_all(struct net_device *bond_dev)
			}

			/* flush master's mc_list from slave */
			netif_tx_lock_bh(bond_dev);
			netif_addr_lock(bond_dev);
			netif_addr_lock_bh(bond_dev);
			bond_mc_list_flush(bond_dev, slave_dev);
			netif_addr_unlock(bond_dev);
			netif_tx_unlock_bh(bond_dev);
			netif_addr_unlock_bh(bond_dev);
		}

		netdev_set_master(slave_dev, NULL);
@@ -4679,11 +4673,9 @@ static void bond_free_all(void)
		struct net_device *bond_dev = bond->dev;

		bond_work_cancel_all(bond);
		netif_tx_lock_bh(bond_dev);
		netif_addr_lock(bond_dev);
		netif_addr_lock_bh(bond_dev);
		bond_mc_list_destroy(bond);
		netif_addr_unlock(bond_dev);
		netif_tx_unlock_bh(bond_dev);
		netif_addr_unlock_bh(bond_dev);
		/* Release the bonded slaves */
		bond_release_all(bond_dev);
		bond_destroy(bond);
+2 −4
Original line number Diff line number Diff line
@@ -696,10 +696,8 @@ static void efx_stop_port(struct efx_nic *efx)

	/* Serialise against efx_set_multicast_list() */
	if (efx_dev_registered(efx)) {
		netif_tx_lock_bh(efx->net_dev);
		netif_addr_lock(efx->net_dev);
		netif_addr_unlock(efx->net_dev);
		netif_tx_unlock_bh(efx->net_dev);
		netif_addr_lock_bh(efx->net_dev);
		netif_addr_unlock_bh(efx->net_dev);
	}
}

+2 −4
Original line number Diff line number Diff line
@@ -593,8 +593,7 @@ static int lbs_add_mcast_addrs(struct cmd_ds_mac_multicast_adr *cmd,
	if ((dev->flags & (IFF_UP|IFF_MULTICAST)) != (IFF_UP|IFF_MULTICAST))
		return nr_addrs;

	netif_tx_lock_bh(dev);
	netif_addr_lock(dev);
	netif_addr_lock_bh(dev);
	for (mc_list = dev->mc_list; mc_list; mc_list = mc_list->next) {
		if (mac_in_list(cmd->maclist, nr_addrs, mc_list->dmi_addr)) {
			lbs_deb_net("mcast address %s:%s skipped\n", dev->name,
@@ -609,8 +608,7 @@ static int lbs_add_mcast_addrs(struct cmd_ds_mac_multicast_adr *cmd,
			    print_mac(mac, mc_list->dmi_addr));
		i++;
	}
	netif_addr_unlock(dev);
	netif_tx_unlock_bh(dev);
	netif_addr_unlock_bh(dev);
	if (mc_list)
		return -EOVERFLOW;

Loading