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
This commit is contained in:
parent
7b08463015
commit
838d9bb62d
|
@ -664,6 +664,7 @@ static int cfdiag_push_sample(struct perf_event *event,
|
|||
raw.frag.data = cpuhw->stop;
|
||||
raw.size = raw.frag.size;
|
||||
data.raw = &raw;
|
||||
data.sample_flags |= PERF_SAMPLE_RAW;
|
||||
}
|
||||
|
||||
overflow = perf_event_overflow(event, &data, ®s);
|
||||
|
|
|
@ -366,6 +366,7 @@ static int paicrypt_push_sample(void)
|
|||
raw.frag.data = cpump->save;
|
||||
raw.size = raw.frag.size;
|
||||
data.raw = &raw;
|
||||
data.sample_flags |= PERF_SAMPLE_RAW;
|
||||
}
|
||||
|
||||
overflow = perf_event_overflow(event, &data, ®s);
|
||||
|
|
|
@ -781,6 +781,7 @@ fail:
|
|||
},
|
||||
};
|
||||
data.raw = &raw;
|
||||
data.sample_flags |= PERF_SAMPLE_RAW;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1028,7 +1028,6 @@ struct perf_sample_data {
|
|||
* minimize the cachelines touched.
|
||||
*/
|
||||
u64 sample_flags;
|
||||
struct perf_raw_record *raw;
|
||||
u64 period;
|
||||
|
||||
/*
|
||||
|
@ -1040,6 +1039,7 @@ struct perf_sample_data {
|
|||
union perf_mem_data_src data_src;
|
||||
u64 txn;
|
||||
u64 addr;
|
||||
struct perf_raw_record *raw;
|
||||
|
||||
u64 type;
|
||||
u64 ip;
|
||||
|
@ -1078,8 +1078,7 @@ static inline void perf_sample_data_init(struct perf_sample_data *data,
|
|||
u64 addr, u64 period)
|
||||
{
|
||||
/* remaining struct members initialized in perf_prepare_sample() */
|
||||
data->sample_flags = 0;
|
||||
data->raw = NULL;
|
||||
data->sample_flags = PERF_SAMPLE_PERIOD;
|
||||
data->period = period;
|
||||
|
||||
if (addr) {
|
||||
|
|
|
@ -7332,7 +7332,7 @@ void perf_prepare_sample(struct perf_event_header *header,
|
|||
struct perf_raw_record *raw = data->raw;
|
||||
int size;
|
||||
|
||||
if (raw) {
|
||||
if (raw && (data->sample_flags & PERF_SAMPLE_RAW)) {
|
||||
struct perf_raw_frag *frag = &raw->frag;
|
||||
u32 sum = 0;
|
||||
|
||||
|
@ -7348,6 +7348,7 @@ void perf_prepare_sample(struct perf_event_header *header,
|
|||
frag->pad = raw->size - sum;
|
||||
} else {
|
||||
size = sizeof(u64);
|
||||
data->raw = NULL;
|
||||
}
|
||||
|
||||
header->size += size;
|
||||
|
|
Loading…
Reference in New Issue