Yoann Padioleau noted that mach is not set in lock, therefor tests on l->m depend on lock vs. ilock, which is inconsistent. Reference: /n/atom/patch/applied/taslockmach Date: Thu Jun 5 13:35:16 CES 2014 Signed-off-by: quanstro@quanstro.net --- /sys/src/9/port/taslock.c Thu Jun 5 13:34:28 2014 +++ /sys/src/9/port/taslock.c Thu Jun 5 13:34:28 2014 @@ -82,6 +82,7 @@ l->pc = pc; l->p = up; l->isilock = 0; + l->m = MACHP(m->machno); #ifdef LOCKCYCLES l->lockcycles = -lcycles(); #endif @@ -117,6 +118,7 @@ l->pc = pc; l->p = up; l->isilock = 0; + l->m = MACHP(m->machno); #ifdef LOCKCYCLES l->lockcycles = -lcycles(); #endif --- /sys/src/nix/port/taslock.c Thu Jun 5 13:34:29 2014 +++ /sys/src/nix/port/taslock.c Thu Jun 5 13:34:30 2014 @@ -49,6 +49,7 @@ l->pc = pc; l->p = up; l->isilock = 0; + l->m = m; if(LOCKCYCLES) cycles(&l->lockcycles); @@ -86,6 +87,7 @@ l->pc = pc; l->p = up; l->isilock = 0; + l->m = m; if(LOCKCYCLES) cycles(&l->lockcycles); if(l != &waitstatslk) @@ -220,7 +222,7 @@ if(islo()) print("iunlock while lo: pc %#p, held by %#p\n", getcallerpc(&l), l->pc); if(l->m != m){ - print("iunlock by cpu%d, locked by cpu%d: pc %#p, held by %#p\n", + print("iunlock by mach%d, locked by mach%d: pc %#p, held by %#p\n", m->machno, l->m->machno, getcallerpc(&l), l->pc); }