예제 #1
0
파일: pmcio.c 프로젝트: bhanug/harvey
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;
}
예제 #2
0
파일: pmcio.c 프로젝트: CoryXie/nix-os
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;
}