Skip to content

Commit

Permalink
net: dsa: move rest of devlink setup/teardown to devlink.c
Browse files Browse the repository at this point in the history
The code that needed further refactoring into dedicated functions in
dsa2.c was left aside. Move it now to devlink.c, and make dsa2.c stop
including net/devlink.h.

Signed-off-by: Vladimir Oltean <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
Signed-off-by: Jakub Kicinski <[email protected]>
  • Loading branch information
vladimiroltean authored and kuba-moo committed Nov 23, 2022
1 parent d95fa75 commit 7aea535
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 20 deletions.
38 changes: 37 additions & 1 deletion net/dsa/devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ dsa_devlink_sb_occ_tc_port_bind_get(struct devlink_port *dlp,
p_max);
}

const struct devlink_ops dsa_devlink_ops = {
static const struct devlink_ops dsa_devlink_ops = {
.info_get = dsa_devlink_info_get,
.sb_pool_get = dsa_devlink_sb_pool_get,
.sb_pool_set = dsa_devlink_sb_pool_set,
Expand Down Expand Up @@ -353,3 +353,39 @@ void dsa_port_devlink_teardown(struct dsa_port *dp)

devlink_port_fini(dlp);
}

void dsa_switch_devlink_register(struct dsa_switch *ds)
{
devlink_register(ds->devlink);
}

void dsa_switch_devlink_unregister(struct dsa_switch *ds)
{
devlink_unregister(ds->devlink);
}

int dsa_switch_devlink_alloc(struct dsa_switch *ds)
{
struct dsa_devlink_priv *dl_priv;
struct devlink *dl;

/* Add the switch to devlink before calling setup, so that setup can
* add dpipe tables
*/
dl = devlink_alloc(&dsa_devlink_ops, sizeof(*dl_priv), ds->dev);
if (!dl)
return -ENOMEM;

ds->devlink = dl;

dl_priv = devlink_priv(ds->devlink);
dl_priv->ds = ds;

return 0;
}

void dsa_switch_devlink_free(struct dsa_switch *ds)
{
devlink_free(ds->devlink);
ds->devlink = NULL;
}
7 changes: 5 additions & 2 deletions net/dsa/devlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
#define __DSA_DEVLINK_H

struct dsa_port;

extern const struct devlink_ops dsa_devlink_ops;
struct dsa_switch;

int dsa_port_devlink_setup(struct dsa_port *dp);
void dsa_port_devlink_teardown(struct dsa_port *dp);
void dsa_switch_devlink_register(struct dsa_switch *ds);
void dsa_switch_devlink_unregister(struct dsa_switch *ds);
int dsa_switch_devlink_alloc(struct dsa_switch *ds);
void dsa_switch_devlink_free(struct dsa_switch *ds);

#endif
24 changes: 7 additions & 17 deletions net/dsa/dsa2.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
#include <linux/of.h>
#include <linux/of_mdio.h>
#include <linux/of_net.h>
#include <net/devlink.h>
#include <net/sch_generic.h>

#include "devlink.h"
Expand Down Expand Up @@ -627,7 +626,6 @@ static void dsa_switch_teardown_tag_protocol(struct dsa_switch *ds)

static int dsa_switch_setup(struct dsa_switch *ds)
{
struct dsa_devlink_priv *dl_priv;
struct device_node *dn;
int err;

Expand All @@ -641,15 +639,9 @@ static int dsa_switch_setup(struct dsa_switch *ds)
*/
ds->phys_mii_mask |= dsa_user_ports(ds);

/* Add the switch to devlink before calling setup, so that setup can
* add dpipe tables
*/
ds->devlink =
devlink_alloc(&dsa_devlink_ops, sizeof(*dl_priv), ds->dev);
if (!ds->devlink)
return -ENOMEM;
dl_priv = devlink_priv(ds->devlink);
dl_priv->ds = ds;
err = dsa_switch_devlink_alloc(ds);
if (err)
return err;

err = dsa_switch_register_notifier(ds);
if (err)
Expand Down Expand Up @@ -682,7 +674,7 @@ static int dsa_switch_setup(struct dsa_switch *ds)
goto free_slave_mii_bus;
}

devlink_register(ds->devlink);
dsa_switch_devlink_register(ds);

ds->setup = true;
return 0;
Expand All @@ -696,8 +688,7 @@ static int dsa_switch_setup(struct dsa_switch *ds)
unregister_notifier:
dsa_switch_unregister_notifier(ds);
devlink_free:
devlink_free(ds->devlink);
ds->devlink = NULL;
dsa_switch_devlink_free(ds);
return err;
}

Expand All @@ -706,7 +697,7 @@ static void dsa_switch_teardown(struct dsa_switch *ds)
if (!ds->setup)
return;

devlink_unregister(ds->devlink);
dsa_switch_devlink_unregister(ds);

if (ds->slave_mii_bus && ds->ops->phy_read) {
mdiobus_unregister(ds->slave_mii_bus);
Expand All @@ -721,8 +712,7 @@ static void dsa_switch_teardown(struct dsa_switch *ds)

dsa_switch_unregister_notifier(ds);

devlink_free(ds->devlink);
ds->devlink = NULL;
dsa_switch_devlink_free(ds);

ds->setup = false;
}
Expand Down

0 comments on commit 7aea535

Please sign in to comment.