devlink: Add support for dynamic table size
Up until now the dpipe table's size was static and known at registration time. The host table does not have constant size and it is resized in dynamic manner. In order to support this behavior the size is changed to be obtained dynamically via an op. This patch also adjust the current dpipe table for the new API. Signed-off-by: Arkadi Sharshevsky <arkadis@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
23ca5ec3af
commit
ffd3cdccf2
@@ -1647,13 +1647,15 @@ static int devlink_dpipe_table_put(struct sk_buff *skb,
|
||||
struct devlink_dpipe_table *table)
|
||||
{
|
||||
struct nlattr *table_attr;
|
||||
u64 table_size;
|
||||
|
||||
table_size = table->table_ops->size_get(table->priv);
|
||||
table_attr = nla_nest_start(skb, DEVLINK_ATTR_DPIPE_TABLE);
|
||||
if (!table_attr)
|
||||
return -EMSGSIZE;
|
||||
|
||||
if (nla_put_string(skb, DEVLINK_ATTR_DPIPE_TABLE_NAME, table->name) ||
|
||||
nla_put_u64_64bit(skb, DEVLINK_ATTR_DPIPE_TABLE_SIZE, table->size,
|
||||
nla_put_u64_64bit(skb, DEVLINK_ATTR_DPIPE_TABLE_SIZE, table_size,
|
||||
DEVLINK_ATTR_PAD))
|
||||
goto nla_put_failure;
|
||||
if (nla_put_u8(skb, DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED,
|
||||
@@ -2718,20 +2720,21 @@ EXPORT_SYMBOL_GPL(devlink_dpipe_table_counter_enabled);
|
||||
* @table_name: table name
|
||||
* @table_ops: table ops
|
||||
* @priv: priv
|
||||
* @size: size
|
||||
* @counter_control_extern: external control for counters
|
||||
*/
|
||||
int devlink_dpipe_table_register(struct devlink *devlink,
|
||||
const char *table_name,
|
||||
struct devlink_dpipe_table_ops *table_ops,
|
||||
void *priv, u64 size,
|
||||
bool counter_control_extern)
|
||||
void *priv, bool counter_control_extern)
|
||||
{
|
||||
struct devlink_dpipe_table *table;
|
||||
|
||||
if (devlink_dpipe_table_find(&devlink->dpipe_table_list, table_name))
|
||||
return -EEXIST;
|
||||
|
||||
if (WARN_ON(!table_ops->size_get))
|
||||
return -EINVAL;
|
||||
|
||||
table = kzalloc(sizeof(*table), GFP_KERNEL);
|
||||
if (!table)
|
||||
return -ENOMEM;
|
||||
@@ -2739,7 +2742,6 @@ int devlink_dpipe_table_register(struct devlink *devlink,
|
||||
table->name = table_name;
|
||||
table->table_ops = table_ops;
|
||||
table->priv = priv;
|
||||
table->size = size;
|
||||
table->counter_control_extern = counter_control_extern;
|
||||
|
||||
mutex_lock(&devlink_mutex);
|
||||
|
Reference in New Issue
Block a user