|
@@ -20,10 +20,11 @@
|
|
#define PAGE_ATTR (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
|
|
#define PAGE_ATTR (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
|
|
#define PAE_PGD_ATTR (_PAGE_PRESENT)
|
|
#define PAE_PGD_ATTR (_PAGE_PRESENT)
|
|
|
|
|
|
-/* control_page + PAGE_SIZE/2 ~ control_page + PAGE_SIZE * 3/4 are
|
|
|
|
- * used to save some data for jumping back
|
|
|
|
|
|
+/* control_page + KEXEC_CONTROL_CODE_MAX_SIZE
|
|
|
|
+ * ~ control_page + PAGE_SIZE are used as data storage and stack for
|
|
|
|
+ * jumping back
|
|
*/
|
|
*/
|
|
-#define DATA(offset) (PAGE_SIZE/2+(offset))
|
|
|
|
|
|
+#define DATA(offset) (KEXEC_CONTROL_CODE_MAX_SIZE+(offset))
|
|
|
|
|
|
/* Minimal CPU state */
|
|
/* Minimal CPU state */
|
|
#define ESP DATA(0x0)
|
|
#define ESP DATA(0x0)
|
|
@@ -376,3 +377,6 @@ swap_pages:
|
|
popl %ebx
|
|
popl %ebx
|
|
popl %ebp
|
|
popl %ebp
|
|
ret
|
|
ret
|
|
|
|
+
|
|
|
|
+ .globl kexec_control_code_size
|
|
|
|
+.set kexec_control_code_size, . - relocate_kernel
|