mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
RDMA/core: Add and expose static device index
This patch adds static device index in similar fashion to already available in netdev world (struct net->ifindex). In downstream patches, the RDMA nelink will use this idx-to-ib_device conversion, so as part of this commit, we are exposing the translation function to be visible for IB/core users. Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
This commit is contained in:
parent
8030c8357a
commit
ecc82c53f9
3 changed files with 43 additions and 1 deletions
|
@ -309,4 +309,9 @@ static inline int ib_mad_enforce_security(struct ib_mad_agent_private *map,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct ib_device *__ib_device_get_by_index(u32 ifindex);
|
||||||
|
/* RDMA device netlink */
|
||||||
|
void nldev_init(void);
|
||||||
|
void nldev_exit(void);
|
||||||
#endif /* _CORE_PRIV_H */
|
#endif /* _CORE_PRIV_H */
|
||||||
|
|
|
@ -134,6 +134,17 @@ static int ib_device_check_mandatory(struct ib_device *device)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ib_device *__ib_device_get_by_index(u32 index)
|
||||||
|
{
|
||||||
|
struct ib_device *device;
|
||||||
|
|
||||||
|
list_for_each_entry(device, &device_list, core_list)
|
||||||
|
if (device->index == index)
|
||||||
|
return device;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static struct ib_device *__ib_device_get_by_name(const char *name)
|
static struct ib_device *__ib_device_get_by_name(const char *name)
|
||||||
{
|
{
|
||||||
struct ib_device *device;
|
struct ib_device *device;
|
||||||
|
@ -145,7 +156,6 @@ static struct ib_device *__ib_device_get_by_name(const char *name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int alloc_name(char *name)
|
static int alloc_name(char *name)
|
||||||
{
|
{
|
||||||
unsigned long *inuse;
|
unsigned long *inuse;
|
||||||
|
@ -394,6 +404,30 @@ static int ib_security_change(struct notifier_block *nb, unsigned long event,
|
||||||
return NOTIFY_OK;
|
return NOTIFY_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __dev_new_index - allocate an device index
|
||||||
|
*
|
||||||
|
* Returns a suitable unique value for a new device interface
|
||||||
|
* number. It assumes that there are less than 2^32-1 ib devices
|
||||||
|
* will be present in the system.
|
||||||
|
*/
|
||||||
|
static u32 __dev_new_index(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The device index to allow stable naming.
|
||||||
|
* Similar to struct net -> ifindex.
|
||||||
|
*/
|
||||||
|
static u32 index;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
if (!(++index))
|
||||||
|
index = 1;
|
||||||
|
|
||||||
|
if (!__ib_device_get_by_index(index))
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ib_register_device - Register an IB device with IB core
|
* ib_register_device - Register an IB device with IB core
|
||||||
* @device:Device to register
|
* @device:Device to register
|
||||||
|
@ -492,6 +526,7 @@ int ib_register_device(struct ib_device *device,
|
||||||
if (client->add && !add_client_context(device, client))
|
if (client->add && !add_client_context(device, client))
|
||||||
client->add(device);
|
client->add(device);
|
||||||
|
|
||||||
|
device->index = __dev_new_index();
|
||||||
down_write(&lists_rwsem);
|
down_write(&lists_rwsem);
|
||||||
list_add_tail(&device->core_list, &device_list);
|
list_add_tail(&device->core_list, &device_list);
|
||||||
up_write(&lists_rwsem);
|
up_write(&lists_rwsem);
|
||||||
|
|
|
@ -2298,6 +2298,8 @@ struct ib_device {
|
||||||
struct rdmacg_device cg_device;
|
struct rdmacg_device cg_device;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
u32 index;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The following mandatory functions are used only at device
|
* The following mandatory functions are used only at device
|
||||||
* registration. Keep functions such as these at the end of this
|
* registration. Keep functions such as these at the end of this
|
||||||
|
|
Loading…
Add table
Reference in a new issue