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.
