diff mbox

[1/2] tracing: add __print_symbolic_u64 to avoid warnings on 32bit machine

Message ID 4DACE6E0.7000507@cn.fujitsu.com (mailing list archive)
State New, archived
Headers show

Commit Message

liubo April 19, 2011, 1:35 a.m. UTC
Filesystem, like Btrfs, has some "ULL" macros, and when these macros are passed
to tracepoints'__print_symbolic(), there will be 64->32 truncate WARNINGS during
compiling on 32bit box.

Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com>
---
 include/linux/ftrace_event.h |   12 ++++++++++++
 include/trace/ftrace.h       |   13 +++++++++++++
 kernel/trace/trace_output.c  |   27 +++++++++++++++++++++++++++
 3 files changed, 52 insertions(+), 0 deletions(-)

Comments

liubo April 29, 2011, 10:01 a.m. UTC | #1
ping?

On 04/19/2011 09:35 AM, liubo wrote:
> Filesystem, like Btrfs, has some "ULL" macros, and when these macros are passed
> to tracepoints'__print_symbolic(), there will be 64->32 truncate WARNINGS during
> compiling on 32bit box.
> 
> Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com>
> ---
>  include/linux/ftrace_event.h |   12 ++++++++++++
>  include/trace/ftrace.h       |   13 +++++++++++++
>  kernel/trace/trace_output.c  |   27 +++++++++++++++++++++++++++
>  3 files changed, 52 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
> index 47e3997..efb2330 100644
> --- a/include/linux/ftrace_event.h
> +++ b/include/linux/ftrace_event.h
> @@ -16,6 +16,11 @@ struct trace_print_flags {
>  	const char		*name;
>  };
>  
> +struct trace_print_flags_u64 {
> +	unsigned long long	mask;
> +	const char		*name;
> +};
> +
>  const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
>  				   unsigned long flags,
>  				   const struct trace_print_flags *flag_array);
> @@ -23,6 +28,13 @@ const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
>  const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
>  				     const struct trace_print_flags *symbol_array);
>  
> +#if BITS_PER_LONG == 32
> +const char *ftrace_print_symbols_seq_u64(struct trace_seq *p,
> +					 unsigned long long val,
> +					 const struct trace_print_flags_u64
> +								 *symbol_array);
> +#endif
> +
>  const char *ftrace_print_hex_seq(struct trace_seq *p,
>  				 const unsigned char *buf, int len);
>  
> diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
> index 3e68366..533c49f 100644
> --- a/include/trace/ftrace.h
> +++ b/include/trace/ftrace.h
> @@ -205,6 +205,19 @@
>  		ftrace_print_symbols_seq(p, value, symbols);		\
>  	})
>  
> +#undef __print_symbolic_u64
> +#if BITS_PER_LONG == 32
> +#define __print_symbolic_u64(value, symbol_array...)			\
> +	({								\
> +		static const struct trace_print_flags_u64 symbols[] =	\
> +			{ symbol_array, { -1, NULL } };			\
> +		ftrace_print_symbols_seq_u64(p, value, symbols);	\
> +	})
> +#else
> +#define __print_symbolic_u64(value, symbol_array...)			\
> +			__print_symbolic(value, symbol_array)
> +#endif
> +
>  #undef __print_hex
>  #define __print_hex(buf, buf_len) ftrace_print_hex_seq(p, buf, buf_len)
>  
> diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
> index 02272ba..b783504 100644
> --- a/kernel/trace/trace_output.c
> +++ b/kernel/trace/trace_output.c
> @@ -353,6 +353,33 @@ ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
>  }
>  EXPORT_SYMBOL(ftrace_print_symbols_seq);
>  
> +#if BITS_PER_LONG == 32
> +const char *
> +ftrace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val,
> +			 const struct trace_print_flags_u64 *symbol_array)
> +{
> +	int i;
> +	const char *ret = p->buffer + p->len;
> +
> +	for (i = 0;  symbol_array[i].name; i++) {
> +
> +		if (val != symbol_array[i].mask)
> +			continue;
> +
> +		trace_seq_puts(p, symbol_array[i].name);
> +		break;
> +	}
> +
> +	if (!p->len)
> +		trace_seq_printf(p, "0x%llx", val);
> +
> +	trace_seq_putc(p, 0);
> +
> +	return ret;
> +}
> +EXPORT_SYMBOL(ftrace_print_symbols_seq_u64);
> +#endif
> +
>  const char *
>  ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len)
>  {

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Steven Rostedt May 1, 2011, 3:35 p.m. UTC | #2
On Fri, 2011-04-29 at 18:01 +0800, liubo wrote:
> ping?

Sorry, I've been trying to get the new ftrace function tracer features
out ASAP. I plan on looking at this when I'm done.

Thanks,

-- Steve

> 
> On 04/19/2011 09:35 AM, liubo wrote:
> > Filesystem, like Btrfs, has some "ULL" macros, and when these macros are passed
> > to tracepoints'__print_symbolic(), there will be 64->32 truncate WARNINGS during
> > compiling on 32bit box.
> > 
> > Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com>
> > ---
> >  include/linux/ftrace_event.h |   12 ++++++++++++
> >  include/trace/ftrace.h       |   13 +++++++++++++
> >  kernel/trace/trace_output.c  |   27 +++++++++++++++++++++++++++
> >  3 files changed, 52 insertions(+), 0 deletions(-)
> > 
> > diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
> > index 47e3997..efb2330 100644
> > --- a/include/linux/ftrace_event.h
> > +++ b/include/linux/ftrace_event.h
> > @@ -16,6 +16,11 @@ struct trace_print_flags {
> >  	const char		*name;
> >  };
> >  
> > +struct trace_print_flags_u64 {
> > +	unsigned long long	mask;
> > +	const char		*name;
> > +};
> > +
> >  const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
> >  				   unsigned long flags,
> >  				   const struct trace_print_flags *flag_array);
> > @@ -23,6 +28,13 @@ const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
> >  const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
> >  				     const struct trace_print_flags *symbol_array);
> >  
> > +#if BITS_PER_LONG == 32
> > +const char *ftrace_print_symbols_seq_u64(struct trace_seq *p,
> > +					 unsigned long long val,
> > +					 const struct trace_print_flags_u64
> > +								 *symbol_array);
> > +#endif
> > +
> >  const char *ftrace_print_hex_seq(struct trace_seq *p,
> >  				 const unsigned char *buf, int len);
> >  
> > diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
> > index 3e68366..533c49f 100644
> > --- a/include/trace/ftrace.h
> > +++ b/include/trace/ftrace.h
> > @@ -205,6 +205,19 @@
> >  		ftrace_print_symbols_seq(p, value, symbols);		\
> >  	})
> >  
> > +#undef __print_symbolic_u64
> > +#if BITS_PER_LONG == 32
> > +#define __print_symbolic_u64(value, symbol_array...)			\
> > +	({								\
> > +		static const struct trace_print_flags_u64 symbols[] =	\
> > +			{ symbol_array, { -1, NULL } };			\
> > +		ftrace_print_symbols_seq_u64(p, value, symbols);	\
> > +	})
> > +#else
> > +#define __print_symbolic_u64(value, symbol_array...)			\
> > +			__print_symbolic(value, symbol_array)
> > +#endif
> > +
> >  #undef __print_hex
> >  #define __print_hex(buf, buf_len) ftrace_print_hex_seq(p, buf, buf_len)
> >  
> > diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
> > index 02272ba..b783504 100644
> > --- a/kernel/trace/trace_output.c
> > +++ b/kernel/trace/trace_output.c
> > @@ -353,6 +353,33 @@ ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
> >  }
> >  EXPORT_SYMBOL(ftrace_print_symbols_seq);
> >  
> > +#if BITS_PER_LONG == 32
> > +const char *
> > +ftrace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val,
> > +			 const struct trace_print_flags_u64 *symbol_array)
> > +{
> > +	int i;
> > +	const char *ret = p->buffer + p->len;
> > +
> > +	for (i = 0;  symbol_array[i].name; i++) {
> > +
> > +		if (val != symbol_array[i].mask)
> > +			continue;
> > +
> > +		trace_seq_puts(p, symbol_array[i].name);
> > +		break;
> > +	}
> > +
> > +	if (!p->len)
> > +		trace_seq_printf(p, "0x%llx", val);
> > +
> > +	trace_seq_putc(p, 0);
> > +
> > +	return ret;
> > +}
> > +EXPORT_SYMBOL(ftrace_print_symbols_seq_u64);
> > +#endif
> > +
> >  const char *
> >  ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len)
> >  {


--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Steven Rostedt May 25, 2011, 12:27 p.m. UTC | #3
On Thu, 2011-05-26 at 01:49 -0400, liubo wrote:
> On 05/01/2011 11:35 AM, Steven Rostedt wrote:
> > On Fri, 2011-04-29 at 18:01 +0800, liubo wrote:
> >> ping?
> > 
> > Sorry, I've been trying to get the new ftrace function tracer features
> > out ASAP. I plan on looking at this when I'm done.
> > 
> > Thanks,
> > 
> 
> Hi, Steven,
> 
> I've seen your latest git-pull, but these 2 patches are not included yet,
> so is there any problem with them?

Actually, I was trying to get out what I had. There's a bit more patches
that I need to process still. This being one of them.

But what I sent out previously is not going into 2.6.40 anyway. Ingo
feels that it's too late in the merge window to pull those changes and
wants to wait till the next merge window. Since there's some fixes in
that pull request, I'll need to cherry pick them out and rebase the rest
for the next window.

I'll look at this patch soon. It's still in my queue "todo" ;)

