All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leo Yan <leo.yan@linaro.org>
To: James Clark <james.clark@arm.com>
Cc: mathieu.poirier@linaro.org, coresight@lists.linaro.org,
	linux-perf-users@vger.kernel.org, mike.leach@linaro.org,
	acme@kernel.org, suzuki.poulose@arm.com,
	John Garry <john.garry@huawei.com>, Will Deacon <will@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 7/9] perf cs-etm: Create ETE decoder
Date: Tue, 24 Aug 2021 16:33:05 +0800	[thread overview]
Message-ID: <20210824083305.GE204566@leoy-ThinkPad-X240s> (raw)
In-Reply-To: <20210806134109.1182235-8-james.clark@arm.com>

On Fri, Aug 06, 2021 at 02:41:07PM +0100, James Clark wrote:
> If the magic number indicates ETE instantiate a OCSD_BUILTIN_DCD_ETE
> decoder instead of OCSD_BUILTIN_DCD_ETMV4I. ETE is the new trace feature
> for Armv9.
> 
> Testing performed
> =================
> 
> * Old files with v0 and v1 headers for ETMv4 still open correctly
> * New files with new magic number open on new versions of perf
> * New files with new magic number fail to open on old versions of perf
> * Decoding with the ETE decoder results in the same output as the ETMv4
>   decoder as long as there are no new ETE packet types
> 
> Signed-off-by: James Clark <james.clark@arm.com>
>
> ---
>  .../perf/util/cs-etm-decoder/cs-etm-decoder.c | 20 +++++++++++++++++++
>  .../perf/util/cs-etm-decoder/cs-etm-decoder.h | 12 +++++++++++
>  tools/perf/util/cs-etm.c                      | 18 +++++++++++++++++
>  3 files changed, 50 insertions(+)
> 
> diff --git a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
> index 12cee321fbf2..3071e5deddcc 100644
> --- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
> +++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
> @@ -156,6 +156,20 @@ static void cs_etm_decoder__gen_etmv4_config(struct cs_etm_trace_params *params,
>  	config->core_prof = profile_CortexA;
>  }
>  
> +static void cs_etm_decoder__gen_ete_config(struct cs_etm_trace_params *params,
> +					   ocsd_ete_cfg *config)
> +{
> +	config->reg_configr = params->ete.reg_configr;
> +	config->reg_traceidr = params->ete.reg_traceidr;
> +	config->reg_idr0 = params->ete.reg_idr0;
> +	config->reg_idr1 = params->ete.reg_idr1;
> +	config->reg_idr2 = params->ete.reg_idr2;
> +	config->reg_idr8 = params->ete.reg_idr8;
> +	config->reg_devarch = params->ete.reg_devarch;
> +	config->arch_ver = ARCH_AA64;

Just a nitpick: if we connect with patch 02, it implement function
cs_etm_decoder__get_etmv4_arch_ver().  We can extend it to a more
general function cs_etm_decoder__get_arch_ver(); this can allow us to
have a central place to calculate 'arch_ver' for different archs.

I understand your patch doesn't want to mix things between ETMv4 and
ETE, either way is okay for me:

Reviewed-by: Leo Yan <leo.yan@linaro.org>

> +	config->core_prof = profile_CortexA;
> +}
> +
>  static void cs_etm_decoder__print_str_cb(const void *p_context,
>  					 const char *msg,
>  					 const int str_len)
> @@ -603,6 +617,7 @@ cs_etm_decoder__create_etm_decoder(struct cs_etm_decoder_params *d_params,
>  	const char *decoder_name;
>  	ocsd_etmv3_cfg config_etmv3;
>  	ocsd_etmv4_cfg trace_config_etmv4;
> +	ocsd_ete_cfg trace_config_ete;
>  	void *trace_config;
>  	u8 csid;
>  
> @@ -620,6 +635,11 @@ cs_etm_decoder__create_etm_decoder(struct cs_etm_decoder_params *d_params,
>  		decoder_name = OCSD_BUILTIN_DCD_ETMV4I;
>  		trace_config = &trace_config_etmv4;
>  		break;
> +	case CS_ETM_PROTO_ETE:
> +		cs_etm_decoder__gen_ete_config(t_params, &trace_config_ete);
> +		decoder_name = OCSD_BUILTIN_DCD_ETE;
> +		trace_config = &trace_config_ete;
> +		break;
>  	default:
>  		return -1;
>  	}
> diff --git a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h
> index 11f3391d06f2..0102ece5ca3e 100644
> --- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h
> +++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h
> @@ -37,11 +37,22 @@ struct cs_etmv4_trace_params {
>  	u32 reg_traceidr;
>  };
>  
> +struct cs_ete_trace_params {
> +	u32 reg_idr0;
> +	u32 reg_idr1;
> +	u32 reg_idr2;
> +	u32 reg_idr8;
> +	u32 reg_configr;
> +	u32 reg_traceidr;
> +	u32 reg_devarch;
> +};
> +
>  struct cs_etm_trace_params {
>  	int protocol;
>  	union {
>  		struct cs_etmv3_trace_params etmv3;
>  		struct cs_etmv4_trace_params etmv4;
> +		struct cs_ete_trace_params ete;
>  	};
>  };
>  
> @@ -65,6 +76,7 @@ enum {
>  	CS_ETM_PROTO_ETMV4i,
>  	CS_ETM_PROTO_ETMV4d,
>  	CS_ETM_PROTO_PTM,
> +	CS_ETM_PROTO_ETE
>  };
>  
>  enum cs_etm_decoder_operation {
> diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
> index d540512a3c96..e5649e9ea140 100644
> --- a/tools/perf/util/cs-etm.c
> +++ b/tools/perf/util/cs-etm.c
> @@ -460,6 +460,21 @@ static void cs_etm__set_trace_param_etmv4(struct cs_etm_trace_params *t_params,
>  	t_params[idx].etmv4.reg_traceidr = metadata[idx][CS_ETMV4_TRCTRACEIDR];
>  }
>  
> +static void cs_etm__set_trace_param_ete(struct cs_etm_trace_params *t_params,
> +					  struct cs_etm_auxtrace *etm, int idx)
> +{
> +	u64 **metadata = etm->metadata;
> +
> +	t_params[idx].protocol = CS_ETM_PROTO_ETE;
> +	t_params[idx].ete.reg_idr0 = metadata[idx][CS_ETMV4_TRCIDR0];
> +	t_params[idx].ete.reg_idr1 = metadata[idx][CS_ETMV4_TRCIDR1];
> +	t_params[idx].ete.reg_idr2 = metadata[idx][CS_ETMV4_TRCIDR2];
> +	t_params[idx].ete.reg_idr8 = metadata[idx][CS_ETMV4_TRCIDR8];
> +	t_params[idx].ete.reg_configr = metadata[idx][CS_ETMV4_TRCCONFIGR];
> +	t_params[idx].ete.reg_traceidr = metadata[idx][CS_ETMV4_TRCTRACEIDR];
> +	t_params[idx].ete.reg_devarch = metadata[idx][CS_ETE_TRCDEVARCH];
> +}
> +
>  static int cs_etm__init_trace_params(struct cs_etm_trace_params *t_params,
>  				     struct cs_etm_auxtrace *etm,
>  				     int decoders)
> @@ -479,6 +494,9 @@ static int cs_etm__init_trace_params(struct cs_etm_trace_params *t_params,
>  		case __perf_cs_etmv4_magic:
>  			cs_etm__set_trace_param_etmv4(t_params, etm, i);
>  			break;
> +		case __perf_cs_ete_magic:
> +			cs_etm__set_trace_param_ete(t_params, etm, i);
> +			break;
>  		default:
>  			return -EINVAL;
>  		}
> -- 
> 2.28.0
> 

WARNING: multiple messages have this Message-ID (diff)
From: Leo Yan <leo.yan@linaro.org>
To: James Clark <james.clark@arm.com>
Cc: mathieu.poirier@linaro.org, coresight@lists.linaro.org,
	linux-perf-users@vger.kernel.org, mike.leach@linaro.org,
	acme@kernel.org, suzuki.poulose@arm.com,
	John Garry <john.garry@huawei.com>, Will Deacon <will@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 7/9] perf cs-etm: Create ETE decoder
Date: Tue, 24 Aug 2021 16:33:05 +0800	[thread overview]
Message-ID: <20210824083305.GE204566@leoy-ThinkPad-X240s> (raw)
In-Reply-To: <20210806134109.1182235-8-james.clark@arm.com>

On Fri, Aug 06, 2021 at 02:41:07PM +0100, James Clark wrote:
> If the magic number indicates ETE instantiate a OCSD_BUILTIN_DCD_ETE
> decoder instead of OCSD_BUILTIN_DCD_ETMV4I. ETE is the new trace feature
> for Armv9.
> 
> Testing performed
> =================
> 
> * Old files with v0 and v1 headers for ETMv4 still open correctly
> * New files with new magic number open on new versions of perf
> * New files with new magic number fail to open on old versions of perf
> * Decoding with the ETE decoder results in the same output as the ETMv4
>   decoder as long as there are no new ETE packet types
> 
> Signed-off-by: James Clark <james.clark@arm.com>
>
> ---
>  .../perf/util/cs-etm-decoder/cs-etm-decoder.c | 20 +++++++++++++++++++
>  .../perf/util/cs-etm-decoder/cs-etm-decoder.h | 12 +++++++++++
>  tools/perf/util/cs-etm.c                      | 18 +++++++++++++++++
>  3 files changed, 50 insertions(+)
> 
> diff --git a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
> index 12cee321fbf2..3071e5deddcc 100644
> --- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
> +++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
> @@ -156,6 +156,20 @@ static void cs_etm_decoder__gen_etmv4_config(struct cs_etm_trace_params *params,
>  	config->core_prof = profile_CortexA;
>  }
>  
> +static void cs_etm_decoder__gen_ete_config(struct cs_etm_trace_params *params,
> +					   ocsd_ete_cfg *config)
> +{
> +	config->reg_configr = params->ete.reg_configr;
> +	config->reg_traceidr = params->ete.reg_traceidr;
> +	config->reg_idr0 = params->ete.reg_idr0;
> +	config->reg_idr1 = params->ete.reg_idr1;
> +	config->reg_idr2 = params->ete.reg_idr2;
> +	config->reg_idr8 = params->ete.reg_idr8;
> +	config->reg_devarch = params->ete.reg_devarch;
> +	config->arch_ver = ARCH_AA64;

Just a nitpick: if we connect with patch 02, it implement function
cs_etm_decoder__get_etmv4_arch_ver().  We can extend it to a more
general function cs_etm_decoder__get_arch_ver(); this can allow us to
have a central place to calculate 'arch_ver' for different archs.

I understand your patch doesn't want to mix things between ETMv4 and
ETE, either way is okay for me:

Reviewed-by: Leo Yan <leo.yan@linaro.org>

> +	config->core_prof = profile_CortexA;
> +}
> +
>  static void cs_etm_decoder__print_str_cb(const void *p_context,
>  					 const char *msg,
>  					 const int str_len)
> @@ -603,6 +617,7 @@ cs_etm_decoder__create_etm_decoder(struct cs_etm_decoder_params *d_params,
>  	const char *decoder_name;
>  	ocsd_etmv3_cfg config_etmv3;
>  	ocsd_etmv4_cfg trace_config_etmv4;
> +	ocsd_ete_cfg trace_config_ete;
>  	void *trace_config;
>  	u8 csid;
>  
> @@ -620,6 +635,11 @@ cs_etm_decoder__create_etm_decoder(struct cs_etm_decoder_params *d_params,
>  		decoder_name = OCSD_BUILTIN_DCD_ETMV4I;
>  		trace_config = &trace_config_etmv4;
>  		break;
> +	case CS_ETM_PROTO_ETE:
> +		cs_etm_decoder__gen_ete_config(t_params, &trace_config_ete);
> +		decoder_name = OCSD_BUILTIN_DCD_ETE;
> +		trace_config = &trace_config_ete;
> +		break;
>  	default:
>  		return -1;
>  	}
> diff --git a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h
> index 11f3391d06f2..0102ece5ca3e 100644
> --- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h
> +++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h
> @@ -37,11 +37,22 @@ struct cs_etmv4_trace_params {
>  	u32 reg_traceidr;
>  };
>  
> +struct cs_ete_trace_params {
> +	u32 reg_idr0;
> +	u32 reg_idr1;
> +	u32 reg_idr2;
> +	u32 reg_idr8;
> +	u32 reg_configr;
> +	u32 reg_traceidr;
> +	u32 reg_devarch;
> +};
> +
>  struct cs_etm_trace_params {
>  	int protocol;
>  	union {
>  		struct cs_etmv3_trace_params etmv3;
>  		struct cs_etmv4_trace_params etmv4;
> +		struct cs_ete_trace_params ete;
>  	};
>  };
>  
> @@ -65,6 +76,7 @@ enum {
>  	CS_ETM_PROTO_ETMV4i,
>  	CS_ETM_PROTO_ETMV4d,
>  	CS_ETM_PROTO_PTM,
> +	CS_ETM_PROTO_ETE
>  };
>  
>  enum cs_etm_decoder_operation {
> diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
> index d540512a3c96..e5649e9ea140 100644
> --- a/tools/perf/util/cs-etm.c
> +++ b/tools/perf/util/cs-etm.c
> @@ -460,6 +460,21 @@ static void cs_etm__set_trace_param_etmv4(struct cs_etm_trace_params *t_params,
>  	t_params[idx].etmv4.reg_traceidr = metadata[idx][CS_ETMV4_TRCTRACEIDR];
>  }
>  
> +static void cs_etm__set_trace_param_ete(struct cs_etm_trace_params *t_params,
> +					  struct cs_etm_auxtrace *etm, int idx)
> +{
> +	u64 **metadata = etm->metadata;
> +
> +	t_params[idx].protocol = CS_ETM_PROTO_ETE;
> +	t_params[idx].ete.reg_idr0 = metadata[idx][CS_ETMV4_TRCIDR0];
> +	t_params[idx].ete.reg_idr1 = metadata[idx][CS_ETMV4_TRCIDR1];
> +	t_params[idx].ete.reg_idr2 = metadata[idx][CS_ETMV4_TRCIDR2];
> +	t_params[idx].ete.reg_idr8 = metadata[idx][CS_ETMV4_TRCIDR8];
> +	t_params[idx].ete.reg_configr = metadata[idx][CS_ETMV4_TRCCONFIGR];
> +	t_params[idx].ete.reg_traceidr = metadata[idx][CS_ETMV4_TRCTRACEIDR];
> +	t_params[idx].ete.reg_devarch = metadata[idx][CS_ETE_TRCDEVARCH];
> +}
> +
>  static int cs_etm__init_trace_params(struct cs_etm_trace_params *t_params,
>  				     struct cs_etm_auxtrace *etm,
>  				     int decoders)
> @@ -479,6 +494,9 @@ static int cs_etm__init_trace_params(struct cs_etm_trace_params *t_params,
>  		case __perf_cs_etmv4_magic:
>  			cs_etm__set_trace_param_etmv4(t_params, etm, i);
>  			break;
> +		case __perf_cs_ete_magic:
> +			cs_etm__set_trace_param_ete(t_params, etm, i);
> +			break;
>  		default:
>  			return -EINVAL;
>  		}
> -- 
> 2.28.0
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-08-24  8:33 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-06 13:41 [PATCH v2 0/9] Support ETE decoding James Clark
2021-08-06 13:41 ` James Clark
2021-08-06 13:41 ` [PATCH v2 1/9] perf cs-etm: Refactor initialisation of decoder params James Clark
2021-08-06 13:41   ` James Clark
2021-09-03  8:52   ` Suzuki K Poulose
2021-09-03  8:52     ` Suzuki K Poulose
2021-09-03 11:05     ` Arnaldo Carvalho de Melo
2021-09-03 11:05       ` Arnaldo Carvalho de Melo
2021-09-05 21:24       ` Mike Leach
2021-09-05 21:24         ` Mike Leach
2021-08-06 13:41 ` [PATCH v2 2/9] perf cs-etm: Initialise architecture based on TRCIDR1 James Clark
2021-08-06 13:41   ` James Clark
2021-08-24  6:53   ` Leo Yan
2021-08-24  6:53     ` Leo Yan
2021-09-03  8:55   ` Suzuki K Poulose
2021-09-03  8:55     ` Suzuki K Poulose
2021-09-03 11:07     ` Arnaldo Carvalho de Melo
2021-09-03 11:07       ` Arnaldo Carvalho de Melo
2021-09-05 21:24       ` Mike Leach
2021-09-05 21:24         ` Mike Leach
2021-08-06 13:41 ` [PATCH v2 3/9] perf cs-etm: Refactor out ETMv4 header saving James Clark
2021-08-06 13:41   ` James Clark
2021-08-24  6:58   ` Leo Yan
2021-08-24  6:58     ` Leo Yan
2021-09-03  8:56   ` Suzuki K Poulose
2021-09-03  8:56     ` Suzuki K Poulose
2021-09-05 21:24     ` Mike Leach
2021-09-05 21:24       ` Mike Leach
2021-08-06 13:41 ` [PATCH v2 4/9] perf cs-etm: Save TRCDEVARCH register James Clark
2021-08-06 13:41   ` James Clark
2021-08-24  7:14   ` Leo Yan
2021-08-24  7:14     ` Leo Yan
2021-09-03  9:08   ` Suzuki K Poulose
2021-09-03  9:08     ` Suzuki K Poulose
2021-09-03 11:15     ` Arnaldo Carvalho de Melo
2021-09-03 11:15       ` Arnaldo Carvalho de Melo
2021-09-05 21:24       ` Mike Leach
2021-09-05 21:24         ` Mike Leach
2021-08-06 13:41 ` [PATCH v2 5/9] perf cs-etm: Fix typo James Clark
2021-08-06 13:41   ` James Clark
2021-08-24  7:15   ` Leo Yan
2021-08-24  7:15     ` Leo Yan
2021-09-03  9:09   ` Suzuki K Poulose
2021-09-03  9:09     ` Suzuki K Poulose
2021-09-05 21:24     ` Mike Leach
2021-09-05 21:24       ` Mike Leach
2021-08-06 13:41 ` [PATCH v2 6/9] perf cs-etm: Update OpenCSD decoder for ETE James Clark
2021-08-06 13:41   ` James Clark
2021-09-03  9:10   ` Suzuki K Poulose
2021-09-03  9:10     ` Suzuki K Poulose
2021-09-03 11:16     ` Arnaldo Carvalho de Melo
2021-09-03 11:16       ` Arnaldo Carvalho de Melo
2021-09-05 21:24       ` Mike Leach
2021-09-05 21:24         ` Mike Leach
2021-08-06 13:41 ` [PATCH v2 7/9] perf cs-etm: Create ETE decoder James Clark
2021-08-06 13:41   ` James Clark
2021-08-24  8:33   ` Leo Yan [this message]
2021-08-24  8:33     ` Leo Yan
2021-08-25 10:13     ` James Clark
2021-08-25 10:13       ` James Clark
2021-09-03  9:15   ` Suzuki K Poulose
2021-09-03  9:15     ` Suzuki K Poulose
2021-09-03 11:16     ` Arnaldo Carvalho de Melo
2021-09-03 11:16       ` Arnaldo Carvalho de Melo
2021-09-05 21:24       ` Mike Leach
2021-09-05 21:24         ` Mike Leach
2021-08-06 13:41 ` [PATCH v2 8/9] perf cs-etm: Print the decoder name James Clark
2021-08-06 13:41   ` James Clark
2021-09-03  9:17   ` Suzuki K Poulose
2021-09-03  9:17     ` Suzuki K Poulose
2021-09-03 11:18     ` Arnaldo Carvalho de Melo
2021-09-03 11:18       ` Arnaldo Carvalho de Melo
2021-09-03 11:52       ` Arnaldo Carvalho de Melo
2021-09-03 11:52         ` Arnaldo Carvalho de Melo
2021-09-05 21:24         ` Mike Leach
2021-09-05 21:24           ` Mike Leach
2021-08-06 13:41 ` [PATCH v2 9/9] perf cs-etm: Show a warning for an unknown magic number James Clark
2021-08-06 13:41   ` James Clark
2021-08-24  8:36   ` Leo Yan
2021-08-24  8:36     ` Leo Yan
2021-09-01 15:54     ` Arnaldo Carvalho de Melo
2021-09-01 15:54       ` Arnaldo Carvalho de Melo
2021-09-01 16:07       ` Arnaldo Carvalho de Melo
2021-09-01 16:07         ` Arnaldo Carvalho de Melo
2021-09-01 16:16         ` Arnaldo Carvalho de Melo
2021-09-01 16:16           ` Arnaldo Carvalho de Melo
2021-09-01 16:25           ` Arnaldo Carvalho de Melo
2021-09-01 16:25             ` Arnaldo Carvalho de Melo
2021-09-01 16:49             ` Arnaldo Carvalho de Melo
2021-09-01 16:49               ` Arnaldo Carvalho de Melo
2021-09-02  7:53               ` Leo Yan
2021-09-02  7:53                 ` Leo Yan
2021-09-02 17:48       ` Mathieu Poirier
2021-09-02 17:48         ` Mathieu Poirier
2021-09-02 18:19         ` Arnaldo Carvalho de Melo
2021-09-02 18:19           ` Arnaldo Carvalho de Melo
2021-09-02 19:22           ` Mathieu Poirier
2021-09-02 19:22             ` Mathieu Poirier
2021-09-05 21:24             ` Mike Leach
2021-09-05 21:24               ` Mike Leach
2021-08-24  8:47 ` [PATCH v2 0/9] Support ETE decoding Leo Yan
2021-08-24  8:47   ` Leo Yan
2021-08-25 10:14   ` James Clark
2021-08-25 10:14     ` James Clark

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=20210824083305.GE204566@leoy-ThinkPad-X240s \
    --to=leo.yan@linaro.org \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=coresight@lists.linaro.org \
    --cc=james.clark@arm.com \
    --cc=john.garry@huawei.com \
    --cc=jolsa@redhat.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mathieu.poirier@linaro.org \
    --cc=mike.leach@linaro.org \
    --cc=namhyung@kernel.org \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.org \
    /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.