aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2007-07-11 15:18:33 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-12 13:55:54 -0400
commit85414b693ac037d709582a167a330db3a5d186d8 (patch)
tree78836556d59e28c335d2ba5be347c06f4298432e
parent1d67953f2bda8876045c24ae58841f27d9bb7572 (diff)
Define zero-page offset 0x1e4 as a scratch field, and use it
The relocatable kernel code needs a scratch field for the decompressor to determine its own location. It was using a location inside struct screen_info; reserve a free location and document it as scratch instead. Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--Documentation/i386/zero-page.txt1
-rw-r--r--arch/i386/boot/compressed/head.S6
-rw-r--r--arch/x86_64/boot/compressed/head.S6
3 files changed, 7 insertions, 6 deletions
diff --git a/Documentation/i386/zero-page.txt b/Documentation/i386/zero-page.txt
index c04a421f4a7c..75b3680c41eb 100644
--- a/Documentation/i386/zero-page.txt
+++ b/Documentation/i386/zero-page.txt
@@ -37,6 +37,7 @@ Offset Type Description
370x1d0 unsigned long EFI memory descriptor map pointer 370x1d0 unsigned long EFI memory descriptor map pointer
380x1d4 unsigned long EFI memory descriptor map size 380x1d4 unsigned long EFI memory descriptor map size
390x1e0 unsigned long ALT_MEM_K, alternative mem check, in Kb 390x1e0 unsigned long ALT_MEM_K, alternative mem check, in Kb
400x1e4 unsigned long Scratch field for the kernel setup code
400x1e8 char number of entries in E820MAP (below) 410x1e8 char number of entries in E820MAP (below)
410x1e9 unsigned char number of entries in EDDBUF (below) 420x1e9 unsigned char number of entries in EDDBUF (below)
420x1ea unsigned char number of entries in EDD_MBR_SIG_BUFFER (below) 430x1ea unsigned char number of entries in EDD_MBR_SIG_BUFFER (below)
diff --git a/arch/i386/boot/compressed/head.S b/arch/i386/boot/compressed/head.S
index 3517a32aaf41..f35ea2237522 100644
--- a/arch/i386/boot/compressed/head.S
+++ b/arch/i386/boot/compressed/head.S
@@ -45,10 +45,10 @@ startup_32:
45 * at and where we were actually loaded at. This can only be done 45 * at and where we were actually loaded at. This can only be done
46 * with a short local call on x86. Nothing else will tell us what 46 * with a short local call on x86. Nothing else will tell us what
47 * address we are running at. The reserved chunk of the real-mode 47 * address we are running at. The reserved chunk of the real-mode
48 * data at 0x34-0x3f are used as the stack for this calculation. 48 * data at 0x1e4 (defined as a scratch field) are used as the stack
49 * Only 4 bytes are needed. 49 * for this calculation. Only 4 bytes are needed.
50 */ 50 */
51 leal 0x40(%esi), %esp 51 leal (0x1e4+4)(%esi), %esp
52 call 1f 52 call 1f
531: popl %ebp 531: popl %ebp
54 subl $1b, %ebp 54 subl $1b, %ebp
diff --git a/arch/x86_64/boot/compressed/head.S b/arch/x86_64/boot/compressed/head.S
index f9d5692a0106..1312bfaff306 100644
--- a/arch/x86_64/boot/compressed/head.S
+++ b/arch/x86_64/boot/compressed/head.S
@@ -46,10 +46,10 @@ startup_32:
46 * at and where we were actually loaded at. This can only be done 46 * at and where we were actually loaded at. This can only be done
47 * with a short local call on x86. Nothing else will tell us what 47 * with a short local call on x86. Nothing else will tell us what
48 * address we are running at. The reserved chunk of the real-mode 48 * address we are running at. The reserved chunk of the real-mode
49 * data at 0x34-0x3f are used as the stack for this calculation. 49 * data at 0x1e4 (defined as a scratch field) are used as the stack
50 * Only 4 bytes are needed. 50 * for this calculation. Only 4 bytes are needed.
51 */ 51 */
52 leal 0x40(%esi), %esp 52 leal (0x1e4+4)(%esi), %esp
53 call 1f 53 call 1f
541: popl %ebp 541: popl %ebp
55 subl $1b, %ebp 55 subl $1b, %ebp