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

Commit 453d3932 authored by David Ahern's avatar David Ahern Committed by David S. Miller
Browse files

IB/core: Flip to the new dev walk API



Convert rdma_is_upper_dev_rcu, handle_netdev_upper and
ipoib_get_net_dev_match_addr to the new upper device walk API.
This is just a code conversion; no functional change is intended.

v2
- removed typecast of data

Signed-off-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b3208b20
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -127,14 +127,7 @@ void ib_cache_release_one(struct ib_device *device);
static inline bool rdma_is_upper_dev_rcu(struct net_device *dev,
					 struct net_device *upper)
{
	struct net_device *_upper = NULL;
	struct list_head *iter;

	netdev_for_each_all_upper_dev_rcu(dev, _upper, iter)
		if (_upper == upper)
			break;

	return _upper == upper;
	return netdev_has_upper_dev_all_rcu(dev, upper);
}

int addr_init(void);
+23 −19
Original line number Diff line number Diff line
@@ -437,37 +437,41 @@ static void callback_for_addr_gid_device_scan(struct ib_device *device,
			  &parsed->gid_attr);
}

static void handle_netdev_upper(struct ib_device *ib_dev, u8 port,
				void *cookie,
				void (*handle_netdev)(struct ib_device *ib_dev,
						      u8 port,
						      struct net_device *ndev))
{
	struct net_device *ndev = (struct net_device *)cookie;
struct upper_list {
	struct list_head list;
	struct net_device *upper;
};
	struct net_device *upper;
	struct list_head *iter;
	struct upper_list *upper_iter;
	struct upper_list *upper_temp;
	LIST_HEAD(upper_list);

	rcu_read_lock();
	netdev_for_each_all_upper_dev_rcu(ndev, upper, iter) {
		struct upper_list *entry = kmalloc(sizeof(*entry),
						   GFP_ATOMIC);
static int netdev_upper_walk(struct net_device *upper, void *data)
{
	struct upper_list *entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
	struct list_head *upper_list = data;

	if (!entry) {
		pr_info("roce_gid_mgmt: couldn't allocate entry to delete ndev\n");
			continue;
		return 0;
	}

		list_add_tail(&entry->list, &upper_list);
	list_add_tail(&entry->list, upper_list);
	dev_hold(upper);
	entry->upper = upper;

	return 0;
}

static void handle_netdev_upper(struct ib_device *ib_dev, u8 port,
				void *cookie,
				void (*handle_netdev)(struct ib_device *ib_dev,
						      u8 port,
						      struct net_device *ndev))
{
	struct net_device *ndev = (struct net_device *)cookie;
	struct upper_list *upper_iter;
	struct upper_list *upper_temp;
	LIST_HEAD(upper_list);

	rcu_read_lock();
	netdev_walk_all_upper_dev_rcu(ndev, netdev_upper_walk, &upper_list);
	rcu_read_unlock();

	handle_netdev(ib_dev, port, ndev);