diff options
| author | forsyth <forsyth@vitanuova.com> | 2011-06-19 15:43:13 -0700 |
|---|---|---|
| committer | forsyth <forsyth@vitanuova.com> | 2011-06-19 15:43:13 -0700 |
| commit | c594916b7a30516eff15698d7cc1f8e440a55a3d (patch) | |
| tree | 19ccef52be7696174994fac9dfd4c60ac6923f15 | |
| parent | 8cb5a8345165d9b30230ee47dc634522476f8052 (diff) | |
20110619-2343
| -rw-r--r-- | CHANGES | 3 | ||||
| -rw-r--r-- | emu/port/devfs-posix.c | 37 | ||||
| -rw-r--r-- | emu/port/kproc-pthreads.c | 11 | ||||
| -rw-r--r-- | include/version.h | 2 | ||||
| -rw-r--r-- | man/10/newchan | 4 |
5 files changed, 26 insertions, 31 deletions
@@ -1,3 +1,6 @@ +20110619 + emu/port/devfs-posix.c: put major/minor st_dev into path without mapping (with luck) + emu/port/kproc-pthreads.c: ensure pthread stack is at least PTHREAD_STACK_MIN (plus slop) 20110526 change osyield in Windows to use SwitchToThread instead of sleep(0) [e-mail list] 20110525 diff --git a/emu/port/devfs-posix.c b/emu/port/devfs-posix.c index c4aa3d9a..763694d1 100644 --- a/emu/port/devfs-posix.c +++ b/emu/port/devfs-posix.c @@ -632,45 +632,28 @@ fswstat(Chan *c, uchar *buf, int nb) return nb; } -#define QDEVBITS 4 /* 16 devices should be plenty */ -#define MAXDEV (1<<QDEVBITS) -#define QDEVSHIFT (64-QDEVBITS) -#define QINOMASK (((uvlong)1<<QDEVSHIFT)-1) -#define QPATH(d,i) (((uvlong)(d)<<QDEVSHIFT)|((uvlong)(i)&QINOMASK)) - static Qid fsqid(struct stat *st) { Qid q; - ulong dev; - int idev; - static int nqdev = 0; - static ulong qdev[MAXDEV]; - static Lock l; + u16int dev; q.type = QTFILE; if(S_ISDIR(st->st_mode)) q.type = QTDIR; - dev = st->st_dev; - lock(&l); - for(idev = 0; idev < nqdev; idev++) - if(qdev[idev] == dev) - break; - if(idev == nqdev) { - if(nqdev == MAXDEV) { - unlock(&l); - error("too many devices"); + dev = (u16int)st->st_dev; + if(dev & 0x8000){ + static int aware; + if(aware==0){ + aware = 1; + fprint(2, "fs: fsqid: top-bit dev: %#4.4ux\n", dev); } - qdev[nqdev++] = dev; + dev ^= 0x8080; } - unlock(&l); - - if(0) /* we'll just let it be masked off */ - if((uvlong)st->st_ino & ~QINOMASK) - error("inode number too large"); - q.path = QPATH(idev, st->st_ino); + q.path = (uvlong)dev<<48; + q.path ^= st->st_ino; q.vers = st->st_mtime; return q; diff --git a/emu/port/kproc-pthreads.c b/emu/port/kproc-pthreads.c index b48a00bb..32053794 100644 --- a/emu/port/kproc-pthreads.c +++ b/emu/port/kproc-pthreads.c @@ -8,6 +8,7 @@ #include <unistd.h> #include <signal.h> #include <pthread.h> +#include <limits.h> #include <errno.h> #include <semaphore.h> @@ -81,6 +82,14 @@ tramp(void *arg) os->self = pthread_self(); if(pthread_setspecific(prdakey, arg)) panic("set specific data failed in tramp\n"); + if(0){ + pthread_attr_t attr; + memset(&attr, 0, sizeof(attr)); + pthread_getattr_np(pthread_self(), &attr); + size_t s; + pthread_attr_getstacksize(&attr, &s); + print("stack size = %d\n", s); + } p->func(p->arg); pexit("{Tramp}", 0); return nil; @@ -150,7 +159,7 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) if(flags & KPX11) pthread_attr_setstacksize(&attr, 512*1024); /* could be a parameter */ else if(KSTACK > 0) - pthread_attr_setstacksize(&attr, KSTACK); + pthread_attr_setstacksize(&attr, (KSTACK < PTHREAD_STACK_MIN? PTHREAD_STACK_MIN: KSTACK)+1024); pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if(pthread_create(&thread, &attr, tramp, p)) diff --git a/include/version.h b/include/version.h index 8c476e75..7582f39f 100644 --- a/include/version.h +++ b/include/version.h @@ -1 +1 @@ -#define VERSION "Fourth Edition (20110526)" +#define VERSION "Fourth Edition (20110619)" diff --git a/man/10/newchan b/man/10/newchan index 69346d46..155572ea 100644 --- a/man/10/newchan +++ b/man/10/newchan @@ -174,9 +174,9 @@ Access file for information, as in the stat command or call. .TP .B Atodir Access file as directory (the -.B CHDIR +.B QTDIR bit of its -.B qid.path +.B qid.type must be set). .TP .B Aopen |
