powerpc/pnv: Avoid bogus output
authorGavin Shan <shangw@linux.vnet.ibm.com>
Wed, 17 Oct 2012 19:53:30 +0000 (19:53 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 15 Nov 2012 02:00:08 +0000 (13:00 +1100)
There're couples of functions defined to print debugging messages
during initializing P7IOC. However, we got bogus output from those
functions like pe_info(). The problem here is that the message
level (the first parameter to printk()) isn't printable and that
caused the bogus output.

The patch fixes the issue by merging __pe_printk() to the macro
define_pe_printk_level() so that we can pass the message level
directly to printk().

Reported-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Gavin Shan <shangw@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/platforms/powernv/pci-ioda.c

index 471aa3c..53d052e 100644 (file)
 #include "powernv.h"
 #include "pci.h"
 
-static int __pe_printk(const char *level, const struct pnv_ioda_pe *pe,
-                      struct va_format *vaf)
-{
-       char pfix[32];
-
-       if (pe->pdev)
-               strlcpy(pfix, dev_name(&pe->pdev->dev), sizeof(pfix));
-       else
-               sprintf(pfix, "%04x:%02x     ",
-                       pci_domain_nr(pe->pbus), pe->pbus->number);
-       return printk("pci %s%s: [PE# %.3d] %pV", level, pfix, pe->pe_number, vaf);
-}
-
 #define define_pe_printk_level(func, kern_level)               \
 static int func(const struct pnv_ioda_pe *pe, const char *fmt, ...)    \
 {                                                              \
        struct va_format vaf;                                   \
        va_list args;                                           \
+       char pfix[32];                                          \
        int r;                                                  \
                                                                \
        va_start(args, fmt);                                    \
@@ -59,7 +47,16 @@ static int func(const struct pnv_ioda_pe *pe, const char *fmt, ...)  \
        vaf.fmt = fmt;                                          \
        vaf.va = &args;                                         \
                                                                \
-       r = __pe_printk(kern_level, pe, &vaf);                  \
+       if (pe->pdev)                                           \
+               strlcpy(pfix, dev_name(&pe->pdev->dev),         \
+                       sizeof(pfix));                          \
+       else                                                    \
+               sprintf(pfix, "%04x:%02x     ",                 \
+                       pci_domain_nr(pe->pbus),                \
+                       pe->pbus->number);                      \
+       r = printk(kern_level "pci %s: [PE# %.3d] %pV",         \
+                  pfix, pe->pe_number, &vaf);                  \
+                                                               \
        va_end(args);                                           \
                                                                \
        return r;                                               \