On 2/8/24 12:52, David Ventura wrote: > During IP auto configuration, some drivers apparently need to wait a > certain length of time to settle; as this is not true for all drivers, > make this length of time configurable. > > Signed-off-by: David Ventura <david@xxxxxxxxxx> > --- > .../admin-guide/kernel-parameters.txt | 4 ++++ > Documentation/admin-guide/nfs/nfsroot.rst | 3 +++ > net/ipv4/ipconfig.c | 23 ++++++++++++++++--- > 3 files changed, 27 insertions(+), 3 deletions(-) > > diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt > index b47940577c10..b07a035642fa 100644 > --- a/Documentation/admin-guide/kernel-parameters.txt > +++ b/Documentation/admin-guide/kernel-parameters.txt > @@ -2291,6 +2291,10 @@ > > ip= [IP_PNP] > See Documentation/admin-guide/nfs/nfsroot.rst. > + ip.dev_wait_ms= > + [IP_PNP] > + See Documentation/admin-guide/nfs/nfsroot.rst. > + > > ipcmni_extend [KNL,EARLY] Extend the maximum number of unique System V > IPC identifiers from 32,768 to 16,777,216. > diff --git a/Documentation/admin-guide/nfs/nfsroot.rst b/Documentation/admin-guide/nfs/nfsroot.rst > index 135218f33394..f26f7a342af6 100644 > --- a/Documentation/admin-guide/nfs/nfsroot.rst > +++ b/Documentation/admin-guide/nfs/nfsroot.rst > @@ -223,6 +223,9 @@ ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns > /proc/net/ipconfig/ntp_servers to an NTP client before mounting the real > root filesystem if it is on NFS). > > +ip.dev_wait_ms=<value> > + Set the number of milliseconds to delay after opening the network device > + which will be autoconfigured. Defaults to 10 milliseconds. > > nfsrootdebug > This parameter enables debugging messages to appear in the kernel > diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c > index c56b6fe6f0d7..cbf35163b973 100644 > --- a/net/ipv4/ipconfig.c > +++ b/net/ipv4/ipconfig.c > @@ -82,8 +82,6 @@ > #define IPCONFIG_DYNAMIC > #endif > > -/* Define the friendly delay before and after opening net devices */ > -#define CONF_POST_OPEN 10 /* After opening: 10 msecs */ > > /* Define the timeout for waiting for a DHCP/BOOTP/RARP reply */ > #define CONF_OPEN_RETRIES 2 /* (Re)open devices twice */ > @@ -101,6 +99,7 @@ > > /* Wait for carrier timeout default in seconds */ > static unsigned int carrier_timeout = 120; > +static unsigned int dev_wait_ms = 10; > > /* > * Public IP configuration > @@ -1516,7 +1515,8 @@ static int __init ip_auto_config(void) > return err; > > /* Give drivers a chance to settle */ > - msleep(CONF_POST_OPEN); > + if(dev_wait_ms > 0) > + msleep(dev_wait_ms); What's the point to wait more than CONF_POST_OPEN with the change? > > /* > * If the config information is insufficient (e.g., our IP address or > @@ -1849,3 +1849,20 @@ static int __init set_carrier_timeout(char *str) > return 1; > } > __setup("carrier_timeout=", set_carrier_timeout); > + > + > +static int __init set_dev_wait_ms(char *str) > +{ > + ssize_t ret; > + > + if (!str) > + return 0; > + > + ret = kstrtouint(str, 0, &dev_wait_ms); > + if (ret) > + return 0; > + > + return 1; > +} > + > +__setup("ip.dev_wait_ms=", set_dev_wait_ms);