summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@armlinux.org.uk>2017-04-14 20:17:04 +0100
committerRussell King <rmk+kernel@armlinux.org.uk>2017-05-09 18:06:54 +0100
commit2be309597dd4adc42a25c6c23e600cc28711091b (patch)
treed04eb4c2a357be583ac51992b827cee9a9cb904b
parent16d2efd8904d068a17f3edc2c5ba78f54e1ef132 (diff)
sfp: fix eeprom reading
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
-rw-r--r--drivers/net/phy/sfp.c11
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)