Messages in this thread | | | Subject | Re: [patch 2/2] mm: Reimplementation of alloc_percpu | From | Rusty Russell <> | Date | Tue, 18 Jan 2005 12:30:32 +1100 |
| |
On Tue, 2005-01-18 at 00:06 +0530, Ravikiran G Thirumalai wrote: > Here's the alloc_percpu reimplementation changed to > - Use qsort > - Use GFP_KERNEL|__GFP_HIGHMEM|__GFP_ZERO for BLOCK_MANAGEMENT_PAGES > (GFP_HIGHZERO would have been ideal) > - Changed currency size to sizeof (int) from sizeof (void *) for better > utilization for small objects > > The allocator can be easily modified to use __per_cpu_offset[] table at a later > stage by: > 1. Allocating ALIGN(__per_cpu_end - __per_cpu_start, PAGE_SIZE) for the > static percpu areas and populating __per_cpu_offset[] offset table > 2. Making PCPU_BLKSIZE same as the static per cpu area size above > 3. Serving dynamic percpu requests from modules etc from blocks by > returning ret -= __per_cpu_offset[0] from a percpu block. This way > modules need not have a limit on static percpu areas.
Unfortunately ia64 breaks (3). They have pinned TLB entries covering 64k, which they put the static per-cpu data into. This is used for local_inc, etc, and David Mosberger loved that trick (this is why my version allocated from that first reserved block for modules' static per-cpu vars).
Hope that clarifies, Rusty. -- A bad analogy is like a leaky screwdriver -- Richard Braakman
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |