powerpc/pnv: Avoid bogus output
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>
This commit is contained in:
committed by
Benjamin Herrenschmidt
parent
40c935ae3d
commit
490e078d6a
@@ -34,24 +34,12 @@
|
|||||||
#include "powernv.h"
|
#include "powernv.h"
|
||||||
#include "pci.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) \
|
#define define_pe_printk_level(func, kern_level) \
|
||||||
static int func(const struct pnv_ioda_pe *pe, const char *fmt, ...) \
|
static int func(const struct pnv_ioda_pe *pe, const char *fmt, ...) \
|
||||||
{ \
|
{ \
|
||||||
struct va_format vaf; \
|
struct va_format vaf; \
|
||||||
va_list args; \
|
va_list args; \
|
||||||
|
char pfix[32]; \
|
||||||
int r; \
|
int r; \
|
||||||
\
|
\
|
||||||
va_start(args, fmt); \
|
va_start(args, fmt); \
|
||||||
@@ -59,7 +47,16 @@ static int func(const struct pnv_ioda_pe *pe, const char *fmt, ...) \
|
|||||||
vaf.fmt = fmt; \
|
vaf.fmt = fmt; \
|
||||||
vaf.va = &args; \
|
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); \
|
va_end(args); \
|
||||||
\
|
\
|
||||||
return r; \
|
return r; \
|
||||||
|
|||||||
Reference in New Issue
Block a user