diff options
| author | David S. Miller <davem@davemloft.net> | 2015-02-04 19:14:29 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-02-04 19:14:29 -0500 |
| commit | ce388fff3aa446d5a4895f8a757345f53daa200a (patch) | |
| tree | 93990685d6fdba0784d68bf5ca0dbf523c930bb4 /net/core/dev.c | |
| parent | 251c005a6403933b3405fdc15fca4355e7590b42 (diff) | |
| parent | c6215745b66a7fbeeda1a826f94dd864a2ccf654 (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/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 20 |
1 files changed, 20 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 | } |
| 5356 | EXPORT_SYMBOL(netdev_upper_dev_unlink); | 5356 | EXPORT_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 | */ | ||
| 5366 | void 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 | } | ||
| 5376 | EXPORT_SYMBOL(netdev_bonding_info_change); | ||
| 5377 | |||
| 5358 | void netdev_adjacent_add_links(struct net_device *dev) | 5378 | void netdev_adjacent_add_links(struct net_device *dev) |
| 5359 | { | 5379 | { |
| 5360 | struct netdev_adjacent *iter; | 5380 | struct netdev_adjacent *iter; |
