clean up the production of /dev/swap and add new allocb stats. Reference: /n/atom/patch/applied/devswapfix Date: Thu Jan 16 23:50:59 CET 2014 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/port/qmalloc.c Thu Jan 16 23:50:42 2014 +++ /sys/src/nix/port/qmalloc.c Thu Jan 16 23:50:42 2014 @@ -379,8 +379,8 @@ return (nunits-1) * sizeof(Header); } -static void -mallocreadfmt(char* s, char* e) +char* +mallocstats(char* s, char* e) { char *p; Header *q; @@ -443,6 +443,7 @@ p = seprint(p, e, "%s %ud\n", qstatstr[i], qstats[i]); } MUNLOCK; + return p; } long @@ -455,7 +456,7 @@ free(alloc); nexterror(); } - mallocreadfmt(alloc, alloc+16*READSTR); + mallocstats(alloc, alloc+16*READSTR); n = readstr(offset, a, n, alloc); poperror(); free(alloc); --- /sys/src/nix/port/portfns.h Thu Jan 16 23:50:43 2014 +++ /sys/src/nix/port/portfns.h Thu Jan 16 23:50:43 2014 @@ -1,4 +1,3 @@ -void _assert(char*); void accounttime(void); void addbootfile(char*, uchar*, ulong); Timer* addclock0link(void (*)(void), int); @@ -12,8 +11,10 @@ int ainc(int*); void alarmkproc(void*); Block* allocb(int); +char* allocbstats(char*, char*); int anyhigher(void); int anyready(void); +void _assert(char*); Image* attachimage(int, Chan*, int, uintptr, uintptr); Page* auxpage(usize); Block* bl2mem(uchar*, Block*, int); @@ -163,7 +164,7 @@ Cmdtab* lookupcmd(Cmdbuf*, Cmdtab*, int); int machcolor(Mach*); void mallocinit(void); -long mallocreadsummary(Chan*, void*, long, long); +char* mallocstats(char*, char*); void mallocsummary(void); Block* mem2bl(uchar*, int); void (*mfcinit)(void); --- /sys/src/nix/port/devcons.c Thu Jan 16 23:50:43 2014 +++ /sys/src/nix/port/devcons.c Thu Jan 16 23:50:43 2014 @@ -411,7 +411,7 @@ if(ainc(&panicking)>1){ if(m->machno == pmno) archreset(); - ndnr(); + exit(1); } pmno = m->machno; synccons(); @@ -483,9 +483,9 @@ static void echo(char *buf, int n) { + char *e, *p; Mpl pl; static int ctrlt, pid; - char *e, *p; if(n == 0) return; @@ -987,25 +987,26 @@ nexterror(); } n = readstr(offset, buf, n, b); - free(b); poperror(); + free(b); return n; case Qswap: - tmp[0] = 0; - s = seprintpagestats(tmp, tmp + sizeof tmp); - s = seprintphysstats(s, tmp + sizeof tmp); - b = buf; - l = s - tmp; - i = readstr(offset, b, l, tmp); - b += i; - n -= i; - if(offset > l) - offset -= l; - else - offset = 0; - - return i + mallocreadsummary(c, b, n, offset); + s = b = smalloc(READSTR); + e = b + READSTR; + s = seprintpagestats(s, e); + s = seprintphysstats(s, e); + s = allocbstats(s, e); + s = mallocstats(s, e); + USED(s); + if(waserror()){ + free(b); + nexterror(); + } + n = readstr(offset, buf, n, b); + poperror(); + free(b); + return n; case Qsysname: if(sysname == nil)