diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-03-26 16:46:58 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-03-26 16:46:58 +0200 |
commit | 2b323158bd8f2a1e1f86796e0bb0139e0c77dace (patch) | |
tree | 12d79929d25b5cc9ed4752ac8931c3ef6bc8e64a | |
parent | cf8f90e1d3bc60842e9ca25b6339e80c4d75a828 (diff) | |
parent | 019bb580da25ccfb414c9b71ce5c0743cf86d6fd (diff) | |
download | plan9front-2b323158bd8f2a1e1f86796e0bb0139e0c77dace.tar.xz |
merge
-rw-r--r-- | sys/src/9/pc/sdvirtio.c | 4 | ||||
-rw-r--r-- | sys/src/9/port/devsd.c | 11 |
2 files changed, 8 insertions, 7 deletions
diff --git a/sys/src/9/pc/sdvirtio.c b/sys/src/9/pc/sdvirtio.c index 6bb6c1162..ecda11778 100644 --- a/sys/src/9/pc/sdvirtio.c +++ b/sys/src/9/pc/sdvirtio.c @@ -579,7 +579,7 @@ vioenable(SDev *sd) snprint(name, sizeof(name), "%s (%s)", sd->name, sd->ifc->name); intrenable(vd->pci->intl, viointerrupt, vd, vd->pci->tbdf, name); outb(vd->port+Status, inb(vd->port+Status) | DriverOk); - return 0; + return 1; } static int @@ -591,7 +591,7 @@ viodisable(SDev *sd) vd = sd->ctlr; snprint(name, sizeof(name), "%s (%s)", sd->name, sd->ifc->name); intrdisable(vd->pci->intl, viointerrupt, vd, vd->pci->tbdf, name); - return 0; + return 1; } static SDev* diff --git a/sys/src/9/port/devsd.c b/sys/src/9/port/devsd.c index 18684b3d7..dd1feeedf 100644 --- a/sys/src/9/port/devsd.c +++ b/sys/src/9/port/devsd.c @@ -293,30 +293,31 @@ sdgetunit(SDev* sdev, int subno) qunlock(&sdev->unitlock); return nil; } + if((unit = malloc(sizeof(SDunit))) == nil){ qunlock(&sdev->unitlock); return nil; } sdev->unitflg[subno] = 1; - snprint(buf, sizeof buf, "%s%x", sdev->name, subno); kstrdup(&unit->name, buf); kstrdup(&unit->user, eve); unit->perm = 0555; unit->subno = subno; unit->dev = sdev; - + if(sdev->enabled == 0 && sdev->ifc->enable) - sdev->ifc->enable(sdev); - sdev->enabled = 1; + sdev->enabled = sdev->ifc->enable(sdev); /* * No need to lock anything here as this is only * called before the unit is made available in the * sdunit[] array. */ - if(unit->dev->ifc->verify(unit) == 0){ + if(sdev->enabled == 0 || unit->dev->ifc->verify(unit) == 0){ qunlock(&sdev->unitlock); + free(unit->name); + free(unit->user); free(unit); return nil; } |