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; }