-- Steve

> 
> If it does, I can be helpful. :)


--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Randy Dunlap May 25, 2011, 4:12 p.m. UTC | #4
On Wed, 25 May 2011 08:27:44 -0400 Steven Rostedt wrote:

> On Thu, 2011-05-26 at 01:49 -0400, liubo wrote:
> > On 05/01/2011 11:35 AM, Steven Rostedt wrote:
> > > On Fri, 2011-04-29 at 18:01 +0800, liubo wrote:
> > >> ping?
> > > 
> > > Sorry, I've been trying to get the new ftrace function tracer features
> > > out ASAP. I plan on looking at this when I'm done.
> > > 
> > > Thanks,
> > > 
> > 
> > Hi, Steven,
> > 
> > I've seen your latest git-pull, but these 2 patches are not included yet,
> > so is there any problem with them?
> 
> Actually, I was trying to get out what I had. There's a bit more patches
> that I need to process still. This being one of them.
> 
> But what I sent out previously is not going into 2.6.40 anyway. Ingo
> feels that it's too late in the merge window to pull those changes and
> wants to wait till the next merge window. Since there's some fixes in
> that pull request, I'll need to cherry pick them out and rebase the rest
> for the next window.

Sorry to hear all of that.  This fix is needed in mainline.

> I'll look at this patch soon. It's still in my queue "todo" ;)
> 
> -- Steve
> 
> > 
> > If it does, I can be helpful. :)


