mirror of
https://github.com/torvalds/linux.git
synced 2026-11-10 17:11:02 +01:00
The PMU CPU map has different semantics for core and uncore PMUs.
For core PMUs, pmu_cpus contains the CPUs on which the event can be
opened. Intersect the user-requested CPU map with the PMU CPU map to
reject CPUs unsupported by the PMU.
For uncore PMUs, pmu_cpus is read from the PMU's cpumask sysfs attribute,
which lists the default CPU to open the event on per socket/die, not the
set of CPUs it can only be opened on. The user-requested CPU may override
these defaults, and the driver can redirect the event to the appropriate
control CPU.
Currently, __perf_evlist__propagate_maps() intersects the user-requested
CPU map with pmu_cpus for all PMUs. If the user-requested CPU is not in
pmu_cpus, the intersection becomes empty and the evsel is removed before
perf_event_open() is called.
Add evsel->is_pmu_uncore, set once from pmu->is_uncore at parse time,
to skip the intersection for uncore PMUs. Core PMUs, and other
non-core PMUs such as software events, breakpoints, or tracepoints,
continue to be restricted to their PMU CPU map.
Fixes:
|
||
|---|---|---|
| .. | ||
| Documentation | ||
| include | ||
| tests | ||
| .gitignore | ||
| Build | ||
| core.c | ||
| cpumap.c | ||
| evlist.c | ||
| evsel.c | ||
| internal.h | ||
| lib.c | ||
| libperf.map | ||
| libperf.pc.template | ||
| Makefile | ||
| mmap.c | ||
| threadmap.c | ||
| TODO | ||
| xyarray.c | ||