net/prestera: Split devlink and traps registrations to separate routines
Separate devlink registrations and traps registrations so devlink will be registered when driver is fully initialized. Signed-off-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1d264db405
commit
4beb0c241b
|
@ -345,8 +345,6 @@ static struct prestera_trap prestera_trap_items_arr[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static void prestera_devlink_traps_fini(struct prestera_switch *sw);
|
||||
|
||||
static int prestera_drop_counter_get(struct devlink *devlink,
|
||||
const struct devlink_trap *trap,
|
||||
u64 *p_drops);
|
||||
|
@ -381,8 +379,6 @@ static int prestera_trap_action_set(struct devlink *devlink,
|
|||
enum devlink_trap_action action,
|
||||
struct netlink_ext_ack *extack);
|
||||
|
||||
static int prestera_devlink_traps_register(struct prestera_switch *sw);
|
||||
|
||||
static const struct devlink_ops prestera_dl_ops = {
|
||||
.info_get = prestera_dl_info_get,
|
||||
.trap_init = prestera_trap_init,
|
||||
|
@ -407,34 +403,18 @@ void prestera_devlink_free(struct prestera_switch *sw)
|
|||
devlink_free(dl);
|
||||
}
|
||||
|
||||
int prestera_devlink_register(struct prestera_switch *sw)
|
||||
void prestera_devlink_register(struct prestera_switch *sw)
|
||||
{
|
||||
struct devlink *dl = priv_to_devlink(sw);
|
||||
int err;
|
||||
|
||||
devlink_register(dl);
|
||||
|
||||
err = prestera_devlink_traps_register(sw);
|
||||
if (err) {
|
||||
devlink_unregister(dl);
|
||||
dev_err(sw->dev->dev, "devlink_traps_register failed: %d\n",
|
||||
err);
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void prestera_devlink_unregister(struct prestera_switch *sw)
|
||||
{
|
||||
struct prestera_trap_data *trap_data = sw->trap_data;
|
||||
struct devlink *dl = priv_to_devlink(sw);
|
||||
|
||||
prestera_devlink_traps_fini(sw);
|
||||
devlink_unregister(dl);
|
||||
|
||||
kfree(trap_data->trap_items_arr);
|
||||
kfree(trap_data);
|
||||
}
|
||||
|
||||
int prestera_devlink_port_register(struct prestera_port *port)
|
||||
|
@ -482,7 +462,7 @@ struct devlink_port *prestera_devlink_get_port(struct net_device *dev)
|
|||
return &port->dl_port;
|
||||
}
|
||||
|
||||
static int prestera_devlink_traps_register(struct prestera_switch *sw)
|
||||
int prestera_devlink_traps_register(struct prestera_switch *sw)
|
||||
{
|
||||
const u32 groups_count = ARRAY_SIZE(prestera_trap_groups_arr);
|
||||
const u32 traps_count = ARRAY_SIZE(prestera_trap_items_arr);
|
||||
|
@ -621,8 +601,9 @@ static int prestera_drop_counter_get(struct devlink *devlink,
|
|||
cpu_code_type, p_drops);
|
||||
}
|
||||
|
||||
static void prestera_devlink_traps_fini(struct prestera_switch *sw)
|
||||
void prestera_devlink_traps_unregister(struct prestera_switch *sw)
|
||||
{
|
||||
struct prestera_trap_data *trap_data = sw->trap_data;
|
||||
struct devlink *dl = priv_to_devlink(sw);
|
||||
const struct devlink_trap *trap;
|
||||
int i;
|
||||
|
@ -634,4 +615,6 @@ static void prestera_devlink_traps_fini(struct prestera_switch *sw)
|
|||
|
||||
devlink_trap_groups_unregister(dl, prestera_trap_groups_arr,
|
||||
ARRAY_SIZE(prestera_trap_groups_arr));
|
||||
kfree(trap_data->trap_items_arr);
|
||||
kfree(trap_data);
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
struct prestera_switch *prestera_devlink_alloc(struct prestera_device *dev);
|
||||
void prestera_devlink_free(struct prestera_switch *sw);
|
||||
|
||||
int prestera_devlink_register(struct prestera_switch *sw);
|
||||
void prestera_devlink_register(struct prestera_switch *sw);
|
||||
void prestera_devlink_unregister(struct prestera_switch *sw);
|
||||
|
||||
int prestera_devlink_port_register(struct prestera_port *port);
|
||||
|
@ -22,5 +22,7 @@ struct devlink_port *prestera_devlink_get_port(struct net_device *dev);
|
|||
|
||||
void prestera_devlink_trap_report(struct prestera_port *port,
|
||||
struct sk_buff *skb, u8 cpu_code);
|
||||
int prestera_devlink_traps_register(struct prestera_switch *sw);
|
||||
void prestera_devlink_traps_unregister(struct prestera_switch *sw);
|
||||
|
||||
#endif /* _PRESTERA_DEVLINK_H_ */
|
||||
|
|
|
@ -851,7 +851,7 @@ static int prestera_switch_init(struct prestera_switch *sw)
|
|||
if (err)
|
||||
goto err_span_init;
|
||||
|
||||
err = prestera_devlink_register(sw);
|
||||
err = prestera_devlink_traps_register(sw);
|
||||
if (err)
|
||||
goto err_dl_register;
|
||||
|
||||
|
@ -863,12 +863,13 @@ static int prestera_switch_init(struct prestera_switch *sw)
|
|||
if (err)
|
||||
goto err_ports_create;
|
||||
|
||||
prestera_devlink_register(sw);
|
||||
return 0;
|
||||
|
||||
err_ports_create:
|
||||
prestera_lag_fini(sw);
|
||||
err_lag_init:
|
||||
prestera_devlink_unregister(sw);
|
||||
prestera_devlink_traps_unregister(sw);
|
||||
err_dl_register:
|
||||
prestera_span_fini(sw);
|
||||
err_span_init:
|
||||
|
@ -888,9 +889,10 @@ err_swdev_register:
|
|||
|
||||
static void prestera_switch_fini(struct prestera_switch *sw)
|
||||
{
|
||||
prestera_devlink_unregister(sw);
|
||||
prestera_destroy_ports(sw);
|
||||
prestera_lag_fini(sw);
|
||||
prestera_devlink_unregister(sw);
|
||||
prestera_devlink_traps_unregister(sw);
|
||||
prestera_span_fini(sw);
|
||||
prestera_acl_fini(sw);
|
||||
prestera_event_handlers_unregister(sw);
|
||||
|
|
Loading…
Reference in New Issue