diff options
author | David S. Miller <davem@davemloft.net> | 2017-02-08 00:29:30 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-02-08 00:29:30 +0300 |
commit | 3efa70d78f218e4c9276b0bac0545e5184c1c47b (patch) | |
tree | f4abe2f05e173023d2a262afd4aebb1e89fe6985 /drivers/net/phy | |
parent | 76e0e70e6452b971a69cc9794ff4a6715c11f7f2 (diff) | |
parent | 926af6273fc683cd98cd0ce7bf0d04a02eed6742 (diff) | |
download | linux-3efa70d78f218e4c9276b0bac0545e5184c1c47b.tar.xz |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
The conflict was an interaction between a bug fix in the
netvsc driver in 'net' and an optimization of the RX path
in 'net-next'.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/phy')
-rw-r--r-- | drivers/net/phy/phy_device.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 92b08383cafa..0d8f4d3847f6 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -920,6 +920,11 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, return -EIO; } + if (!try_module_get(d->driver->owner)) { + dev_err(&dev->dev, "failed to get the device driver module\n"); + return -EIO; + } + get_device(d); /* Assume that if there is no driver, that it doesn't @@ -977,6 +982,7 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, error: phy_detach(phydev); put_device(d); + module_put(d->driver->owner); if (ndev_owner != bus->owner) module_put(bus->owner); return err; @@ -1059,6 +1065,7 @@ void phy_detach(struct phy_device *phydev) bus = phydev->mdio.bus; put_device(&phydev->mdio.dev); + module_put(phydev->mdio.dev.driver->owner); if (ndev_owner != bus->owner) module_put(bus->owner); } |