aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-02-04 19:14:29 -0500
committerDavid S. Miller <davem@davemloft.net>2015-02-04 19:14:29 -0500
commitce388fff3aa446d5a4895f8a757345f53daa200a (patch)
tree93990685d6fdba0784d68bf5ca0dbf523c930bb4 /net
parent251c005a6403933b3405fdc15fca4355e7590b42 (diff)
parentc6215745b66a7fbeeda1a826f94dd864a2ccf654 (diff)
Merge branch 'mlx4-next'
Or Gerlitz says: ==================== Add HA and LAG support to mlx4 RoCE and SRIOV services This series takes advanges of bonding mlx4 Ethernet devices to support a model of High-Availability and Link Aggregation for more environments. The mlx4 driver reacts on netdev events generated by bonding when slave state changes happen by programming a HW V2P (Virt-to-Phys) port table. Bonding was extended to expose these state changes through netdev events. When an mlx4 interface such as the mlx4 IB/RoCE driver is subject to this policy, QPs are created over virtual ports which are mapped to one of the two physical ports. When a failure happens, the re-programming of the V2P table allows traffic to keep flowing. The mlx4 Ethernet driver interfaces are not subject to this policy and act as usual. A 2nd use-case for this model would be to add HA and Link Aggregation support to single ported mlx4 Ethernet VFs. In this case, the PF Ethernet intrfaces are bonded, all the VFs see single port devices (which is supported already today), and VF QPs are subject to V2P. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/core/dev.c20
-rw-r--r--net/core/rtnetlink.c1
2 files changed, 21 insertions, 0 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 1d564d68e31a..ede0b161b115 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5355,6 +5355,26 @@ void netdev_upper_dev_unlink(struct net_device *dev,
5355} 5355}
5356EXPORT_SYMBOL(netdev_upper_dev_unlink); 5356EXPORT_SYMBOL(netdev_upper_dev_unlink);
5357 5357
5358/**
5359 * netdev_bonding_info_change - Dispatch event about slave change
5360 * @dev: device
5361 * @netdev_bonding_info: info to dispatch
5362 *
5363 * Send NETDEV_BONDING_INFO to netdev notifiers with info.
5364 * The caller must hold the RTNL lock.
5365 */
5366void netdev_bonding_info_change(struct net_device *dev,
5367 struct netdev_bonding_info *bonding_info)
5368{
5369 struct netdev_notifier_bonding_info info;
5370
5371 memcpy(&info.bonding_info, bonding_info,
5372 sizeof(struct netdev_bonding_info));
5373 call_netdevice_notifiers_info(NETDEV_BONDING_INFO, dev,
5374 &info.info);
5375}
5376EXPORT_SYMBOL(netdev_bonding_info_change);
5377
5358void netdev_adjacent_add_links(struct net_device *dev) 5378void netdev_adjacent_add_links(struct net_device *dev)
5359{ 5379{
5360 struct netdev_adjacent *iter; 5380 struct netdev_adjacent *iter;
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 673cb4c6f391..4cd5e350d129 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -3180,6 +3180,7 @@ static int rtnetlink_event(struct notifier_block *this, unsigned long event, voi
3180 case NETDEV_UNREGISTER_FINAL: 3180 case NETDEV_UNREGISTER_FINAL:
3181 case NETDEV_RELEASE: 3181 case NETDEV_RELEASE:
3182 case NETDEV_JOIN: 3182 case NETDEV_JOIN:
3183 case NETDEV_BONDING_INFO:
3183 break; 3184 break;
3184 default: 3185 default:
3185 rtmsg_ifinfo(RTM_NEWLINK, dev, 0, GFP_KERNEL); 3186 rtmsg_ifinfo(RTM_NEWLINK, dev, 0, GFP_KERNEL);