Merge tag 'trace-v6.19-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace

Pull tracing fix from Steven Rostedt:

- Fix event format field alignments for 32 bit architectures

The fields in the event format files are used to parse the raw binary
buffer data by applications. If they are incorrect, then the
application produces garbage.

On 32 bit architectures, the function graph 64bit calltime and
rettime were off by 4bytes. That's because the actual fields are in a
packed structure but the macros used by the ftrace events did not
mark them as packed, and instead, gave them their natural alignment
which made their offsets off by 4 bytes.

There are macros to have a packed field within an embedded structure
of an event, but there's no macro for normal fields within a packed
structure of the event. The macro __field_packed() was used for the
packed embedded structure field. Rename that to __field_desc_packed()
(to match the non-packed embedded field macro __field_desc()), and
make __field_packed() for fields that are in a packed event structure
(which matches the unpacked __field() macro).

Switch the calltime and rettime fields of the function graph event to
use the new __field_packed() and this makes the offsets correct.

* tag 'trace-v6.19-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
tracing: Fix ftrace event field alignments

+36 -24
+5 -2
kernel/trace/trace.h
··· 68 #undef __field_fn 69 #define __field_fn(type, item) type item; 70 71 #undef __field_struct 72 #define __field_struct(type, item) __field(type, item) 73 74 #undef __field_desc 75 #define __field_desc(type, container, item) 76 77 - #undef __field_packed 78 - #define __field_packed(type, container, item) 79 80 #undef __array 81 #define __array(type, item, size) type item[size];
··· 68 #undef __field_fn 69 #define __field_fn(type, item) type item; 70 71 + #undef __field_packed 72 + #define __field_packed(type, item) type item; 73 + 74 #undef __field_struct 75 #define __field_struct(type, item) __field(type, item) 76 77 #undef __field_desc 78 #define __field_desc(type, container, item) 79 80 + #undef __field_desc_packed 81 + #define __field_desc_packed(type, container, item) 82 83 #undef __array 84 #define __array(type, item, size) type item[size];
+16 -16
kernel/trace/trace_entries.h
··· 79 80 F_STRUCT( 81 __field_struct( struct ftrace_graph_ent, graph_ent ) 82 - __field_packed( unsigned long, graph_ent, func ) 83 - __field_packed( unsigned long, graph_ent, depth ) 84 __dynamic_array(unsigned long, args ) 85 ), 86 ··· 96 97 F_STRUCT( 98 __field_struct( struct fgraph_retaddr_ent, graph_rent ) 99 - __field_packed( unsigned long, graph_rent.ent, func ) 100 - __field_packed( unsigned long, graph_rent.ent, depth ) 101 - __field_packed( unsigned long, graph_rent, retaddr ) 102 __dynamic_array(unsigned long, args ) 103 ), 104 ··· 123 124 F_STRUCT( 125 __field_struct( struct ftrace_graph_ret, ret ) 126 - __field_packed( unsigned long, ret, func ) 127 - __field_packed( unsigned long, ret, retval ) 128 - __field_packed( unsigned int, ret, depth ) 129 - __field_packed( unsigned int, ret, overrun ) 130 - __field(unsigned long long, calltime ) 131 - __field(unsigned long long, rettime ) 132 ), 133 134 F_printk("<-- %ps (%u) (start: %llx end: %llx) over: %u retval: %lx", ··· 146 147 F_STRUCT( 148 __field_struct( struct ftrace_graph_ret, ret ) 149 - __field_packed( unsigned long, ret, func ) 150 - __field_packed( unsigned int, ret, depth ) 151 - __field_packed( unsigned int, ret, overrun ) 152 - __field(unsigned long long, calltime ) 153 - __field(unsigned long long, rettime ) 154 ), 155 156 F_printk("<-- %ps (%u) (start: %llx end: %llx) over: %u",
··· 79 80 F_STRUCT( 81 __field_struct( struct ftrace_graph_ent, graph_ent ) 82 + __field_desc_packed(unsigned long, graph_ent, func ) 83 + __field_desc_packed(unsigned long, graph_ent, depth ) 84 __dynamic_array(unsigned long, args ) 85 ), 86 ··· 96 97 F_STRUCT( 98 __field_struct( struct fgraph_retaddr_ent, graph_rent ) 99 + __field_desc_packed( unsigned long, graph_rent.ent, func ) 100 + __field_desc_packed( unsigned long, graph_rent.ent, depth ) 101 + __field_desc_packed( unsigned long, graph_rent, retaddr ) 102 __dynamic_array(unsigned long, args ) 103 ), 104 ··· 123 124 F_STRUCT( 125 __field_struct( struct ftrace_graph_ret, ret ) 126 + __field_desc_packed( unsigned long, ret, func ) 127 + __field_desc_packed( unsigned long, ret, retval ) 128 + __field_desc_packed( unsigned int, ret, depth ) 129 + __field_desc_packed( unsigned int, ret, overrun ) 130 + __field_packed(unsigned long long, calltime) 131 + __field_packed(unsigned long long, rettime ) 132 ), 133 134 F_printk("<-- %ps (%u) (start: %llx end: %llx) over: %u retval: %lx", ··· 146 147 F_STRUCT( 148 __field_struct( struct ftrace_graph_ret, ret ) 149 + __field_desc_packed( unsigned long, ret, func ) 150 + __field_desc_packed( unsigned int, ret, depth ) 151 + __field_desc_packed( unsigned int, ret, overrun ) 152 + __field_packed(unsigned long long, calltime ) 153 + __field_packed(unsigned long long, rettime ) 154 ), 155 156 F_printk("<-- %ps (%u) (start: %llx end: %llx) over: %u",
+15 -6
kernel/trace/trace_export.c
··· 42 #undef __field_fn 43 #define __field_fn(type, item) type item; 44 45 #undef __field_desc 46 #define __field_desc(type, container, item) type item; 47 48 - #undef __field_packed 49 - #define __field_packed(type, container, item) type item; 50 51 #undef __array 52 #define __array(type, item, size) type item[size]; ··· 107 #undef __field_fn 108 #define __field_fn(_type, _item) __field_ext(_type, _item, FILTER_TRACE_FN) 109 110 #undef __field_desc 111 #define __field_desc(_type, _container, _item) __field_ext(_type, _item, FILTER_OTHER) 112 113 - #undef __field_packed 114 - #define __field_packed(_type, _container, _item) __field_ext_packed(_type, _item, FILTER_OTHER) 115 116 #undef __array 117 #define __array(_type, _item, _len) { \ ··· 152 #undef __field_fn 153 #define __field_fn(type, item) 154 155 #undef __field_desc 156 #define __field_desc(type, container, item) 157 158 - #undef __field_packed 159 - #define __field_packed(type, container, item) 160 161 #undef __array 162 #define __array(type, item, len)
··· 42 #undef __field_fn 43 #define __field_fn(type, item) type item; 44 45 + #undef __field_packed 46 + #define __field_packed(type, item) type item; 47 + 48 #undef __field_desc 49 #define __field_desc(type, container, item) type item; 50 51 + #undef __field_desc_packed 52 + #define __field_desc_packed(type, container, item) type item; 53 54 #undef __array 55 #define __array(type, item, size) type item[size]; ··· 104 #undef __field_fn 105 #define __field_fn(_type, _item) __field_ext(_type, _item, FILTER_TRACE_FN) 106 107 + #undef __field_packed 108 + #define __field_packed(_type, _item) __field_ext_packed(_type, _item, FILTER_OTHER) 109 + 110 #undef __field_desc 111 #define __field_desc(_type, _container, _item) __field_ext(_type, _item, FILTER_OTHER) 112 113 + #undef __field_desc_packed 114 + #define __field_desc_packed(_type, _container, _item) __field_ext_packed(_type, _item, FILTER_OTHER) 115 116 #undef __array 117 #define __array(_type, _item, _len) { \ ··· 146 #undef __field_fn 147 #define __field_fn(type, item) 148 149 + #undef __field_packed 150 + #define __field_packed(type, item) 151 + 152 #undef __field_desc 153 #define __field_desc(type, container, item) 154 155 + #undef __field_desc_packed 156 + #define __field_desc_packed(type, container, item) 157 158 #undef __array 159 #define __array(type, item, len)