On Wed, 18 Dec 2019 08:44:27 +0100 Sven Schnelle <svens@xxxxxxxxxxxxx> wrote: > At least on PA-RISC and s390 synthetic histogram triggers are failing > selftests because trace_event_raw_event_synth() always writes a 64 bit > values, but the reader expects a field->size sized value. On little endian > machines this doesn't hurt, but on big endian this makes the reader always > read zero values. Tom, Does this patch look fine to you? Also, it was only sent to linux-trace-devel. You can see the original patch here: https://lore.kernel.org/linux-trace-devel/20191218074427.96184-4-svens@xxxxxxxxxxxxx/ -- Steve > > Signed-off-by: Sven Schnelle <svens@xxxxxxxxxxxxx> > --- > kernel/trace/trace_events_hist.c | 21 ++++++++++++++++++++- > 1 file changed, 20 insertions(+), 1 deletion(-) > > diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c > index f49d1a36d3ae..f62de5f43e79 100644 > --- a/kernel/trace/trace_events_hist.c > +++ b/kernel/trace/trace_events_hist.c > @@ -911,7 +911,26 @@ static notrace void trace_event_raw_event_synth(void *__data, > strscpy(str_field, str_val, STR_VAR_LEN_MAX); > n_u64 += STR_VAR_LEN_MAX / sizeof(u64); > } else { > - entry->fields[n_u64] = var_ref_vals[var_ref_idx + i]; > + struct synth_field *field = event->fields[i]; > + u64 val = var_ref_vals[var_ref_idx + i]; > + > + switch (field->size) { > + case 1: > + *(u8 *)&entry->fields[n_u64] = (u8)val; > + break; > + > + case 2: > + *(u16 *)&entry->fields[n_u64] = (u16)val; > + break; > + > + case 4: > + *(u32 *)&entry->fields[n_u64] = (u32)val; > + break; > + > + default: > + entry->fields[n_u64] = val; > + break; > + } > n_u64++; > } > }
![]() |