net: devlink: add unlocked variants of devlink_sb*() functions
Add unlocked variants of devlink_sb*() functions to be used in drivers called-in with devlink->lock held. Signed-off-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
c223d6a4bf
commit
755cfa69c4
@ -1579,10 +1579,15 @@ void devlink_linecard_provision_clear(struct devlink_linecard *linecard);
|
|||||||
void devlink_linecard_provision_fail(struct devlink_linecard *linecard);
|
void devlink_linecard_provision_fail(struct devlink_linecard *linecard);
|
||||||
void devlink_linecard_activate(struct devlink_linecard *linecard);
|
void devlink_linecard_activate(struct devlink_linecard *linecard);
|
||||||
void devlink_linecard_deactivate(struct devlink_linecard *linecard);
|
void devlink_linecard_deactivate(struct devlink_linecard *linecard);
|
||||||
|
int devl_sb_register(struct devlink *devlink, unsigned int sb_index,
|
||||||
|
u32 size, u16 ingress_pools_count,
|
||||||
|
u16 egress_pools_count, u16 ingress_tc_count,
|
||||||
|
u16 egress_tc_count);
|
||||||
int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
|
int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
|
||||||
u32 size, u16 ingress_pools_count,
|
u32 size, u16 ingress_pools_count,
|
||||||
u16 egress_pools_count, u16 ingress_tc_count,
|
u16 egress_pools_count, u16 ingress_tc_count,
|
||||||
u16 egress_tc_count);
|
u16 egress_tc_count);
|
||||||
|
void devl_sb_unregister(struct devlink *devlink, unsigned int sb_index);
|
||||||
void devlink_sb_unregister(struct devlink *devlink, unsigned int sb_index);
|
void devlink_sb_unregister(struct devlink *devlink, unsigned int sb_index);
|
||||||
int devlink_dpipe_table_register(struct devlink *devlink,
|
int devlink_dpipe_table_register(struct devlink *devlink,
|
||||||
const char *table_name,
|
const char *table_name,
|
||||||
|
@ -10375,25 +10375,21 @@ void devlink_linecard_deactivate(struct devlink_linecard *linecard)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(devlink_linecard_deactivate);
|
EXPORT_SYMBOL_GPL(devlink_linecard_deactivate);
|
||||||
|
|
||||||
int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
|
int devl_sb_register(struct devlink *devlink, unsigned int sb_index,
|
||||||
u32 size, u16 ingress_pools_count,
|
u32 size, u16 ingress_pools_count,
|
||||||
u16 egress_pools_count, u16 ingress_tc_count,
|
u16 egress_pools_count, u16 ingress_tc_count,
|
||||||
u16 egress_tc_count)
|
u16 egress_tc_count)
|
||||||
{
|
{
|
||||||
struct devlink_sb *devlink_sb;
|
struct devlink_sb *devlink_sb;
|
||||||
int err = 0;
|
|
||||||
|
|
||||||
devl_lock(devlink);
|
lockdep_assert_held(&devlink->lock);
|
||||||
if (devlink_sb_index_exists(devlink, sb_index)) {
|
|
||||||
err = -EEXIST;
|
if (devlink_sb_index_exists(devlink, sb_index))
|
||||||
goto unlock;
|
return -EEXIST;
|
||||||
}
|
|
||||||
|
|
||||||
devlink_sb = kzalloc(sizeof(*devlink_sb), GFP_KERNEL);
|
devlink_sb = kzalloc(sizeof(*devlink_sb), GFP_KERNEL);
|
||||||
if (!devlink_sb) {
|
if (!devlink_sb)
|
||||||
err = -ENOMEM;
|
return -ENOMEM;
|
||||||
goto unlock;
|
|
||||||
}
|
|
||||||
devlink_sb->index = sb_index;
|
devlink_sb->index = sb_index;
|
||||||
devlink_sb->size = size;
|
devlink_sb->size = size;
|
||||||
devlink_sb->ingress_pools_count = ingress_pools_count;
|
devlink_sb->ingress_pools_count = ingress_pools_count;
|
||||||
@ -10401,23 +10397,45 @@ int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
|
|||||||
devlink_sb->ingress_tc_count = ingress_tc_count;
|
devlink_sb->ingress_tc_count = ingress_tc_count;
|
||||||
devlink_sb->egress_tc_count = egress_tc_count;
|
devlink_sb->egress_tc_count = egress_tc_count;
|
||||||
list_add_tail(&devlink_sb->list, &devlink->sb_list);
|
list_add_tail(&devlink_sb->list, &devlink->sb_list);
|
||||||
unlock:
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(devl_sb_register);
|
||||||
|
|
||||||
|
int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
|
||||||
|
u32 size, u16 ingress_pools_count,
|
||||||
|
u16 egress_pools_count, u16 ingress_tc_count,
|
||||||
|
u16 egress_tc_count)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
devl_lock(devlink);
|
||||||
|
err = devl_sb_register(devlink, sb_index, size, ingress_pools_count,
|
||||||
|
egress_pools_count, ingress_tc_count,
|
||||||
|
egress_tc_count);
|
||||||
devl_unlock(devlink);
|
devl_unlock(devlink);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(devlink_sb_register);
|
EXPORT_SYMBOL_GPL(devlink_sb_register);
|
||||||
|
|
||||||
void devlink_sb_unregister(struct devlink *devlink, unsigned int sb_index)
|
void devl_sb_unregister(struct devlink *devlink, unsigned int sb_index)
|
||||||
{
|
{
|
||||||
struct devlink_sb *devlink_sb;
|
struct devlink_sb *devlink_sb;
|
||||||
|
|
||||||
devl_lock(devlink);
|
lockdep_assert_held(&devlink->lock);
|
||||||
|
|
||||||
devlink_sb = devlink_sb_get_by_index(devlink, sb_index);
|
devlink_sb = devlink_sb_get_by_index(devlink, sb_index);
|
||||||
WARN_ON(!devlink_sb);
|
WARN_ON(!devlink_sb);
|
||||||
list_del(&devlink_sb->list);
|
list_del(&devlink_sb->list);
|
||||||
devl_unlock(devlink);
|
|
||||||
kfree(devlink_sb);
|
kfree(devlink_sb);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(devl_sb_unregister);
|
||||||
|
|
||||||
|
void devlink_sb_unregister(struct devlink *devlink, unsigned int sb_index)
|
||||||
|
{
|
||||||
|
devl_lock(devlink);
|
||||||
|
devl_sb_unregister(devlink, sb_index);
|
||||||
|
devl_unlock(devlink);
|
||||||
|
}
|
||||||
EXPORT_SYMBOL_GPL(devlink_sb_unregister);
|
EXPORT_SYMBOL_GPL(devlink_sb_unregister);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user