diff --git a/sys/src/9/pc/ethervirtio10.c b/sys/src/9/pc/ethervirtio10.c index 03108cad9..2f38f8605 100644 --- a/sys/src/9/pc/ethervirtio10.c +++ b/sys/src/9/pc/ethervirtio10.c @@ -40,7 +40,7 @@ enum { Sacknowledge = 1, Sdriver = 2, Sdriverok = 4, - Sfeatureok = 8, + Sfeaturesok = 8, Sfailed = 128, /* flags in Qnetstatus */ @@ -466,14 +466,15 @@ attach(Ether* edev) } ctlr->attached = 1; - /* driver is ready */ - ctlr->cfg->status |= Sdriverok; - /* enable the queues */ for(i = 0; i < ctlr->nqueue; i++){ ctlr->cfg->queuesel = i; ctlr->cfg->queueenable = 1; } + + /* driver is ready */ + ctlr->cfg->status |= Sdriverok; + iunlock(ctlr); /* start kprocs */ @@ -692,6 +693,8 @@ pciprobe(void) cfg->drvfeatsel = 0; cfg->drvfeat = c->feat[0] & (Fmac|Fctrlvq|Fctrlrx); + cfg->status |= Sfeaturesok; + for(i=0; iqueue); i++){ cfg->queuesel = i; n = cfg->queuesize; diff --git a/sys/src/9/pc/sdvirtio10.c b/sys/src/9/pc/sdvirtio10.c index df25df87a..e678e3383 100644 --- a/sys/src/9/pc/sdvirtio10.c +++ b/sys/src/9/pc/sdvirtio10.c @@ -46,6 +46,7 @@ enum { enum { Acknowledge = 1, Driver = 2, + FeaturesOk = 8, DriverOk = 4, Failed = 0x80, }; @@ -335,6 +336,7 @@ Baddev: cfg->drvfeat = vd->feat[1] & 1; cfg->drvfeatsel = 0; cfg->drvfeat = 0; + cfg->status |= FeaturesOk; for(i=0; iqueue); i++){ cfg->queuesel = i; @@ -698,11 +700,11 @@ vioenable(SDev *sd) intrenable(vd->pci->intl, viointerrupt, vd, vd->pci->tbdf, name); coherence(); - vd->cfg->status |= DriverOk; for(i = 0; i < vd->nqueue; i++){ vd->cfg->queuesel = i; vd->cfg->queueenable = 1; } + vd->cfg->status |= DriverOk; return 1; }