dynamic debug: Fix build issue with older gcc
Jason Baron [Fri, 7 Jan 2011 18:36:58 +0000 (13:36 -0500)]
On older gcc (3.3) dynamic debug fails to compile:

include/net/inet_connection_sock.h: In function `inet_csk_reset_xmit_timer':
include/net/inet_connection_sock.h:236: error: duplicate label declaration `do_printk'
include/net/inet_connection_sock.h:219: error: this is a previous declaration
include/net/inet_connection_sock.h:236: error: duplicate label declaration `out'
include/net/inet_connection_sock.h:219: error: this is a previous declaration
include/net/inet_connection_sock.h:236: error: duplicate label `do_printk'
include/net/inet_connection_sock.h:236: error: duplicate label `out'

Fix, by reverting the usage of JUMP_LABEL() in dynamic debug for now.

Cc: <stable@kernel.org>
Reported-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Tested-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>

include/linux/dynamic_debug.h
lib/dynamic_debug.c

index a90b389..1c70028 100644 (file)
@@ -44,34 +44,24 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n,
 extern int ddebug_remove_module(const char *mod_name);
 
 #define dynamic_pr_debug(fmt, ...) do {                                        \
-       __label__ do_printk;                                            \
-       __label__ out;                                                  \
        static struct _ddebug descriptor                                \
        __used                                                          \
        __attribute__((section("__verbose"), aligned(8))) =             \
        { KBUILD_MODNAME, __func__, __FILE__, fmt, __LINE__,            \
                _DPRINTK_FLAGS_DEFAULT };                               \
-       JUMP_LABEL(&descriptor.enabled, do_printk);                     \
-       goto out;                                                       \
-do_printk:                                                             \
-       printk(KERN_DEBUG pr_fmt(fmt),  ##__VA_ARGS__);                 \
-out:   ;                                                               \
+       if (unlikely(descriptor.enabled))                               \
+               printk(KERN_DEBUG pr_fmt(fmt),  ##__VA_ARGS__);         \
        } while (0)
 
 
 #define dynamic_dev_dbg(dev, fmt, ...) do {                            \
-       __label__ do_printk;                                            \
-       __label__ out;                                                  \
        static struct _ddebug descriptor                                \
        __used                                                          \
        __attribute__((section("__verbose"), aligned(8))) =             \
        { KBUILD_MODNAME, __func__, __FILE__, fmt, __LINE__,            \
                _DPRINTK_FLAGS_DEFAULT };                               \
-       JUMP_LABEL(&descriptor.enabled, do_printk);                     \
-       goto out;                                                       \
-do_printk:                                                             \
-       dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__);                \
-out:   ;                                                               \
+       if (unlikely(descriptor.enabled))                               \
+               dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__);        \
        } while (0)
 
 #else
index 3094318..b335acb 100644 (file)
@@ -141,11 +141,10 @@ static void ddebug_change(const struct ddebug_query *query,
                        else if (!dp->flags)
                                dt->num_enabled++;
                        dp->flags = newflags;
-                       if (newflags) {
-                               jump_label_enable(&dp->enabled);
-                       } else {
-                               jump_label_disable(&dp->enabled);
-                       }
+                       if (newflags)
+                               dp->enabled = 1;
+                       else
+                               dp->enabled = 0;
                        if (verbose)
                                printk(KERN_INFO
                                        "ddebug: changed %s:%d [%s]%s %s\n",