Messages in this thread Patch in this message | | | Date | Tue, 21 Nov 2023 10:59:06 -0500 | Subject | Re: [PATCH 3/3] perf/x86: Add CAP_NO_INTERRUPT for uncore PMUs | From | "Liang, Kan" <> |
| |
On 2023-11-20 5:19 p.m., Namhyung Kim wrote: > It doesn't support sampling in uncore PMU events. While it's > technically possible to generate interrupts, let's treat it as if it > has no interrupt in order to skip the freq adjust/unthrottling logic > in the timer handler which is only meaningful to sampling events. > > Also remove the sampling event check because it'd be done in the general > code in the perf_event_open syscall. > > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > --- > arch/x86/events/intel/uncore.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c > index 69043e02e8a7..f7e6228bd1b1 100644 > --- a/arch/x86/events/intel/uncore.c > +++ b/arch/x86/events/intel/uncore.c > @@ -744,10 +744,6 @@ static int uncore_pmu_event_init(struct perf_event *event) > if (pmu->func_id < 0) > return -ENOENT; > > - /* Sampling not supported yet */ > - if (hwc->sample_period) > - return -EINVAL; > - > /* > * Place all uncore events for a particular physical package > * onto a single cpu > @@ -919,7 +915,12 @@ static int uncore_pmu_register(struct intel_uncore_pmu *pmu) > .stop = uncore_pmu_event_stop, > .read = uncore_pmu_event_read, > .module = THIS_MODULE, > - .capabilities = PERF_PMU_CAP_NO_EXCLUDE, > + /* > + * It doesn't allow sampling for uncore events, let's > + * treat the PMU has no interrupts to skip them in the > + * perf_adjust_freq_unthr_context(). > + */ > + .capabilities = PERF_PMU_CAP_NO_EXCLUDE | PERF_PMU_CAP_NO_INTERRUPT, > .attr_update = pmu->type->attr_update, > };
There is a special customized uncore PMU which needs the flag as well.
diff --git a/arch/x86/events/intel/uncore_snb.c b/arch/x86/events/intel/uncore_snb.c index 7fd4334e12a1..46a63e291975 100644 --- a/arch/x86/events/intel/uncore_snb.c +++ b/arch/x86/events/intel/uncore_snb.c @@ -1013,7 +1013,7 @@ static struct pmu snb_uncore_imc_pmu = { .start = uncore_pmu_event_start, .stop = uncore_pmu_event_stop, .read = uncore_pmu_event_read, - .capabilities = PERF_PMU_CAP_NO_EXCLUDE, + .capabilities = PERF_PMU_CAP_NO_EXCLUDE | PERF_PMU_CAP_NO_INTERRUPT, };
static struct intel_uncore_ops snb_uncore_imc_ops = {
Thanks, Kan > } else {
| |