Merge branch 'mlx4-fixes'
Or Gerlitz says: ==================== Mellanox 10/40G mlx4 driver fixes for 4.5-rc6 This series contains two fixes for the SRIOV HW LAG that was introduced in 4.5-rc1 and one fix that allows to revoke the administrative MAC that was assigned to VF through the PF. The VF mac fix needs to go for stable too. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
11351bf762
@ -2245,7 +2245,7 @@ static int mlx4_en_set_vf_mac(struct net_device *dev, int queue, u8 *mac)
|
||||
struct mlx4_en_dev *mdev = en_priv->mdev;
|
||||
u64 mac_u64 = mlx4_mac_to_u64(mac);
|
||||
|
||||
if (!is_valid_ether_addr(mac))
|
||||
if (is_multicast_ether_addr(mac))
|
||||
return -EINVAL;
|
||||
|
||||
return mlx4_set_vf_mac(mdev->dev, en_priv->port, queue, mac_u64);
|
||||
|
@ -1256,6 +1256,7 @@ err_set_port:
|
||||
static int mlx4_mf_bond(struct mlx4_dev *dev)
|
||||
{
|
||||
int err = 0;
|
||||
int nvfs;
|
||||
struct mlx4_slaves_pport slaves_port1;
|
||||
struct mlx4_slaves_pport slaves_port2;
|
||||
DECLARE_BITMAP(slaves_port_1_2, MLX4_MFUNC_MAX);
|
||||
@ -1272,11 +1273,18 @@ static int mlx4_mf_bond(struct mlx4_dev *dev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* number of virtual functions is number of total functions minus one
|
||||
* physical function for each port.
|
||||
*/
|
||||
nvfs = bitmap_weight(slaves_port1.slaves, dev->persist->num_vfs + 1) +
|
||||
bitmap_weight(slaves_port2.slaves, dev->persist->num_vfs + 1) - 2;
|
||||
|
||||
/* limit on maximum allowed VFs */
|
||||
if ((bitmap_weight(slaves_port1.slaves, dev->persist->num_vfs + 1) +
|
||||
bitmap_weight(slaves_port2.slaves, dev->persist->num_vfs + 1)) >
|
||||
MAX_MF_BOND_ALLOWED_SLAVES)
|
||||
if (nvfs > MAX_MF_BOND_ALLOWED_SLAVES) {
|
||||
mlx4_warn(dev, "HA mode is not supported for %d VFs (max %d are allowed)\n",
|
||||
nvfs, MAX_MF_BOND_ALLOWED_SLAVES);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (dev->caps.steering_mode != MLX4_STEERING_MODE_DEVICE_MANAGED) {
|
||||
mlx4_warn(dev, "HA mode unsupported for NON DMFS steering\n");
|
||||
|
@ -193,10 +193,10 @@ int __mlx4_register_mac(struct mlx4_dev *dev, u8 port, u64 mac)
|
||||
if (need_mf_bond) {
|
||||
if (port == 1) {
|
||||
mutex_lock(&table->mutex);
|
||||
mutex_lock(&dup_table->mutex);
|
||||
mutex_lock_nested(&dup_table->mutex, SINGLE_DEPTH_NESTING);
|
||||
} else {
|
||||
mutex_lock(&dup_table->mutex);
|
||||
mutex_lock(&table->mutex);
|
||||
mutex_lock_nested(&table->mutex, SINGLE_DEPTH_NESTING);
|
||||
}
|
||||
} else {
|
||||
mutex_lock(&table->mutex);
|
||||
@ -389,10 +389,10 @@ void __mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, u64 mac)
|
||||
if (dup) {
|
||||
if (port == 1) {
|
||||
mutex_lock(&table->mutex);
|
||||
mutex_lock(&dup_table->mutex);
|
||||
mutex_lock_nested(&dup_table->mutex, SINGLE_DEPTH_NESTING);
|
||||
} else {
|
||||
mutex_lock(&dup_table->mutex);
|
||||
mutex_lock(&table->mutex);
|
||||
mutex_lock_nested(&table->mutex, SINGLE_DEPTH_NESTING);
|
||||
}
|
||||
} else {
|
||||
mutex_lock(&table->mutex);
|
||||
@ -479,10 +479,10 @@ int __mlx4_replace_mac(struct mlx4_dev *dev, u8 port, int qpn, u64 new_mac)
|
||||
if (dup) {
|
||||
if (port == 1) {
|
||||
mutex_lock(&table->mutex);
|
||||
mutex_lock(&dup_table->mutex);
|
||||
mutex_lock_nested(&dup_table->mutex, SINGLE_DEPTH_NESTING);
|
||||
} else {
|
||||
mutex_lock(&dup_table->mutex);
|
||||
mutex_lock(&table->mutex);
|
||||
mutex_lock_nested(&table->mutex, SINGLE_DEPTH_NESTING);
|
||||
}
|
||||
} else {
|
||||
mutex_lock(&table->mutex);
|
||||
@ -588,10 +588,10 @@ int __mlx4_register_vlan(struct mlx4_dev *dev, u8 port, u16 vlan,
|
||||
if (need_mf_bond) {
|
||||
if (port == 1) {
|
||||
mutex_lock(&table->mutex);
|
||||
mutex_lock(&dup_table->mutex);
|
||||
mutex_lock_nested(&dup_table->mutex, SINGLE_DEPTH_NESTING);
|
||||
} else {
|
||||
mutex_lock(&dup_table->mutex);
|
||||
mutex_lock(&table->mutex);
|
||||
mutex_lock_nested(&table->mutex, SINGLE_DEPTH_NESTING);
|
||||
}
|
||||
} else {
|
||||
mutex_lock(&table->mutex);
|
||||
@ -764,10 +764,10 @@ void __mlx4_unregister_vlan(struct mlx4_dev *dev, u8 port, u16 vlan)
|
||||
if (dup) {
|
||||
if (port == 1) {
|
||||
mutex_lock(&table->mutex);
|
||||
mutex_lock(&dup_table->mutex);
|
||||
mutex_lock_nested(&dup_table->mutex, SINGLE_DEPTH_NESTING);
|
||||
} else {
|
||||
mutex_lock(&dup_table->mutex);
|
||||
mutex_lock(&table->mutex);
|
||||
mutex_lock_nested(&table->mutex, SINGLE_DEPTH_NESTING);
|
||||
}
|
||||
} else {
|
||||
mutex_lock(&table->mutex);
|
||||
|
Loading…
Reference in New Issue
Block a user