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

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
...@@ -127,14 +127,7 @@ void ib_cache_release_one(struct ib_device *device); ...@@ -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, static inline bool rdma_is_upper_dev_rcu(struct net_device *dev,
struct net_device *upper) struct net_device *upper)
{ {
struct net_device *_upper = NULL; return netdev_has_upper_dev_all_rcu(dev, upper);
struct list_head *iter;
netdev_for_each_all_upper_dev_rcu(dev, _upper, iter)
if (_upper == upper)
break;
return _upper == upper;
} }
int addr_init(void); int addr_init(void);
......
...@@ -437,6 +437,28 @@ static void callback_for_addr_gid_device_scan(struct ib_device *device, ...@@ -437,6 +437,28 @@ static void callback_for_addr_gid_device_scan(struct ib_device *device,
&parsed->gid_attr); &parsed->gid_attr);
} }
struct upper_list {
struct list_head list;
struct net_device *upper;
};
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");
return 0;
}
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, static void handle_netdev_upper(struct ib_device *ib_dev, u8 port,
void *cookie, void *cookie,
void (*handle_netdev)(struct ib_device *ib_dev, void (*handle_netdev)(struct ib_device *ib_dev,
...@@ -444,30 +466,12 @@ static void handle_netdev_upper(struct ib_device *ib_dev, u8 port, ...@@ -444,30 +466,12 @@ static void handle_netdev_upper(struct ib_device *ib_dev, u8 port,
struct net_device *ndev)) struct net_device *ndev))
{ {
struct net_device *ndev = (struct net_device *)cookie; 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_iter;
struct upper_list *upper_temp; struct upper_list *upper_temp;
LIST_HEAD(upper_list); LIST_HEAD(upper_list);
rcu_read_lock(); rcu_read_lock();
netdev_for_each_all_upper_dev_rcu(ndev, upper, iter) { netdev_walk_all_upper_dev_rcu(ndev, netdev_upper_walk, &upper_list);
struct upper_list *entry = kmalloc(sizeof(*entry),
GFP_ATOMIC);
if (!entry) {
pr_info("roce_gid_mgmt: couldn't allocate entry to delete ndev\n");
continue;
}
list_add_tail(&entry->list, &upper_list);
dev_hold(upper);
entry->upper = upper;
}
rcu_read_unlock(); rcu_read_unlock();
handle_netdev(ib_dev, port, ndev); handle_netdev(ib_dev, port, ndev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment