ethervirtio: report correct length; fail gracefully if we can't initialize queues
This commit is contained in:
parent
45411c31dc
commit
48c5da7a64
1 changed files with 10 additions and 2 deletions
|
@ -324,7 +324,7 @@ rxproc(void *v)
|
||||||
|
|
||||||
blocks[i] = nil;
|
blocks[i] = nil;
|
||||||
|
|
||||||
b->wp = b->rp + u->len;
|
b->wp = b->rp + u->len - VheaderSize;
|
||||||
etheriq(edev, b, 1);
|
etheriq(edev, b, 1);
|
||||||
q->lastused++;
|
q->lastused++;
|
||||||
}
|
}
|
||||||
|
@ -591,13 +591,21 @@ pciprobe(int typ)
|
||||||
for(i=0; i<nelem(c->queue); i++){
|
for(i=0; i<nelem(c->queue); i++){
|
||||||
outs(c->port+Qselect, i);
|
outs(c->port+Qselect, i);
|
||||||
n = ins(c->port+Qsize);
|
n = ins(c->port+Qsize);
|
||||||
if(n == 0 || (n & (n-1)) != 0)
|
if(n == 0 || (n & (n-1)) != 0){
|
||||||
|
if(i < 2)
|
||||||
|
print("ethervirtio: queue %d has invalid size %d\n", i, n);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
if(initqueue(&c->queue[i], n) < 0)
|
if(initqueue(&c->queue[i], n) < 0)
|
||||||
break;
|
break;
|
||||||
coherence();
|
coherence();
|
||||||
outl(c->port+Qaddr, PADDR(c->queue[i].desc)/VBY2PG);
|
outl(c->port+Qaddr, PADDR(c->queue[i].desc)/VBY2PG);
|
||||||
}
|
}
|
||||||
|
if(i < 2){
|
||||||
|
print("ethervirtio: no queues\n");
|
||||||
|
free(c);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
c->nqueue = i;
|
c->nqueue = i;
|
||||||
|
|
||||||
if(h == nil)
|
if(h == nil)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue