Subject: Re: [PATCH] powerpc: fixup lwsync at runtime

From: Michael Ellerman <[email-masked]>
Date: Wed, 02 Jul 2008 19:34:08 +1000

On Tue, 2008-07-01 at 09:48 -0500, Kumar Gala wrote:
> On Jul 1, 2008, at 1:29 AM, Michael Ellerman wrote:

> >> diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/ 
> >> setup_32.c
> >> index 9e83add..0109e7f 100644
> >> --- a/arch/powerpc/kernel/setup_32.c
> >> +++ b/arch/powerpc/kernel/setup_32.c
> >> @@ -101,6 +101,10 @@ unsigned long __init early_init(unsigned long  
> >> dt_ptr)
> >> 			  PTRRELOC(&__start___ftr_fixup),
> >> 			  PTRRELOC(&__stop___ftr_fixup));
> >>
> >> +	do_lwsync_fixups(spec->cpu_features,
> >> +			 PTRRELOC(&__start___lwsync_fixup),
> >> +			 PTRRELOC(&__stop___lwsync_fixup));
> >> +
> >
> > This could be changed to use cur_cpu_spec->cpu_features, and then all
> > the call sites would be passing that, which would mean
> > do_lwsync_fixups() could just check cur_cpu_spec->cpu_features  
> > directly.
> 
> cur_cpu_spec and spec at this point arent the same thing.

Aren't they? I must be missing something:

struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr)
{
        struct cpu_spec *s = cpu_specs;
        struct cpu_spec *t = &the_cpu_spec;
        int i;

        for (i = 0; i < ARRAY_SIZE(cpu_specs); i++,s++)
                if ((pvr & s->pvr_mask) == s->pvr_value) {
			...
                        *t = *s;
                        *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
			...
                        return s;

then:

unsigned long __init early_init(unsigned long dt_ptr)
{
	...
	spec = identify_cpu(offset, mfspr(SPRN_PVR));

        do_feature_fixups(spec->cpu_features,
                          PTRRELOC(&__start___ftr_fixup),
                          PTRRELOC(&__stop___ftr_fixup));
}

cheers

-- 
Michael Ellerman
OzLabs, IBM Australia Development Lab

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person