diff options
| -rw-r--r-- | drivers/net/phy/fixed.c | 6 | ||||
| -rw-r--r-- | drivers/net/phy/phy_device.c | 9 |
2 files changed, 1 insertions, 14 deletions
diff --git a/drivers/net/phy/fixed.c b/drivers/net/phy/fixed.c index 66da91bb1388..68c99b4c5255 100644 --- a/drivers/net/phy/fixed.c +++ b/drivers/net/phy/fixed.c | |||
| @@ -276,21 +276,15 @@ static int fixed_mdio_register_device(int number, int speed, int duplex) | |||
| 276 | artificially, we are binding the driver here by hand; | 276 | artificially, we are binding the driver here by hand; |
| 277 | it will be the same for all the fixed phys anyway. | 277 | it will be the same for all the fixed phys anyway. |
| 278 | */ | 278 | */ |
| 279 | down_write(&phydev->dev.bus->subsys.rwsem); | ||
| 280 | |||
| 281 | phydev->dev.driver = &fixed_mdio_driver.driver; | 279 | phydev->dev.driver = &fixed_mdio_driver.driver; |
| 282 | 280 | ||
| 283 | err = phydev->dev.driver->probe(&phydev->dev); | 281 | err = phydev->dev.driver->probe(&phydev->dev); |
| 284 | if(err < 0) { | 282 | if(err < 0) { |
| 285 | printk(KERN_ERR "Phy %s: problems with fixed driver\n",phydev->dev.bus_id); | 283 | printk(KERN_ERR "Phy %s: problems with fixed driver\n",phydev->dev.bus_id); |
| 286 | up_write(&phydev->dev.bus->subsys.rwsem); | ||
| 287 | goto probe_fail; | 284 | goto probe_fail; |
| 288 | } | 285 | } |
| 289 | 286 | ||
| 290 | err = device_bind_driver(&phydev->dev); | 287 | err = device_bind_driver(&phydev->dev); |
| 291 | |||
| 292 | up_write(&phydev->dev.bus->subsys.rwsem); | ||
| 293 | |||
| 294 | if (err) | 288 | if (err) |
| 295 | goto probe_fail; | 289 | goto probe_fail; |
| 296 | 290 | ||
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 7d5b6d1838c8..8f01952c4850 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
| @@ -208,16 +208,12 @@ struct phy_device *phy_attach(struct net_device *dev, | |||
| 208 | * exist, and we should use the genphy driver. */ | 208 | * exist, and we should use the genphy driver. */ |
| 209 | if (NULL == d->driver) { | 209 | if (NULL == d->driver) { |
| 210 | int err; | 210 | int err; |
| 211 | down_write(&d->bus->subsys.rwsem); | ||
| 212 | d->driver = &genphy_driver.driver; | 211 | d->driver = &genphy_driver.driver; |
| 213 | 212 | ||
| 214 | err = d->driver->probe(d); | 213 | err = d->driver->probe(d); |
| 215 | |||
| 216 | if (err >= 0) | 214 | if (err >= 0) |
| 217 | err = device_bind_driver(d); | 215 | err = device_bind_driver(d); |
| 218 | 216 | ||
| 219 | up_write(&d->bus->subsys.rwsem); | ||
| 220 | |||
| 221 | if (err) | 217 | if (err) |
| 222 | return ERR_PTR(err); | 218 | return ERR_PTR(err); |
| 223 | } | 219 | } |
| @@ -258,11 +254,8 @@ void phy_detach(struct phy_device *phydev) | |||
| 258 | * was using the generic driver), we unbind the device | 254 | * was using the generic driver), we unbind the device |
| 259 | * from the generic driver so that there's a chance a | 255 | * from the generic driver so that there's a chance a |
| 260 | * real driver could be loaded */ | 256 | * real driver could be loaded */ |
| 261 | if (phydev->dev.driver == &genphy_driver.driver) { | 257 | if (phydev->dev.driver == &genphy_driver.driver) |
| 262 | down_write(&phydev->dev.bus->subsys.rwsem); | ||
| 263 | device_release_driver(&phydev->dev); | 258 | device_release_driver(&phydev->dev); |
| 264 | up_write(&phydev->dev.bus->subsys.rwsem); | ||
| 265 | } | ||
| 266 | } | 259 | } |
| 267 | EXPORT_SYMBOL(phy_detach); | 260 | EXPORT_SYMBOL(phy_detach); |
| 268 | 261 | ||
