mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
mlxsw: Add extack messages for port_{un, }split failures
Return messages in extack for port split/unsplit errors. e.g., $ devlink port split swp1s1 count 4 Error: mlxsw_spectrum: Port cannot be split further. devlink answers: Invalid argument $ devlink port unsplit swp4 Error: mlxsw_spectrum: Port was not split. devlink answers: Invalid argument Signed-off-by: David Ahern <dsahern@gmail.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7fa76d777e
commit
3fcc773be6
3 changed files with 25 additions and 9 deletions
|
@ -775,11 +775,14 @@ static int mlxsw_devlink_port_split(struct devlink *devlink,
|
|||
{
|
||||
struct mlxsw_core *mlxsw_core = devlink_priv(devlink);
|
||||
|
||||
if (port_index >= mlxsw_core->max_ports)
|
||||
if (port_index >= mlxsw_core->max_ports) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Port index exceeds maximum number of ports");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!mlxsw_core->driver->port_split)
|
||||
return -EOPNOTSUPP;
|
||||
return mlxsw_core->driver->port_split(mlxsw_core, port_index, count);
|
||||
return mlxsw_core->driver->port_split(mlxsw_core, port_index, count,
|
||||
extack);
|
||||
}
|
||||
|
||||
static int mlxsw_devlink_port_unsplit(struct devlink *devlink,
|
||||
|
@ -788,11 +791,14 @@ static int mlxsw_devlink_port_unsplit(struct devlink *devlink,
|
|||
{
|
||||
struct mlxsw_core *mlxsw_core = devlink_priv(devlink);
|
||||
|
||||
if (port_index >= mlxsw_core->max_ports)
|
||||
if (port_index >= mlxsw_core->max_ports) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Port index exceeds maximum number of ports");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!mlxsw_core->driver->port_unsplit)
|
||||
return -EOPNOTSUPP;
|
||||
return mlxsw_core->driver->port_unsplit(mlxsw_core, port_index);
|
||||
return mlxsw_core->driver->port_unsplit(mlxsw_core, port_index,
|
||||
extack);
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -274,8 +274,9 @@ struct mlxsw_driver {
|
|||
int (*port_type_set)(struct mlxsw_core *mlxsw_core, u8 local_port,
|
||||
enum devlink_port_type new_type);
|
||||
int (*port_split)(struct mlxsw_core *mlxsw_core, u8 local_port,
|
||||
unsigned int count);
|
||||
int (*port_unsplit)(struct mlxsw_core *mlxsw_core, u8 local_port);
|
||||
unsigned int count, struct netlink_ext_ack *extack);
|
||||
int (*port_unsplit)(struct mlxsw_core *mlxsw_core, u8 local_port,
|
||||
struct netlink_ext_ack *extack);
|
||||
int (*sb_pool_get)(struct mlxsw_core *mlxsw_core,
|
||||
unsigned int sb_index, u16 pool_index,
|
||||
struct devlink_sb_pool_info *pool_info);
|
||||
|
|
|
@ -3092,7 +3092,8 @@ static void mlxsw_sp_port_unsplit_create(struct mlxsw_sp *mlxsw_sp,
|
|||
}
|
||||
|
||||
static int mlxsw_sp_port_split(struct mlxsw_core *mlxsw_core, u8 local_port,
|
||||
unsigned int count)
|
||||
unsigned int count,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
|
||||
struct mlxsw_sp_port *mlxsw_sp_port;
|
||||
|
@ -3104,6 +3105,7 @@ static int mlxsw_sp_port_split(struct mlxsw_core *mlxsw_core, u8 local_port,
|
|||
if (!mlxsw_sp_port) {
|
||||
dev_err(mlxsw_sp->bus_info->dev, "Port number \"%d\" does not exist\n",
|
||||
local_port);
|
||||
NL_SET_ERR_MSG_MOD(extack, "Port number does not exist");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -3112,11 +3114,13 @@ static int mlxsw_sp_port_split(struct mlxsw_core *mlxsw_core, u8 local_port,
|
|||
|
||||
if (count != 2 && count != 4) {
|
||||
netdev_err(mlxsw_sp_port->dev, "Port can only be split into 2 or 4 ports\n");
|
||||
NL_SET_ERR_MSG_MOD(extack, "Port can only be split into 2 or 4 ports");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (cur_width != MLXSW_PORT_MODULE_MAX_WIDTH) {
|
||||
netdev_err(mlxsw_sp_port->dev, "Port cannot be split further\n");
|
||||
NL_SET_ERR_MSG_MOD(extack, "Port cannot be split further");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -3125,6 +3129,7 @@ static int mlxsw_sp_port_split(struct mlxsw_core *mlxsw_core, u8 local_port,
|
|||
base_port = local_port;
|
||||
if (mlxsw_sp->ports[base_port + 1]) {
|
||||
netdev_err(mlxsw_sp_port->dev, "Invalid split configuration\n");
|
||||
NL_SET_ERR_MSG_MOD(extack, "Invalid split configuration");
|
||||
return -EINVAL;
|
||||
}
|
||||
} else {
|
||||
|
@ -3132,6 +3137,7 @@ static int mlxsw_sp_port_split(struct mlxsw_core *mlxsw_core, u8 local_port,
|
|||
if (mlxsw_sp->ports[base_port + 1] ||
|
||||
mlxsw_sp->ports[base_port + 3]) {
|
||||
netdev_err(mlxsw_sp_port->dev, "Invalid split configuration\n");
|
||||
NL_SET_ERR_MSG_MOD(extack, "Invalid split configuration");
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
@ -3153,7 +3159,8 @@ static int mlxsw_sp_port_split(struct mlxsw_core *mlxsw_core, u8 local_port,
|
|||
return err;
|
||||
}
|
||||
|
||||
static int mlxsw_sp_port_unsplit(struct mlxsw_core *mlxsw_core, u8 local_port)
|
||||
static int mlxsw_sp_port_unsplit(struct mlxsw_core *mlxsw_core, u8 local_port,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
|
||||
struct mlxsw_sp_port *mlxsw_sp_port;
|
||||
|
@ -3165,11 +3172,13 @@ static int mlxsw_sp_port_unsplit(struct mlxsw_core *mlxsw_core, u8 local_port)
|
|||
if (!mlxsw_sp_port) {
|
||||
dev_err(mlxsw_sp->bus_info->dev, "Port number \"%d\" does not exist\n",
|
||||
local_port);
|
||||
NL_SET_ERR_MSG_MOD(extack, "Port number does not exist");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!mlxsw_sp_port->split) {
|
||||
netdev_err(mlxsw_sp_port->dev, "Port wasn't split\n");
|
||||
netdev_err(mlxsw_sp_port->dev, "Port was not split\n");
|
||||
NL_SET_ERR_MSG_MOD(extack, "Port was not split");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue