MCPcopy Create free account
hub / github.com/F-Stack/f-stack / perfmon_ioctl

Function perfmon_ioctl

freebsd/i386/i386/perfmon.c:333–406  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

331}
332
333static int
334perfmon_ioctl(struct cdev *dev, u_long cmd, caddr_t param, int flags, struct thread *td)
335{
336 struct pmc *pmc;
337 struct pmc_data *pmcd;
338 struct pmc_tstamp *pmct;
339 uint64_t freq;
340 int *ip;
341 int rv;
342
343 switch(cmd) {
344 case PMIOSETUP:
345 if (!(flags & FWRITE))
346 return EPERM;
347 pmc = (struct pmc *)param;
348
349 rv = perfmon_setup(pmc->pmc_num, pmc->pmc_val);
350 if (!rv) {
351 writerpmc |= (1 << pmc->pmc_num);
352 }
353 break;
354
355 case PMIOGET:
356 pmc = (struct pmc *)param;
357 rv = perfmon_get(pmc->pmc_num, &pmc->pmc_val);
358 break;
359
360 case PMIOSTART:
361 if (!(flags & FWRITE))
362 return EPERM;
363
364 ip = (int *)param;
365 rv = perfmon_start(*ip);
366 break;
367
368 case PMIOSTOP:
369 if (!(flags & FWRITE))
370 return EPERM;
371
372 ip = (int *)param;
373 rv = perfmon_stop(*ip);
374 break;
375
376 case PMIORESET:
377 if (!(flags & FWRITE))
378 return EPERM;
379
380 ip = (int *)param;
381 rv = perfmon_reset(*ip);
382 break;
383
384 case PMIOREAD:
385 pmcd = (struct pmc_data *)param;
386 rv = perfmon_read(pmcd->pmcd_num, &pmcd->pmcd_value);
387 break;
388
389 case PMIOTSTAMP:
390 freq = atomic_load_acq_64(&tsc_freq);

Callers

nothing calls this directly

Calls 8

perfmon_setupFunction · 0.85
perfmon_getFunction · 0.85
perfmon_startFunction · 0.85
perfmon_stopFunction · 0.85
perfmon_resetFunction · 0.85
perfmon_readFunction · 0.85
atomic_load_acq_64Function · 0.50
rdtscFunction · 0.50

Tested by

no test coverage detected