diff options
author | Russell King <rmk+kernel@armlinux.org.uk> | 2017-04-14 20:17:04 +0100 |
---|---|---|
committer | Russell King <rmk+kernel@armlinux.org.uk> | 2017-05-09 18:06:54 +0100 |
commit | 2be309597dd4adc42a25c6c23e600cc28711091b (patch) | |
tree | d04eb4c2a357be583ac51992b827cee9a9cb904b | |
parent | 16d2efd8904d068a17f3edc2c5ba78f54e1ef132 (diff) |
sfp: fix eeprom reading
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
-rw-r--r-- | drivers/net/phy/sfp.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c index 1f7001522a8c..1f5edc351b2d 100644 --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c @@ -1013,9 +1013,7 @@ static int sfp_module_eeprom(void *priv, struct ethtool_eeprom *ee, u8 *data) first = ee->offset; last = ee->offset + ee->len; if (first < ETH_MODULE_SFF_8079_LEN) { - len = last; - if (len > ETH_MODULE_SFF_8079_LEN) - len = ETH_MODULE_SFF_8079_LEN; + len = min_t(unsigned int, last, ETH_MODULE_SFF_8079_LEN); len -= first; ret = sfp->read(sfp, false, first, data, len); @@ -1025,8 +1023,11 @@ static int sfp_module_eeprom(void *priv, struct ethtool_eeprom *ee, u8 *data) first += len; data += len; } - if (first >= ETH_MODULE_SFF_8079_LEN && last > first) { - len = last - first; + if (first >= ETH_MODULE_SFF_8079_LEN && + first < ETH_MODULE_SFF_8472_LEN) { + len = min_t(unsigned int, last, ETH_MODULE_SFF_8472_LEN); + len -= first; + first -= ETH_MODULE_SFF_8079_LEN; ret = sfp->read(sfp, true, first, data, len); if (ret < 0) |