Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a03d4d27 authored by Parav Pandit's avatar Parav Pandit Committed by Jason Gunthorpe
Browse files

IB/core: Consider adding default GIDs of bond device



Now that we correctly delete the default GIDs of lower devices during
CHANGEUPPER event, add default GIDs of the bonding master device.

Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 408f1242
Loading
Loading
Loading
Loading
+23 −1
Original line number Diff line number Diff line
@@ -440,6 +440,17 @@ static void del_default_gids(struct ib_device *ib_dev, u8 port,
				     IB_CACHE_GID_DEFAULT_MODE_DELETE);
}

static void add_default_gids(struct ib_device *ib_dev, u8 port,
			     struct net_device *rdma_ndev, void *cookie)
{
	struct net_device *event_ndev = cookie;
	unsigned long gid_type_mask;

	gid_type_mask = roce_gid_type_mask_support(ib_dev, port);
	ib_cache_gid_set_default_gid(ib_dev, port, event_ndev, gid_type_mask,
				     IB_CACHE_GID_DEFAULT_MODE_SET);
}

static void enum_all_gids_of_dev_cb(struct ib_device *ib_dev,
				    u8 port,
				    struct net_device *rdma_ndev,
@@ -637,6 +648,11 @@ ndev_event_unlink(struct netdev_notifier_changeupper_info *changeupper_info,
	cmds[1] = add_cmd;
}

static const struct netdev_event_work_cmd bonding_default_add_cmd = {
	.cb	= add_default_gids,
	.filter	= is_upper_ndev_bond_master_filter
};

static void
ndev_event_link(struct net_device *event_ndev,
		struct netdev_notifier_changeupper_info *changeupper_info,
@@ -655,9 +671,15 @@ ndev_event_link(struct net_device *event_ndev,
	cmds[0].ndev = event_ndev;
	cmds[0].filter_ndev = changeupper_info->upper_dev;

	cmds[1] = add_cmd_upper_ips;
	/* Now add bonding upper device default GIDs */
	cmds[1] = bonding_default_add_cmd;
	cmds[1].ndev = changeupper_info->upper_dev;
	cmds[1].filter_ndev = changeupper_info->upper_dev;

	/* Now add bonding upper device IP based GIDs */
	cmds[2] = add_cmd_upper_ips;
	cmds[2].ndev = changeupper_info->upper_dev;
	cmds[2].filter_ndev = changeupper_info->upper_dev;
}

static void netdevice_event_changeupper(struct net_device *event_ndev,