mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
devlink: Add a helper for getting a nested-in instance
Upcoming code will need to obtain references to locked nested-in devlink instances. Add a helper to lock, reference and return the nested-in instance. Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com> Reviewed-by: Carolina Jubran <cjubran@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/20260701073254.754518-3-tariqt@nvidia.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
3bf4c5970c
commit
9f2d908cc3
|
|
@ -67,6 +67,22 @@ static void __devlink_rel_put(struct devlink_rel *rel)
|
|||
devlink_rel_free(rel);
|
||||
}
|
||||
|
||||
struct devlink *__must_check devlink_nested_in_get_lock(struct devlink *devlink)
|
||||
{
|
||||
devl_assert_locked(devlink);
|
||||
if (!devlink->rel)
|
||||
return NULL;
|
||||
devlink = devlinks_xa_get(devlink->rel->nested_in.devlink_index);
|
||||
if (!devlink)
|
||||
return NULL;
|
||||
devl_lock(devlink);
|
||||
if (devl_is_registered(devlink))
|
||||
return devlink;
|
||||
devl_unlock(devlink);
|
||||
devlink_put(devlink);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void devlink_rel_nested_in_notify_work(struct work_struct *work)
|
||||
{
|
||||
struct devlink_rel *rel = container_of(work, struct devlink_rel,
|
||||
|
|
|
|||
|
|
@ -136,6 +136,10 @@ typedef void devlink_rel_notify_cb_t(struct devlink *devlink, u32 obj_index);
|
|||
typedef void devlink_rel_cleanup_cb_t(struct devlink *devlink, u32 obj_index,
|
||||
u32 rel_index);
|
||||
|
||||
/* Returns the locked+referenced nested-in instance or NULL. */
|
||||
struct devlink *__must_check
|
||||
devlink_nested_in_get_lock(struct devlink *devlink);
|
||||
|
||||
void devlink_rel_nested_in_clear(u32 rel_index);
|
||||
int devlink_rel_nested_in_add(u32 *rel_index, u32 devlink_index,
|
||||
u32 obj_index, devlink_rel_notify_cb_t *notify_cb,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user