diff options
Diffstat (limited to 'mm/percpu.c')
| -rw-r--r-- | mm/percpu.c | 58 |
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 | */ |
| 871 | size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn, | 871 | size_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 | } |
