Messages in this thread | | | Date | Tue, 7 May 2024 09:48:30 -0500 | From | Andrew Halaney <> | Subject | Re: racing ndo_open()/phylink*connect() with phy_probe() |
| |
On Fri, May 03, 2024 at 03:25:19AM GMT, Andrew Lunn wrote: > > AFAICS the problem is in the race between the end0 and end1 device > > probes. Right? > > If so then can't the order be fixed by adding the links between the > > OF-devices? As it's already done for various phandle-based references > > like "clocks", "gpios", "phys", etc?
Thanks for the pointer here Serge, I had no idea (still don't have much of an idea) on how this works. I think this makes sense to explore some more. Hopefully sometime this week I'll poke at this more.
> > It gets tricky because an MDIO bus master device is often a sub device > of an Ethernet MAC driver. Typically how it works is that a MAC driver > probes. Part way through the probe it creates an MDIO bus driver, > which enumerates the MDIO bus and creates the PHYs. Later in the MAC > driver probe, or maybe when the MAC driver is opened, it follows the > phy-handle to a PHY on its own MDIO bus. > > If you were to say it cannot probe the MAC driver until the MDIO bus > driver is created and the PHYs created, you never get anywhere, > because it is the act of probing the MAC driver which creates the PHYs > which fulfils the phandle. > > You would need to differentiate between a phandle pointing deeper into > the same branch of a DT tree, or pointing to a different branch of a > DT tree. If it is deeper within the same branch, you need to probe in > order to make progress. If it points to a different branch you need to > defer until that sub-branch has successfully probed. And if you get > two branches which are mutually dependent on each other, probe and > hope EPROBE_DEFER solves it.
I'll keep this relationship in mind. IIUC the fw_devlink stuff sort of handles cycles, but I need to look into how all that works further. At least in my example device, end0 is in this situation, whereas end1 is in the other situation, so I have a decent test setup for that.
| |