x86, kexec: fix kexec x86 coding style
Impact: Cleanup Fix some coding style issue for kexec x86. Signed-off-by: Huang Ying <ying.huang@intel.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
committed by
H. Peter Anvin
parent
467c88fee5
commit
fef3a7a174
@@ -14,12 +14,12 @@
|
|||||||
#include <linux/ftrace.h>
|
#include <linux/ftrace.h>
|
||||||
#include <linux/suspend.h>
|
#include <linux/suspend.h>
|
||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/apic.h>
|
#include <asm/apic.h>
|
||||||
#include <asm/cpufeature.h>
|
#include <asm/cpufeature.h>
|
||||||
#include <asm/desc.h>
|
#include <asm/desc.h>
|
||||||
@@ -63,7 +63,7 @@ static void load_segments(void)
|
|||||||
"\tmovl %%eax,%%fs\n"
|
"\tmovl %%eax,%%fs\n"
|
||||||
"\tmovl %%eax,%%gs\n"
|
"\tmovl %%eax,%%gs\n"
|
||||||
"\tmovl %%eax,%%ss\n"
|
"\tmovl %%eax,%%ss\n"
|
||||||
::: "eax", "memory");
|
: : : "eax", "memory");
|
||||||
#undef STR
|
#undef STR
|
||||||
#undef __STR
|
#undef __STR
|
||||||
}
|
}
|
||||||
@@ -205,7 +205,8 @@ void machine_kexec(struct kimage *image)
|
|||||||
|
|
||||||
if (image->preserve_context) {
|
if (image->preserve_context) {
|
||||||
#ifdef CONFIG_X86_IO_APIC
|
#ifdef CONFIG_X86_IO_APIC
|
||||||
/* We need to put APICs in legacy mode so that we can
|
/*
|
||||||
|
* We need to put APICs in legacy mode so that we can
|
||||||
* get timer interrupts in second kernel. kexec/kdump
|
* get timer interrupts in second kernel. kexec/kdump
|
||||||
* paths already have calls to disable_IO_APIC() in
|
* paths already have calls to disable_IO_APIC() in
|
||||||
* one form or other. kexec jump path also need
|
* one form or other. kexec jump path also need
|
||||||
@@ -227,7 +228,8 @@ void machine_kexec(struct kimage *image)
|
|||||||
page_list[PA_SWAP_PAGE] = (page_to_pfn(image->swap_page)
|
page_list[PA_SWAP_PAGE] = (page_to_pfn(image->swap_page)
|
||||||
<< PAGE_SHIFT);
|
<< PAGE_SHIFT);
|
||||||
|
|
||||||
/* The segment registers are funny things, they have both a
|
/*
|
||||||
|
* The segment registers are funny things, they have both a
|
||||||
* visible and an invisible part. Whenever the visible part is
|
* visible and an invisible part. Whenever the visible part is
|
||||||
* set to a specific selector, the invisible part is loaded
|
* set to a specific selector, the invisible part is loaded
|
||||||
* with from a table in memory. At no other time is the
|
* with from a table in memory. At no other time is the
|
||||||
@@ -237,11 +239,12 @@ void machine_kexec(struct kimage *image)
|
|||||||
* segments, before I zap the gdt with an invalid value.
|
* segments, before I zap the gdt with an invalid value.
|
||||||
*/
|
*/
|
||||||
load_segments();
|
load_segments();
|
||||||
/* The gdt & idt are now invalid.
|
/*
|
||||||
|
* The gdt & idt are now invalid.
|
||||||
* If you want to load them you must set up your own idt & gdt.
|
* If you want to load them you must set up your own idt & gdt.
|
||||||
*/
|
*/
|
||||||
set_gdt(phys_to_virt(0),0);
|
set_gdt(phys_to_virt(0), 0);
|
||||||
set_idt(phys_to_virt(0),0);
|
set_idt(phys_to_virt(0), 0);
|
||||||
|
|
||||||
/* now call it */
|
/* now call it */
|
||||||
image->start = relocate_kernel_ptr((unsigned long)image->head,
|
image->start = relocate_kernel_ptr((unsigned long)image->head,
|
||||||
|
@@ -12,11 +12,11 @@
|
|||||||
#include <linux/reboot.h>
|
#include <linux/reboot.h>
|
||||||
#include <linux/numa.h>
|
#include <linux/numa.h>
|
||||||
#include <linux/ftrace.h>
|
#include <linux/ftrace.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/io.h>
|
|
||||||
|
|
||||||
static void init_level2_page(pmd_t *level2p, unsigned long addr)
|
static void init_level2_page(pmd_t *level2p, unsigned long addr)
|
||||||
{
|
{
|
||||||
@@ -83,9 +83,8 @@ static int init_level4_page(struct kimage *image, pgd_t *level4p,
|
|||||||
}
|
}
|
||||||
level3p = (pud_t *)page_address(page);
|
level3p = (pud_t *)page_address(page);
|
||||||
result = init_level3_page(image, level3p, addr, last_addr);
|
result = init_level3_page(image, level3p, addr, last_addr);
|
||||||
if (result) {
|
if (result)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
|
||||||
set_pgd(level4p++, __pgd(__pa(level3p) | _KERNPG_TABLE));
|
set_pgd(level4p++, __pgd(__pa(level3p) | _KERNPG_TABLE));
|
||||||
addr += PGDIR_SIZE;
|
addr += PGDIR_SIZE;
|
||||||
}
|
}
|
||||||
@@ -242,7 +241,8 @@ void machine_kexec(struct kimage *image)
|
|||||||
page_list[PA_TABLE_PAGE] =
|
page_list[PA_TABLE_PAGE] =
|
||||||
(unsigned long)__pa(page_address(image->control_code_page));
|
(unsigned long)__pa(page_address(image->control_code_page));
|
||||||
|
|
||||||
/* The segment registers are funny things, they have both a
|
/*
|
||||||
|
* The segment registers are funny things, they have both a
|
||||||
* visible and an invisible part. Whenever the visible part is
|
* visible and an invisible part. Whenever the visible part is
|
||||||
* set to a specific selector, the invisible part is loaded
|
* set to a specific selector, the invisible part is loaded
|
||||||
* with from a table in memory. At no other time is the
|
* with from a table in memory. At no other time is the
|
||||||
@@ -252,11 +252,12 @@ void machine_kexec(struct kimage *image)
|
|||||||
* segments, before I zap the gdt with an invalid value.
|
* segments, before I zap the gdt with an invalid value.
|
||||||
*/
|
*/
|
||||||
load_segments();
|
load_segments();
|
||||||
/* The gdt & idt are now invalid.
|
/*
|
||||||
|
* The gdt & idt are now invalid.
|
||||||
* If you want to load them you must set up your own idt & gdt.
|
* If you want to load them you must set up your own idt & gdt.
|
||||||
*/
|
*/
|
||||||
set_gdt(phys_to_virt(0),0);
|
set_gdt(phys_to_virt(0), 0);
|
||||||
set_idt(phys_to_virt(0),0);
|
set_idt(phys_to_virt(0), 0);
|
||||||
|
|
||||||
/* now call it */
|
/* now call it */
|
||||||
relocate_kernel((unsigned long)image->head, (unsigned long)page_list,
|
relocate_kernel((unsigned long)image->head, (unsigned long)page_list,
|
||||||
|
@@ -17,7 +17,8 @@
|
|||||||
|
|
||||||
#define PTR(x) (x << 2)
|
#define PTR(x) (x << 2)
|
||||||
|
|
||||||
/* control_page + KEXEC_CONTROL_CODE_MAX_SIZE
|
/*
|
||||||
|
* control_page + KEXEC_CONTROL_CODE_MAX_SIZE
|
||||||
* ~ control_page + PAGE_SIZE are used as data storage and stack for
|
* ~ control_page + PAGE_SIZE are used as data storage and stack for
|
||||||
* jumping back
|
* jumping back
|
||||||
*/
|
*/
|
||||||
@@ -76,8 +77,10 @@ relocate_kernel:
|
|||||||
movl %eax, CP_PA_SWAP_PAGE(%edi)
|
movl %eax, CP_PA_SWAP_PAGE(%edi)
|
||||||
movl %ebx, CP_PA_BACKUP_PAGES_MAP(%edi)
|
movl %ebx, CP_PA_BACKUP_PAGES_MAP(%edi)
|
||||||
|
|
||||||
/* get physical address of control page now */
|
/*
|
||||||
/* this is impossible after page table switch */
|
* get physical address of control page now
|
||||||
|
* this is impossible after page table switch
|
||||||
|
*/
|
||||||
movl PTR(PA_CONTROL_PAGE)(%ebp), %edi
|
movl PTR(PA_CONTROL_PAGE)(%ebp), %edi
|
||||||
|
|
||||||
/* switch to new set of page tables */
|
/* switch to new set of page tables */
|
||||||
@@ -97,7 +100,8 @@ identity_mapped:
|
|||||||
/* store the start address on the stack */
|
/* store the start address on the stack */
|
||||||
pushl %edx
|
pushl %edx
|
||||||
|
|
||||||
/* Set cr0 to a known state:
|
/*
|
||||||
|
* Set cr0 to a known state:
|
||||||
* - Paging disabled
|
* - Paging disabled
|
||||||
* - Alignment check disabled
|
* - Alignment check disabled
|
||||||
* - Write protect disabled
|
* - Write protect disabled
|
||||||
@@ -113,7 +117,8 @@ identity_mapped:
|
|||||||
/* clear cr4 if applicable */
|
/* clear cr4 if applicable */
|
||||||
testl %ecx, %ecx
|
testl %ecx, %ecx
|
||||||
jz 1f
|
jz 1f
|
||||||
/* Set cr4 to a known state:
|
/*
|
||||||
|
* Set cr4 to a known state:
|
||||||
* Setting everything to zero seems safe.
|
* Setting everything to zero seems safe.
|
||||||
*/
|
*/
|
||||||
xorl %eax, %eax
|
xorl %eax, %eax
|
||||||
@@ -132,15 +137,18 @@ identity_mapped:
|
|||||||
call swap_pages
|
call swap_pages
|
||||||
addl $8, %esp
|
addl $8, %esp
|
||||||
|
|
||||||
/* To be certain of avoiding problems with self-modifying code
|
/*
|
||||||
|
* To be certain of avoiding problems with self-modifying code
|
||||||
* I need to execute a serializing instruction here.
|
* I need to execute a serializing instruction here.
|
||||||
* So I flush the TLB, it's handy, and not processor dependent.
|
* So I flush the TLB, it's handy, and not processor dependent.
|
||||||
*/
|
*/
|
||||||
xorl %eax, %eax
|
xorl %eax, %eax
|
||||||
movl %eax, %cr3
|
movl %eax, %cr3
|
||||||
|
|
||||||
/* set all of the registers to known values */
|
/*
|
||||||
/* leave %esp alone */
|
* set all of the registers to known values
|
||||||
|
* leave %esp alone
|
||||||
|
*/
|
||||||
|
|
||||||
testl %esi, %esi
|
testl %esi, %esi
|
||||||
jnz 1f
|
jnz 1f
|
||||||
|
@@ -24,7 +24,8 @@
|
|||||||
.code64
|
.code64
|
||||||
.globl relocate_kernel
|
.globl relocate_kernel
|
||||||
relocate_kernel:
|
relocate_kernel:
|
||||||
/* %rdi indirection_page
|
/*
|
||||||
|
* %rdi indirection_page
|
||||||
* %rsi page_list
|
* %rsi page_list
|
||||||
* %rdx start address
|
* %rdx start address
|
||||||
*/
|
*/
|
||||||
@@ -33,8 +34,10 @@ relocate_kernel:
|
|||||||
pushq $0
|
pushq $0
|
||||||
popfq
|
popfq
|
||||||
|
|
||||||
/* get physical address of control page now */
|
/*
|
||||||
/* this is impossible after page table switch */
|
* get physical address of control page now
|
||||||
|
* this is impossible after page table switch
|
||||||
|
*/
|
||||||
movq PTR(PA_CONTROL_PAGE)(%rsi), %r8
|
movq PTR(PA_CONTROL_PAGE)(%rsi), %r8
|
||||||
|
|
||||||
/* get physical address of page table now too */
|
/* get physical address of page table now too */
|
||||||
@@ -55,7 +58,8 @@ identity_mapped:
|
|||||||
/* store the start address on the stack */
|
/* store the start address on the stack */
|
||||||
pushq %rdx
|
pushq %rdx
|
||||||
|
|
||||||
/* Set cr0 to a known state:
|
/*
|
||||||
|
* Set cr0 to a known state:
|
||||||
* - Paging enabled
|
* - Paging enabled
|
||||||
* - Alignment check disabled
|
* - Alignment check disabled
|
||||||
* - Write protect disabled
|
* - Write protect disabled
|
||||||
@@ -68,7 +72,8 @@ identity_mapped:
|
|||||||
orl $(X86_CR0_PG | X86_CR0_PE), %eax
|
orl $(X86_CR0_PG | X86_CR0_PE), %eax
|
||||||
movq %rax, %cr0
|
movq %rax, %cr0
|
||||||
|
|
||||||
/* Set cr4 to a known state:
|
/*
|
||||||
|
* Set cr4 to a known state:
|
||||||
* - physical address extension enabled
|
* - physical address extension enabled
|
||||||
*/
|
*/
|
||||||
movq $X86_CR4_PAE, %rax
|
movq $X86_CR4_PAE, %rax
|
||||||
@@ -117,7 +122,8 @@ identity_mapped:
|
|||||||
jmp 0b
|
jmp 0b
|
||||||
3:
|
3:
|
||||||
|
|
||||||
/* To be certain of avoiding problems with self-modifying code
|
/*
|
||||||
|
* To be certain of avoiding problems with self-modifying code
|
||||||
* I need to execute a serializing instruction here.
|
* I need to execute a serializing instruction here.
|
||||||
* So I flush the TLB by reloading %cr3 here, it's handy,
|
* So I flush the TLB by reloading %cr3 here, it's handy,
|
||||||
* and not processor dependent.
|
* and not processor dependent.
|
||||||
@@ -125,8 +131,10 @@ identity_mapped:
|
|||||||
movq %cr3, %rax
|
movq %cr3, %rax
|
||||||
movq %rax, %cr3
|
movq %rax, %cr3
|
||||||
|
|
||||||
/* set all of the registers to known values */
|
/*
|
||||||
/* leave %rsp alone */
|
* set all of the registers to known values
|
||||||
|
* leave %rsp alone
|
||||||
|
*/
|
||||||
|
|
||||||
xorq %rax, %rax
|
xorq %rax, %rax
|
||||||
xorq %rbx, %rbx
|
xorq %rbx, %rbx
|
||||||
|
Reference in New Issue
Block a user