RDMA/core: Add iterator over ib_devices
The coming nldev needs to iterate over all IB devices in the system and in order to not expose the ib_devices list outside the devices.c, it is necessary to provide function iterator. Current version is written explicitly for nldev callback to avoid over-engineering at this stage, but it can be easily extended for other types. Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Reviewed-by: Steve Wise <swise@opengridcomputing.com>
This commit is contained in:
parent
3250b4dbd8
commit
8030c8357a
|
@ -102,6 +102,14 @@ void ib_enum_all_roce_netdevs(roce_netdev_filter filter,
|
|||
roce_netdev_callback cb,
|
||||
void *cookie);
|
||||
|
||||
typedef int (*nldev_callback)(struct ib_device *device,
|
||||
struct sk_buff *skb,
|
||||
struct netlink_callback *cb,
|
||||
unsigned int idx);
|
||||
|
||||
int ib_enum_all_devs(nldev_callback nldev_cb, struct sk_buff *skb,
|
||||
struct netlink_callback *cb);
|
||||
|
||||
enum ib_cache_gid_default_mode {
|
||||
IB_CACHE_GID_DEFAULT_MODE_SET,
|
||||
IB_CACHE_GID_DEFAULT_MODE_DELETE
|
||||
|
|
|
@ -892,6 +892,31 @@ void ib_enum_all_roce_netdevs(roce_netdev_filter filter,
|
|||
up_read(&lists_rwsem);
|
||||
}
|
||||
|
||||
/**
|
||||
* ib_enum_all_devs - enumerate all ib_devices
|
||||
* @cb: Callback to call for each found ib_device
|
||||
*
|
||||
* Enumerates all ib_devices and calls callback() on each device.
|
||||
*/
|
||||
int ib_enum_all_devs(nldev_callback nldev_cb, struct sk_buff *skb,
|
||||
struct netlink_callback *cb)
|
||||
{
|
||||
struct ib_device *dev;
|
||||
unsigned int idx = 0;
|
||||
int ret = 0;
|
||||
|
||||
down_read(&lists_rwsem);
|
||||
list_for_each_entry(dev, &device_list, core_list) {
|
||||
ret = nldev_cb(dev, skb, cb, idx);
|
||||
if (ret)
|
||||
break;
|
||||
idx++;
|
||||
}
|
||||
|
||||
up_read(&lists_rwsem);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* ib_query_pkey - Get P_Key table entry
|
||||
* @device:Device to query
|
||||
|
|
Loading…
Reference in New Issue