Skip to content
Snippets Groups Projects
Commit d8afe2f8 authored by Breno Leitao's avatar Breno Leitao Committed by Jakub Kicinski
Browse files

netpoll: Remove 4s sleep during carrier detection


This patch removes the msleep(4s) during netpoll_setup() if the carrier
appears instantly.

Here are some scenarios where this workaround is counter-productive in
modern ages:

Servers which have BMC communicating over NC-SI via the same NIC as gets
used for netconsole. BMC will keep the PHY up, hence the carrier
appearing instantly.

The link is fibre, SERDES getting sync could happen within 0.1Hz, and
the carrier also appears instantly.

Other than that, if a driver is reporting instant carrier and then
losing it, this is probably a driver bug.

Reported-by: default avatarMichael van der Westhuizen <rmikey@meta.com>
Signed-off-by: default avatarBreno Leitao <leitao@debian.org>
Link: https://lore.kernel.org/r/20230125185230.3574681-1-leitao@debian.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent b568d307
No related branches found
No related tags found
No related merge requests found
...@@ -682,7 +682,7 @@ int netpoll_setup(struct netpoll *np) ...@@ -682,7 +682,7 @@ int netpoll_setup(struct netpoll *np)
} }
if (!netif_running(ndev)) { if (!netif_running(ndev)) {
unsigned long atmost, atleast; unsigned long atmost;
np_info(np, "device %s not up yet, forcing it\n", np->dev_name); np_info(np, "device %s not up yet, forcing it\n", np->dev_name);
...@@ -694,7 +694,6 @@ int netpoll_setup(struct netpoll *np) ...@@ -694,7 +694,6 @@ int netpoll_setup(struct netpoll *np)
} }
rtnl_unlock(); rtnl_unlock();
atleast = jiffies + HZ/10;
atmost = jiffies + carrier_timeout * HZ; atmost = jiffies + carrier_timeout * HZ;
while (!netif_carrier_ok(ndev)) { while (!netif_carrier_ok(ndev)) {
if (time_after(jiffies, atmost)) { if (time_after(jiffies, atmost)) {
...@@ -704,15 +703,6 @@ int netpoll_setup(struct netpoll *np) ...@@ -704,15 +703,6 @@ int netpoll_setup(struct netpoll *np)
msleep(1); msleep(1);
} }
/* If carrier appears to come up instantly, we don't
* trust it and pause so that we don't pump all our
* queued console messages into the bitbucket.
*/
if (time_before(jiffies, atleast)) {
np_notice(np, "carrier detect appears untrustworthy, waiting 4 seconds\n");
msleep(4000);
}
rtnl_lock(); rtnl_lock();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment