PHY: remove rwsem use from phy core
authorGreg Kroah-Hartman <gregkh@suse.de>
Mon, 9 Apr 2007 15:52:31 +0000 (11:52 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 27 Apr 2007 17:57:31 +0000 (10:57 -0700)
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: Greg Kroah-Hartman <gregkh@suse.de>
drivers/net/phy/fixed.c
drivers/net/phy/phy_device.c

index 66da91bb1388945bac1d2c0c259bf3616a6b1e4d..68c99b4c5255531d11d952fd251e14adc8cf0f55 100644 (file)
@@ -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;
 
index 7d5b6d1838c8ddc56563ec0aba05aed388778e0e..8f01952c48500457315624a2b6f962a8043ab838 100644 (file)
@@ -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);