提交 b2f10571 编写于 作者: J Jiri Pirko 提交者: David S. Miller

mlxsw: Do not pass around driver_priv directly

Instead of that, pass mlxsw_core and use a helper to get driver priv
from driver code. Looks much cleaner that way.
Signed-off-by: NJiri Pirko <jiri@mellanox.com>
Reviewed-by: NIdo Schimmel <idosch@mellanox.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 307c2431
...@@ -114,6 +114,12 @@ struct mlxsw_core { ...@@ -114,6 +114,12 @@ struct mlxsw_core {
/* driver_priv has to be always the last item */ /* driver_priv has to be always the last item */
}; };
void *mlxsw_core_driver_priv(struct mlxsw_core *mlxsw_core)
{
return mlxsw_core->driver_priv;
}
EXPORT_SYMBOL(mlxsw_core_driver_priv);
struct mlxsw_rx_listener_item { struct mlxsw_rx_listener_item {
struct list_head list; struct list_head list;
struct mlxsw_rx_listener rxl; struct mlxsw_rx_listener rxl;
...@@ -795,8 +801,7 @@ static int mlxsw_devlink_port_split(struct devlink *devlink, ...@@ -795,8 +801,7 @@ static int mlxsw_devlink_port_split(struct devlink *devlink,
return -EINVAL; return -EINVAL;
if (!mlxsw_core->driver->port_split) if (!mlxsw_core->driver->port_split)
return -EOPNOTSUPP; return -EOPNOTSUPP;
return mlxsw_core->driver->port_split(mlxsw_core->driver_priv, return mlxsw_core->driver->port_split(mlxsw_core, port_index, count);
port_index, count);
} }
static int mlxsw_devlink_port_unsplit(struct devlink *devlink, static int mlxsw_devlink_port_unsplit(struct devlink *devlink,
...@@ -808,8 +813,7 @@ static int mlxsw_devlink_port_unsplit(struct devlink *devlink, ...@@ -808,8 +813,7 @@ static int mlxsw_devlink_port_unsplit(struct devlink *devlink,
return -EINVAL; return -EINVAL;
if (!mlxsw_core->driver->port_unsplit) if (!mlxsw_core->driver->port_unsplit)
return -EOPNOTSUPP; return -EOPNOTSUPP;
return mlxsw_core->driver->port_unsplit(mlxsw_core->driver_priv, return mlxsw_core->driver->port_unsplit(mlxsw_core, port_index);
port_index);
} }
static const struct devlink_ops mlxsw_devlink_ops = { static const struct devlink_ops mlxsw_devlink_ops = {
...@@ -880,8 +884,7 @@ int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info, ...@@ -880,8 +884,7 @@ int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
if (err) if (err)
goto err_devlink_register; goto err_devlink_register;
err = mlxsw_driver->init(mlxsw_core->driver_priv, mlxsw_core, err = mlxsw_driver->init(mlxsw_core, mlxsw_bus_info);
mlxsw_bus_info);
if (err) if (err)
goto err_driver_init; goto err_driver_init;
...@@ -892,7 +895,7 @@ int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info, ...@@ -892,7 +895,7 @@ int mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
return 0; return 0;
err_debugfs_init: err_debugfs_init:
mlxsw_core->driver->fini(mlxsw_core->driver_priv); mlxsw_core->driver->fini(mlxsw_core);
err_driver_init: err_driver_init:
devlink_unregister(devlink); devlink_unregister(devlink);
err_devlink_register: err_devlink_register:
...@@ -918,7 +921,7 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core) ...@@ -918,7 +921,7 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core)
struct devlink *devlink = priv_to_devlink(mlxsw_core); struct devlink *devlink = priv_to_devlink(mlxsw_core);
mlxsw_core_debugfs_fini(mlxsw_core); mlxsw_core_debugfs_fini(mlxsw_core);
mlxsw_core->driver->fini(mlxsw_core->driver_priv); mlxsw_core->driver->fini(mlxsw_core);
devlink_unregister(devlink); devlink_unregister(devlink);
mlxsw_emad_fini(mlxsw_core); mlxsw_emad_fini(mlxsw_core);
mlxsw_core->bus->fini(mlxsw_core->bus_priv); mlxsw_core->bus->fini(mlxsw_core->bus_priv);
......
...@@ -62,6 +62,8 @@ struct mlxsw_driver; ...@@ -62,6 +62,8 @@ struct mlxsw_driver;
struct mlxsw_bus; struct mlxsw_bus;
struct mlxsw_bus_info; struct mlxsw_bus_info;
void *mlxsw_core_driver_priv(struct mlxsw_core *mlxsw_core);
int mlxsw_core_driver_register(struct mlxsw_driver *mlxsw_driver); int mlxsw_core_driver_register(struct mlxsw_driver *mlxsw_driver);
void mlxsw_core_driver_unregister(struct mlxsw_driver *mlxsw_driver); void mlxsw_core_driver_unregister(struct mlxsw_driver *mlxsw_driver);
...@@ -192,11 +194,12 @@ struct mlxsw_driver { ...@@ -192,11 +194,12 @@ struct mlxsw_driver {
const char *kind; const char *kind;
struct module *owner; struct module *owner;
size_t priv_size; size_t priv_size;
int (*init)(void *driver_priv, struct mlxsw_core *mlxsw_core, int (*init)(struct mlxsw_core *mlxsw_core,
const struct mlxsw_bus_info *mlxsw_bus_info); const struct mlxsw_bus_info *mlxsw_bus_info);
void (*fini)(void *driver_priv); void (*fini)(struct mlxsw_core *mlxsw_core);
int (*port_split)(void *driver_priv, u8 local_port, unsigned int count); int (*port_split)(struct mlxsw_core *mlxsw_core, u8 local_port,
int (*port_unsplit)(void *driver_priv, u8 local_port); unsigned int count);
int (*port_unsplit)(struct mlxsw_core *mlxsw_core, u8 local_port);
void (*txhdr_construct)(struct sk_buff *skb, void (*txhdr_construct)(struct sk_buff *skb,
const struct mlxsw_tx_info *tx_info); const struct mlxsw_tx_info *tx_info);
u8 txhdr_len; u8 txhdr_len;
......
...@@ -1948,9 +1948,10 @@ static u8 mlxsw_sp_cluster_base_port_get(u8 local_port) ...@@ -1948,9 +1948,10 @@ static u8 mlxsw_sp_cluster_base_port_get(u8 local_port)
return local_port - offset; return local_port - offset;
} }
static int mlxsw_sp_port_split(void *priv, u8 local_port, unsigned int count) static int mlxsw_sp_port_split(struct mlxsw_core *mlxsw_core, u8 local_port,
unsigned int count)
{ {
struct mlxsw_sp *mlxsw_sp = priv; struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
struct mlxsw_sp_port *mlxsw_sp_port; struct mlxsw_sp_port *mlxsw_sp_port;
u8 width = MLXSW_PORT_MODULE_MAX_WIDTH / count; u8 width = MLXSW_PORT_MODULE_MAX_WIDTH / count;
u8 module, cur_width, base_port; u8 module, cur_width, base_port;
...@@ -2022,9 +2023,9 @@ static int mlxsw_sp_port_split(void *priv, u8 local_port, unsigned int count) ...@@ -2022,9 +2023,9 @@ static int mlxsw_sp_port_split(void *priv, u8 local_port, unsigned int count)
return err; return err;
} }
static int mlxsw_sp_port_unsplit(void *priv, u8 local_port) static int mlxsw_sp_port_unsplit(struct mlxsw_core *mlxsw_core, u8 local_port)
{ {
struct mlxsw_sp *mlxsw_sp = priv; struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
struct mlxsw_sp_port *mlxsw_sp_port; struct mlxsw_sp_port *mlxsw_sp_port;
u8 module, cur_width, base_port; u8 module, cur_width, base_port;
unsigned int count; unsigned int count;
...@@ -2369,10 +2370,10 @@ static int mlxsw_sp_lag_init(struct mlxsw_sp *mlxsw_sp) ...@@ -2369,10 +2370,10 @@ static int mlxsw_sp_lag_init(struct mlxsw_sp *mlxsw_sp)
return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(slcr), slcr_pl); return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(slcr), slcr_pl);
} }
static int mlxsw_sp_init(void *priv, struct mlxsw_core *mlxsw_core, static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core,
const struct mlxsw_bus_info *mlxsw_bus_info) const struct mlxsw_bus_info *mlxsw_bus_info)
{ {
struct mlxsw_sp *mlxsw_sp = priv; struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
int err; int err;
mlxsw_sp->core = mlxsw_core; mlxsw_sp->core = mlxsw_core;
...@@ -2443,9 +2444,9 @@ static int mlxsw_sp_init(void *priv, struct mlxsw_core *mlxsw_core, ...@@ -2443,9 +2444,9 @@ static int mlxsw_sp_init(void *priv, struct mlxsw_core *mlxsw_core,
return err; return err;
} }
static void mlxsw_sp_fini(void *priv) static void mlxsw_sp_fini(struct mlxsw_core *mlxsw_core)
{ {
struct mlxsw_sp *mlxsw_sp = priv; struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core);
mlxsw_sp_switchdev_fini(mlxsw_sp); mlxsw_sp_switchdev_fini(mlxsw_sp);
mlxsw_sp_traps_fini(mlxsw_sp); mlxsw_sp_traps_fini(mlxsw_sp);
......
...@@ -1447,10 +1447,10 @@ static int mlxsw_sx_flood_init(struct mlxsw_sx *mlxsw_sx) ...@@ -1447,10 +1447,10 @@ static int mlxsw_sx_flood_init(struct mlxsw_sx *mlxsw_sx)
return mlxsw_reg_write(mlxsw_sx->core, MLXSW_REG(sgcr), sgcr_pl); return mlxsw_reg_write(mlxsw_sx->core, MLXSW_REG(sgcr), sgcr_pl);
} }
static int mlxsw_sx_init(void *priv, struct mlxsw_core *mlxsw_core, static int mlxsw_sx_init(struct mlxsw_core *mlxsw_core,
const struct mlxsw_bus_info *mlxsw_bus_info) const struct mlxsw_bus_info *mlxsw_bus_info)
{ {
struct mlxsw_sx *mlxsw_sx = priv; struct mlxsw_sx *mlxsw_sx = mlxsw_core_driver_priv(mlxsw_core);
int err; int err;
mlxsw_sx->core = mlxsw_core; mlxsw_sx->core = mlxsw_core;
...@@ -1497,9 +1497,9 @@ static int mlxsw_sx_init(void *priv, struct mlxsw_core *mlxsw_core, ...@@ -1497,9 +1497,9 @@ static int mlxsw_sx_init(void *priv, struct mlxsw_core *mlxsw_core,
return err; return err;
} }
static void mlxsw_sx_fini(void *priv) static void mlxsw_sx_fini(struct mlxsw_core *mlxsw_core)
{ {
struct mlxsw_sx *mlxsw_sx = priv; struct mlxsw_sx *mlxsw_sx = mlxsw_core_driver_priv(mlxsw_core);
mlxsw_sx_traps_fini(mlxsw_sx); mlxsw_sx_traps_fini(mlxsw_sx);
mlxsw_sx_event_unregister(mlxsw_sx, MLXSW_TRAP_ID_PUDE); mlxsw_sx_event_unregister(mlxsw_sx, MLXSW_TRAP_ID_PUDE);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册