The return type for get_regs_len in struct ethtool_ops is int,
the hns3 driver may return error when failing to get the regs
len by sending cmd to firmware.

Signed-off-by: Yunsheng Lin <linyunsh...@huawei.com>
---
Note: There is not Fixes tags for this becuase the ops is added
before the git is used.
---
 net/core/ethtool.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index d054028..158264f 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -793,8 +793,13 @@ static noinline_for_stack int ethtool_get_drvinfo(struct 
net_device *dev,
                if (rc >= 0)
                        info.n_priv_flags = rc;
        }
-       if (ops->get_regs_len)
-               info.regdump_len = ops->get_regs_len(dev);
+       if (ops->get_regs_len) {
+               int ret = ops->get_regs_len(dev);
+
+               if (ret > 0)
+                       info.regdump_len = ret;
+       }
+
        if (ops->get_eeprom_len)
                info.eedump_len = ops->get_eeprom_len(dev);
 
@@ -1337,6 +1342,9 @@ static int ethtool_get_regs(struct net_device *dev, char 
__user *useraddr)
                return -EFAULT;
 
        reglen = ops->get_regs_len(dev);
+       if (reglen <= 0)
+               return reglen;
+
        if (regs.len > reglen)
                regs.len = reglen;
 
-- 
2.8.1

Reply via email to