[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1349365123-25826-1-git-send-email-srinivas.kandagatla@st.com>
Date: Thu, 4 Oct 2012 16:38:43 +0100
From: Srinivas KANDAGATLA <srinivas.kandagatla@...com>
To: netdev@...r.kernel.org
Cc: srinivas.kandagatla@...com, davem@...emloft.net
Subject: [RFC:PATCH 3.6.0-] net/ipconfig: Extend ipconfig retries to device open
From: Srinivas Kandagatla <srinivas.kandagatla@...com>
This patch adds retries to ipconfig at device open, the reason to do
this is: Lets say If some mdio bus driver decide to use defered probe
when it does not find any phys on the bus. The same mdio-bus driver is
re-probed as part of lateinit calls. However ipconfig also fits into
lateinit calls, so if ipconfig is called before the re-probe of mdio-bus
driver, the mac driver will fail to find a valid PHY on the mdio-bus.
Real use case here, is that for phy modes like RMII where the clock to
the PHY should be supplied by MAC which can only happen once MAC driver
is setup. In my setup Am using stmmac MAC driver and mdio-gpio driver.
Moreover ipconfig code already uses retries in dynamic ip case, so
extending it to device open would help cases as described.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@...com>
---
Hi All,
Recently I did try defered probe to address a sequencing issue with
our STMMAC and mdio-gpio driver when PHY is in RMII mode.
Things did not work as expected, because ipconfig and
defered probe both of them are called at lateinit call level.
So I was back to sequencing problem again.
As, ipconfig code already uses retries in dynamic ip case, so
extending it to device open helped in my case.
Comments?
Am open for any suggestions to address this issue.
Thanks,
srini
net/ipv4/ipconfig.c | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index 67e8a6b..c30505e 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -1375,9 +1375,7 @@ static int __init wait_for_devices(void)
static int __init ip_auto_config(void)
{
__be32 addr;
-#ifdef IPCONFIG_DYNAMIC
int retries = CONF_OPEN_RETRIES;
-#endif
int err;
#ifdef CONFIG_PROC_FS
@@ -1398,12 +1396,22 @@ static int __init ip_auto_config(void)
/* Setup all network devices */
err = ic_open_devs();
+
+ if (err && --retries) {
+ pr_info("IP-Config: Reopening network devices...\n");
+ ssleep(1);
+ goto try_try_again;
+ }
+
if (err)
return err;
/* Give drivers a chance to settle */
msleep(CONF_POST_OPEN);
+#ifdef IPCONFIG_DYNAMIC
+ retries = CONF_OPEN_RETRIES;
+#endif
/*
* If the config information is insufficient (e.g., our IP address or
* IP address of the boot server is missing or we have multiple network
--
1.7.0.4
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists