diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-x86/kexec.h | 18 | ||||
-rw-r--r-- | include/linux/kexec.h | 17 |
2 files changed, 23 insertions, 12 deletions
diff --git a/include/asm-x86/kexec.h b/include/asm-x86/kexec.h index 8f855a15f64d..c0e52a14fd4d 100644 --- a/include/asm-x86/kexec.h +++ b/include/asm-x86/kexec.h | |||
@@ -10,14 +10,15 @@ | |||
10 | # define VA_PTE_0 5 | 10 | # define VA_PTE_0 5 |
11 | # define PA_PTE_1 6 | 11 | # define PA_PTE_1 6 |
12 | # define VA_PTE_1 7 | 12 | # define VA_PTE_1 7 |
13 | # define PA_SWAP_PAGE 8 | ||
13 | # ifdef CONFIG_X86_PAE | 14 | # ifdef CONFIG_X86_PAE |
14 | # define PA_PMD_0 8 | 15 | # define PA_PMD_0 9 |
15 | # define VA_PMD_0 9 | 16 | # define VA_PMD_0 10 |
16 | # define PA_PMD_1 10 | 17 | # define PA_PMD_1 11 |
17 | # define VA_PMD_1 11 | 18 | # define VA_PMD_1 12 |
18 | # define PAGES_NR 12 | 19 | # define PAGES_NR 13 |
19 | # else | 20 | # else |
20 | # define PAGES_NR 8 | 21 | # define PAGES_NR 9 |
21 | # endif | 22 | # endif |
22 | #else | 23 | #else |
23 | # define PA_CONTROL_PAGE 0 | 24 | # define PA_CONTROL_PAGE 0 |
@@ -152,11 +153,12 @@ static inline void crash_setup_regs(struct pt_regs *newregs, | |||
152 | } | 153 | } |
153 | 154 | ||
154 | #ifdef CONFIG_X86_32 | 155 | #ifdef CONFIG_X86_32 |
155 | asmlinkage NORET_TYPE void | 156 | asmlinkage unsigned long |
156 | relocate_kernel(unsigned long indirection_page, | 157 | relocate_kernel(unsigned long indirection_page, |
157 | unsigned long control_page, | 158 | unsigned long control_page, |
158 | unsigned long start_address, | 159 | unsigned long start_address, |
159 | unsigned int has_pae) ATTRIB_NORET; | 160 | unsigned int has_pae, |
161 | unsigned int preserve_context); | ||
160 | #else | 162 | #else |
161 | NORET_TYPE void | 163 | NORET_TYPE void |
162 | relocate_kernel(unsigned long indirection_page, | 164 | relocate_kernel(unsigned long indirection_page, |
diff --git a/include/linux/kexec.h b/include/linux/kexec.h index 3265968cd2cd..82f88a8a827b 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h | |||
@@ -83,6 +83,7 @@ struct kimage { | |||
83 | 83 | ||
84 | unsigned long start; | 84 | unsigned long start; |
85 | struct page *control_code_page; | 85 | struct page *control_code_page; |
86 | struct page *swap_page; | ||
86 | 87 | ||
87 | unsigned long nr_segments; | 88 | unsigned long nr_segments; |
88 | struct kexec_segment segment[KEXEC_SEGMENT_MAX]; | 89 | struct kexec_segment segment[KEXEC_SEGMENT_MAX]; |
@@ -98,18 +99,20 @@ struct kimage { | |||
98 | unsigned int type : 1; | 99 | unsigned int type : 1; |
99 | #define KEXEC_TYPE_DEFAULT 0 | 100 | #define KEXEC_TYPE_DEFAULT 0 |
100 | #define KEXEC_TYPE_CRASH 1 | 101 | #define KEXEC_TYPE_CRASH 1 |
102 | unsigned int preserve_context : 1; | ||
101 | }; | 103 | }; |
102 | 104 | ||
103 | 105 | ||
104 | 106 | ||
105 | /* kexec interface functions */ | 107 | /* kexec interface functions */ |
106 | extern NORET_TYPE void machine_kexec(struct kimage *image) ATTRIB_NORET; | 108 | extern void machine_kexec(struct kimage *image); |
107 | extern int machine_kexec_prepare(struct kimage *image); | 109 | extern int machine_kexec_prepare(struct kimage *image); |
108 | extern void machine_kexec_cleanup(struct kimage *image); | 110 | extern void machine_kexec_cleanup(struct kimage *image); |
109 | extern asmlinkage long sys_kexec_load(unsigned long entry, | 111 | extern asmlinkage long sys_kexec_load(unsigned long entry, |
110 | unsigned long nr_segments, | 112 | unsigned long nr_segments, |
111 | struct kexec_segment __user *segments, | 113 | struct kexec_segment __user *segments, |
112 | unsigned long flags); | 114 | unsigned long flags); |
115 | extern int kernel_kexec(void); | ||
113 | #ifdef CONFIG_COMPAT | 116 | #ifdef CONFIG_COMPAT |
114 | extern asmlinkage long compat_sys_kexec_load(unsigned long entry, | 117 | extern asmlinkage long compat_sys_kexec_load(unsigned long entry, |
115 | unsigned long nr_segments, | 118 | unsigned long nr_segments, |
@@ -156,8 +159,9 @@ extern struct kimage *kexec_crash_image; | |||
156 | #define kexec_flush_icache_page(page) | 159 | #define kexec_flush_icache_page(page) |
157 | #endif | 160 | #endif |
158 | 161 | ||
159 | #define KEXEC_ON_CRASH 0x00000001 | 162 | #define KEXEC_ON_CRASH 0x00000001 |
160 | #define KEXEC_ARCH_MASK 0xffff0000 | 163 | #define KEXEC_PRESERVE_CONTEXT 0x00000002 |
164 | #define KEXEC_ARCH_MASK 0xffff0000 | ||
161 | 165 | ||
162 | /* These values match the ELF architecture values. | 166 | /* These values match the ELF architecture values. |
163 | * Unless there is a good reason that should continue to be the case. | 167 | * Unless there is a good reason that should continue to be the case. |
@@ -174,7 +178,12 @@ extern struct kimage *kexec_crash_image; | |||
174 | #define KEXEC_ARCH_MIPS_LE (10 << 16) | 178 | #define KEXEC_ARCH_MIPS_LE (10 << 16) |
175 | #define KEXEC_ARCH_MIPS ( 8 << 16) | 179 | #define KEXEC_ARCH_MIPS ( 8 << 16) |
176 | 180 | ||
177 | #define KEXEC_FLAGS (KEXEC_ON_CRASH) /* List of defined/legal kexec flags */ | 181 | /* List of defined/legal kexec flags */ |
182 | #ifndef CONFIG_KEXEC_JUMP | ||
183 | #define KEXEC_FLAGS KEXEC_ON_CRASH | ||
184 | #else | ||
185 | #define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT) | ||
186 | #endif | ||
178 | 187 | ||
179 | #define VMCOREINFO_BYTES (4096) | 188 | #define VMCOREINFO_BYTES (4096) |
180 | #define VMCOREINFO_NOTE_NAME "VMCOREINFO" | 189 | #define VMCOREINFO_NOTE_NAME "VMCOREINFO" |