Author: gonzo
Date: Thu Aug 16 00:51:50 2012
New Revision: 239318
URL: http://svn.freebsd.org/changeset/base/239318

Log:
  Merge somewhat modified r230399 from projects/armv6:
  
  Add timeout to wait for network controllers to appear when netbooting.
  
  USB ethernet adapter initialization usually is delayed and
  they're not available immidiately after autoconfiguration. So we need
  to wait a bit before giving up
  
  Reviewed by:  stas@

Modified:
  head/sys/nfs/bootp_subr.c

Modified: head/sys/nfs/bootp_subr.c
==============================================================================
--- head/sys/nfs/bootp_subr.c   Wed Aug 15 22:51:01 2012        (r239317)
+++ head/sys/nfs/bootp_subr.c   Thu Aug 16 00:51:50 2012        (r239318)
@@ -82,6 +82,14 @@ __FBSDID("$FreeBSD$");
 #define BOOTP_SETTLE_DELAY 3
 #endif
 
+/* 
+ * Wait 10 seconds for interface appearance
+ * USB ethernet adapters might reqquire some time to pop up
+ */
+#ifndef        BOOTP_IFACE_WAIT_TIMEOUT
+#define        BOOTP_IFACE_WAIT_TIMEOUT        10
+#endif
+
 /*
  * What is the longest we will wait before re-sending a request?
  * Note this is also the frequency of "RPC timeout" messages.
@@ -1515,6 +1523,8 @@ bootpc_init(void)
 #endif
        struct nfsv3_diskless *nd;
        struct thread *td;
+       int timeout = BOOTP_IFACE_WAIT_TIMEOUT * hz;
+       int delay = hz / 10;
 
        nd = &nfsv3_diskless;
        td = curthread;
@@ -1567,6 +1577,7 @@ bootpc_init(void)
                allocifctx(gctx);
 #endif
 
+retry:
        ifctx = STAILQ_FIRST(&gctx->interfaces);
        IFNET_RLOCK();
        TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
@@ -1613,6 +1624,11 @@ bootpc_init(void)
 
        if (STAILQ_EMPTY(&gctx->interfaces) ||
            STAILQ_FIRST(&gctx->interfaces)->ifp == NULL) {
+               if (timeout > 0) {
+                       pause("bootpc", delay);
+                       timeout -= delay;
+                       goto retry;
+               }
 #ifdef BOOTP_WIRED_TO
                panic("%s: Could not find interface specified "
                      "by BOOTP_WIRED_TO: "
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to