All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <olsajiri@gmail.com>
To: kan.liang@linux.intel.com
Cc: peterz@infradead.org, acme@kernel.org, mingo@redhat.com,
	eranian@google.com, mpe@ellerman.id.au,
	linux-kernel@vger.kernel.org, ak@linux.intel.com,
	andreas.kogler.0x@gmail.com, atrajeev@linux.vnet.ibm.com,
	namhyung@kernel.org, ravi.bangoria@amd.com, bpf@vger.kernel.org,
	Song Liu <songliubraving@fb.com>, Daniel Xu <dxu@dxuuu.xyz>
Subject: Re: [PATCH V2 3/6] perf: Use sample_flags for branch stack
Date: Tue, 27 Sep 2022 13:04:28 +0200	[thread overview]
Message-ID: <YzLYvELkvaTQesLD@krava> (raw)
In-Reply-To: <20220901130959.1285717-4-kan.liang@linux.intel.com>

On Thu, Sep 01, 2022 at 06:09:56AM -0700, kan.liang@linux.intel.com wrote:
> From: Kan Liang <kan.liang@linux.intel.com>
> 
> Use the new sample_flags to indicate whether the branch stack is filled
> by the PMU driver.
> 
> Remove the br_stack from the perf_sample_data_init() to minimize the number
> of cache lines touched.
> 
> Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
> ---
>  arch/powerpc/perf/core-book3s.c | 1 +
>  arch/x86/events/amd/core.c      | 4 +++-
>  arch/x86/events/core.c          | 4 +++-
>  arch/x86/events/intel/core.c    | 4 +++-
>  arch/x86/events/intel/ds.c      | 5 ++++-
>  include/linux/perf_event.h      | 4 ++--
>  kernel/events/core.c            | 4 ++--
>  7 files changed, 18 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
> index 13919eb96931..1ad1efdb33f9 100644
> --- a/arch/powerpc/perf/core-book3s.c
> +++ b/arch/powerpc/perf/core-book3s.c
> @@ -2297,6 +2297,7 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
>  			cpuhw = this_cpu_ptr(&cpu_hw_events);
>  			power_pmu_bhrb_read(event, cpuhw);
>  			data.br_stack = &cpuhw->bhrb_stack;
> +			data.sample_flags |= PERF_SAMPLE_BRANCH_STACK;
>  		}
>  
>  		if (event->attr.sample_type & PERF_SAMPLE_DATA_SRC &&
> diff --git a/arch/x86/events/amd/core.c b/arch/x86/events/amd/core.c
> index 9fbdfbcaf25a..8b70237c33f7 100644
> --- a/arch/x86/events/amd/core.c
> +++ b/arch/x86/events/amd/core.c
> @@ -929,8 +929,10 @@ static int amd_pmu_v2_handle_irq(struct pt_regs *regs)
>  		if (!x86_perf_event_set_period(event))
>  			continue;
>  
> -		if (has_branch_stack(event))
> +		if (has_branch_stack(event)) {
>  			data.br_stack = &cpuc->lbr_stack;
> +			data.sample_flags |= PERF_SAMPLE_BRANCH_STACK;
> +		}
>  
>  		if (perf_event_overflow(event, &data, regs))
>  			x86_pmu_stop(event, 0);
> diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
> index c3d6d139a3c1..b30b8bbcd1e2 100644
> --- a/arch/x86/events/core.c
> +++ b/arch/x86/events/core.c
> @@ -1701,8 +1701,10 @@ int x86_pmu_handle_irq(struct pt_regs *regs)
>  
>  		perf_sample_data_init(&data, 0, event->hw.last_period);
>  
> -		if (has_branch_stack(event))
> +		if (has_branch_stack(event)) {
>  			data.br_stack = &cpuc->lbr_stack;
> +			data.sample_flags |= PERF_SAMPLE_BRANCH_STACK;
> +		}
>  
>  		if (perf_event_overflow(event, &data, regs))
>  			x86_pmu_stop(event, 0);
> diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
> index 7c1e3d36bc65..b5c02627a155 100644
> --- a/arch/x86/events/intel/core.c
> +++ b/arch/x86/events/intel/core.c
> @@ -3017,8 +3017,10 @@ static int handle_pmi_common(struct pt_regs *regs, u64 status)
>  
>  		perf_sample_data_init(&data, 0, event->hw.last_period);
>  
> -		if (has_branch_stack(event))
> +		if (has_branch_stack(event)) {
>  			data.br_stack = &cpuc->lbr_stack;
> +			data.sample_flags |= PERF_SAMPLE_BRANCH_STACK;
> +		}
>  
>  		if (perf_event_overflow(event, &data, regs))
>  			x86_pmu_stop(event, 0);
> diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c
> index 01cbe26225c2..5dcfd2de6ef8 100644
> --- a/arch/x86/events/intel/ds.c
> +++ b/arch/x86/events/intel/ds.c
> @@ -1648,8 +1648,10 @@ static void setup_pebs_fixed_sample_data(struct perf_event *event,
>  		data->sample_flags |= PERF_SAMPLE_TIME;
>  	}
>  
> -	if (has_branch_stack(event))
> +	if (has_branch_stack(event)) {
>  		data->br_stack = &cpuc->lbr_stack;
> +		data->sample_flags |= PERF_SAMPLE_BRANCH_STACK;
> +	}
>  }
>  
>  static void adaptive_pebs_save_regs(struct pt_regs *regs,
> @@ -1799,6 +1801,7 @@ static void setup_pebs_adaptive_sample_data(struct perf_event *event,
>  		if (has_branch_stack(event)) {
>  			intel_pmu_store_pebs_lbrs(lbr);
>  			data->br_stack = &cpuc->lbr_stack;
> +			data->sample_flags |= PERF_SAMPLE_BRANCH_STACK;
>  		}
>  	}
>  
> diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
> index 0978165a2d87..1e12e79454e0 100644
> --- a/include/linux/perf_event.h
> +++ b/include/linux/perf_event.h
> @@ -1011,7 +1011,6 @@ struct perf_sample_data {
>  	u64				sample_flags;
>  	u64				addr;
>  	struct perf_raw_record		*raw;
> -	struct perf_branch_stack	*br_stack;
>  	u64				period;
>  	union perf_sample_weight	weight;
>  	u64				txn;
> @@ -1021,6 +1020,8 @@ struct perf_sample_data {
>  	 * The other fields, optionally {set,used} by
>  	 * perf_{prepare,output}_sample().
>  	 */
> +	struct perf_branch_stack	*br_stack;
> +
>  	u64				type;
>  	u64				ip;
>  	struct {
> @@ -1061,7 +1062,6 @@ static inline void perf_sample_data_init(struct perf_sample_data *data,
>  	data->sample_flags = 0;
>  	data->addr = addr;
>  	data->raw  = NULL;
> -	data->br_stack = NULL;

hi,
there's one more place, I'll send full patch for that

jirka


---
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index b05f0310dbd3..98abc6ebb8ea 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -1687,6 +1687,9 @@ BPF_CALL_4(bpf_read_branch_records, struct bpf_perf_event_data_kern *, ctx,
 	if (unlikely(flags & ~BPF_F_GET_BRANCH_RECORDS_SIZE))
 		return -EINVAL;
 
+	if (unlikely(!(ctx->data->sample_flags & PERF_SAMPLE_BRANCH_STACK)))
+		return -ENOENT;
+
 	if (unlikely(!br_stack))
 		return -ENOENT;
 

  parent reply	other threads:[~2022-09-27 11:06 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-01 13:09 [PATCH V2 0/6] Add sample_flags to improve the perf_sample_data struct kan.liang
2022-09-01 13:09 ` [PATCH V2 1/6] perf: Add sample_flags to indicate the PMU-filled sample data kan.liang
2022-09-06  9:41   ` [tip: perf/core] " tip-bot2 for Kan Liang
2022-09-01 13:09 ` [PATCH V2 2/6] perf/x86/intel/pebs: Fix PEBS timestamps overwritten kan.liang
2022-09-06  9:41   ` [tip: perf/core] " tip-bot2 for Kan Liang
2022-10-11 18:20   ` [PATCH V2 2/6] " Namhyung Kim
2022-10-12  8:04     ` Peter Zijlstra
2022-10-12 16:12       ` Namhyung Kim
2022-09-01 13:09 ` [PATCH V2 3/6] perf: Use sample_flags for branch stack kan.liang
2022-09-06  9:41   ` [tip: perf/core] " tip-bot2 for Kan Liang
2022-09-27 11:04   ` Jiri Olsa [this message]
2022-09-01 13:09 ` [PATCH V2 4/6] perf: Use sample_flags for weight kan.liang
2022-09-02  5:29   ` Namhyung Kim
2022-09-06 13:56     ` Liang, Kan
2022-09-06  9:41   ` [tip: perf/core] " tip-bot2 for Kan Liang
2022-09-01 13:09 ` [PATCH V2 5/6] perf: Use sample_flags for data_src kan.liang
2022-09-06  9:41   ` [tip: perf/core] " tip-bot2 for Kan Liang
2022-09-01 13:09 ` [PATCH V2 6/6] perf: Use sample_flags for txn kan.liang
2022-09-06  9:41   ` [tip: perf/core] " tip-bot2 for Kan Liang
2022-09-02  5:32 ` [PATCH V2 0/6] Add sample_flags to improve the perf_sample_data struct Namhyung Kim
2022-09-05  3:33   ` Ravi Bangoria

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YzLYvELkvaTQesLD@krava \
    --to=olsajiri@gmail.com \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=andreas.kogler.0x@gmail.com \
    --cc=atrajeev@linux.vnet.ibm.com \
    --cc=bpf@vger.kernel.org \
    --cc=dxu@dxuuu.xyz \
    --cc=eranian@google.com \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=mpe@ellerman.id.au \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=ravi.bangoria@amd.com \
    --cc=songliubraving@fb.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.