Esempio n. 1
0
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;
}
Esempio n. 2
0
void
pmcupdate(Mach *m)
{
	PmcCtr *p;
	int i, maxct, wk;
	PmcWait *w;

	return;
	maxct = pmcnregs();
	for (i = 0; i < maxct; i++) {
		p = &m->pmc[i];
		ilock(&m->pmclock);
		if(p->ctrset & PmcSet)
			setctr(p->ctr, i);
		if(p->ctlset & PmcSet)
			setctl(&p->PmcCtl, i);
		p->ctr = getctr(i);
		getctl(&p->PmcCtl, i);
		p->ctrset = PmcIgn;
		p->ctlset = PmcIgn;
		wk = p->stale;
		p->stale = 0;
		if(wk){
			for(w = p->wq; w != nil; w = w->next){
				p->wq = w->next;
				wakeup(&w->rend);
				pmcwclose(w);
			}
		}
		iunlock(&m->pmclock);
	}
}
Esempio n. 3
0
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;
}