Function report |
Source Code:arch\x86\kernel\espfix_64.c |
Create Date:2022-07-28 07:42:27 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:init_espfix_ap
Proto:void init_espfix_ap(int cpu)
Type:void
Parameter:
| Type | Parameter | Name |
|---|---|---|
| int | cpu |
| 143 | If Value is more likely to compile time(per_cpu(This contains the *bottom* address of the espfix stack , cpu)) Then Return |
| 147 | page = cpu / ESPFIX_STACKS_PER_PAGE |
| 150 | stack_page = READ_ONCE(espfix_pages[page]) |
| 151 | If Value is more likely to compile time(stack_page) Then Go to done |
| 157 | stack_page = READ_ONCE(espfix_pages[page]) |
| 158 | If stack_page Then Go to unlock_done |
| 161 | node = cpu_to_node(cpu) |
| 162 | ptemask = __supported_pte_mask |
| 164 | pud_p = espfix_pud_page[pud_index(addr)] |
| 166 | If Not pud_present(pud) Then |
| 167 | page = Allocate pages, preferring the node given as nid. When nid == NUMA_NO_NODE,* prefer the current CPU's closest node. Otherwise node must be valid and* online. |
| 169 | pmd_p = page_address(page) |
| 171 | paravirt_alloc_pmd( & init_mm, __pa(pmd_p) >> PAGE_SHIFT determines the page size ) |
| 176 | pmd_p = pmd_offset( & pud, addr) |
| 178 | If Not pmd_present(pmd) Then |
| 179 | page = Allocate pages, preferring the node given as nid. When nid == NUMA_NO_NODE,* prefer the current CPU's closest node. Otherwise node must be valid and* online. |
| 181 | pte_p = page_address(page) |
| 183 | paravirt_alloc_pte( & init_mm, __pa(pte_p) >> PAGE_SHIFT determines the page size ) |
| 188 | pte_p = pte_offset_kernel( & pmd, addr) |
| 189 | stack_page = page_address(Allocate pages, preferring the node given as nid. When nid == NUMA_NO_NODE,* prefer the current CPU's closest node. Otherwise node must be valid and* online.) |
| 194 | pte = __pte(__pa(stack_page) | ((__PAGE_KERNEL_RO | _PAGE_ENC) & ptemask)) |
| 195 | When n < ESPFIX_PTE_CLONES cycle set_pte( & pte_p[n * PTE_STRIDE], pte) |
| 199 | WRITE_ONCE(espfix_pages[page], stack_page) |
| 201 | unlock_done : |
| 203 | done : |
| 205 | per_cpu(espfix_waddr, cpu) = stack_page + (addr & ~PAGE_MASK) |
| Name | Describe |
|---|---|
| init_espfix_bsp | |
| do_boot_cpu | NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad* (ie clustered apic addressing mode), this is a LOGICAL apic ID.* Returns zero if CPU booted OK, else error code from* ->wakeup_secondary_cpu. |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |