Messages in this thread | | | Date | Fri, 3 May 2024 03:25:19 +0200 | From | Andrew Lunn <> | Subject | Re: racing ndo_open()/phylink*connect() with phy_probe() |
| |
> 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?
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.
Andrew
| |