Messages in this thread | ![/](/images/icornerl.gif) | | Date | Wed, 16 Dec 2009 09:53:50 +0900 | From | Tejun Heo <> | Subject | Re: [this_cpu_xx V7 1/8] this_cpu_ops: page allocator conversion |
| |
Hello, Christoph.
On 12/16/2009 12:04 AM, Christoph Lameter wrote: > A static array would have to be dimensioned to NR_CPUS. That is one thing > we are trying to avoid. > > The assignment of the pageset "percpu" pointer does not mean that the pcp > is usable. It must first be properly initialized through setup_pageset(). > > setup_pageset() is run for each cpu. zone->pageset is the same for all > cpus that is why it is in zone_pcp_init() and not in setup_pageset(). > > The boot pageset initialization was moved into __build_all_zonelists(). We > could move the zone->pageset initialization there too?
Maybe that is a bit less scary. (at least for me :-) The reason why I'm a bit worried is that different architectures handle percpu pointers differently before setup_per_cpu_areas(). x86 sets up the offsets and stuff such that cpu0 can access the original percpu section in the kernel image. ia64 sets up everything properly way before setup_per_cpu_areas() and in some archs percpu pointers are completely invalid before setup_per_cpu_areas(). So, percpu pointer being handled in generic code which is being called before percpu setup is a bit worrying.
Another thing is that there were attempts to simplify memory initialization stages such that bootmem is removed and page / k* allocators can be used earlier which kind of puts percpu allocator in the dependency loop but I don't think it's something we need to worry about at this point.
Thanks.
-- tejun
| ![\](/images/icornerr.gif) |