---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Steven Rostedt May 25, 2011, 4:47 p.m. UTC | #5
On Wed, 2011-05-25 at 09:12 -0700, Randy Dunlap wrote:
>  
> > But what I sent out previously is not going into 2.6.40 anyway. Ingo
> > feels that it's too late in the merge window to pull those changes and
> > wants to wait till the next merge window. Since there's some fixes in
> > that pull request, I'll need to cherry pick them out and rebase the rest
> > for the next window.
> 
> Sorry to hear all of that.  This fix is needed in mainline.
> 

Hmm, it is a warning fix. Well, I could add this to the cherry picking
I'm doing (fixes only).

I'm currently making a fix for a triple fault in the function tracer
caused by PROVE_RCU causing recursive tracing. When I get this fixed,
I'll be pushing the "fixes" next.

Thanks!

-- Steve


--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Randy Dunlap May 25, 2011, 4:50 p.m. UTC | #6
On 05/25/11 09:47, Steven Rostedt wrote:
> On Wed, 2011-05-25 at 09:12 -0700, Randy Dunlap wrote:
>>  
>>> But what I sent out previously is not going into 2.6.40 anyway. Ingo
>>> feels that it's too late in the merge window to pull those changes and
>>> wants to wait till the next merge window. Since there's some fixes in
>>> that pull request, I'll need to cherry pick them out and rebase the rest
>>> for the next window.
>>
>> Sorry to hear all of that.  This fix is needed in mainline.
>>
> 
> Hmm, it is a warning fix. Well, I could add this to the cherry picking
> I'm doing (fixes only).

