Clean up 'print_fn_descriptor_symbol()' types
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 16 May 2008 00:50:37 +0000 (17:50 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 16 May 2008 00:50:37 +0000 (17:50 -0700)
Everybody wants to pass it a function pointer, and in fact, that is what
you _must_ pass it for it to make sense (since it knows that ia64 and
ppc64 use descriptors for function pointers and fetches the actual
address from there).

So don't make the argument be a 'unsigned long' and force everybody to
add a cast.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/base/power/main.c
drivers/pci/quirks.c
drivers/pnp/quirks.c
include/linux/kallsyms.h
init/main.c

index 7b76fd3b93a41b41b00b0fdac9915ed2bae15ad5..45cc3d9eacb874db52f663fe4cc3dea83b41d92c 100644 (file)
@@ -418,7 +418,7 @@ void __suspend_report_result(const char *function, void *fn, int ret)
 {
        if (ret) {
                printk(KERN_ERR "%s(): ", function);
-               print_fn_descriptor_symbol("%s() returns ", (unsigned long)fn);
+               print_fn_descriptor_symbol("%s returns ", fn);
                printk("%d\n", ret);
        }
 }
index f2d9c770f51acd834550e506dcff3fea17086922..dabb563f51d9466e4379f9095c85d2ce04545925 100644 (file)
@@ -1503,8 +1503,7 @@ static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, struct pci_f
                    (f->device == dev->device || f->device == (u16) PCI_ANY_ID)) {
 #ifdef DEBUG
                        dev_dbg(&dev->dev, "calling ");
-                       print_fn_descriptor_symbol("%s()\n",
-                               (unsigned long) f->hook);
+                       print_fn_descriptor_symbol("%s\n", f->hook);
 #endif
                        f->hook(dev);
                }
index ffdb12a59c4037a5b44c9bdc3c852443e61131f0..e2b7de4cb05e46849f60ce4326b289bfe2092e62 100644 (file)
@@ -331,8 +331,7 @@ void pnp_fixup_device(struct pnp_dev *dev)
                        continue;
 #ifdef DEBUG
                dev_dbg(&dev->dev, "%s: calling ", f->id);
-               print_fn_descriptor_symbol("%s\n",
-                               (unsigned long) f->quirk_function);
+               print_fn_descriptor_symbol("%s\n", f->quirk_function);
 #endif
                f->quirk_function(dev);
        }
index 82de2fb62cb71677cfbd876e34189b2b7b002779..00c1801099fa0de4024690c6c415fe0b58724bc5 100644 (file)
@@ -83,16 +83,6 @@ __attribute__((format(printf,1,2)));
 static inline void __check_printsym_format(const char *fmt, ...)
 {
 }
-/* ia64 and ppc64 use function descriptors, which contain the real address */
-#if defined(CONFIG_IA64) || defined(CONFIG_PPC64)
-#define print_fn_descriptor_symbol(fmt, addr)          \
-do {                                           \
-       unsigned long *__faddr = (unsigned long*) addr;         \
-       print_symbol(fmt, __faddr[0]);          \
-} while (0)
-#else
-#define print_fn_descriptor_symbol(fmt, addr) print_symbol(fmt, addr)
-#endif
 
 static inline void print_symbol(const char *fmt, unsigned long addr)
 {
@@ -101,6 +91,20 @@ static inline void print_symbol(const char *fmt, unsigned long addr)
                       __builtin_extract_return_addr((void *)addr));
 }
 
+/*
+ * Pretty-print a function pointer.
+ *
+ * ia64 and ppc64 function pointers are really function descriptors,
+ * which contain a pointer the real address.
+ */
+static inline void print_fn_descriptor_symbol(const char *fmt, void *addr)
+{
+#if defined(CONFIG_IA64) || defined(CONFIG_PPC64)
+       addr = *(void **)addr;
+#endif
+       print_symbol(fmt, (unsigned long)addr);
+}
+
 #ifndef CONFIG_64BIT
 #define print_ip_sym(ip)               \
 do {                                   \
index f406fefa626cadc74871e36c954c9781a4dc795f..c62215146a8069c2299e73f5aa861fd09aa12785 100644 (file)
@@ -706,8 +706,7 @@ static void __init do_initcalls(void)
                int result;
 
                if (initcall_debug) {
-                       print_fn_descriptor_symbol("calling  %s()\n",
-                                       (unsigned long) *call);
+                       print_fn_descriptor_symbol("calling  %s\n", *call);
                        t0 = ktime_get();
                }
 
@@ -717,8 +716,7 @@ static void __init do_initcalls(void)
                        t1 = ktime_get();
                        delta = ktime_sub(t1, t0);
 
-                       print_fn_descriptor_symbol("initcall %s()",
-                                       (unsigned long) *call);
+                       print_fn_descriptor_symbol("initcall %s", *call);
                        printk(" returned %d after %Ld msecs\n", result,
                                (unsigned long long) delta.tv64 >> 20);
                }
@@ -737,8 +735,7 @@ static void __init do_initcalls(void)
                        local_irq_enable();
                }
                if (msgbuf[0]) {
-                       print_fn_descriptor_symbol(KERN_WARNING "initcall %s()",
-                                       (unsigned long) *call);
+                       print_fn_descriptor_symbol(KERN_WARNING "initcall %s", *call);
                        printk(" returned with %s\n", msgbuf);
                }
        }