summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2024-05-15 22:36:07 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-02-08 11:51:44 +0300
commitc0dbecb204cfb91999d0b785048be4a95bbc8c9c (patch)
treebc891c86bcdf5d724841a77733d283c5449cf087 /include/linux
parentc89b19e9628164fc6681744c9637bcf971a10b02 (diff)
downloadlinux-c0dbecb204cfb91999d0b785048be4a95bbc8c9c.tar.xz
perf/core: Save raw sample data conditionally based on sample type
[ Upstream commit b9c44b91476b67327a521568a854babecc4070ab ] Currently, space for raw sample data is always allocated within sample records for both BPF output and tracepoint events. This leads to unused space in sample records when raw sample data is not requested. This patch enforces checking sample type of an event in perf_sample_save_raw_data(). So raw sample data will only be saved if explicitly requested, reducing overhead when it is not needed. Fixes: 0a9081cf0a11 ("perf/core: Add perf_sample_save_raw_data() helper") Signed-off-by: Yabin Cui <yabinc@google.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Reviewed-by: Ian Rogers <irogers@google.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Link: https://lore.kernel.org/r/20240515193610.2350456-2-yabinc@google.com Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/perf_event.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 7a5563ffe61b..fcb834dd75c2 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1231,12 +1231,18 @@ static inline void perf_sample_save_callchain(struct perf_sample_data *data,
}
static inline void perf_sample_save_raw_data(struct perf_sample_data *data,
+ struct perf_event *event,
struct perf_raw_record *raw)
{
struct perf_raw_frag *frag = &raw->frag;
u32 sum = 0;
int size;
+ if (!(event->attr.sample_type & PERF_SAMPLE_RAW))
+ return;
+ if (WARN_ON_ONCE(data->sample_flags & PERF_SAMPLE_RAW))
+ return;
+
do {
sum += frag->size;
if (perf_raw_frag_last(frag))