Commit c496daeb authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

devlink: remove duplicate port notification

The notification about created port is send from devl_port_register()
function called from ops->port_new(). No need to send it again here,
so remove the call and the helper function.
Signed-off-by: default avatarJiri Pirko <jiri@nvidia.com>
Reviewed-by: default avatarSimon Horman <simon.horman@corigine.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 47469d2d
...@@ -282,8 +282,7 @@ int mlx5_devlink_sf_port_fn_state_set(struct devlink_port *dl_port, ...@@ -282,8 +282,7 @@ int mlx5_devlink_sf_port_fn_state_set(struct devlink_port *dl_port,
static int mlx5_sf_add(struct mlx5_core_dev *dev, struct mlx5_sf_table *table, static int mlx5_sf_add(struct mlx5_core_dev *dev, struct mlx5_sf_table *table,
const struct devlink_port_new_attrs *new_attr, const struct devlink_port_new_attrs *new_attr,
struct netlink_ext_ack *extack, struct netlink_ext_ack *extack)
unsigned int *new_port_index)
{ {
struct mlx5_eswitch *esw = dev->priv.eswitch; struct mlx5_eswitch *esw = dev->priv.eswitch;
struct mlx5_sf *sf; struct mlx5_sf *sf;
...@@ -297,7 +296,6 @@ static int mlx5_sf_add(struct mlx5_core_dev *dev, struct mlx5_sf_table *table, ...@@ -297,7 +296,6 @@ static int mlx5_sf_add(struct mlx5_core_dev *dev, struct mlx5_sf_table *table,
new_attr->controller, new_attr->sfnum); new_attr->controller, new_attr->sfnum);
if (err) if (err)
goto esw_err; goto esw_err;
*new_port_index = sf->port_index;
trace_mlx5_sf_add(dev, sf->port_index, sf->controller, sf->hw_fn_id, new_attr->sfnum); trace_mlx5_sf_add(dev, sf->port_index, sf->controller, sf->hw_fn_id, new_attr->sfnum);
return 0; return 0;
...@@ -338,8 +336,7 @@ mlx5_sf_new_check_attr(struct mlx5_core_dev *dev, const struct devlink_port_new_ ...@@ -338,8 +336,7 @@ mlx5_sf_new_check_attr(struct mlx5_core_dev *dev, const struct devlink_port_new_
int mlx5_devlink_sf_port_new(struct devlink *devlink, int mlx5_devlink_sf_port_new(struct devlink *devlink,
const struct devlink_port_new_attrs *new_attr, const struct devlink_port_new_attrs *new_attr,
struct netlink_ext_ack *extack, struct netlink_ext_ack *extack)
unsigned int *new_port_index)
{ {
struct mlx5_core_dev *dev = devlink_priv(devlink); struct mlx5_core_dev *dev = devlink_priv(devlink);
struct mlx5_sf_table *table; struct mlx5_sf_table *table;
...@@ -355,7 +352,7 @@ int mlx5_devlink_sf_port_new(struct devlink *devlink, ...@@ -355,7 +352,7 @@ int mlx5_devlink_sf_port_new(struct devlink *devlink,
"Port add is only supported in eswitch switchdev mode or SF ports are disabled."); "Port add is only supported in eswitch switchdev mode or SF ports are disabled.");
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
err = mlx5_sf_add(dev, table, new_attr, extack, new_port_index); err = mlx5_sf_add(dev, table, new_attr, extack);
mlx5_sf_table_put(table); mlx5_sf_table_put(table);
return err; return err;
} }
......
...@@ -20,8 +20,7 @@ void mlx5_sf_table_cleanup(struct mlx5_core_dev *dev); ...@@ -20,8 +20,7 @@ void mlx5_sf_table_cleanup(struct mlx5_core_dev *dev);
int mlx5_devlink_sf_port_new(struct devlink *devlink, int mlx5_devlink_sf_port_new(struct devlink *devlink,
const struct devlink_port_new_attrs *add_attr, const struct devlink_port_new_attrs *add_attr,
struct netlink_ext_ack *extack, struct netlink_ext_ack *extack);
unsigned int *new_port_index);
int mlx5_devlink_sf_port_del(struct devlink *devlink, unsigned int port_index, int mlx5_devlink_sf_port_del(struct devlink *devlink, unsigned int port_index,
struct netlink_ext_ack *extack); struct netlink_ext_ack *extack);
int mlx5_devlink_sf_port_fn_state_get(struct devlink_port *dl_port, int mlx5_devlink_sf_port_fn_state_get(struct devlink_port *dl_port,
......
...@@ -1500,7 +1500,6 @@ struct devlink_ops { ...@@ -1500,7 +1500,6 @@ struct devlink_ops {
* @devlink: Devlink instance * @devlink: Devlink instance
* @attrs: attributes of the new port * @attrs: attributes of the new port
* @extack: extack for reporting error messages * @extack: extack for reporting error messages
* @new_port_index: index of the new port
* *
* Devlink core will call this device driver function upon user request * Devlink core will call this device driver function upon user request
* to create a new port function of a specified flavor and optional * to create a new port function of a specified flavor and optional
...@@ -1515,8 +1514,7 @@ struct devlink_ops { ...@@ -1515,8 +1514,7 @@ struct devlink_ops {
*/ */
int (*port_new)(struct devlink *devlink, int (*port_new)(struct devlink *devlink,
const struct devlink_port_new_attrs *attrs, const struct devlink_port_new_attrs *attrs,
struct netlink_ext_ack *extack, struct netlink_ext_ack *extack);
unsigned int *new_port_index);
/** /**
* port_del() - Delete a port function * port_del() - Delete a port function
* @devlink: Devlink instance * @devlink: Devlink instance
......
...@@ -1354,45 +1354,12 @@ static int devlink_nl_cmd_port_unsplit_doit(struct sk_buff *skb, ...@@ -1354,45 +1354,12 @@ static int devlink_nl_cmd_port_unsplit_doit(struct sk_buff *skb,
return devlink->ops->port_unsplit(devlink, devlink_port, info->extack); return devlink->ops->port_unsplit(devlink, devlink_port, info->extack);
} }
static int devlink_port_new_notify(struct devlink *devlink,
unsigned int port_index,
struct genl_info *info)
{
struct devlink_port *devlink_port;
struct sk_buff *msg;
int err;
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
lockdep_assert_held(&devlink->lock);
devlink_port = devlink_port_get_by_index(devlink, port_index);
if (!devlink_port) {
err = -ENODEV;
goto out;
}
err = devlink_nl_port_fill(msg, devlink_port, DEVLINK_CMD_NEW,
info->snd_portid, info->snd_seq, 0, NULL);
if (err)
goto out;
return genlmsg_reply(msg, info);
out:
nlmsg_free(msg);
return err;
}
static int devlink_nl_cmd_port_new_doit(struct sk_buff *skb, static int devlink_nl_cmd_port_new_doit(struct sk_buff *skb,
struct genl_info *info) struct genl_info *info)
{ {
struct netlink_ext_ack *extack = info->extack; struct netlink_ext_ack *extack = info->extack;
struct devlink_port_new_attrs new_attrs = {}; struct devlink_port_new_attrs new_attrs = {};
struct devlink *devlink = info->user_ptr[0]; struct devlink *devlink = info->user_ptr[0];
unsigned int new_port_index;
int err;
if (!devlink->ops->port_new || !devlink->ops->port_del) if (!devlink->ops->port_new || !devlink->ops->port_del)
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -1423,17 +1390,7 @@ static int devlink_nl_cmd_port_new_doit(struct sk_buff *skb, ...@@ -1423,17 +1390,7 @@ static int devlink_nl_cmd_port_new_doit(struct sk_buff *skb,
new_attrs.sfnum_valid = true; new_attrs.sfnum_valid = true;
} }
err = devlink->ops->port_new(devlink, &new_attrs, extack, return devlink->ops->port_new(devlink, &new_attrs, extack);
&new_port_index);
if (err)
return err;
err = devlink_port_new_notify(devlink, new_port_index, info);
if (err && err != -ENODEV) {
/* Fail to send the response; destroy newly created port. */
devlink->ops->port_del(devlink, new_port_index, extack);
}
return err;
} }
static int devlink_nl_cmd_port_del_doit(struct sk_buff *skb, static int devlink_nl_cmd_port_del_doit(struct sk_buff *skb,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment