diff mbox series

[net-next] net: phy: probe PHY drivers synchronously

Message ID 86582ac9-e600-bdb5-3d2e-d2d99ed544f4@gmail.com
State Superseded
Delegated to: David Miller
Headers show
Series [net-next] net: phy: probe PHY drivers synchronously | expand

Commit Message

Heiner Kallweit March 26, 2020, 6:16 p.m. UTC
If we have scenarios like

mdiobus_register()
	-> loads PHY driver module(s)
	-> registers PHY driver(s)
	-> may schedule async probe
phydev = mdiobus_get_phy()
<phydev action involving PHY driver>

or

phydev = phy_device_create()
	-> loads PHY driver module
	-> registers PHY driver
	-> may schedule async probe
<phydev action involving PHY driver>

then we expect the PHY driver to be bound to the phydev when triggering
the action. This may not be the case in case of asynchronous probing.
Therefore ensure that PHY drivers are probed synchronously.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/net/phy/phy_device.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Andrew Lunn March 26, 2020, 11:34 p.m. UTC | #1
On Thu, Mar 26, 2020 at 07:16:23PM +0100, Heiner Kallweit wrote:
> If we have scenarios like
> 
> mdiobus_register()
> 	-> loads PHY driver module(s)
> 	-> registers PHY driver(s)
> 	-> may schedule async probe
> phydev = mdiobus_get_phy()
> <phydev action involving PHY driver>
> 
> or
> 
> phydev = phy_device_create()
> 	-> loads PHY driver module
> 	-> registers PHY driver
> 	-> may schedule async probe
> <phydev action involving PHY driver>
> 
> then we expect the PHY driver to be bound to the phydev when triggering
> the action. This may not be the case in case of asynchronous probing.
> Therefore ensure that PHY drivers are probed synchronously.

Hi Heiner

We have been doing asynchronous driver loads since forever, and not
noticed any problem. Do you have a real example of it going wrong?

	Andrew
Heiner Kallweit March 26, 2020, 11:42 p.m. UTC | #2
On 27.03.2020 00:34, Andrew Lunn wrote:
> On Thu, Mar 26, 2020 at 07:16:23PM +0100, Heiner Kallweit wrote:
>> If we have scenarios like
>>
>> mdiobus_register()
>> 	-> loads PHY driver module(s)
>> 	-> registers PHY driver(s)
>> 	-> may schedule async probe
>> phydev = mdiobus_get_phy()
>> <phydev action involving PHY driver>
>>
>> or
>>
>> phydev = phy_device_create()
>> 	-> loads PHY driver module
>> 	-> registers PHY driver
>> 	-> may schedule async probe
>> <phydev action involving PHY driver>
>>
>> then we expect the PHY driver to be bound to the phydev when triggering
>> the action. This may not be the case in case of asynchronous probing.
>> Therefore ensure that PHY drivers are probed synchronously.
> 
> Hi Heiner
> 
Hi Andrew,

> We have been doing asynchronous driver loads since forever, and not
> noticed any problem. Do you have a real example of it going wrong?
> 
it's not about async driver loading, but about async probing once
the driver was loaded. See driver_allows_async_probing().
Default still is sync probing, except you explicitly request async
probing. But I saw some comments that the intention is to promote
async probing for more parallelism in boot process. I want to be
prepared for the case that the default is changed to async probing.
I'm not aware of any current issues, therefore I submitted it
for net-next.

> 	Andrew
> 
Heiner
Andrew Lunn March 26, 2020, 11:44 p.m. UTC | #3
> Default still is sync probing, except you explicitly request async
> probing. But I saw some comments that the intention is to promote
> async probing for more parallelism in boot process. I want to be
> prepared for the case that the default is changed to async probing.

Right. So this should be in the commit message. This is the real
reason you are proposing the change.

       Andrew
Heiner Kallweit March 26, 2020, 11:57 p.m. UTC | #4
On 27.03.2020 00:44, Andrew Lunn wrote:
>> Default still is sync probing, except you explicitly request async
>> probing. But I saw some comments that the intention is to promote
>> async probing for more parallelism in boot process. I want to be
>> prepared for the case that the default is changed to async probing.
> 
> Right. So this should be in the commit message. This is the real
> reason you are proposing the change.
> 
OK, I'll add it to the commit message.

>        Andrew
> 
Heiner
diff mbox series

Patch

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index d6024b678..ac2784192 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -2575,6 +2575,7 @@  int phy_driver_register(struct phy_driver *new_driver, struct module *owner)
 	new_driver->mdiodrv.driver.probe = phy_probe;
 	new_driver->mdiodrv.driver.remove = phy_remove;
 	new_driver->mdiodrv.driver.owner = owner;
+	new_driver->mdiodrv.driver.probe_type = PROBE_FORCE_SYNCHRONOUS;
 
 	retval = driver_register(&new_driver->mdiodrv.driver);
 	if (retval) {