On Tue, Jun 07, 2016 at 02:22:12AM +0200, Andrew Lunn wrote:
> > @@ -304,6 +312,18 @@ static int dsa_ds_apply(struct dsa_switch_tree *dst,
> > struct dsa_switch *ds)
> > if (err < 0)
> > return err;
> >
> > + if (!ds->slave_mii_bus && ds->drv->phy_read) {
> > + ds->slave_mii_bus = devm_mdiobus_alloc(ds->dev);
> > + if (!ds->slave_mii_bus)
> > + return err;
> > +
> > + dsa_slave_mii_bus_init(ds);
> > +
> > + err = mdiobus_register(ds->slave_mii_bus);
> > + if (err < 0)
> > + return err;
> > + }
> > +
> > for (index = 0; index < DSA_MAX_PORTS; index++) {
> > port = ds->ports[index].dn;
> > if (!port)
>
> Hi Florian
...
> It is also missing the unregister in dsa_ds_unapply().
Looking at this again...
You use devm_mdiobus_alloc(), so the memory for the bus will get freed
eventually. However, it won't get unregistered before it is freed. So
an explicit unregister is needed. Doing that in dsa_ds_unapply() makes
sense, so we have a clear life cycle for this mdio bus.
Andrew