From: Jiri Olsa <jolsa@redhat.com>
To: kan.liang@linux.intel.com
Cc: acme@kernel.org, linux-kernel@vger.kernel.org, ak@linux.intel.com
Subject: Re: [PATCH] perf tests attr: Support Topdown metrics events
Date: Mon, 4 Oct 2021 17:42:56 +0200 [thread overview]
Message-ID: <YVshAMbqreNnGVnj@krava> (raw)
In-Reply-To: <1633031566-176517-1-git-send-email-kan.liang@linux.intel.com>
On Thu, Sep 30, 2021 at 12:52:46PM -0700, kan.liang@linux.intel.com wrote:
> From: Kan Liang <kan.liang@linux.intel.com>
>
> The Topdown metrics events were added as perf stat default events since
> commit 42641d6f4d15 ("perf stat: Add Topdown metrics events as default
> events"). However, the perf attr tests were not updated accordingly.
>
> The perf attr test fails on the platform which supports Topdown metrics.
> perf test 17
> 17: Setup struct perf_event_attr :FAILED!
>
> Add Topdown metrics events into perf attr test cases. Make them optional
> since they are only available on newer platforms.
>
> Reported-by: kernel test robot <oliver.sang@intel.com>
> Fixes: 42641d6f4d15 ("perf stat: Add Topdown metrics events as default events")
> Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
thanks,
jirka
> ---
> tools/perf/tests/attr/test-stat-default | 97 +++++++++++++++++++
> tools/perf/tests/attr/test-stat-detailed-1 | 113 ++++++++++++++++++++--
> tools/perf/tests/attr/test-stat-detailed-2 | 137 +++++++++++++++++++++++----
> tools/perf/tests/attr/test-stat-detailed-3 | 145 ++++++++++++++++++++++++-----
> 4 files changed, 440 insertions(+), 52 deletions(-)
>
> diff --git a/tools/perf/tests/attr/test-stat-default b/tools/perf/tests/attr/test-stat-default
> index d9e99b3..d8ea6a8 100644
> --- a/tools/perf/tests/attr/test-stat-default
> +++ b/tools/perf/tests/attr/test-stat-default
> @@ -68,3 +68,100 @@ fd=10
> type=0
> config=5
> optional=1
> +
> +# PERF_TYPE_RAW / slots (0x400)
> +[event11:base-stat]
> +fd=11
> +group_fd=-1
> +type=4
> +config=1024
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-retiring (0x8000)
> +[event12:base-stat]
> +fd=12
> +group_fd=11
> +type=4
> +config=32768
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-bad-spec (0x8100)
> +[event13:base-stat]
> +fd=13
> +group_fd=11
> +type=4
> +config=33024
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-fe-bound (0x8200)
> +[event14:base-stat]
> +fd=14
> +group_fd=11
> +type=4
> +config=33280
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-be-bound (0x8300)
> +[event15:base-stat]
> +fd=15
> +group_fd=11
> +type=4
> +config=33536
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-heavy-ops (0x8400)
> +[event16:base-stat]
> +fd=16
> +group_fd=11
> +type=4
> +config=33792
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-br-mispredict (0x8500)
> +[event17:base-stat]
> +fd=17
> +group_fd=11
> +type=4
> +config=34048
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-fetch-lat (0x8600)
> +[event18:base-stat]
> +fd=18
> +group_fd=11
> +type=4
> +config=34304
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-mem-bound (0x8700)
> +[event19:base-stat]
> +fd=19
> +group_fd=11
> +type=4
> +config=34560
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> diff --git a/tools/perf/tests/attr/test-stat-detailed-1 b/tools/perf/tests/attr/test-stat-detailed-1
> index 8b04a05..b656ab9 100644
> --- a/tools/perf/tests/attr/test-stat-detailed-1
> +++ b/tools/perf/tests/attr/test-stat-detailed-1
> @@ -70,12 +70,109 @@ type=0
> config=5
> optional=1
>
> +# PERF_TYPE_RAW / slots (0x400)
> +[event11:base-stat]
> +fd=11
> +group_fd=-1
> +type=4
> +config=1024
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-retiring (0x8000)
> +[event12:base-stat]
> +fd=12
> +group_fd=11
> +type=4
> +config=32768
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-bad-spec (0x8100)
> +[event13:base-stat]
> +fd=13
> +group_fd=11
> +type=4
> +config=33024
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-fe-bound (0x8200)
> +[event14:base-stat]
> +fd=14
> +group_fd=11
> +type=4
> +config=33280
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-be-bound (0x8300)
> +[event15:base-stat]
> +fd=15
> +group_fd=11
> +type=4
> +config=33536
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-heavy-ops (0x8400)
> +[event16:base-stat]
> +fd=16
> +group_fd=11
> +type=4
> +config=33792
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-br-mispredict (0x8500)
> +[event17:base-stat]
> +fd=17
> +group_fd=11
> +type=4
> +config=34048
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-fetch-lat (0x8600)
> +[event18:base-stat]
> +fd=18
> +group_fd=11
> +type=4
> +config=34304
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-mem-bound (0x8700)
> +[event19:base-stat]
> +fd=19
> +group_fd=11
> +type=4
> +config=34560
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> # PERF_TYPE_HW_CACHE /
> # PERF_COUNT_HW_CACHE_L1D << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event11:base-stat]
> -fd=11
> +[event20:base-stat]
> +fd=20
> type=3
> config=0
> optional=1
> @@ -84,8 +181,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_L1D << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event12:base-stat]
> -fd=12
> +[event21:base-stat]
> +fd=21
> type=3
> config=65536
> optional=1
> @@ -94,8 +191,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_LL << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event13:base-stat]
> -fd=13
> +[event22:base-stat]
> +fd=22
> type=3
> config=2
> optional=1
> @@ -104,8 +201,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_LL << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event14:base-stat]
> -fd=14
> +[event23:base-stat]
> +fd=23
> type=3
> config=65538
> optional=1
> diff --git a/tools/perf/tests/attr/test-stat-detailed-2 b/tools/perf/tests/attr/test-stat-detailed-2
> index 4fca9f1..9762509 100644
> --- a/tools/perf/tests/attr/test-stat-detailed-2
> +++ b/tools/perf/tests/attr/test-stat-detailed-2
> @@ -70,12 +70,109 @@ type=0
> config=5
> optional=1
>
> +# PERF_TYPE_RAW / slots (0x400)
> +[event11:base-stat]
> +fd=11
> +group_fd=-1
> +type=4
> +config=1024
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-retiring (0x8000)
> +[event12:base-stat]
> +fd=12
> +group_fd=11
> +type=4
> +config=32768
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-bad-spec (0x8100)
> +[event13:base-stat]
> +fd=13
> +group_fd=11
> +type=4
> +config=33024
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-fe-bound (0x8200)
> +[event14:base-stat]
> +fd=14
> +group_fd=11
> +type=4
> +config=33280
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-be-bound (0x8300)
> +[event15:base-stat]
> +fd=15
> +group_fd=11
> +type=4
> +config=33536
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-heavy-ops (0x8400)
> +[event16:base-stat]
> +fd=16
> +group_fd=11
> +type=4
> +config=33792
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-br-mispredict (0x8500)
> +[event17:base-stat]
> +fd=17
> +group_fd=11
> +type=4
> +config=34048
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-fetch-lat (0x8600)
> +[event18:base-stat]
> +fd=18
> +group_fd=11
> +type=4
> +config=34304
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-mem-bound (0x8700)
> +[event19:base-stat]
> +fd=19
> +group_fd=11
> +type=4
> +config=34560
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> # PERF_TYPE_HW_CACHE /
> # PERF_COUNT_HW_CACHE_L1D << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event11:base-stat]
> -fd=11
> +[event20:base-stat]
> +fd=20
> type=3
> config=0
> optional=1
> @@ -84,8 +181,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_L1D << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event12:base-stat]
> -fd=12
> +[event21:base-stat]
> +fd=21
> type=3
> config=65536
> optional=1
> @@ -94,8 +191,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_LL << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event13:base-stat]
> -fd=13
> +[event22:base-stat]
> +fd=22
> type=3
> config=2
> optional=1
> @@ -104,8 +201,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_LL << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event14:base-stat]
> -fd=14
> +[event23:base-stat]
> +fd=23
> type=3
> config=65538
> optional=1
> @@ -114,8 +211,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_L1I << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event15:base-stat]
> -fd=15
> +[event24:base-stat]
> +fd=24
> type=3
> config=1
> optional=1
> @@ -124,8 +221,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_L1I << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event16:base-stat]
> -fd=16
> +[event25:base-stat]
> +fd=25
> type=3
> config=65537
> optional=1
> @@ -134,8 +231,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_DTLB << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event17:base-stat]
> -fd=17
> +[event26:base-stat]
> +fd=26
> type=3
> config=3
> optional=1
> @@ -144,8 +241,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_DTLB << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event18:base-stat]
> -fd=18
> +[event27:base-stat]
> +fd=27
> type=3
> config=65539
> optional=1
> @@ -154,8 +251,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_ITLB << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event19:base-stat]
> -fd=19
> +[event28:base-stat]
> +fd=28
> type=3
> config=4
> optional=1
> @@ -164,8 +261,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_ITLB << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event20:base-stat]
> -fd=20
> +[event29:base-stat]
> +fd=29
> type=3
> config=65540
> optional=1
> diff --git a/tools/perf/tests/attr/test-stat-detailed-3 b/tools/perf/tests/attr/test-stat-detailed-3
> index 4bb58e1..d555042 100644
> --- a/tools/perf/tests/attr/test-stat-detailed-3
> +++ b/tools/perf/tests/attr/test-stat-detailed-3
> @@ -70,12 +70,109 @@ type=0
> config=5
> optional=1
>
> +# PERF_TYPE_RAW / slots (0x400)
> +[event11:base-stat]
> +fd=11
> +group_fd=-1
> +type=4
> +config=1024
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-retiring (0x8000)
> +[event12:base-stat]
> +fd=12
> +group_fd=11
> +type=4
> +config=32768
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-bad-spec (0x8100)
> +[event13:base-stat]
> +fd=13
> +group_fd=11
> +type=4
> +config=33024
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-fe-bound (0x8200)
> +[event14:base-stat]
> +fd=14
> +group_fd=11
> +type=4
> +config=33280
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-be-bound (0x8300)
> +[event15:base-stat]
> +fd=15
> +group_fd=11
> +type=4
> +config=33536
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-heavy-ops (0x8400)
> +[event16:base-stat]
> +fd=16
> +group_fd=11
> +type=4
> +config=33792
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-br-mispredict (0x8500)
> +[event17:base-stat]
> +fd=17
> +group_fd=11
> +type=4
> +config=34048
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-fetch-lat (0x8600)
> +[event18:base-stat]
> +fd=18
> +group_fd=11
> +type=4
> +config=34304
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> +# PERF_TYPE_RAW / topdown-mem-bound (0x8700)
> +[event19:base-stat]
> +fd=19
> +group_fd=11
> +type=4
> +config=34560
> +disabled=0
> +enable_on_exec=0
> +read_format=15
> +optional=1
> +
> # PERF_TYPE_HW_CACHE /
> # PERF_COUNT_HW_CACHE_L1D << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event11:base-stat]
> -fd=11
> +[event20:base-stat]
> +fd=20
> type=3
> config=0
> optional=1
> @@ -84,8 +181,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_L1D << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event12:base-stat]
> -fd=12
> +[event21:base-stat]
> +fd=21
> type=3
> config=65536
> optional=1
> @@ -94,8 +191,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_LL << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event13:base-stat]
> -fd=13
> +[event22:base-stat]
> +fd=22
> type=3
> config=2
> optional=1
> @@ -104,8 +201,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_LL << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event14:base-stat]
> -fd=14
> +[event23:base-stat]
> +fd=23
> type=3
> config=65538
> optional=1
> @@ -114,8 +211,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_L1I << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event15:base-stat]
> -fd=15
> +[event24:base-stat]
> +fd=24
> type=3
> config=1
> optional=1
> @@ -124,8 +221,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_L1I << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event16:base-stat]
> -fd=16
> +[event25:base-stat]
> +fd=25
> type=3
> config=65537
> optional=1
> @@ -134,8 +231,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_DTLB << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event17:base-stat]
> -fd=17
> +[event26:base-stat]
> +fd=26
> type=3
> config=3
> optional=1
> @@ -144,8 +241,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_DTLB << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event18:base-stat]
> -fd=18
> +[event27:base-stat]
> +fd=27
> type=3
> config=65539
> optional=1
> @@ -154,8 +251,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_ITLB << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event19:base-stat]
> -fd=19
> +[event28:base-stat]
> +fd=28
> type=3
> config=4
> optional=1
> @@ -164,8 +261,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_ITLB << 0 |
> # (PERF_COUNT_HW_CACHE_OP_READ << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event20:base-stat]
> -fd=20
> +[event29:base-stat]
> +fd=29
> type=3
> config=65540
> optional=1
> @@ -174,8 +271,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_L1D << 0 |
> # (PERF_COUNT_HW_CACHE_OP_PREFETCH << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_ACCESS << 16)
> -[event21:base-stat]
> -fd=21
> +[event30:base-stat]
> +fd=30
> type=3
> config=512
> optional=1
> @@ -184,8 +281,8 @@ optional=1
> # PERF_COUNT_HW_CACHE_L1D << 0 |
> # (PERF_COUNT_HW_CACHE_OP_PREFETCH << 8) |
> # (PERF_COUNT_HW_CACHE_RESULT_MISS << 16)
> -[event22:base-stat]
> -fd=22
> +[event31:base-stat]
> +fd=31
> type=3
> config=66048
> optional=1
> --
> 2.7.4
>
next prev parent reply other threads:[~2021-10-04 15:43 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-30 19:52 [PATCH] perf tests attr: Support Topdown metrics events kan.liang
2021-10-04 15:42 ` Jiri Olsa [this message]
2021-10-05 17:56 ` Arnaldo Carvalho de Melo
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=YVshAMbqreNnGVnj@krava \
--to=jolsa@redhat.com \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=kan.liang@linux.intel.com \
--cc=linux-kernel@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox