On Mon, Jan 15, 2018 at 02:54:22PM -0800, Florian Fainelli wrote: > On 01/15/2018 02:45 PM, Andrew Lunn wrote: > > We only register the ATU and VTU irq when we have a chip level IRQ. > > In the error path, we should only attempt to remove the ATU and VTU > > irq if we also have a chip level IRQ. > > > > Signed-off-by: Andrew Lunn <and...@lunn.ch> > > --- > > drivers/net/dsa/mv88e6xxx/chip.c | 6 ++++-- > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/net/dsa/mv88e6xxx/chip.c > > b/drivers/net/dsa/mv88e6xxx/chip.c > > index 54cb00a27408..eb328bade225 100644 > > --- a/drivers/net/dsa/mv88e6xxx/chip.c > > +++ b/drivers/net/dsa/mv88e6xxx/chip.c > > @@ -3999,9 +3999,11 @@ static int mv88e6xxx_probe(struct mdio_device > > *mdiodev) > > out_mdio: > > mv88e6xxx_mdios_unregister(chip); > > out_g1_vtu_prob_irq: > > - mv88e6xxx_g1_vtu_prob_irq_free(chip); > > + if (chip->irq > 0) > > + mv88e6xxx_g1_vtu_prob_irq_free(chip); > > Why not move this check to mv88e6xxx_g1_vtu_prob_irq_free() and make it > a no-op if chip->irq <= 0?
Hi Florian It keeps it symmetrical with the setup code: if (chip->irq > 0) { /* Has to be performed before the MDIO bus is created, * because the PHYs will link there interrupts to these * interrupt controllers */ mutex_lock(&chip->reg_lock); err = mv88e6xxx_g1_irq_setup(chip); mutex_unlock(&chip->reg_lock); if (err) goto out; if (chip->info->g2_irqs > 0) { err = mv88e6xxx_g2_irq_setup(chip); if (err) goto out_g1_irq; } err = mv88e6xxx_g1_atu_prob_irq_setup(chip); if (err) goto out_g2_irq; err = mv88e6xxx_g1_vtu_prob_irq_setup(chip); if (err) goto out_g1_atu_prob_irq; } The general flow in probe() is to only call functions if they are needed. So i would prefer to keep to that. Andrew