diff options
author | David Decotigny <decot@google.com> | 2011-04-13 11:22:31 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-04-15 01:00:32 -0400 |
commit | 5d30530efbb811f875786d788ae1c5d79547c3a4 (patch) | |
tree | ba6c1b23aaf1eb5489ef5e95cc5a45da70bf1321 | |
parent | 65cce19c07756c2b2b51595c967dda93b0727027 (diff) |
net-bonding: Adding support for throughputs larger than 65536 Mbps
This updates the bonding driver to support v2.6.27-rc3 enhancements
(b11f8d8c aka. "ethtool: Expand ethtool_cmd.speed to 32 bits") which
allow to encode the Mbps link speed on 32-bits (Max 4 Pbps) instead of
16 (Max 65536 Mbps).
This patch also attempts to compact struct slave by reordering its
fields.
Signed-off-by: David Decotigny <decot@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/bonding/bond_main.c | 12 | ||||
-rw-r--r-- | drivers/net/bonding/bonding.h | 6 |
2 files changed, 10 insertions, 8 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 4df674bc6f12..ca902ae3f2e5 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -631,7 +631,8 @@ down: | |||
631 | static int bond_update_speed_duplex(struct slave *slave) | 631 | static int bond_update_speed_duplex(struct slave *slave) |
632 | { | 632 | { |
633 | struct net_device *slave_dev = slave->dev; | 633 | struct net_device *slave_dev = slave->dev; |
634 | struct ethtool_cmd etool; | 634 | struct ethtool_cmd etool = { .cmd = ETHTOOL_GSET }; |
635 | u32 slave_speed; | ||
635 | int res; | 636 | int res; |
636 | 637 | ||
637 | /* Fake speed and duplex */ | 638 | /* Fake speed and duplex */ |
@@ -645,7 +646,8 @@ static int bond_update_speed_duplex(struct slave *slave) | |||
645 | if (res < 0) | 646 | if (res < 0) |
646 | return -1; | 647 | return -1; |
647 | 648 | ||
648 | switch (etool.speed) { | 649 | slave_speed = ethtool_cmd_speed(&etool); |
650 | switch (slave_speed) { | ||
649 | case SPEED_10: | 651 | case SPEED_10: |
650 | case SPEED_100: | 652 | case SPEED_100: |
651 | case SPEED_1000: | 653 | case SPEED_1000: |
@@ -663,7 +665,7 @@ static int bond_update_speed_duplex(struct slave *slave) | |||
663 | return -1; | 665 | return -1; |
664 | } | 666 | } |
665 | 667 | ||
666 | slave->speed = etool.speed; | 668 | slave->speed = slave_speed; |
667 | slave->duplex = etool.duplex; | 669 | slave->duplex = etool.duplex; |
668 | 670 | ||
669 | return 0; | 671 | return 0; |
@@ -2493,7 +2495,7 @@ static void bond_miimon_commit(struct bonding *bond) | |||
2493 | 2495 | ||
2494 | bond_update_speed_duplex(slave); | 2496 | bond_update_speed_duplex(slave); |
2495 | 2497 | ||
2496 | pr_info("%s: link status definitely up for interface %s, %d Mbps %s duplex.\n", | 2498 | pr_info("%s: link status definitely up for interface %s, %u Mbps %s duplex.\n", |
2497 | bond->dev->name, slave->dev->name, | 2499 | bond->dev->name, slave->dev->name, |
2498 | slave->speed, slave->duplex ? "full" : "half"); | 2500 | slave->speed, slave->duplex ? "full" : "half"); |
2499 | 2501 | ||
@@ -3339,7 +3341,7 @@ static int bond_slave_netdev_event(unsigned long event, | |||
3339 | 3341 | ||
3340 | slave = bond_get_slave_by_dev(bond, slave_dev); | 3342 | slave = bond_get_slave_by_dev(bond, slave_dev); |
3341 | if (slave) { | 3343 | if (slave) { |
3342 | u16 old_speed = slave->speed; | 3344 | u32 old_speed = slave->speed; |
3343 | u8 old_duplex = slave->duplex; | 3345 | u8 old_duplex = slave->duplex; |
3344 | 3346 | ||
3345 | bond_update_speed_duplex(slave); | 3347 | bond_update_speed_duplex(slave); |
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h index 3ca503e50718..553c764f7407 100644 --- a/drivers/net/bonding/bonding.h +++ b/drivers/net/bonding/bonding.h | |||
@@ -196,12 +196,12 @@ struct slave { | |||
196 | u8 backup:1, /* indicates backup slave. Value corresponds with | 196 | u8 backup:1, /* indicates backup slave. Value corresponds with |
197 | BOND_STATE_ACTIVE and BOND_STATE_BACKUP */ | 197 | BOND_STATE_ACTIVE and BOND_STATE_BACKUP */ |
198 | inactive:1; /* indicates inactive slave */ | 198 | inactive:1; /* indicates inactive slave */ |
199 | u8 duplex; | ||
199 | u32 original_mtu; | 200 | u32 original_mtu; |
200 | u32 link_failure_count; | 201 | u32 link_failure_count; |
201 | u8 perm_hwaddr[ETH_ALEN]; | 202 | u32 speed; |
202 | u16 speed; | ||
203 | u8 duplex; | ||
204 | u16 queue_id; | 203 | u16 queue_id; |
204 | u8 perm_hwaddr[ETH_ALEN]; | ||
205 | struct ad_slave_info ad_info; /* HUGE - better to dynamically alloc */ | 205 | struct ad_slave_info ad_info; /* HUGE - better to dynamically alloc */ |
206 | struct tlb_slave_info tlb_info; | 206 | struct tlb_slave_info tlb_info; |
207 | #ifdef CONFIG_NET_POLL_CONTROLLER | 207 | #ifdef CONFIG_NET_POLL_CONTROLLER |