Skip to content

Commit

Permalink
tracing: Make synth_event trace functions endian-correct
Browse files Browse the repository at this point in the history
synth_event_trace(), synth_event_trace_array() and
__synth_event_add_val() write directly into the trace buffer and need
to take endianness into account, like trace_event_raw_event_synth()
does.

Link: http://lkml.kernel.org/r/2011354355e405af9c9d28abba430d1f5ff7771a.1581720155.git.zanussi@kernel.org

Signed-off-by: Tom Zanussi <[email protected]>
Signed-off-by: Steven Rostedt (VMware) <[email protected]>
  • Loading branch information
Tom Zanussi authored and rostedt committed Feb 20, 2020
1 parent 279eef0 commit 1d9d4c9
Showing 1 changed file with 58 additions and 4 deletions.
62 changes: 58 additions & 4 deletions kernel/trace/trace_events_hist.c
Original file line number Diff line number Diff line change
Expand Up @@ -1891,7 +1891,25 @@ int synth_event_trace(struct trace_event_file *file, unsigned int n_vals, ...)
strscpy(str_field, str_val, STR_VAR_LEN_MAX);
n_u64 += STR_VAR_LEN_MAX / sizeof(u64);
} else {
state.entry->fields[n_u64] = val;
struct synth_field *field = state.event->fields[i];

switch (field->size) {
case 1:
*(u8 *)&state.entry->fields[n_u64] = (u8)val;
break;

case 2:
*(u16 *)&state.entry->fields[n_u64] = (u16)val;
break;

case 4:
*(u32 *)&state.entry->fields[n_u64] = (u32)val;
break;

default:
state.entry->fields[n_u64] = val;
break;
}
n_u64++;
}
}
Expand Down Expand Up @@ -1943,7 +1961,26 @@ int synth_event_trace_array(struct trace_event_file *file, u64 *vals,
strscpy(str_field, str_val, STR_VAR_LEN_MAX);
n_u64 += STR_VAR_LEN_MAX / sizeof(u64);
} else {
state.entry->fields[n_u64] = vals[i];
struct synth_field *field = state.event->fields[i];
u64 val = vals[i];

switch (field->size) {
case 1:
*(u8 *)&state.entry->fields[n_u64] = (u8)val;
break;

case 2:
*(u16 *)&state.entry->fields[n_u64] = (u16)val;
break;

case 4:
*(u32 *)&state.entry->fields[n_u64] = (u32)val;
break;

default:
state.entry->fields[n_u64] = val;
break;
}
n_u64++;
}
}
Expand Down Expand Up @@ -2062,8 +2099,25 @@ static int __synth_event_add_val(const char *field_name, u64 val,

str_field = (char *)&entry->fields[field->offset];
strscpy(str_field, str_val, STR_VAR_LEN_MAX);
} else
entry->fields[field->offset] = val;
} else {
switch (field->size) {
case 1:
*(u8 *)&trace_state->entry->fields[field->offset] = (u8)val;
break;

case 2:
*(u16 *)&trace_state->entry->fields[field->offset] = (u16)val;
break;

case 4:
*(u32 *)&trace_state->entry->fields[field->offset] = (u32)val;
break;

default:
trace_state->entry->fields[field->offset] = val;
break;
}
}
out:
return ret;
}
Expand Down

0 comments on commit 1d9d4c9

Please sign in to comment.