Yes, I know.  And it clutters up a build file with 59 warnings for btrfs.h.  :(

> I'm currently making a fix for a triple fault in the function tracer
> caused by PROVE_RCU causing recursive tracing. When I get this fixed,
> I'll be pushing the "fixes" next.
Li Zefan May 26, 2011, 1:08 a.m. UTC | #7
Steven Rostedt wrote:
> On Wed, 2011-05-25 at 09:12 -0700, Randy Dunlap wrote:
>>  
>>> But what I sent out previously is not going into 2.6.40 anyway. Ingo
>>> feels that it's too late in the merge window to pull those changes and
>>> wants to wait till the next merge window. Since there's some fixes in
>>> that pull request, I'll need to cherry pick them out and rebase the rest
>>> for the next window.
>>
>> Sorry to hear all of that.  This fix is needed in mainline.
>>
> 
> Hmm, it is a warning fix. Well, I could add this to the cherry picking
> I'm doing (fixes only).
> 
> I'm currently making a fix for a triple fault in the function tracer
> caused by PROVE_RCU causing recursive tracing. When I get this fixed,
> I'll be pushing the "fixes" next.
> 

Actually it's more than a compile warning fix.

After a variable is cast from u64 to u32 and passed to __print_symbolic(),
we'll see incorrect result in the trace output.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Steven Rostedt May 26, 2011, 1:17 a.m. UTC | #8
On Thu, 2011-05-26 at 09:08 +0800, Li Zefan wrote:
> Steven Rostedt wrote:

> Actually it's more than a compile warning fix.
> 
> After a variable is cast from u64 to u32 and passed to __print_symbolic(),
> we'll see incorrect result in the trace output.

Don't worry, I didn't even say a warning fix was not reason to get into
this merge window.

There was only two patches in my last pull request that were not fixing
a bug and/or warning, but adding enhancements. I rebased without them
and even added this patch and another bug fix patch to get ready to push
out.

After my ktest runs are done (I test each patch on x86_64 and x86_32,
and then compile test them on a bunch of other archs), I'll do another
git pull request for this merge window.

Thanks!

-- Steve


--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
liubo May 26, 2011, 5:49 a.m. UTC | #9
On 05/01/2011 11:35 AM, Steven Rostedt wrote:
> On Fri, 2011-04-29 at 18:01 +0800, liubo wrote:
>> ping?
> 
> Sorry, I've been trying to get the new ftrace function tracer features
> out ASAP. I plan on looking at this when I'm done.
> 
> Thanks,
> 

Hi, Steven,

I've seen your latest git-pull, but these 2 patches are not included yet,
so is there any problem with them?

If it does, I can be helpful. :)

thanks,
liubo

> -- Steve
> 
>> On 04/19/2011 09:35 AM, liubo wrote:
>>> Filesystem, like Btrfs, has some "ULL" macros, and when these macros are passed
>>> to tracepoints'__print_symbolic(), there will be 64->32 truncate WARNINGS during
>>> compiling on 32bit box.
>>>
>>> Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com>
>>> ---
>>>  include/linux/ftrace_event.h |   12 ++++++++++++
>>>  include/trace/ftrace.h       |   13 +++++++++++++
>>>  kernel/trace/trace_output.c  |   27 +++++++++++++++++++++++++++
>>>  3 files changed, 52 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
>>> index 47e3997..efb2330 100644
>>> --- a/include/linux/ftrace_event.h
>>> +++ b/include/linux/ftrace_event.h
>>> @@ -16,6 +16,11 @@ struct trace_print_flags {
>>>  	const char		*name;
>>>  };
>>>  
>>> +struct trace_print_flags_u64 {
>>> +	unsigned long long	mask;
>>> +	const char		*name;
>>> +};
>>> +
>>>  const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
>>>  				   unsigned long flags,
>>>  				   const struct trace_print_flags *flag_array);
>>> @@ -23,6 +28,13 @@ const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
>>>  const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
>>>  				     const struct trace_print_flags *symbol_array);
>>>  
>>> +#if BITS_PER_LONG == 32
>>> +const char *ftrace_print_symbols_seq_u64(struct trace_seq *p,
>>> +					 unsigned long long val,
>>> +					 const struct trace_print_flags_u64
>>> +								 *symbol_array);
>>> +#endif
>>> +
>>>  const char *ftrace_print_hex_seq(struct trace_seq *p,
>>>  				 const unsigned char *buf, int len);
>>>  
>>> diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
>>> index 3e68366..533c49f 100644
>>> --- a/include/trace/ftrace.h
>>> +++ b/include/trace/ftrace.h
>>> @@ -205,6 +205,19 @@
>>>  		ftrace_print_symbols_seq(p, value, symbols);		\
>>>  	})
>>>  
>>> +#undef __print_symbolic_u64
>>> +#if BITS_PER_LONG == 32
>>> +#define __print_symbolic_u64(value, symbol_array...)			\
>>> +	({								\
>>> +		static const struct trace_print_flags_u64 symbols[] =	\
>>> +			{ symbol_array, { -1, NULL } };			\
>>> +		ftrace_print_symbols_seq_u64(p, value, symbols);	\
>>> +	})
>>> +#else
>>> +#define __print_symbolic_u64(value, symbol_array...)			\
>>> +			__print_symbolic(value, symbol_array)
>>> +#endif
>>> +
>>>  #undef __print_hex
>>>  #define __print_hex(buf, buf_len) ftrace_print_hex_seq(p, buf, buf_len)
>>>  
>>> diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
>>> index 02272ba..b783504 100644
>>> --- a/kernel/trace/trace_output.c
>>> +++ b/kernel/trace/trace_output.c
>>> @@ -353,6 +353,33 @@ ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
>>>  }
>>>  EXPORT_SYMBOL(ftrace_print_symbols_seq);
>>>  
>>> +#if BITS_PER_LONG == 32
>>> +const char *
>>> +ftrace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val,
>>> +			 const struct trace_print_flags_u64 *symbol_array)
>>> +{
>>> +	int i;
>>> +	const char *ret = p->buffer + p->len;
>>> +
>>> +	for (i = 0;  symbol_array[i].name; i++) {
>>> +
>>> +		if (val != symbol_array[i].mask)
>>> +			continue;
>>> +
>>> +		trace_seq_puts(p, symbol_array[i].name);
>>> +		break;
>>> +	}
>>> +
>>> +	if (!p->len)
>>> +		trace_seq_printf(p, "0x%llx", val);
>>> +
>>> +	trace_seq_putc(p, 0);
>>> +
>>> +	return ret;
>>> +}
>>> +EXPORT_SYMBOL(ftrace_print_symbols_seq_u64);
>>> +#endif
>>> +
>>>  const char *
>>>  ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len)
>>>  {
> 
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
index 47e3997..efb2330 100644
--- a/include/linux/ftrace_event.h
+++ b/include/linux/ftrace_event.h
@@ -16,6 +16,11 @@  struct trace_print_flags {
 	const char		*name;
 };
 
+struct trace_print_flags_u64 {
+	unsigned long long	mask;
+	const char		*name;
+};
+
 const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
 				   unsigned long flags,
 				   const struct trace_print_flags *flag_array);
