Skip to content

Commit 1d9d4c9

Browse files
Tom Zanussirostedt
authored andcommitted
tracing: Make synth_event trace functions endian-correct
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]>
1 parent 279eef0 commit 1d9d4c9

File tree

1 file changed

+58
-4
lines changed

1 file changed

+58
-4
lines changed

kernel/trace/trace_events_hist.c

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1891,7 +1891,25 @@ int synth_event_trace(struct trace_event_file *file, unsigned int n_vals, ...)
18911891
strscpy(str_field, str_val, STR_VAR_LEN_MAX);
18921892
n_u64 += STR_VAR_LEN_MAX / sizeof(u64);
18931893
} else {
1894-
state.entry->fields[n_u64] = val;
1894+
struct synth_field *field = state.event->fields[i];
1895+
1896+
switch (field->size) {
1897+
case 1:
1898+
*(u8 *)&state.entry->fields[n_u64] = (u8)val;
1899+
break;
1900+
1901+
case 2:
1902+
*(u16 *)&state.entry->fields[n_u64] = (u16)val;
1903+
break;
1904+
1905+
case 4:
1906+
*(u32 *)&state.entry->fields[n_u64] = (u32)val;
1907+
break;
1908+
1909+
default:
1910+
state.entry->fields[n_u64] = val;
1911+
break;
1912+
}
18951913
n_u64++;
18961914
}
18971915
}
@@ -1943,7 +1961,26 @@ int synth_event_trace_array(struct trace_event_file *file, u64 *vals,
19431961
strscpy(str_field, str_val, STR_VAR_LEN_MAX);
19441962
n_u64 += STR_VAR_LEN_MAX / sizeof(u64);
19451963
} else {
1946-
state.entry->fields[n_u64] = vals[i];
1964+
struct synth_field *field = state.event->fields[i];
1965+
u64 val = vals[i];
1966+
1967+
switch (field->size) {
1968+
case 1:
1969+
*(u8 *)&state.entry->fields[n_u64] = (u8)val;
1970+
break;
1971+
1972+
case 2:
1973+
*(u16 *)&state.entry->fields[n_u64] = (u16)val;
1974+
break;
1975+
1976+
case 4:
1977+
*(u32 *)&state.entry->fields[n_u64] = (u32)val;
1978+
break;
1979+
1980+
default:
1981+
state.entry->fields[n_u64] = val;
1982+
break;
1983+
}
19471984
n_u64++;
19481985
}
19491986
}
@@ -2062,8 +2099,25 @@ static int __synth_event_add_val(const char *field_name, u64 val,
20622099

20632100
str_field = (char *)&entry->fields[field->offset];
20642101
strscpy(str_field, str_val, STR_VAR_LEN_MAX);
2065-
} else
2066-
entry->fields[field->offset] = val;
2102+
} else {
2103+
switch (field->size) {
2104+
case 1:
2105+
*(u8 *)&trace_state->entry->fields[field->offset] = (u8)val;
2106+
break;
2107+
2108+
case 2:
2109+
*(u16 *)&trace_state->entry->fields[field->offset] = (u16)val;
2110+
break;
2111+
2112+
case 4:
2113+
*(u32 *)&trace_state->entry->fields[field->offset] = (u32)val;
2114+
break;
2115+
2116+
default:
2117+
trace_state->entry->fields[field->offset] = val;
2118+
break;
2119+
}
2120+
}
20672121
out:
20682122
return ret;
20692123
}

0 commit comments

Comments
 (0)