On Mon, Sep 09, 2024 at 02:03:32PM +0200, Andrew Lunn wrote: > > > Are you actually saying: > > > > > > if (netdev->phydev) { > > > /* If we have a PHY, start polling */ > > > phy_start(netdev->phydev); > > > } > > > > > > is wrong, it is guaranteed there is always a phydev? > > > > > This patch is focus on error handling when using NC-SI at open stage. > > > > if (netdev->phydev) { > > /* If we have a PHY, start polling */ > > phy_start(netdev->phydev); > > } > > > > This code is used to check the other cases. > > Perhaps, phy-handle or fixed-link property are not added in DTS. > > I'm guessing, but i think the static analysers see this condition, and > deducing that phydev might be a NULL. Hence when phy_stop() is called, > it needs the check. > > You say the static analyser is wrong, probably because it cannot check > the bigger context. It can be NULL for phy_start() but not for > phy_stop(). Maybe you can give it some more hints? > > Dan, is this Smatch? Is it possible to dump the paths through the code > where it thinks it might be NULL? Adding a check here is the correct thing. The current code works because we only have the one goto after the call to phy_start(netdev->phydev), but as soon as we add a second goto then it will crash. Silencing this warning means tying the information from probe() into it. It's a fun problem but not something I'm going to do this year. regards, dan carpenter