@@ -23,6 +28,13 @@  const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
 const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
 				     const struct trace_print_flags *symbol_array);
 
+#if BITS_PER_LONG == 32
+const char *ftrace_print_symbols_seq_u64(struct trace_seq *p,
+					 unsigned long long val,
+					 const struct trace_print_flags_u64
+								 *symbol_array);
+#endif
+
 const char *ftrace_print_hex_seq(struct trace_seq *p,
 				 const unsigned char *buf, int len);
 
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
index 3e68366..533c49f 100644
--- a/include/trace/ftrace.h
+++ b/include/trace/ftrace.h
@@ -205,6 +205,19 @@ 
 		ftrace_print_symbols_seq(p, value, symbols);		\
 	})
 
+#undef __print_symbolic_u64
+#if BITS_PER_LONG == 32
+#define __print_symbolic_u64(value, symbol_array...)			\
+	({								\
+		static const struct trace_print_flags_u64 symbols[] =	\
+			{ symbol_array, { -1, NULL } };			\
+		ftrace_print_symbols_seq_u64(p, value, symbols);	\
+	})
+#else
+#define __print_symbolic_u64(value, symbol_array...)			\
+			__print_symbolic(value, symbol_array)
+#endif
+
 #undef __print_hex
 #define __print_hex(buf, buf_len) ftrace_print_hex_seq(p, buf, buf_len)
 
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index 02272ba..b783504 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -353,6 +353,33 @@  ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
 }
 EXPORT_SYMBOL(ftrace_print_symbols_seq);
 
+#if BITS_PER_LONG == 32
+const char *
+ftrace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val,
+			 const struct trace_print_flags_u64 *symbol_array)
+{
+	int i;
+	const char *ret = p->buffer + p->len;
+
+	for (i = 0;  symbol_array[i].name; i++) {
+
+		if (val != symbol_array[i].mask)
+			continue;
+
+		trace_seq_puts(p, symbol_array[i].name);
+		break;
+	}
+
+	if (!p->len)
+		trace_seq_printf(p, "0x%llx", val);
+
+	trace_seq_putc(p, 0);
+
+	return ret;
+}
+EXPORT_SYMBOL(ftrace_print_symbols_seq_u64);
+#endif
+
 const char *
 ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len)
 {