Skip to content

Commit 838d9bb

Browse files
namhyungPeter Zijlstra
authored andcommitted
perf: Use sample_flags for raw_data
Use the new sample_flags to indicate whether the raw data field is filled by the PMU driver. Although it could check with the NULL, follow the same rule with other fields. Remove the raw field from the perf_sample_data_init() to minimize the number of cache lines touched. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lkml.kernel.org/r/20220921220032.2858517-2-namhyung@kernel.org
1 parent 7b08463 commit 838d9bb

File tree

5 files changed

+7
-4
lines changed

5 files changed

+7
-4
lines changed

arch/s390/kernel/perf_cpum_cf.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,7 @@ static int cfdiag_push_sample(struct perf_event *event,
664664
raw.frag.data = cpuhw->stop;
665665
raw.size = raw.frag.size;
666666
data.raw = &raw;
667+
data.sample_flags |= PERF_SAMPLE_RAW;
667668
}
668669

669670
overflow = perf_event_overflow(event, &data, &regs);

arch/s390/kernel/perf_pai_crypto.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ static int paicrypt_push_sample(void)
366366
raw.frag.data = cpump->save;
367367
raw.size = raw.frag.size;
368368
data.raw = &raw;
369+
data.sample_flags |= PERF_SAMPLE_RAW;
369370
}
370371

371372
overflow = perf_event_overflow(event, &data, &regs);

arch/x86/events/amd/ibs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,7 @@ static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs)
781781
},
782782
};
783783
data.raw = &raw;
784+
data.sample_flags |= PERF_SAMPLE_RAW;
784785
}
785786

786787
/*

include/linux/perf_event.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,7 +1028,6 @@ struct perf_sample_data {
10281028
* minimize the cachelines touched.
10291029
*/
10301030
u64 sample_flags;
1031-
struct perf_raw_record *raw;
10321031
u64 period;
10331032

10341033
/*
@@ -1040,6 +1039,7 @@ struct perf_sample_data {
10401039
union perf_mem_data_src data_src;
10411040
u64 txn;
10421041
u64 addr;
1042+
struct perf_raw_record *raw;
10431043

10441044
u64 type;
10451045
u64 ip;
@@ -1078,8 +1078,7 @@ static inline void perf_sample_data_init(struct perf_sample_data *data,
10781078
u64 addr, u64 period)
10791079
{
10801080
/* remaining struct members initialized in perf_prepare_sample() */
1081-
data->sample_flags = 0;
1082-
data->raw = NULL;
1081+
data->sample_flags = PERF_SAMPLE_PERIOD;
10831082
data->period = period;
10841083

10851084
if (addr) {

kernel/events/core.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7332,7 +7332,7 @@ void perf_prepare_sample(struct perf_event_header *header,
73327332
struct perf_raw_record *raw = data->raw;
73337333
int size;
73347334

7335-
if (raw) {
7335+
if (raw && (data->sample_flags & PERF_SAMPLE_RAW)) {
73367336
struct perf_raw_frag *frag = &raw->frag;
73377337
u32 sum = 0;
73387338

@@ -7348,6 +7348,7 @@ void perf_prepare_sample(struct perf_event_header *header,
73487348
frag->pad = raw->size - sum;
73497349
} else {
73507350
size = sizeof(u64);
7351+
data->raw = NULL;
73517352
}
73527353

73537354
header->size += size;

0 commit comments

Comments
 (0)