From: "Steven Rostedt (VMware)" <rost...@goodmis.org>

Add x64, x32, x16 and x8 to represent numbers of the same size in hex.
Similar to u64, u32, u16, and u8 but uses %x instead of %u.

Signed-off-by: Steven Rostedt (VMware) <rost...@goodmis.org>
---
 Documentation/trace/function-based-events.rst | 14 +++++++++-----
 kernel/trace/trace_event_ftrace.c             | 13 ++++++++++++-
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/Documentation/trace/function-based-events.rst 
b/Documentation/trace/function-based-events.rst
index 94c2c975295a..f27a0c4e829c 100644
--- a/Documentation/trace/function-based-events.rst
+++ b/Documentation/trace/function-based-events.rst
@@ -97,6 +97,7 @@ as follows:
 
  ATOM := 'u8' | 'u16' | 'u32' | 'u64' |
          's8' | 's16' | 's32' | 's64' |
+         'x8' | 'x16' | 'x32' | 'x64' |
          'char' | 'short' | 'int' | 'long' | 'size_t'
 
  FIELD := <name>
@@ -116,11 +117,14 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, 
struct packet_type *pt,
 
 If we are only interested in the first argument (skb):
 
- # echo 'ip_rcv(u64 skb, u64 dev)' > function_events
+ # echo 'ip_rcv(x64 skb, x86 dev)' > function_events
 
  # echo 1 > events/functions/ip_rcv/enable
  # cat trace
-     <idle>-0     [003] ..s3  2119.041935: 
__netif_receive_skb_core->ip_rcv(skb=18446612136982403072, 
dev=18446612136968273920)
-     <idle>-0     [003] ..s3  2119.041944: 
__netif_receive_skb_core->ip_rcv(skb=18446612136982403072, 
dev=18446612136968273920)
-     <idle>-0     [003] ..s3  2119.288337: 
__netif_receive_skb_core->ip_rcv(skb=18446612136982403072, 
dev=18446612136968273920)
-     <idle>-0     [003] ..s3  2119.288960: 
__netif_receive_skb_core->ip_rcv(skb=18446612136982403072, 
dev=18446612136968273920)
+     <idle>-0     [003] ..s3  5543.133460: 
__netif_receive_skb_core->ip_rcv(skb=ffff88007f960700, net=ffff880114250000)
+     <idle>-0     [003] ..s3  5543.133475: 
__netif_receive_skb_core->ip_rcv(skb=ffff88007f960700, net=ffff880114250000)
+     <idle>-0     [003] ..s3  5543.312592: 
__netif_receive_skb_core->ip_rcv(skb=ffff88007f960700, net=ffff880114250000)
+     <idle>-0     [003] ..s3  5543.313150: 
__netif_receive_skb_core->ip_rcv(skb=ffff88007f960700, net=ffff880114250000)
+
+We use "x64" in order to make sure that the data is displayed in hex.
+This is on a x86_64 machine, and we know the pointer sizes are 8 bytes.
diff --git a/kernel/trace/trace_event_ftrace.c 
b/kernel/trace/trace_event_ftrace.c
index 66465be1e6d5..aa19c8af9d34 100644
--- a/kernel/trace/trace_event_ftrace.c
+++ b/kernel/trace/trace_event_ftrace.c
@@ -62,6 +62,11 @@ enum func_states {
        FUNC_STATE_ERROR,
 };
 
+typedef u64 x64;
+typedef u32 x32;
+typedef u16 x16;
+typedef u8 x8;
+
 #define TYPE_TUPLE(type)                       \
        { #type, sizeof(type), is_signed_type(type) }
 
@@ -77,12 +82,16 @@ static struct func_type {
        TYPE_TUPLE(size_t),
        TYPE_TUPLE(u64),
        TYPE_TUPLE(s64),
+       TYPE_TUPLE(x64),
        TYPE_TUPLE(u32),
        TYPE_TUPLE(s32),
+       TYPE_TUPLE(x32),
        TYPE_TUPLE(u16),
        TYPE_TUPLE(s16),
+       TYPE_TUPLE(x16),
        TYPE_TUPLE(u8),
        TYPE_TUPLE(s8),
+       TYPE_TUPLE(x8),
        { NULL,         0,      0 }
 };
 
@@ -353,7 +362,9 @@ static void make_fmt(struct func_arg *arg, char *fmt)
                fmt[c++] = 'l';
        }
 
-       if (arg->sign)
+       if (arg->type[0] == 'x')
+               fmt[c++] = 'x';
+       else if (arg->sign)
                fmt[c++] = 'd';
        else
                fmt[c++] = 'u';
-- 
2.15.1


Reply via email to