Jump stacks before unlocking semaphores
[akaros.git] / kern / drivers / dev / srv.c
index db09385..ba4e144 100644 (file)
@@ -126,7 +126,7 @@ static int srvgen(struct chan *c, char *name, struct dirtab *tab,
 
 static void __srvinit(void)
 {
-       top_dir = kzmalloc(sizeof(struct srvfile), KMALLOC_WAIT);
+       top_dir = kzmalloc(sizeof(struct srvfile), MEM_WAIT);
        /* kstrdup, just in case we free this later */
        kstrdup(&top_dir->name, "srv");
        kstrdup(&top_dir->user, current ? current->user : "eve");
@@ -190,7 +190,7 @@ static struct chan *srvopen(struct chan *c, int omode)
        openmode(omode);        /* used as an error checker in plan9, does little now */
        if (c->qid.type & QTDIR) {
                if (omode & O_WRITE)
-                       error(EISDIR, NULL);
+                       error(EISDIR, ERROR_FIXME);
                c->mode = openmode(omode);
                c->flag |= COPEN;
                c->offset = 0;
@@ -208,13 +208,13 @@ static struct chan *srvopen(struct chan *c, int omode)
 #if 0
        if (omode & ORCLOSE) {
                if (strcmp(srv->user, up->env->user) != 0)
-                       error(EPERM, NULL);
+                       error(EPERM, ERROR_FIXME);
                else
                        srv->flags |= SORCLOSE;
        }
 #endif
        if ((srv->perm & DMEXCL) && atomic_read(&srv->opens))
-               error(EBUSY, NULL);
+               error(EBUSY, ERROR_FIXME);
        /* srv->chan is write-once, so we don't need to sync. */
        if (!srv->chan)
                error(EFAIL, "srv file has no chan yet");
@@ -233,7 +233,7 @@ static struct chan *srvopen(struct chan *c, int omode)
 static void srvcreate(struct chan *c, char *name, int omode, uint32_t perm)
 {
        struct srvfile *srv;
-       srv = kzmalloc(sizeof(struct srvfile), KMALLOC_WAIT);
+       srv = kzmalloc(sizeof(struct srvfile), MEM_WAIT);
        kstrdup(&srv->name, name);
        kstrdup(&srv->user, current ? current->user : "eve");
        srv->perm = 0770;       /* TODO need some security thoughts */
@@ -251,7 +251,7 @@ static void srvcreate(struct chan *c, char *name, int omode, uint32_t perm)
 
 static int srvwstat(struct chan *c, uint8_t * dp, int n)
 {
-       error(ENOSYS, NULL);
+       error(ENOSYS, ERROR_FIXME);
        return -1;
 }
 
@@ -297,7 +297,7 @@ static long srvwrite(struct chan *c, void *va, long count, int64_t offset)
        int fd;
 
        if (c->qid.type & QTDIR)
-               error(EPERM, NULL);
+               error(EPERM, ERROR_FIXME);
        srv = c->aux;
        if (!grab_ref(srv))
                error(EFAIL, "Unable to write srv file, concurrent removal");
@@ -311,7 +311,7 @@ static long srvwrite(struct chan *c, void *va, long count, int64_t offset)
                kfree(kbuf);
                nexterror();
        }
-       kbuf = kmalloc(count + 1, KMALLOC_WAIT);
+       kbuf = kmalloc(count + 1, MEM_WAIT);
        strlcpy(kbuf, va, count + 1);
        fd = strtoul(kbuf, 0, 10);
        /* the magic of srv: srv stores the chan corresponding to the fd.  -1 for
@@ -330,23 +330,23 @@ static long srvwrite(struct chan *c, void *va, long count, int64_t offset)
 }
 
 struct dev srvdevtab __devtab = {
-       "srv",
+       .name = "srv",
 
-       devreset,
-       srvinit,
-       devshutdown,
-       srvattach,
-       srvwalk,
-       srvstat,
-       srvopen,
-       srvcreate,
-       srvclose,
-       srvread,
-       devbread,
-       srvwrite,
-       devbwrite,
-       srvremove,
-       srvwstat,
-       devpower,
-       devchaninfo,
+       .reset = devreset,
+       .init = srvinit,
+       .shutdown = devshutdown,
+       .attach = srvattach,
+       .walk = srvwalk,
+       .stat = srvstat,
+       .open = srvopen,
+       .create = srvcreate,
+       .close = srvclose,
+       .read = srvread,
+       .bread = devbread,
+       .write = srvwrite,
+       .bwrite = devbwrite,
+       .remove = srvremove,
+       .wstat = srvwstat,
+       .power = devpower,
+       .chaninfo = devchaninfo,
 };