mm: percpu: add generic pcpu_fc_alloc/free funciton
[linux-2.6-block.git] / arch / powerpc / kernel / setup_64.c
index b79b10ae466f96f894bd5cfb17bb29be777a3dff..a0c55c6e3023d5eded5a3ecccd3d3a9effe2aae2 100644 (file)
@@ -771,50 +771,6 @@ void __init emergency_stack_init(void)
 }
 
 #ifdef CONFIG_SMP
-/**
- * pcpu_alloc_bootmem - NUMA friendly alloc_bootmem wrapper for percpu
- * @cpu: cpu to allocate for
- * @size: size allocation in bytes
- * @align: alignment
- *
- * Allocate @size bytes aligned at @align for cpu @cpu.  This wrapper
- * does the right thing for NUMA regardless of the current
- * configuration.
- *
- * RETURNS:
- * Pointer to the allocated area on success, NULL on failure.
- */
-static void * __init pcpu_alloc_bootmem(unsigned int cpu, size_t size, size_t align,
-                                       pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)
-{
-       const unsigned long goal = __pa(MAX_DMA_ADDRESS);
-#ifdef CONFIG_NUMA
-       int node = cpu_to_nd_fun(cpu);
-       void *ptr;
-
-       if (!node_online(node) || !NODE_DATA(node)) {
-               ptr = memblock_alloc_from(size, align, goal);
-               pr_info("cpu %d has no node %d or node-local memory\n",
-                       cpu, node);
-               pr_debug("per cpu data for cpu%d %lu bytes at %016lx\n",
-                        cpu, size, __pa(ptr));
-       } else {
-               ptr = memblock_alloc_try_nid(size, align, goal,
-                                            MEMBLOCK_ALLOC_ACCESSIBLE, node);
-               pr_debug("per cpu data for cpu%d %lu bytes on node%d at "
-                        "%016lx\n", cpu, size, node, __pa(ptr));
-       }
-       return ptr;
-#else
-       return memblock_alloc_from(size, align, goal);
-#endif
-}
-
-static void __init pcpu_free_bootmem(void *ptr, size_t size)
-{
-       memblock_free(ptr, size);
-}
-
 static int pcpu_cpu_distance(unsigned int from, unsigned int to)
 {
        if (early_cpu_to_node(from) == early_cpu_to_node(to))
@@ -896,8 +852,7 @@ void __init setup_per_cpu_areas(void)
 
        if (pcpu_chosen_fc != PCPU_FC_PAGE) {
                rc = pcpu_embed_first_chunk(0, dyn_size, atom_size, pcpu_cpu_distance,
-                                           pcpu_cpu_to_node,
-                                           pcpu_alloc_bootmem, pcpu_free_bootmem);
+                                           pcpu_cpu_to_node);
                if (rc)
                        pr_warn("PERCPU: %s allocator failed (%d), "
                                "falling back to page size\n",
@@ -905,9 +860,7 @@ void __init setup_per_cpu_areas(void)
        }
 
        if (rc < 0)
-               rc = pcpu_page_first_chunk(0, pcpu_cpu_to_node,
-                                          pcpu_alloc_bootmem, pcpu_free_bootmem,
-                                          pcpu_populate_pte);
+               rc = pcpu_page_first_chunk(0, pcpu_cpu_to_node, pcpu_populate_pte);
        if (rc < 0)
                panic("cannot initialize percpu area (err=%d)", rc);