2009-12-20 18:08:14

by Thiago Farina

[permalink] [raw]
Subject: [PATCH 1/2] kernel: Use CALLER_ADDR0 macro.

Use CALLER_ADDR0 instead of (unsigned long)__builtin_return_address(0),
since this macro was created for this.

This patch was generated by:
sed -i "s/(unsigned long)__builtin_return_address(0)/CALLER_ADDR0/g" path/to/file

Signed-off-by: Thiago Farina <[email protected]>
---
kernel/panic.c | 2 +-
kernel/softirq.c | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/kernel/panic.c b/kernel/panic.c
index 5827f7b..55b0b71 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -129,7 +129,7 @@ NORET_TYPE void panic(const char * fmt, ...)
{
unsigned long caller;

- caller = (unsigned long)__builtin_return_address(0);
+ caller = CALLER_ADDR0;
disabled_wait(caller);
}
#endif
diff --git a/kernel/softirq.c b/kernel/softirq.c
index a09502e..979e029 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -116,7 +116,7 @@ static inline void __local_bh_disable(unsigned long ip)

void local_bh_disable(void)
{
- __local_bh_disable((unsigned long)__builtin_return_address(0));
+ __local_bh_disable(CALLER_ADDR0);
}

EXPORT_SYMBOL(local_bh_disable);
@@ -132,7 +132,7 @@ void _local_bh_enable(void)
WARN_ON_ONCE(!irqs_disabled());

if (softirq_count() == SOFTIRQ_OFFSET)
- trace_softirqs_on((unsigned long)__builtin_return_address(0));
+ trace_softirqs_on(CALLER_ADDR0);
sub_preempt_count(SOFTIRQ_OFFSET);
}

@@ -167,7 +167,7 @@ static inline void _local_bh_enable_ip(unsigned long ip)

void local_bh_enable(void)
{
- _local_bh_enable_ip((unsigned long)__builtin_return_address(0));
+ _local_bh_enable_ip(CALLER_ADDR0);
}
EXPORT_SYMBOL(local_bh_enable);

@@ -198,7 +198,7 @@ asmlinkage void __do_softirq(void)
pending = local_softirq_pending();
account_system_vtime(current);

- __local_bh_disable((unsigned long)__builtin_return_address(0));
+ __local_bh_disable(CALLER_ADDR0);
lockdep_softirq_enter();

cpu = smp_processor_id();
--
1.6.6.rc0.61.g41d5b


2009-12-20 18:08:29

by Thiago Farina

[permalink] [raw]
Subject: [PATCH 2/2] gfs2: Use CALLER_ADDR0 macro.

Use CALLER_ADDR0 instead of (unsigned long)__builtin_return_address(0),
since this macro was created for this.

This patch was generated by:
sed -i "s/(unsigned long)__builtin_return_address(0)/CALLER_ADDR0/g" path/to/file

Signed-off-by: Thiago Farina <[email protected]>
---
fs/gfs2/glock.c | 5 +++--
fs/gfs2/glops.c | 3 ++-
fs/gfs2/trans.c | 3 ++-
3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index f455a03..216898d 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -27,6 +27,7 @@
#include <linux/freezer.h>
#include <linux/workqueue.h>
#include <linux/jiffies.h>
+#include <linux/ftrace.h>

