aboutsummaryrefslogtreecommitdiffstats
path: root/mm/percpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/percpu.c')
-rw-r--r--mm/percpu.c58
1 files changed, 29 insertions, 29 deletions
diff --git a/mm/percpu.c b/mm/percpu.c
index 3d0f5456827c..9531590e6b69 100644
--- a/mm/percpu.c
+++ b/mm/percpu.c
@@ -831,7 +831,7 @@ EXPORT_SYMBOL_GPL(free_percpu);
831 * @get_page_fn: callback to fetch page pointer 831 * @get_page_fn: callback to fetch page pointer
832 * @static_size: the size of static percpu area in bytes 832 * @static_size: the size of static percpu area in bytes
833 * @unit_size: unit size in bytes, must be multiple of PAGE_SIZE, 0 for auto 833 * @unit_size: unit size in bytes, must be multiple of PAGE_SIZE, 0 for auto
834 * @free_size: free size in bytes, 0 for auto 834 * @dyn_size: free size for dynamic allocation in bytes, 0 for auto
835 * @base_addr: mapped address, NULL for auto 835 * @base_addr: mapped address, NULL for auto
836 * @populate_pte_fn: callback to allocate pagetable, NULL if unnecessary 836 * @populate_pte_fn: callback to allocate pagetable, NULL if unnecessary
837 * 837 *
@@ -849,12 +849,12 @@ EXPORT_SYMBOL_GPL(free_percpu);
849 * return the same number of pages for all cpus. 849 * return the same number of pages for all cpus.
850 * 850 *
851 * @unit_size, if non-zero, determines unit size and must be aligned 851 * @unit_size, if non-zero, determines unit size and must be aligned
852 * to PAGE_SIZE and equal to or larger than @static_size + @free_size. 852 * to PAGE_SIZE and equal to or larger than @static_size + @dyn_size.
853 * 853 *
854 * @free_size determines the number of free bytes after the static 854 * @dyn_size determines the number of free bytes after the static
855 * area in the first chunk. If zero, whatever left is available. 855 * area in the first chunk. If zero, whatever left is available.
856 * Specifying non-zero value make percpu leave the area after 856 * Specifying non-zero value make percpu leave the area after
857 * @static_size + @free_size alone. 857 * @static_size + @dyn_size alone.
858 * 858 *
859 * Non-null @base_addr means that the caller already allocated virtual 859 * Non-null @base_addr means that the caller already allocated virtual
860 * region for the first chunk and mapped it. percpu must not mess 860 * region for the first chunk and mapped it. percpu must not mess
@@ -870,19 +870,19 @@ EXPORT_SYMBOL_GPL(free_percpu);
870 */ 870 */
871size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn, 871size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn,
872 size_t static_size, size_t unit_size, 872 size_t static_size, size_t unit_size,
873 size_t free_size, void *base_addr, 873 size_t dyn_size, void *base_addr,
874 pcpu_populate_pte_fn_t populate_pte_fn) 874 pcpu_populate_pte_fn_t populate_pte_fn)
875{ 875{
876 static struct vm_struct static_vm; 876 static struct vm_struct first_vm;
877 struct pcpu_chunk *static_chunk; 877 struct pcpu_chunk *schunk;
878 unsigned int cpu; 878 unsigned int cpu;
879 int nr_pages; 879 int nr_pages;
880 int err, i; 880 int err, i;
881 881
882 /* santiy checks */ 882 /* santiy checks */
883 BUG_ON(!static_size); 883 BUG_ON(!static_size);
884 BUG_ON(!unit_size && free_size); 884 BUG_ON(!unit_size && dyn_size);
885 BUG_ON(unit_size && unit_size < static_size + free_size); 885 BUG_ON(unit_size && unit_size < static_size + dyn_size);
886 BUG_ON(unit_size & ~PAGE_MASK); 886 BUG_ON(unit_size & ~PAGE_MASK);
887 BUG_ON(base_addr && !unit_size); 887 BUG_ON(base_addr && !unit_size);
888 BUG_ON(base_addr && populate_pte_fn); 888 BUG_ON(base_addr && populate_pte_fn);
@@ -908,24 +908,24 @@ size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn,
908 for (i = 0; i < pcpu_nr_slots; i++) 908 for (i = 0; i < pcpu_nr_slots; i++)
909 INIT_LIST_HEAD(&pcpu_slot[i]); 909 INIT_LIST_HEAD(&pcpu_slot[i]);
910 910
911 /* init static_chunk */ 911 /* init static chunk */
912 static_chunk = alloc_bootmem(pcpu_chunk_struct_size); 912 schunk = alloc_bootmem(pcpu_chunk_struct_size);
913 INIT_LIST_HEAD(&static_chunk->list); 913 INIT_LIST_HEAD(&schunk->list);
914 static_chunk->vm = &static_vm; 914 schunk->vm = &first_vm;
915 915
916 if (free_size) 916 if (dyn_size)
917 static_chunk->free_size = free_size; 917 schunk->free_size = dyn_size;
918 else 918 else
919 static_chunk->free_size = pcpu_unit_size - pcpu_static_size; 919 schunk->free_size = pcpu_unit_size - pcpu_static_size;
920 920
921 static_chunk->contig_hint = static_chunk->free_size; 921 schunk->contig_hint = schunk->free_size;
922 922
923 /* allocate vm address */ 923 /* allocate vm address */
924 static_vm.flags = VM_ALLOC; 924 first_vm.flags = VM_ALLOC;
925 static_vm.size = pcpu_chunk_size; 925 first_vm.size = pcpu_chunk_size;
926 926
927 if (!base_addr) 927 if (!base_addr)
928 vm_area_register_early(&static_vm, PAGE_SIZE); 928 vm_area_register_early(&first_vm, PAGE_SIZE);
929 else { 929 else {
930 /* 930 /*
931 * Pages already mapped. No need to remap into 931 * Pages already mapped. No need to remap into
@@ -933,8 +933,8 @@ size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn,
933 * be mapped or unmapped by percpu and is marked 933 * be mapped or unmapped by percpu and is marked
934 * immutable. 934 * immutable.
935 */ 935 */
936 static_vm.addr = base_addr; 936 first_vm.addr = base_addr;
937 static_chunk->immutable = true; 937 schunk->immutable = true;
938 } 938 }
939 939
940 /* assign pages */ 940 /* assign pages */
@@ -945,7 +945,7 @@ size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn,
945 945
946 if (!page) 946 if (!page)
947 break; 947 break;
948 *pcpu_chunk_pagep(static_chunk, cpu, i) = page; 948 *pcpu_chunk_pagep(schunk, cpu, i) = page;
949 } 949 }
950 950
951 BUG_ON(i < PFN_UP(pcpu_static_size)); 951 BUG_ON(i < PFN_UP(pcpu_static_size));
@@ -960,20 +960,20 @@ size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn,
960 if (populate_pte_fn) { 960 if (populate_pte_fn) {
961 for_each_possible_cpu(cpu) 961 for_each_possible_cpu(cpu)
962 for (i = 0; i < nr_pages; i++) 962 for (i = 0; i < nr_pages; i++)
963 populate_pte_fn(pcpu_chunk_addr(static_chunk, 963 populate_pte_fn(pcpu_chunk_addr(schunk,
964 cpu, i)); 964 cpu, i));
965 965
966 err = pcpu_map(static_chunk, 0, nr_pages); 966 err = pcpu_map(schunk, 0, nr_pages);
967 if (err) 967 if (err)
968 panic("failed to setup static percpu area, err=%d\n", 968 panic("failed to setup static percpu area, err=%d\n",
969 err); 969 err);
970 } 970 }
971 971
972 /* link static_chunk in */ 972 /* link the first chunk in */
973 pcpu_chunk_relocate(static_chunk, -1); 973 pcpu_chunk_relocate(schunk, -1);
974 pcpu_chunk_addr_insert(static_chunk); 974 pcpu_chunk_addr_insert(schunk);
975 975
976 /* we're done */ 976 /* we're done */
977 pcpu_base_addr = (void *)pcpu_chunk_addr(static_chunk, 0, 0); 977 pcpu_base_addr = (void *)pcpu_chunk_addr(schunk, 0, 0);
978 return pcpu_unit_size; 978 return pcpu_unit_size;
979} 979}