lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Thu, 14 Mar 2024 16:09:42 +0800
From: Yang Jialong 杨佳龙 <jialong.yang@...ngroup.cn>
To: Robin Murphy <robin.murphy@....com>, Peter Zijlstra
 <peterz@...radead.org>, Ingo Molnar <mingo@...hat.com>,
 Arnaldo Carvalho de Melo <acme@...nel.org>,
 Namhyung Kim <namhyung@...nel.org>, Mark Rutland <mark.rutland@....com>,
 Will Deacon <will@...nel.org>
Cc: Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
 Jiri Olsa <jolsa@...nel.org>, Ian Rogers <irogers@...gle.com>,
 Adrian Hunter <adrian.hunter@...el.com>, linux-kernel@...r.kernel.org,
 linux-arm-kernel@...ts.infradead.org, x86@...nel.org,
 linux-perf-users@...r.kernel.org
Subject: Re: [PATCH 02/10] perf: Add capability for common event support



在 2024/3/13 1:34, Robin Murphy 写道:
> Many PMUs do not support common hardware/cache/etc. events and only
> handle their own PMU-specific events. Since this only depends on
> matching the event and PMU types, it's a prime candidate for a core
> capability to save more event_init boilerplate in drivers.
> 
> Signed-off-by: Robin Murphy <robin.murphy@....com>
> ---
>   include/linux/perf_event.h | 1 +
>   kernel/events/core.c       | 5 +++++
>   2 files changed, 6 insertions(+)
> 
> diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
> index d2a15c0c6f8a..983201f21dd2 100644
> --- a/include/linux/perf_event.h
> +++ b/include/linux/perf_event.h
> @@ -291,6 +291,7 @@ struct perf_event_pmu_context;
>   #define PERF_PMU_CAP_NO_EXCLUDE			0x0040
>   #define PERF_PMU_CAP_AUX_OUTPUT			0x0080
>   #define PERF_PMU_CAP_EXTENDED_HW_TYPE		0x0100
> +#define PERF_PMU_CAP_NO_COMMON_EVENTS		0x0200
>   
>   struct perf_output_handle;
>   
> diff --git a/kernel/events/core.c b/kernel/events/core.c
> index f0f0f71213a1..7ad80826c218 100644
> --- a/kernel/events/core.c
> +++ b/kernel/events/core.c
> @@ -11649,6 +11649,11 @@ static int perf_try_init_event(struct pmu *pmu, struct perf_event *event)
>   	struct perf_event_context *ctx = NULL;
>   	int ret;
>   
> +	/* Short-circuit if we know the PMU won't want this event */
> +	if (pmu->capabilities & PERF_PMU_CAP_NO_COMMON_EVENTS &&
> +	    event->attr.type != pmu->type)
> +		return -ENOENT;
> +

         /*
          * PERF_TYPE_HARDWARE and PERF_TYPE_HW_CACHE
          * are often aliases for PERF_TYPE_RAW.
          */
         type = event->attr.type;
         if (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE) {
                 type = event->attr.config >> PERF_PMU_TYPE_SHIFT;
                 if (!type) {
                         type = PERF_TYPE_RAW;
                 } else {
                         extended_type = true;
                         event->attr.config &= PERF_HW_EVENT_MASK;
                 }
         }

again:
         rcu_read_lock();
         pmu = idr_find(&pmu_idr, type);
         rcu_read_unlock();
         if (pmu) {
Above code tells me it's possible that 'pmu->type != event->attr.type' 
is true when event->attr.type equals to PERF_TYPE_HARDWARE or 
PERF_TYPE_HW_CACHE, and pmu->type should equal to event->attr.config >> 
PERF_PMU_TYPE_SHIFT.

We find the target pmu by event->attr.config >> PERF_PMU_TYPE_SHIFT.

Code added discard this option.

And code tells me that no try. Target PMU is doubtless.




>   	if (!try_module_get(pmu->module))
>   		return -ENODEV;
>   


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