#include "gfs2.h"
#include "incore.h"
@@ -831,7 +832,7 @@ void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, unsigned flags,
{
INIT_LIST_HEAD(&gh->gh_list);
gh->gh_gl = gl;
- gh->gh_ip = (unsigned long)__builtin_return_address(0);
+ gh->gh_ip = CALLER_ADDR0;
gh->gh_owner_pid = get_pid(task_pid(current));
gh->gh_state = state;
gh->gh_flags = flags;
@@ -855,7 +856,7 @@ void gfs2_holder_reinit(unsigned int state, unsigned flags, struct gfs2_holder *
gh->gh_state = state;
gh->gh_flags = flags;
gh->gh_iflags = 0;
- gh->gh_ip = (unsigned long)__builtin_return_address(0);
+ gh->gh_ip = CALLER_ADDR0;
}

/**
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
index 78554ac..b8331d8 100644
--- a/fs/gfs2/glops.c
+++ b/fs/gfs2/glops.c
@@ -14,6 +14,7 @@
#include <linux/gfs2_ondisk.h>
#include <linux/bio.h>
#include <linux/posix_acl.h>
+#include <linux/ftrace.h>

#include "gfs2.h"
#include "incore.h"
@@ -51,7 +52,7 @@ static void gfs2_ail_empty_gl(struct gfs2_glock *gl)

/* A shortened, inline version of gfs2_trans_begin() */
tr.tr_reserved = 1 + gfs2_struct2blk(sdp, tr.tr_revokes, sizeof(u64));
- tr.tr_ip = (unsigned long)__builtin_return_address(0);
+ tr.tr_ip = CALLER_ADDR0;
INIT_LIST_HEAD(&tr.tr_list_buf);
gfs2_log_reserve(sdp, tr.tr_reserved);
BUG_ON(current->journal_info);
diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c
index 4ef0e9f..9355c73 100644
--- a/fs/gfs2/trans.c
+++ b/fs/gfs2/trans.c
@@ -14,6 +14,7 @@
#include <linux/buffer_head.h>
#include <linux/kallsyms.h>
#include <linux/gfs2_ondisk.h>
+#include <linux/ftrace.h>

#include "gfs2.h"
#include "incore.h"
@@ -40,7 +41,7 @@ int gfs2_trans_begin(struct gfs2_sbd *sdp, unsigned int blocks,
if (!tr)
return -ENOMEM;

- tr->tr_ip = (unsigned long)__builtin_return_address(0);
+ tr->tr_ip = CALLER_ADDR0;
tr->tr_blocks = blocks;
tr->tr_revokes = revokes;
tr->tr_reserved = 1;
--
1.6.6.rc0.61.g41d5b

2009-12-20 19:04:01

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH 1/2] kernel: Use CALLER_ADDR0 macro.

Thiago Farina wrote:
> Use CALLER_ADDR0 instead of (unsigned long)__builtin_return_address(0),
> since this macro was created for this.
>
> This patch was generated by:
> sed -i "s/(unsigned long)__builtin_return_address(0)/CALLER_ADDR0/g" path/to/file

The new macro looks more obfuscated than the old straight forward call.
I fail to see the improvement.

-Andi

2009-12-21 09:20:09

by Steven Whitehouse

[permalink] [raw]
Subject: Re: [PATCH 2/2] gfs2: Use CALLER_ADDR0 macro.

Hi,

Looks fairly harmless, even though I don't entirely see the point. Do
you want me to add this to me tree?

Acked-by: Steven Whitehouse <[email protected]>

Steve.

On Sun, 2009-12-20 at 13:07 -0500, Thiago Farina wrote:
> Use CALLER_ADDR0 instead of (unsigned long)__builtin_return_address(0),
> since this macro was created for this.
>
> This patch was generated by:
> sed -i "s/(unsigned long)__builtin_return_address(0)/CALLER_ADDR0/g" path/to/file
>
> Signed-off-by: Thiago Farina <[email protected]>
> ---
> fs/gfs2/glock.c | 5 +++--
> fs/gfs2/glops.c | 3 ++-
> fs/gfs2/trans.c | 3 ++-
> 3 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
> index f455a03..216898d 100644
> --- a/fs/gfs2/glock.c
> +++ b/fs/gfs2/glock.c
> @@ -27,6 +27,7 @@
> #include <linux/freezer.h>
> #include <linux/workqueue.h>
> #include <linux/jiffies.h>
> +#include <linux/ftrace.h>
>
> #include "gfs2.h"
> #include "incore.h"
> @@ -831,7 +832,7 @@ void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, unsigned flags,
> {
> INIT_LIST_HEAD(&gh->gh_list);
> gh->gh_gl = gl;
> - gh->gh_ip = (unsigned long)__builtin_return_address(0);
> + gh->gh_ip = CALLER_ADDR0;
> gh->gh_owner_pid = get_pid(task_pid(current));
> gh->gh_state = state;
> gh->gh_flags = flags;
> @@ -855,7 +856,7 @@ void gfs2_holder_reinit(unsigned int state, unsigned flags, struct gfs2_holder *
> gh->gh_state = state;
> gh->gh_flags = flags;
> gh->gh_iflags = 0;
> - gh->gh_ip = (unsigned long)__builtin_return_address(0);
> + gh->gh_ip = CALLER_ADDR0;
> }
>
> /**
> diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
> index 78554ac..b8331d8 100644
> --- a/fs/gfs2/glops.c
> +++ b/fs/gfs2/glops.c
> @@ -14,6 +14,7 @@
> #include <linux/gfs2_ondisk.h>
> #include <linux/bio.h>
> #include <linux/posix_acl.h>
> +#include <linux/ftrace.h>
>
> #include "gfs2.h"
> #include "incore.h"
> @@ -51,7 +52,7 @@ static void gfs2_ail_empty_gl(struct gfs2_glock *gl)
>
> /* A shortened, inline version of gfs2_trans_begin() */
> tr.tr_reserved = 1 + gfs2_struct2blk(sdp, tr.tr_revokes, sizeof(u64));
> - tr.tr_ip = (unsigned long)__builtin_return_address(0);
> + tr.tr_ip = CALLER_ADDR0;
> INIT_LIST_HEAD(&tr.tr_list_buf);
> gfs2_log_reserve(sdp, tr.tr_reserved);
> BUG_ON(current->journal_info);
> diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c
> index 4ef0e9f..9355c73 100644
> --- a/fs/gfs2/trans.c
> +++ b/fs/gfs2/trans.c
> @@ -14,6 +14,7 @@
> #include <linux/buffer_head.h>
> #include <linux/kallsyms.h>
> #include <linux/gfs2_ondisk.h>
> +#include <linux/ftrace.h>
>
> #include "gfs2.h"
> #include "incore.h"
> @@ -40,7 +41,7 @@ int gfs2_trans_begin(struct gfs2_sbd *sdp, unsigned int blocks,
> if (!tr)
> return -ENOMEM;
>
> - tr->tr_ip = (unsigned long)__builtin_return_address(0);
> + tr->tr_ip = CALLER_ADDR0;
> tr->tr_blocks = blocks;
> tr->tr_revokes = revokes;
> tr->tr_reserved = 1;

2009-12-21 13:43:48

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH 2/2] gfs2: Use CALLER_ADDR0 macro.

On Mon, Dec 21, 2009 at 09:22:41AM +0000, Steven Whitehouse wrote:
> Hi,
>
> Looks fairly harmless, even though I don't entirely see the point. Do
> you want me to add this to me tree?

We also have a _RET_IP_ macro that does the same and has a much more
useful name. And given that we need the address as void pointer to
print it using our printk extension both seem a bit supoptimal.

Given that a lot of tracing code needs this a bit of standardization
would be useful - more important for the type to store the address than
just the macro name.

2009-12-28 10:13:45

by Thiago Farina

[permalink] [raw]
Subject: [tip:core/cleanups] kernel: Use CALLER_ADDR0 macro

Commit-ID: eba3fe4416f3cc2ce043fb304b6c35a69dca3bdb
Gitweb: http://git.kernel.org/tip/eba3fe4416f3cc2ce043fb304b6c35a69dca3bdb
Author: Thiago Farina <[email protected]>
AuthorDate: Sun, 20 Dec 2009 13:07:46 -0500
Committer: Ingo Molnar <[email protected]>
CommitDate: Mon, 28 Dec 2009 10:49:18 +0100

kernel: Use CALLER_ADDR0 macro

Use CALLER_ADDR0 instead of (unsigned long)__builtin_return_address(0),
since this macro was created for this.

This patch was generated by:

sed -i "s/(unsigned long)__builtin_return_address(0)/CALLER_ADDR0/g" path/to/file

Signed-off-by: Thiago Farina <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Arjan van de Ven <[email protected]>
Cc: Steven Rostedt <[email protected]>
Cc: Paul E. McKenney <[email protected]>
Cc: Yinghai Lu <[email protected]>
LKML-Reference: <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
---
kernel/panic.c | 2 +-
kernel/softirq.c | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/kernel/panic.c b/kernel/panic.c
index 5827f7b..55b0b71 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -129,7 +129,7 @@ NORET_TYPE void panic(const char * fmt, ...)
{
unsigned long caller;

- caller = (unsigned long)__builtin_return_address(0);
+ caller = CALLER_ADDR0;
disabled_wait(caller);
}
#endif
diff --git a/kernel/softirq.c b/kernel/softirq.c
index a09502e..979e029 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -116,7 +116,7 @@ static inline void __local_bh_disable(unsigned long ip)

void local_bh_disable(void)
{
- __local_bh_disable((unsigned long)__builtin_return_address(0));
+ __local_bh_disable(CALLER_ADDR0);
}

EXPORT_SYMBOL(local_bh_disable);
@@ -132,7 +132,7 @@ void _local_bh_enable(void)
WARN_ON_ONCE(!irqs_disabled());

if (softirq_count() == SOFTIRQ_OFFSET)
- trace_softirqs_on((unsigned long)__builtin_return_address(0));
+ trace_softirqs_on(CALLER_ADDR0);
sub_preempt_count(SOFTIRQ_OFFSET);
}

@@ -167,7 +167,7 @@ static inline void _local_bh_enable_ip(unsigned long ip)

void local_bh_enable(void)
{
- _local_bh_enable_ip((unsigned long)__builtin_return_address(0));
+ _local_bh_enable_ip(CALLER_ADDR0);
}
EXPORT_SYMBOL(local_bh_enable);

@@ -198,7 +198,7 @@ asmlinkage void __do_softirq(void)
pending = local_softirq_pending();
account_system_vtime(current);

- __local_bh_disable((unsigned long)__builtin_return_address(0));
+ __local_bh_disable(CALLER_ADDR0);
lockdep_softirq_enter();

cpu = smp_processor_id();