From: Andrew Lunn <and...@lunn.ch>
Date: Thu, 14 Apr 2016 01:59:54 +0200

> @@ -3178,6 +3178,7 @@ int mv88e6xxx_probe(struct mdio_device *mdiodev, struct 
> dsa_switch_driver *ops,
>       struct mv88e6xxx_priv_state *ps;
>       struct dsa_switch *ds;
>       const char *name;
> +     int err;
>  
>       ds = devm_kzalloc(dev, sizeof(*ds) + sizeof(*ps), GFP_KERNEL);
>       if (!ds)
> @@ -3199,6 +3200,17 @@ int mv88e6xxx_probe(struct mdio_device *mdiodev, 
> struct dsa_switch_driver *ops,
>               return -ENODEV;
>       }
>  
> +     ps->reset = devm_gpiod_get(&mdiodev->dev, "reset", GPIOD_ASIS);
> +     err = PTR_ERR(ps->reset);
> +     if (err) {
> +             if (err == -ENOENT) {
> +                     /* Optional, so not an error */
> +                     ps->reset = NULL;
> +             } else {
> +                     return err;
> +             }
> +     }

PTR_ERR() just casts the pointer into an integer, regardless of it's
value, and regardless of whether it is an error code or a real pointer
successfully returned from devm_gpiod_get().

So I don't think this code is correct.

You need an IS_ERR() check in there somewhere.

Reply via email to