Subject: Re: [RFC PATCH powerpc] Fix compile error of pgtable-ppc64.h

From: Benjamin Herrenschmidt <[email-masked]>
Date: Sat, 18 Jan 2014 07:59:14 +1100

On Fri, 2014-01-17 at 21:30 +0800, Li Zhong wrote:
> On Fri, 2014-01-17 at 12:27 +0530, Aneesh Kumar K.V wrote:
> > Li Zhong <[email-masked]> writes:
> > 
> > > It seems that forward declaration couldn't work well with typedef, use
> > > struct spinlock directly to avoiding following build errors:
> > >
> > > In file included from include/linux/spinlock.h:81,
> > >                  from include/linux/seqlock.h:35,
> > >                  from include/linux/time.h:5,
> > >                  from include/uapi/linux/timex.h:56,
> > >                  from include/linux/timex.h:56,
> > >                  from include/linux/sched.h:17,
> > >                  from arch/powerpc/kernel/asm-offsets.c:17:
> > > include/linux/spinlock_types.h:76: error: redefinition of typedef 'spinlock_t'
> > > /root/linux-next/arch/powerpc/include/asm/pgtable-ppc64.h:563: note: previous declaration of 'spinlock_t' was here
> > >
> > 
> > what compiler version ? I have seen that error in gcc 4.3 and it was
> > concluded that it is too old a compiler version to worry about. That
> > specific compiler version also gave error for forward declaring struct;
> 
> gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC), and it doesn't
> report error after use struct directly. 

Ok, I think that's justification enough then. I'll add that. It's all
too late for 3.13 anyway so I'll send these patches during the window
with an appropriate CC to stable.

Cheers,
Ben.

> > 
> > > Signed-off-by: Li Zhong <[email-masked]>
> > > ---
> > >  arch/powerpc/include/asm/pgtable-ppc64.h |    6 +++---
> > >  1 files changed, 3 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/arch/powerpc/include/asm/pgtable-ppc64.h b/arch/powerpc/include/asm/pgtable-ppc64.h
> > > index d27960c..bc141c9 100644
> > > --- a/arch/powerpc/include/asm/pgtable-ppc64.h
> > > +++ b/arch/powerpc/include/asm/pgtable-ppc64.h
> > > @@ -560,9 +560,9 @@ extern void pmdp_invalidate(struct vm_area_struct *vma, unsigned long address,
> > >  			    pmd_t *pmdp);
> > >
> > >  #define pmd_move_must_withdraw pmd_move_must_withdraw
> > > -typedef struct spinlock spinlock_t;
> > > -static inline int pmd_move_must_withdraw(spinlock_t *new_pmd_ptl,
> > > -					 spinlock_t *old_pmd_ptl)
> > > +struct spinlock;
> > > +static inline int pmd_move_must_withdraw(struct spinlock *new_pmd_ptl,
> > > +					 struct spinlock *old_pmd_ptl)
> > >  {
> > >  	/*
> > >  	 * Archs like ppc64 use pgtable to store per pmd
>