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.
Unified · Split
| @@ -682,7 +682,7 @@ int netpoll_setup(struct netpoll *np) · 681 unmodified lines | ||
| 682 | 682 | } |
| 683 | 683 | |
| 684 | 684 | if (!netif_running(ndev)) { |
| 685 | − unsigned long atmost, atleast; | |
| 685 | + unsigned long atmost; | |
| 686 | 686 | |
| 687 | 687 | np_info(np, "device %s not up yet, forcing it\n", np->dev_name); |
| 688 | 688 | |
| @@ -694,7 +694,6 @@ int netpoll_setup(struct netpoll *np) · 5 unmodified lines | ||
| 694 | 694 | } |
| 695 | 695 | |
| 696 | 696 | rtnl_unlock(); |
| 697 | − atleast = jiffies + HZ/10; | |
| 698 | 697 | atmost = jiffies + carrier_timeout * HZ; |
| 699 | 698 | while (!netif_carrier_ok(ndev)) { |
| 700 | 699 | if (time_after(jiffies, atmost)) { |
| @@ -704,15 +703,6 @@ int netpoll_setup(struct netpoll *np) · 3 unmodified lines | ||
| 704 | 703 | msleep(1); |
| 705 | 704 | } |
| 706 | 705 | |
| 707 | − /* If carrier appears to come up instantly, we don't | |
| 708 | − * trust it and pause so that we don't pump all our | |
| 709 | − * queued console messages into the bitbucket. | |
| 710 | − */ | |
| 711 | − | |
| 712 | − if (time_before(jiffies, atleast)) { | |
| 713 | − np_notice(np, "carrier detect appears untrustworthy, waiting 4 seconds\n"); | |
| 714 | − msleep(4000); | |
| 715 | − } | |
| 716 | 706 | rtnl_lock(); |
| 717 | 707 | } |
| 718 | 708 | |