[PATCH] powerpc: Dynamically allocate pacas

Michael Neuling mikey at neuling.org
Thu Jan 28 10:27:33 EST 2010


> > > On 64-bit kernels we currently have a 512 byte struct paca_struct for
> > > each cpu (usually just called "the paca"). Currently they are staticall=
> y
> > > allocated, which means a kernel built for a large number of cpus will
> > > waste a lot of space if it's booted on a machine with few cpus.
> > >=20
> > > We can avoid that by only allocating the number of pacas we need at
> > > boot. However this is complicated by the fact that we need to access
> > > the paca before we know how many cpus there are in the system.
> > >=20
> > > The solution is to dynamically allocate enough space for NR_CPUS pacas,
> > > but then later in boot when we know how many cpus we have, we free any
> > > unused pacas.
> > >=20
> > > Lightly booted on Legacy iSeries & pSeries LPAR.
> > >=20
> > > Signed-off-by: Michael Ellerman <michael at ellerman.id.au>
> >=20
> > <snip>
> >=20
> > > --- a/arch/powerpc/kernel/setup-common.c
> > > +++ b/arch/powerpc/kernel/setup-common.c
> > > @@ -493,6 +493,8 @@ void __init smp_setup_cpu_maps(void)
> > >  	 * here will have to be reworked
> > >  	 */
> > >  	cpu_init_thread_core_maps(nthreads);
> > > +
> > > +	free_unused_pacas();
> >=20
> > This is still barfing for me on 32bit.
> 
> Darn, what config? I built at least one :)

I think I used mpc86xx_defconfig.

> > Putting an #include <asm/paca.h> at the top of setup-common.c fixes it.
> 
> Gah, I saw it was coming via somewhere else but decided not to add it,
> wrong decision :)

IMHO, if it's used we should put it in.  Otherwise some other random
include file will remove it and break us.

Mikey


More information about the Linuxppc-dev mailing list