On 31 Mrz., 15:03, [email protected] (erik quanstrom) wrote:
>         /* compute log10(ether->mbps) into lg */
>         for(lg = 0, mb = ether->mbps; mb >= 10; lg++)
>                 mb /= 10;
>         if (lg > 0)
>                 lg--;
>         if (lg > 14)                 /* 2^(14+17) = 2?? */
>                 lg = 14;
>         /* allocate larger output queues for higher-speed interfaces */
>         bsz = 1UL << (lg + 17);           /* 2?? = 128K, bsz = 2? � 128K */
>         while (bsz > mainmem->maxsize / 8 && bsz > 128*1024)
>                 bsz /= 2;
>
>         netifinit(ether, name, Ntypes, bsz);>>        while (ether->oq == nil 
> && bsz > 128*1024) {
>
>                 bsz /= 2;
>                 ether->oq = qopen(bsz, Qmsg, 0, 0);
>                 ether->limit = bsz;
>         }
>         if(ether->oq == nil)
>                 panic("etherreset %s", name);
>
> the simple fix would be to change the > on the marked
> line to >=.  but i think the while loop could be tossed
> since malloc panics on failure and since qopen only allocates
> sizeof(Queue) regardless of the limit argument.  i had
> this code when i wrote the myricom driver (qio sets q->limit itself).
>
>         j = ether->mbps;
>         if(j > 1000)
>                 j *= 10;
>         for(i = 0; j >= 100; i++)
>                 j /= 10;
>         i = (128<<i) * 1024;
>         netifinit(ether, name, Ntypes, i);
>         if(ether->oq == nil)
>                 ether->oq = qopen(i, Qmsg, 0, 0);
>         if(ether->oq == nil)
>                 panic("etherreset %s", name);
>
> by the way, a quick scan shows
>         ether2114x
>         etherrhine
> are capable of setting mbps to 0 on startup.  this should
> be legal, since ethernet can be connected after boot.
>
> - erik

It work's

Thank you.

AZ.

Reply via email to