Hello, Dan > 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. Could you share more detail about the crash is happening when you add a second goto? I'm wondering if there are other things I missed. Thank you. > > 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. > Jacky