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: David Ahern <dsa@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
b3208b2024
commit
453d39329a
@ -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,
|
|||||||
&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,
|
|||||||
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);
|
||||||
|
Reference in New Issue
Block a user