On Thu, Aug 16, 2012 at 12:51:50AM +0000, Oleksandr Tymoshenko wrote:
> 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
s/qq/q/

> + */
> +#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;
According to style(9), initialization and declaration shall be separated.

>  
>       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: "

Attachment: pgprRNzxWVMTw.pgp
Description: PGP signature

Reply via email to