Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87aebe07 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

PHY: remove rwsem use from phy core



The subsystem rwsem is not used by the driver core at all, so the use of
it in the phy code doesn't make any sense.  They might possibly
want to use a local lock, but I am unsure about that.

Cc: netdev <netdev@vger.kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent a2a0f74d
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -276,21 +276,15 @@ static int fixed_mdio_register_device(int number, int speed, int duplex)
	   artificially, we are binding the driver here by hand;
	   it will be the same for all the fixed phys anyway.
	 */
	down_write(&phydev->dev.bus->subsys.rwsem);

	phydev->dev.driver = &fixed_mdio_driver.driver;

	err = phydev->dev.driver->probe(&phydev->dev);
	if(err < 0) {
		printk(KERN_ERR "Phy %s: problems with fixed driver\n",phydev->dev.bus_id);
		up_write(&phydev->dev.bus->subsys.rwsem);
		goto probe_fail;
	}

	err = device_bind_driver(&phydev->dev);

	up_write(&phydev->dev.bus->subsys.rwsem);

	if (err)
		goto probe_fail;

+1 −8
Original line number Diff line number Diff line
@@ -208,16 +208,12 @@ struct phy_device *phy_attach(struct net_device *dev,
	 * exist, and we should use the genphy driver. */
	if (NULL == d->driver) {
		int err;
		down_write(&d->bus->subsys.rwsem);
		d->driver = &genphy_driver.driver;

		err = d->driver->probe(d);

		if (err >= 0)
			err = device_bind_driver(d);

		up_write(&d->bus->subsys.rwsem);

		if (err)
			return ERR_PTR(err);
	}
@@ -258,11 +254,8 @@ void phy_detach(struct phy_device *phydev)
	 * was using the generic driver), we unbind the device
	 * from the generic driver so that there's a chance a
	 * real driver could be loaded */
	if (phydev->dev.driver == &genphy_driver.driver) {
		down_write(&phydev->dev.bus->subsys.rwsem);
	if (phydev->dev.driver == &genphy_driver.driver)
		device_release_driver(&phydev->dev);
		up_write(&phydev->dev.bus->subsys.rwsem);
	}
}
EXPORT_SYMBOL(phy_detach);