use a Mach* instead of machno. the new signature fits usage better. why call machcolor(mp->machno) just to have machcolor immediately check if machno is in-bounds of the sys->machptr array? Reference: /n/atom/patch/applied2013/machcolorsig Date: Mon Oct 7 06:38:29 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/k10/main.c Mon Oct 7 06:36:14 2013 +++ /sys/src/nix/k10/main.c Mon Oct 7 06:36:14 2013 @@ -49,7 +49,7 @@ m->rdtsc = rdtsc(); DBG("cpu%d color %d tsc %lld\n", - m->machno, machcolor(m->machno), m->rdtsc); + m->machno, machcolor(m), m->rdtsc); /* * Enable the timer interrupt. --- /sys/src/nix/k10/devacpi.c Mon Oct 7 06:36:14 2013 +++ /sys/src/nix/k10/devacpi.c Mon Oct 7 06:36:14 2013 @@ -879,30 +879,26 @@ uintmem acpimblocksize(uintmem addr, int *dom) { - Srat *sl; + Srat *s; - for(sl = srat; sl != nil; sl = sl->next) - if(sl->type == SRmem) - if(sl->mem.addr <= addr && sl->mem.addr + sl->mem.len > addr){ - *dom = sl->mem.dom; - return sl->mem.len - (addr - sl->mem.addr); + for(s = srat; s != nil; s = s->next) + if(s->type == SRmem) + if(s->mem.addr <= addr && s->mem.addr + s->mem.len > addr){ + *dom = s->mem.dom; + return s->mem.len - (addr - s->mem.addr); } return 0; } int -machcolor(uint machno) +machcolor(Mach *mp) { - Srat *sl; - Mach *mp; + Srat *s; - if(machno >= MACHMAX) - return -1; - if((mp = sys->machptr[machno]) == nil) - return -1; - for(sl = srat; sl != nil; sl = sl->next) - if(sl->type == SRlapic && sl->lapic.apic == mp->apicno) - return sl->lapic.dom; + for(s = srat; s != nil; s = s->next) + if(s->type == SRlapic) + if(s->lapic.apic == mp->apicno) + return s->lapic.dom; return -1; } @@ -1509,8 +1505,6 @@ ioalloc(addr, len, 0, "acpi"); } -<<<<<<< devacpi.c.orig -======= enum { Blegacy = 1<<0, B8042kbd = 1<<1, @@ -1533,7 +1527,6 @@ sys->nocmos = i&Bnocmos; } ->>>>>>> devacpi.c int devacpiinit(void) { @@ -1542,10 +1535,7 @@ acpirsdptr(); if(fadt.smicmd == 0) return -1; -<<<<<<< devacpi.c.orig -======= iapcbootarch(); ->>>>>>> devacpi.c } return 0; } @@ -1559,18 +1549,11 @@ * This was written for the stock kernel. * This code must use 64 registers to be acpi ready in nix. */ -<<<<<<< devacpi.c.orig - if(1 || devacpiinit() < 0) -======= if(devacpiinit() < 0) ->>>>>>> devacpi.c error("no acpi"); -<<<<<<< devacpi.c.orig -======= error("acpi disabled"); ->>>>>>> devacpi.c /* * should use fadt->xpm* and fadt->xgpe* registers for 64 bits. * We are not ready in this kernel for that. --- /sys/src/nix/port/sysproc.c Mon Oct 7 06:36:14 2013 +++ /sys/src/nix/port/sysproc.c Mon Oct 7 06:36:14 2013 @@ -247,7 +247,7 @@ if(mp->sch->nrdy > m->sch->nrdy)/* more loaded than us, ignore */ continue; p->mp = mp; - p->color = machcolor(mp->machno); + p->color = machcolor(mp); machno = mach + 1; iprint("donate %d -> %d\n", m->machno, mp->machno); sched(); @@ -385,7 +385,7 @@ || datalim < textlim || bsslim < datalim) error(Ebadexec); - up->color = machcolor(m->machno); + up->color = machcolor(m); /* * The new stack is created in ESEG, temporarily mapped elsewhere. @@ -1126,7 +1126,6 @@ * int semacquire(int* addr, int block); */ addr = va_arg(list, int*); - addr = validaddr(addr, sizeof(int), 1); evenaddr(PTR2UINT(addr)); block = va_arg(list, int); --- /sys/src/nix/port/portfns.h Mon Oct 7 06:36:14 2013 +++ /sys/src/nix/port/portfns.h Mon Oct 7 06:36:14 2013 @@ -163,7 +163,7 @@ long logread(Log*, void*, ulong, long); Page* lookpage(Image*, ulong); Cmdtab* lookupcmd(Cmdbuf*, Cmdtab*, int); -int machcolor(uint); +int machcolor(Mach*); void mallocinit(void); long mallocreadsummary(Chan*, void*, long, long); void mallocsummary(void); --- /sys/src/nix/port/proc.c Mon Oct 7 06:36:14 2013 +++ /sys/src/nix/port/proc.c Mon Oct 7 06:36:14 2013 @@ -68,7 +68,7 @@ { int color; - color = machcolor(mp->machno); + color = machcolor(mp); if(color < 0){ // print("cpu%d: unknown color\n", mp->machno); color = 0; @@ -847,7 +847,7 @@ */ if(up == nil || p != up) return; - up->color = machcolor(up->mp->machno); + up->color = machcolor(up->mp); qlock(&up->seglock); for(i = 0; i < NSEG; i++) if(up->seg[i])