Sync with 9. Reference: /n/patches.lsub.org/patch/plan9-20120630 Date: Tue Jul 3 11:41:56 CES 2012 Signed-off-by: nemo@lsub.org # rm /sys/man/4/sacfs # rm /sys/man/8/mksacfs # rm /sys/src/cmd/disk/sacfs/mkfile # rm /sys/src/cmd/disk/sacfs/mksacfs.c # rm /sys/src/cmd/disk/sacfs/sac.c # rm /sys/src/cmd/disk/sacfs/sac.h # rm /sys/src/cmd/disk/sacfs/sacfs.c # rm /sys/src/cmd/disk/sacfs/sacfs.h # rm /sys/src/cmd/disk/sacfs/ssort.h # rm /sys/src/cmd/disk/sacfs/ssort6.c # rm /sys/src/cmd/disk/sacfs/unsac.c # rm /sys/src/ape/lib/bsd/strdup.c --- /sys/src/9/pc/mp.c Mon Jun 4 11:12:42 2012 +++ /sys/src/9/pc/mp.c Tue Jul 3 10:37:28 2012 @@ -736,8 +736,8 @@ } if(bus == nil){ typenm = type < 0 || type >= nelem(buses)? "": buses[type]; - panic("mpintrenablex: can't find bus type %d (%s) for " - "irq %d %s busno %d", type, typenm, v->irq, v->name, bno); + print("mpintrenablex: can't find bus type %d (%s) for irq %d " + "%s busno %d\n", type, typenm, v->irq, v->name, bno); return -1; } --- /sys/src/9/pc/sdiahci.c Thu Apr 12 12:25:06 2012 +++ /sys/src/9/pc/sdiahci.c Tue Jul 3 10:37:28 2012 @@ -1823,8 +1823,7 @@ { dprint("iaahcimode: %ux %ux %ux\n", pcicfgr8(p, 0x91), pcicfgr8(p, 92), pcicfgr8(p, 93)); - pcicfgw16(p, 0x92, pcicfgr32(p, 0x92) | 0xf); /* ports 0-3 */ -// pcicfgw8(p, 0x93, pcicfgr32(p, 9x93) | 3); /* ports 4-5 */ + pcicfgw16(p, 0x92, pcicfgr16(p, 0x92) | 0x3f); /* ports 0-5 */ return 0; } @@ -1838,7 +1837,7 @@ c->lmmio[0x4/4] |= 1 << 31; /* enable ahci mode (ghc register) */ c->lmmio[0xc/4] = (1 << 6) - 1; /* 5 ports. (supposedly ro pi reg.) */ - /* enable ahci mode; from ich9 datasheet */ + /* enable ahci mode and 6 ports; from ich9 datasheet */ pcicfgw16(c->pci, 0x90, 1<<6 | 1<<5); } @@ -1946,7 +1945,6 @@ memset(olds, 0xff, sizeof olds); p = nil; head = tail = nil; -loop: while((p = pcimatch(p, 0, 0)) != nil){ type = didtype(p); if (type == -1 || p->mem[Abar].bar == 0) @@ -1989,7 +1987,7 @@ } n = newctlr(c, s, nunit); if(n < 0) - goto loop; + continue; niadrive += n; niactlr++; if(head) --- /sys/src/cmd/ssh2/netssh.c Mon Apr 23 15:42:36 2012 +++ /sys/src/cmd/ssh2/netssh.c Tue Jul 3 10:37:50 2012 @@ -1515,8 +1515,7 @@ or->fid->file->name, or->aux); if (!or->aux) respond(or, "interrupted"); - else if (or->ifcall.type == Topen && (qidpath & Qtypemask) == Qlisten && - (qidpath >> Levshift) == Connection || + else if (or->ifcall.type == Topen && (qidpath & Qtypemask) == Qlisten || or->ifcall.type == Tread && (qidpath & Qtypemask) == Qdata && (qidpath >> Levshift) == Subchannel || or->ifcall.type == Tread && (qidpath & Qtypemask) == Qreqrem) --- /sys/man/4/flashfs Thu Apr 12 12:24:59 2012 +++ /sys/man/4/flashfs Tue Jul 3 10:41:31 2012 @@ -70,5 +70,4 @@ .B /sys/src/cmd/aux/flashfs .SH "SEE ALSO" .IR paqfs (4), -.IR sacfs (4), .IR mkflashfs (8) --- /sys/man/8/mkflashfs Thu Apr 12 12:25:01 2012 +++ /sys/man/8/mkflashfs Tue Jul 3 10:41:31 2012 @@ -35,5 +35,4 @@ .B /sys/src/cmd/aux/flashfs/mkflashfs.c .SH "SEE ALSO" .IR flashfs (4), -.IR paqfs (4), -.IR sacfs (4) +.IR paqfs (4) --- /sys/src/cmd/file.c Thu Apr 12 12:25:31 2012 +++ /sys/src/cmd/file.c Tue Jul 3 10:41:31 2012 @@ -607,10 +607,11 @@ /* 0xcafebabe */ 0xbebafeca, 0xFFFFFFFF, "Mach-O universal executable\n", OCTET, /* - * venti & fossil magic numbers are stored big-endian on disk, + * these magic numbers are stored big-endian on disk, * thus the numbers appear reversed in this table. */ 0xad4e5cd1, 0xFFFFFFFF, "venti arena\n", OCTET, + 0x2bb19a52, 0xFFFFFFFF, "paq archive\n", OCTET, }; int @@ -644,7 +645,7 @@ */ Fileoffmag longofftab[] = { /* - * venti & fossil magic numbers are stored big-endian on disk, + * these magic numbers are stored big-endian on disk, * thus the numbers appear reversed in this table. */ 256*1024, 0xe7a5e4a9, 0xFFFFFFFF, "venti arenas partition\n", OCTET, --- /sys/src/cmd/disk/mkfile Thu Apr 12 12:25:30 2012 +++ /sys/src/cmd/disk/mkfile Tue Jul 3 10:42:11 2012 @@ -12,7 +12,6 @@ 9660\ kfs\ prep\ -# sacfs\ OFILES= --- /sys/include/ape/bsd.h Thu Apr 12 12:24:40 2012 +++ /sys/include/ape/bsd.h Tue Jul 3 10:42:44 2012 @@ -34,11 +34,9 @@ extern void bhappy(void*); extern int rresvport(int*); extern int rcmd(char**, int, char*, char*, char*, int*); -extern char* strdup(char*); extern int strcasecmp(char*, char*); extern int putenv(char*); extern int strncasecmp(char*, char*,int); -extern void* memccpy(void*, void*, int, size_t); extern int getopt(int, char**, char*); extern int opterr; --- /sys/include/ape/string.h Thu Apr 12 12:24:40 2012 +++ /sys/include/ape/string.h Tue Jul 3 10:42:44 2012 @@ -9,6 +9,7 @@ #endif extern void *memcpy(void *, const void *, size_t); +extern void* memccpy(void*, void*, int, size_t); extern void *memmove(void *, const void *, size_t); extern char *strcpy(char *, const char *); extern char *strncpy(char *, const char *, size_t); @@ -17,6 +18,7 @@ extern int memcmp(const void *, const void *, size_t); extern int strcmp(const char *, const char *); extern int strcoll(const char *, const char *); +extern char* strdup(char*); extern int strncmp(const char *, const char *, size_t); extern size_t strxfrm(char *, const char *, size_t); extern void *memchr(const void *, int, size_t); --- /sys/src/ape/lib/ap/gen/mkfile Thu Apr 12 12:25:13 2012 +++ /sys/src/ape/lib/ap/gen/mkfile Tue Jul 3 10:42:44 2012 @@ -37,6 +37,7 @@ strcoll.$O\ strcpy.$O\ strcspn.$O\ + strdup.$O\ strftime.$O\ strlen.$O\ strncat.$O\ --- /sys/src/ape/lib/ap/gen/strcpy.c Thu Apr 12 12:25:13 2012 +++ /sys/src/ape/lib/ap/gen/strcpy.c Tue Jul 3 10:42:44 2012 @@ -2,7 +2,7 @@ #define N 10000 static void* -memccpy(void *a1, void *a2, int c, unsigned long n) +pmemccpy(void *a1, void *a2, int c, size_t n) { char *s1, *s2; @@ -22,7 +22,7 @@ char *os1; os1 = s1; - while(!memccpy(s1, s2, 0, N)) { + while(!pmemccpy(s1, s2, 0, N)) { s1 += N; s2 += N; } --- /sys/src/ape/lib/ap/gen/strdup.c Thu Jan 1 00:00:00 1970 +++ /sys/src/ape/lib/ap/gen/strdup.c Tue Jul 3 10:42:44 2012 @@ -0,0 +1,16 @@ +#include +#include +#include + +char* +strdup(char *p) +{ + int n; + char *np; + + n = strlen(p)+1; + np = malloc(n); + if(np) + memmove(np, p, n); + return np; +} --- /sys/src/ape/lib/bsd/mkfile Thu Apr 12 12:25:16 2012 +++ /sys/src/ape/lib/bsd/mkfile Tue Jul 3 10:42:44 2012 @@ -44,7 +44,6 @@ strncasecmp.$O\ socket.$O\ socketpair.$O\ - strdup.$O\ pty.$O\ writev.$O\ --- /sys/src/9/omap/words Thu Apr 12 12:25:05 2012 +++ /sys/src/9/omap/words Tue Jul 3 10:43:08 2012 @@ -76,8 +76,7 @@ Flash -access to nand flash would be handy for nvram and paqfs or sacfs file -systems. +access to nand flash would be handy for nvram and paqfs file systems. In the flash, x-loader occupies up to 0x20000, then u-boot from 0x80000 to 0x1e0000, and there's a linux kernel after that (if you --- /sys/src/cmd/seconds.c Thu Apr 12 12:26:00 2012 +++ /sys/src/cmd/seconds.c Tue Jul 3 10:43:09 2012 @@ -103,12 +103,12 @@ int i, mer = HR24, bigval = -1; long flg = 0, ty; char *p; - char upzone[32]; Datetok *tp; now = localtime(time(0)); /* default to local time (zone) */ tm->tzoff = now->tzoff; - strncpy(tm->zone, now->zone, sizeof tm->zone); + strncpy(tm->zone, now->zone, sizeof tm->zone - 1); + tm->zone[sizeof tm->zone - 1] = '\0'; tm->mday = tm->mon = tm->year = -1; /* mandatory */ tm->hour = tm->min = tm->sec = 0; @@ -145,11 +145,11 @@ case Tz: tm->tzoff = FROMVAL(tp); /* tm2sec needs the name in upper case */ - strcpy(upzone, fields[i]); - for (p = upzone; *p; p++) + strncpy(tm->zone, fields[i], sizeof tm->zone - 1); + tm->zone[sizeof tm->zone - 1] = '\0'; + for (p = tm->zone; *p; p++) if (isascii(*p) && islower(*p)) *p = toupper(*p); - strncpy(tm->zone, upzone, sizeof tm->zone); break; case Ignore: break; --- /sys/src/libc/9sys/dial.c Mon May 21 11:17:27 2012 +++ /sys/src/libc/9sys/dial.c Tue Jul 3 10:43:12 2012 @@ -45,7 +45,7 @@ int dfd; int cfd; - char dir[NETPATHLEN]; + char dir[NETPATHLEN+1]; char err[ERRMAX]; }; struct Dest { @@ -184,7 +184,8 @@ closeopenfd(&conn->dfd); closeopenfd(&conn->cfd); } - strncpy(conn->err, fields[4], sizeof conn->err); + strncpy(conn->err, fields[4], sizeof conn->err - 1); + conn->err[sizeof conn->err - 1] = '\0'; conn->dead = 1; return; } @@ -224,8 +225,10 @@ conn = &dp->conn[dp->winner]; if (ds->cfdp) *ds->cfdp = conn->cfd; - if (ds->dir) + if (ds->dir) { strncpy(ds->dir, conn->dir, NETPATHLEN); + ds->dir[NETPATHLEN] = '\0'; + } return conn->dfd; } @@ -249,7 +252,8 @@ for (conn = dp->conn; conn < dp->connend; conn++) if (conn - dp->conn != dp->winner && conn->dead && conn->err[0]) { - strncpy(besterr, conn->err, ERRMAX); + strncpy(besterr, conn->err, ERRMAX-1); + conn->err[ERRMAX-1] = '\0'; break; } return dp->winner; --- /sys/man/3/usb Thu Apr 12 12:24:59 2012 +++ /sys/man/3/usb Tue Jul 3 10:44:23 2012 @@ -515,11 +515,13 @@ .B #u/usb root of the USB interface .SH SOURCE -.B /sys/src/9/pc/usb.h +.B /sys/src/9/port/usb.h .br -.B /sys/src/9/pc/devusb.c +.B /sys/src/9/*/*usb?hci.h .br -.B /sys/src/9/pc/usb?hci.c +.B /sys/src/9/*/devusb.c +.br +.B /sys/src/9/*/usb?hci*.c .SH "SEE ALSO" .IR usb (2), .IR usb (4), --- /sys/man/2/semacquire Thu Apr 12 12:24:58 2012 +++ /sys/man/2/semacquire Tue Jul 3 10:44:40 2012 @@ -1,6 +1,6 @@ .TH SEMACQUIRE 2 .SH NAME -semacquire, semrelease \- user level semaphores +semacquire, tsemacquire, semrelease - user level semaphores .SH SYNOPSIS .B #include .br @@ -10,10 +10,14 @@ int semacquire(long *addr, int block); .PP .B +int tsemacquire(long *addr, ulong ms); +.PP +.B long semrelease(long *addr, long count); .SH DESCRIPTION -.I Semacquire -and +.IR Semacquire , +.IR tsemacquire , +and .I semrelease facilitate scheduling between processes sharing memory. Processes arrange to share memory by using @@ -22,7 +26,7 @@ .B RFMEM flag (see -.IR fork (2)), +.IR fork (2)), .IR segattach (2), or .IR thread (2). @@ -32,21 +36,30 @@ .I Semacquire atomically waits until the semaphore has a positive value and then decrements that value. -It returns 1 if the semaphore was acquired and \-1 on error -(e.g., if it was interrupted). If .I block is zero and the semaphore is not immediately available, .I semacquire returns 0 instead of waiting. +.I Tsemacquire +only waits +.I ms +milliseconds for the semaphore to attain a positive value +and, if available in that time, decrements that value. +It returns 0 otherwise. +Both functions return 1 if the semaphore was acquired +and -1 on error +(e.g., if they were interrupted). .I Semrelease -adds +adds .I count to the semaphore's value and returns the new value. .PP .I Semacquire +(and analogously for +.IR tsemacquire ) and .I semrelease can be thought of as efficient, correct replacements for: @@ -74,7 +87,8 @@ .PP Like .IR rendezvous (2), -.I semacquire +.IR semacquire , +.IR tsemacquire , and .I semrelease are not typically used directly. @@ -86,8 +100,9 @@ and .IR thread (2)). Also like -.I rendezvous , -.I semacquire +.IR rendezvous , +.IR semacquire , +.IR tsemacquire , and .I semrelease cannot be used to coordinate between threads