diff mbox

powerpc/sysdev: Fix a mpic section mismatch for MPC85xx

Message ID 20131215193856.1637accd@spike (mailing list archive)
State Changes Requested
Headers show

Commit Message

Christian Engelmayer Dec. 15, 2013, 6:38 p.m. UTC
Moved arch/powerpc/sysdev/mpic.c : smp_mpic_probe() out of the __init section.
It is referenced by arch/powerpc/platforms/85xx/smp.c : smp_85xx_setup_cpu().

Signed-off-by: Christian Engelmayer <cengelma@gmx.at>
---
 arch/powerpc/sysdev/mpic.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Benjamin Herrenschmidt Dec. 16, 2013, 12:10 a.m. UTC | #1
On Sun, 2013-12-15 at 19:38 +0100, Christian Engelmayer wrote:
> Moved arch/powerpc/sysdev/mpic.c : smp_mpic_probe() out of the __init section.
> It is referenced by arch/powerpc/platforms/85xx/smp.c : smp_85xx_setup_cpu().

I don't like this. The reference is not actually going to call into the
code at all and as such is not an error, it's just a pointer comparison.

If there is no way to silence the warning, then I'd suggest to use a
global flag, something like mpc85xx_pic_type and test that instead
of comparing the pointers.

> Signed-off-by: Christian Engelmayer <cengelma@gmx.at>
> ---
>  arch/powerpc/sysdev/mpic.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
> index 0e166ed..72c1e65 100644
> --- a/arch/powerpc/sysdev/mpic.c
> +++ b/arch/powerpc/sysdev/mpic.c
> @@ -1924,7 +1924,7 @@ void smp_mpic_message_pass(int cpu, int msg)
>  		       msg * MPIC_INFO(CPU_IPI_DISPATCH_STRIDE), physmask);
>  }
>  
> -int __init smp_mpic_probe(void)
> +int smp_mpic_probe(void)
>  {
>  	int nr_cpus;
>
Christian Engelmayer Dec. 19, 2013, 11 p.m. UTC | #2
On Mon, 16 Dec 2013 11:10:53 +1100 Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> On Sun, 2013-12-15 at 19:38 +0100, Christian Engelmayer wrote:
> > Moved arch/powerpc/sysdev/mpic.c : smp_mpic_probe() out of the __init section.
> > It is referenced by arch/powerpc/platforms/85xx/smp.c : smp_85xx_setup_cpu().
> 
> I don't like this. The reference is not actually going to call into the
> code at all and as such is not an error, it's just a pointer comparison.

That's correct. I proposed it that way because on first sight I was concerned
that there is an address of an __init function assigned to a function pointer
within a non __initdata struct at all that can be compared against. However,
further usage of smp_ops->probe is currently safe of course and *_ops symbols
within .data are whitelisted to refer to init sections.

> If there is no way to silence the warning, then I'd suggest to use a
> global flag, something like mpc85xx_pic_type and test that instead
> of comparing the pointers.

I've seen that there is currently a patch proposed against

   commit dc2c9c52b604f51b1416ed87ff54a1c77a1a8b5b
   powerpc/85xx: Set up doorbells even with no mpic

that introduced the section causing the warning:

   http://patchwork.ozlabs.org/patch/289214/
   powerpc/85xx: don't init the mpic ipi for the SoC which has doorbell support

This patch also removes the affected pointer comparison and if accepted would
thus also silence this warning.

> > Signed-off-by: Christian Engelmayer <cengelma@gmx.at>
> > ---
> >  arch/powerpc/sysdev/mpic.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
> > index 0e166ed..72c1e65 100644
> > --- a/arch/powerpc/sysdev/mpic.c
> > +++ b/arch/powerpc/sysdev/mpic.c
> > @@ -1924,7 +1924,7 @@ void smp_mpic_message_pass(int cpu, int msg)
> >  		       msg * MPIC_INFO(CPU_IPI_DISPATCH_STRIDE), physmask);
> >  }
> >  
> > -int __init smp_mpic_probe(void)
> > +int smp_mpic_probe(void)
> >  {
> >  	int nr_cpus;
> >  
> 
>
Christian Engelmayer Jan. 28, 2014, 9:14 p.m. UTC | #3
On Fri, 20 Dec 2013 00:00:41 +0100, Christian Engelmayer <cengelma@gmx.at> wrote:
> On Mon, 16 Dec 2013 11:10:53 +1100 Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> > On Sun, 2013-12-15 at 19:38 +0100, Christian Engelmayer wrote:
> > > Moved arch/powerpc/sysdev/mpic.c : smp_mpic_probe() out of the __init section.
> > > It is referenced by arch/powerpc/platforms/85xx/smp.c : smp_85xx_setup_cpu().
> > 
> > I don't like this. The reference is not actually going to call into the
> > code at all and as such is not an error, it's just a pointer comparison.
> 
> That's correct. I proposed it that way because on first sight I was concerned
> that there is an address of an __init function assigned to a function pointer
> within a non __initdata struct at all that can be compared against. However,
> further usage of smp_ops->probe is currently safe of course and *_ops symbols
> within .data are whitelisted to refer to init sections.
> 
> > If there is no way to silence the warning, then I'd suggest to use a
> > global flag, something like mpc85xx_pic_type and test that instead
> > of comparing the pointers.
> 
> I've seen that there is currently a patch proposed against
> 
>    commit dc2c9c52b604f51b1416ed87ff54a1c77a1a8b5b
>    powerpc/85xx: Set up doorbells even with no mpic
> 
> that introduced the section causing the warning:
> 
>    http://patchwork.ozlabs.org/patch/289214/
>    powerpc/85xx: don't init the mpic ipi for the SoC which has doorbell support
> 
> This patch also removes the affected pointer comparison and if accepted would
> thus also silence this warning.

Kevin's change (powerpc/85xx: don't init the mpic ipi for the SoC which has
doorbell support) entered mainline by merge 1b17366d. I verified that the
issue is thereby solved and my patch obsolete.

   http://patchwork.ozlabs.org/patch/301402/

Regards,
Christian
diff mbox

Patch

diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 0e166ed..72c1e65 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -1924,7 +1924,7 @@  void smp_mpic_message_pass(int cpu, int msg)
 		       msg * MPIC_INFO(CPU_IPI_DISPATCH_STRIDE), physmask);
 }
 
-int __init smp_mpic_probe(void)
+int smp_mpic_probe(void)
 {
 	int nr_cpus;