summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2017-03-26 16:46:58 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2017-03-26 16:46:58 +0200
commit2b323158bd8f2a1e1f86796e0bb0139e0c77dace (patch)
tree12d79929d25b5cc9ed4752ac8931c3ef6bc8e64a
parentcf8f90e1d3bc60842e9ca25b6339e80c4d75a828 (diff)
parent019bb580da25ccfb414c9b71ce5c0743cf86d6fd (diff)
downloadplan9front-2b323158bd8f2a1e1f86796e0bb0139e0c77dace.tar.xz
merge
-rw-r--r--sys/src/9/pc/sdvirtio.c4
-rw-r--r--sys/src/9/port/devsd.c11
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;
}