On Thu, Oct 18, 2012 at 10:46:44AM +0800, Gavin Shan wrote: >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 <b...@kernel.crashing.org> >Signed-off-by: Gavin Shan <sha...@linux.vnet.ibm.com> >--- > arch/powerpc/platforms/powernv/pci-ioda.c | 25 +++++++++++-------------- > 1 files changed, 11 insertions(+), 14 deletions(-) > >diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c >b/arch/powerpc/platforms/powernv/pci-ioda.c >index 07ce33c..ff7e7a1 100644 >--- a/arch/powerpc/platforms/powernv/pci-ioda.c >+++ b/arch/powerpc/platforms/powernv/pci-ioda.c >@@ -34,24 +34,12 @@ > #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), \
The space before sprintf() should be replaced by "tab" as the attached patch :-) >+ pe->pbus->number); \ >+ r = printk(kern_level "pci %s: [PE# %.3d] %pV", \ >+ pfix, pe->pe_number, &vaf); \ >+ \ > va_end(args); \ > \ > return r; \ Thanks, Gavin
>From 4ee539b85676c986122087fe84d59e3b764396d5 Mon Sep 17 00:00:00 2001 From: Gavin Shan <sha...@linux.vnet.ibm.com> Date: Thu, 18 Oct 2012 10:09:12 +0800 Subject: [PATCH] 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 <b...@kernel.crashing.org> Signed-off-by: Gavin Shan <sha...@linux.vnet.ibm.com> --- arch/powerpc/platforms/powernv/pci-ioda.c | 25 +++++++++++-------------- 1 files changed, 11 insertions(+), 14 deletions(-) diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c index 07ce33c..7687778 100644 --- a/arch/powerpc/platforms/powernv/pci-ioda.c +++ b/arch/powerpc/platforms/powernv/pci-ioda.c @@ -34,24 +34,12 @@ #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; \ -- 1.7.5.4
_______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev