55 lines
1.8 KiB
Diff
55 lines
1.8 KiB
Diff
From 9f2bc2c30d24987cff5edc43a3d8f89bef6ce12a Mon Sep 17 00:00:00 2001
|
||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||
Date: Thu, 23 Oct 2014 10:25:53 +0200
|
||
Subject: [PATCH 07/11] drivers: net: xgene: Rewrite buggy loop in
|
||
xgene_enet_ecc_init()
|
||
Origin: https://git.kernel.org/linus/b71e821de50f0ff92f10f33064ee1713e9014158
|
||
|
||
drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c: In function ‘xgene_enet_ecc_init’:
|
||
drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c:126: warning: ‘data’ may be used uninitialized in this function
|
||
|
||
Depending on the arbitrary value on the stack, the loop may terminate
|
||
too early, and cause a bogus -ENODEV failure.
|
||
|
||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
---
|
||
drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c | 16 +++++++---------
|
||
1 file changed, 7 insertions(+), 9 deletions(-)
|
||
|
||
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c b/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c
|
||
index e6d24c2..c22f326 100644
|
||
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c
|
||
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_sgmac.c
|
||
@@ -124,20 +124,18 @@ static int xgene_enet_ecc_init(struct xgene_enet_pdata *p)
|
||
{
|
||
struct net_device *ndev = p->ndev;
|
||
u32 data;
|
||
- int i;
|
||
+ int i = 0;
|
||
|
||
xgene_enet_wr_diag_csr(p, ENET_CFG_MEM_RAM_SHUTDOWN_ADDR, 0);
|
||
- for (i = 0; i < 10 && data != ~0U ; i++) {
|
||
+ do {
|
||
usleep_range(100, 110);
|
||
data = xgene_enet_rd_diag_csr(p, ENET_BLOCK_MEM_RDY_ADDR);
|
||
- }
|
||
+ if (data == ~0U)
|
||
+ return 0;
|
||
+ } while (++i < 10);
|
||
|
||
- if (data != ~0U) {
|
||
- netdev_err(ndev, "Failed to release memory from shutdown\n");
|
||
- return -ENODEV;
|
||
- }
|
||
-
|
||
- return 0;
|
||
+ netdev_err(ndev, "Failed to release memory from shutdown\n");
|
||
+ return -ENODEV;
|
||
}
|
||
|
||
static void xgene_enet_config_ring_if_assoc(struct xgene_enet_pdata *p)
|
||
--
|
||
2.1.0
|
||
|