Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}