diff options
| author | Joseph Koshy <jkoshy@FreeBSD.org> | 2005-08-22 18:18:20 +0000 |
|---|---|---|
| committer | Joseph Koshy <jkoshy@FreeBSD.org> | 2005-08-22 18:18:20 +0000 |
| commit | 744d67975ffc6d972976f6bf34c9489f9d51fc87 (patch) | |
| tree | 1ef45ceadd99efd38414c3d3cb817716aa08185b /sys/dev/hwpmc | |
| parent | a8eb16c5ea8f858db5e082fcf98d27136ea9e46a (diff) | |
Notes
Diffstat (limited to 'sys/dev/hwpmc')
| -rw-r--r-- | sys/dev/hwpmc/hwpmc_mod.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c index 5ba6a44b0bef1..ecd83d2a4e080 100644 --- a/sys/dev/hwpmc/hwpmc_mod.c +++ b/sys/dev/hwpmc/hwpmc_mod.c @@ -2790,10 +2790,24 @@ pmc_syscall_handler(struct thread *td, void *syscall_args) * All sampling mode PMCs need to be able to interrupt the * CPU. */ - if (PMC_IS_SAMPLING_MODE(mode)) caps |= PMC_CAP_INTERRUPT; + /* A valid class specifier should have been passed in. */ + for (n = 0; n < md->pmd_nclass; n++) + if (md->pmd_classes[n].pm_class == pa.pm_class) + break; + if (n == md->pmd_nclass) { + error = EINVAL; + break; + } + + /* The requested PMC capabilities should be feasible. */ + if ((md->pmd_classes[n].pm_caps & caps) != caps) { + error = EOPNOTSUPP; + break; + } + PMCDBG(PMC,ALL,2, "event=%d caps=0x%x mode=%d cpu=%d", pa.pm_ev, caps, mode, cpu); |
