diff options
author | H. Peter Anvin <hpa@zytor.com> | 2007-07-11 15:18:33 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-12 13:55:54 -0400 |
commit | 85414b693ac037d709582a167a330db3a5d186d8 (patch) | |
tree | 78836556d59e28c335d2ba5be347c06f4298432e | |
parent | 1d67953f2bda8876045c24ae58841f27d9bb7572 (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.txt | 1 | ||||
-rw-r--r-- | arch/i386/boot/compressed/head.S | 6 | ||||
-rw-r--r-- | arch/x86_64/boot/compressed/head.S | 6 |
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 | |||
37 | 0x1d0 unsigned long EFI memory descriptor map pointer | 37 | 0x1d0 unsigned long EFI memory descriptor map pointer |
38 | 0x1d4 unsigned long EFI memory descriptor map size | 38 | 0x1d4 unsigned long EFI memory descriptor map size |
39 | 0x1e0 unsigned long ALT_MEM_K, alternative mem check, in Kb | 39 | 0x1e0 unsigned long ALT_MEM_K, alternative mem check, in Kb |
40 | 0x1e4 unsigned long Scratch field for the kernel setup code | ||
40 | 0x1e8 char number of entries in E820MAP (below) | 41 | 0x1e8 char number of entries in E820MAP (below) |
41 | 0x1e9 unsigned char number of entries in EDDBUF (below) | 42 | 0x1e9 unsigned char number of entries in EDDBUF (below) |
42 | 0x1ea unsigned char number of entries in EDD_MBR_SIG_BUFFER (below) | 43 | 0x1ea 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 |
53 | 1: popl %ebp | 53 | 1: 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 |
54 | 1: popl %ebp | 54 | 1: popl %ebp |
55 | subl $1b, %ebp | 55 | subl $1b, %ebp |