diff options
author | Jay Vosburgh <fubar@us.ibm.com> | 2008-11-03 21:16:50 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-11-03 21:16:50 -0500 |
commit | 6cf3f41e6c08bca6641a695449791c38a25f35ff (patch) | |
tree | a4e173960afe6712c112b3ddea1f229a695b7089 /drivers | |
parent | 24f8b2385e03a4f4c8dac513d03b5eaa475822b9 (diff) |
bonding, net: Move last_rx update into bonding recv logic
The only user of the net_device->last_rx field is bonding.
This patch adds a conditional update of last_rx to the bonding special
logic in skb_bond_should_drop, causing last_rx to only be updated when
the ARP monitor is running.
This frees network device drivers from the necessity of
updating last_rx, which can have cache line thrash issues.
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/bonding/bond_main.c | 2 | ||||
-rw-r--r-- | drivers/net/bonding/bond_sysfs.c | 3 |
2 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 56c823c175fe..39575d764974 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -4564,6 +4564,8 @@ static int bond_init(struct net_device *bond_dev, struct bond_params *params) | |||
4564 | bond_dev->tx_queue_len = 0; | 4564 | bond_dev->tx_queue_len = 0; |
4565 | bond_dev->flags |= IFF_MASTER|IFF_MULTICAST; | 4565 | bond_dev->flags |= IFF_MASTER|IFF_MULTICAST; |
4566 | bond_dev->priv_flags |= IFF_BONDING; | 4566 | bond_dev->priv_flags |= IFF_BONDING; |
4567 | if (bond->params.arp_interval) | ||
4568 | bond_dev->priv_flags |= IFF_MASTER_ARPMON; | ||
4567 | 4569 | ||
4568 | /* At first, we block adding VLANs. That's the only way to | 4570 | /* At first, we block adding VLANs. That's the only way to |
4569 | * prevent problems that occur when adding VLANs over an | 4571 | * prevent problems that occur when adding VLANs over an |
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c index 296a865b75d2..e400d7dfdfc8 100644 --- a/drivers/net/bonding/bond_sysfs.c +++ b/drivers/net/bonding/bond_sysfs.c | |||
@@ -620,6 +620,8 @@ static ssize_t bonding_store_arp_interval(struct device *d, | |||
620 | ": %s: Setting ARP monitoring interval to %d.\n", | 620 | ": %s: Setting ARP monitoring interval to %d.\n", |
621 | bond->dev->name, new_value); | 621 | bond->dev->name, new_value); |
622 | bond->params.arp_interval = new_value; | 622 | bond->params.arp_interval = new_value; |
623 | if (bond->params.arp_interval) | ||
624 | bond->dev->priv_flags |= IFF_MASTER_ARPMON; | ||
623 | if (bond->params.miimon) { | 625 | if (bond->params.miimon) { |
624 | printk(KERN_INFO DRV_NAME | 626 | printk(KERN_INFO DRV_NAME |
625 | ": %s: ARP monitoring cannot be used with MII monitoring. " | 627 | ": %s: ARP monitoring cannot be used with MII monitoring. " |
@@ -1039,6 +1041,7 @@ static ssize_t bonding_store_miimon(struct device *d, | |||
1039 | "ARP monitoring. Disabling ARP monitoring...\n", | 1041 | "ARP monitoring. Disabling ARP monitoring...\n", |
1040 | bond->dev->name); | 1042 | bond->dev->name); |
1041 | bond->params.arp_interval = 0; | 1043 | bond->params.arp_interval = 0; |
1044 | bond->dev->priv_flags &= ~IFF_MASTER_ARPMON; | ||
1042 | if (bond->params.arp_validate) { | 1045 | if (bond->params.arp_validate) { |
1043 | bond_unregister_arp(bond); | 1046 | bond_unregister_arp(bond); |
1044 | bond->params.arp_validate = | 1047 | bond->params.arp_validate = |