Lines Matching +full:cpu +full:- +full:read

1 // SPDX-License-Identifier: GPL-2.0
25 noinstr struct cpu_entry_area *get_cpu_entry_area(int cpu) in get_cpu_entry_area() argument
27 unsigned long va = CPU_ENTRY_AREA_PER_CPU + cpu * CPU_ENTRY_AREA_SIZE; in get_cpu_entry_area()
43 * non-present PTEs, so be careful not to set it in that in cea_set_pte()
56 for ( ; pages; pages--, cea_vaddr+= PAGE_SIZE, ptr += PAGE_SIZE) in cea_map_percpu_pages()
60 static void __init percpu_setup_debug_store(unsigned int cpu) in percpu_setup_debug_store() argument
69 cea = &get_cpu_entry_area(cpu)->cpu_debug_store; in percpu_setup_debug_store()
72 cea_map_percpu_pages(cea, &per_cpu(cpu_debug_store, cpu), npages, in percpu_setup_debug_store()
75 cea = &get_cpu_entry_area(cpu)->cpu_debug_buffers; in percpu_setup_debug_store()
77 * Force the population of PMDs for not yet allocated per cpu in percpu_setup_debug_store()
81 for (; npages; npages--, cea += PAGE_SIZE) in percpu_setup_debug_store()
89 npages = sizeof(estacks->name## _stack) / PAGE_SIZE; \
90 cea_map_percpu_pages(cea->estacks.name## _stack, \
91 estacks->name## _stack, npages, PAGE_KERNEL); \
94 static void __init percpu_setup_exception_stacks(unsigned int cpu) in percpu_setup_exception_stacks() argument
96 struct exception_stacks *estacks = per_cpu_ptr(&exception_stacks, cpu); in percpu_setup_exception_stacks()
97 struct cpu_entry_area *cea = get_cpu_entry_area(cpu); in percpu_setup_exception_stacks()
102 per_cpu(cea_exception_stacks, cpu) = &cea->estacks; in percpu_setup_exception_stacks()
105 * The exceptions stack mappings in the per cpu area are protected in percpu_setup_exception_stacks()
115 static inline void percpu_setup_exception_stacks(unsigned int cpu) in percpu_setup_exception_stacks() argument
117 struct cpu_entry_area *cea = get_cpu_entry_area(cpu); in percpu_setup_exception_stacks()
119 cea_map_percpu_pages(&cea->doublefault_stack, in percpu_setup_exception_stacks()
120 &per_cpu(doublefault_stack, cpu), 1, PAGE_KERNEL); in percpu_setup_exception_stacks()
124 /* Setup the fixmap mappings only once per-processor */
125 static void __init setup_cpu_entry_area(unsigned int cpu) in setup_cpu_entry_area() argument
127 struct cpu_entry_area *cea = get_cpu_entry_area(cpu); in setup_cpu_entry_area()
129 /* On 64-bit systems, we use a read-only fixmap GDT and TSS. */ in setup_cpu_entry_area()
134 * On native 32-bit systems, the GDT cannot be read-only because in setup_cpu_entry_area()
137 * GDT is read-only, that will triple fault. The TSS cannot be in setup_cpu_entry_area()
138 * read-only because the CPU writes to it on task switches. in setup_cpu_entry_area()
140 * On Xen PV, the GDT must be read-only because the hypervisor in setup_cpu_entry_area()
148 cea_set_pte(&cea->gdt, get_cpu_gdt_paddr(cpu), gdt_prot); in setup_cpu_entry_area()
150 cea_map_percpu_pages(&cea->entry_stack_page, in setup_cpu_entry_area()
151 per_cpu_ptr(&entry_stack_storage, cpu), 1, in setup_cpu_entry_area()
165 * will access incorrect information without generating a page-fault in setup_cpu_entry_area()
182 cea_map_percpu_pages(&cea->tss, &per_cpu(cpu_tss_rw, cpu), in setup_cpu_entry_area()
186 per_cpu(cpu_entry_area, cpu) = cea; in setup_cpu_entry_area()
189 percpu_setup_exception_stacks(cpu); in setup_cpu_entry_area()
191 percpu_setup_debug_store(cpu); in setup_cpu_entry_area()
215 unsigned int cpu; in setup_cpu_entry_areas() local
219 for_each_possible_cpu(cpu) in setup_cpu_entry_areas()
220 setup_cpu_entry_area(cpu); in setup_cpu_entry_areas()