int pmcsetctr(uint32_t coreno, uint64_t v, uint32_t regno) { PmcCtr *p; Mach *mp; if(coreno == machp()->machno){ if (pmcdebug) { print("int getctr[%#ux, %#ux] = %#llux\n", regno, coreno, v); } return setctr(v, regno); } mp = sys->machptr[coreno]; p = &mp->pmc[regno]; if (pmcdebug) { print("ext setctr[%#ux, %#ux] = %#llux\n", regno, coreno, v); } ilock(&mp->pmclock); p->ctr = v; p->ctrset |= PmcSet; if(shouldipi(mp)) waitnotstale(mp, p); else iunlock(&mp->pmclock); return 0; }
uint64_t pmcgetctr(uint32_t coreno, uint32_t regno) { PmcCtr *p; Mach *mp; uint64_t v; if(coreno == machp()->machno){ v = getctr(regno); if (pmcdebug) { print("int getctr[%#ux, %#ux] = %#llux\n", regno, coreno, v); } return v; } mp = sys->machptr[coreno]; p = &mp->pmc[regno]; ilock(&mp->pmclock); p->ctrset |= PmcGet; if(shouldipi(mp)){ waitnotstale(mp, p); ilock(&mp->pmclock); } v = p->ctr; iunlock(&mp->pmclock); if (pmcdebug) { print("ext getctr[%#ux, %#ux] = %#llux\n", regno, coreno, v); } return v; }
int pmcsetctr(u32int coreno, u64int v, u32int regno) { PmcCtr *p; Mach *mp; if(coreno == m->machno){ if (pmcdebug) { print("int getctr[%#ux, %#ux] = %#llux\n", regno, coreno, v); } return setctr(v, regno); } mp = sys->machptr[coreno]; p = &mp->pmc[regno]; if (pmcdebug) { print("ext setctr[%#ux, %#ux] = %#llux\n", regno, coreno, v); } ilock(&mp->pmclock); p->ctr = v; p->ctrset |= PmcSet; p->stale = 1; if(mp->proc != nil || mp->nixtype != NIXAC) waitnotstale(mp, p); else iunlock(&mp->pmclock); return 0; }
u64int pmcgetctr(u32int coreno, u32int regno) { PmcCtr *p; Mach *mp; u64int v; if(coreno == m->machno){ v = getctr(regno); if (pmcdebug) { print("int getctr[%#ux, %#ux] = %#llux\n", regno, coreno, v); } return v; } mp = sys->machptr[coreno]; p = &mp->pmc[regno]; ilock(&mp->pmclock); p->ctrset |= PmcGet; p->stale = 1; if(mp->proc != nil || mp->nixtype != NIXAC){ waitnotstale(mp, p); ilock(&mp->pmclock); } v = p->ctr; iunlock(&mp->pmclock); if (pmcdebug) { print("ext getctr[%#ux, %#ux] = %#llux\n", regno, coreno, v); } return v; }
int pmcsetctl(uint32_t coreno, PmcCtl *pctl, uint32_t regno) { PmcCtr *p; Mach *mp; if(coreno == machp()->machno) return setctl(pctl, regno); mp = sys->machptr[coreno]; p = &mp->pmc[regno]; ilock(&mp->pmclock); ctl2ctl(&p->PmcCtl, pctl); p->ctlset |= PmcSet; if(shouldipi(mp)) waitnotstale(mp, p); else iunlock(&mp->pmclock); return 0; }
int pmcsetctl(u32int coreno, PmcCtl *pctl, u32int regno) { PmcCtr *p; Mach *mp; if(coreno == m->machno) return setctl(pctl, regno); mp = sys->machptr[coreno]; p = &mp->pmc[regno]; ilock(&mp->pmclock); ctl2ctl(&p->PmcCtl, pctl); p->ctlset |= PmcSet; p->stale = 1; if(mp->proc != nil || mp->nixtype != NIXAC) waitnotstale(mp, p); else iunlock(&mp->pmclock); return 0; }
int pmcgetctl(uint32_t coreno, PmcCtl *pctl, uint32_t regno) { PmcCtr *p; Mach *mp; if(coreno == machp()->machno) return getctl(pctl, regno); mp = sys->machptr[coreno]; p = &mp->pmc[regno]; ilock(&mp->pmclock); p->ctlset |= PmcGet; if(shouldipi(mp)){ waitnotstale(mp, p); ilock(&mp->pmclock); } memmove(pctl, &p->PmcCtl, sizeof(PmcCtl)); iunlock(&mp->pmclock); return 0; }
int pmcgetctl(u32int coreno, PmcCtl *pctl, u32int regno) { PmcCtr *p; Mach *mp; if(coreno == m->machno) return getctl(pctl, regno); mp = sys->machptr[coreno]; p = &mp->pmc[regno]; ilock(&mp->pmclock); p->ctlset |= PmcGet; p->stale = 1; if(mp->proc != nil || mp->nixtype != NIXAC){ waitnotstale(mp, p); ilock(&mp->pmclock); } memmove(pctl, &p->PmcCtl, sizeof(PmcCtl)); iunlock(&mp->pmclock); return 0; }