Define zero-page offset 0x1e4 as a scratch field, and use it
authorH. Peter Anvin <hpa@zytor.com>
Wed, 11 Jul 2007 19:18:33 +0000 (12:18 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 12 Jul 2007 17:55:54 +0000 (10:55 -0700)
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>
Documentation/i386/zero-page.txt
arch/i386/boot/compressed/head.S
arch/x86_64/boot/compressed/head.S

index c04a421f4a7c70290aaf6d6f4eb54af701fd2ae6..75b3680c41eb835e751a242191f2439914166152 100644 (file)
@@ -37,6 +37,7 @@ Offset        Type            Description
 0x1d0  unsigned long   EFI memory descriptor map pointer
 0x1d4  unsigned long   EFI memory descriptor map size
 0x1e0  unsigned long   ALT_MEM_K, alternative mem check, in Kb
+0x1e4  unsigned long   Scratch field for the kernel setup code
 0x1e8  char            number of entries in E820MAP (below)
 0x1e9  unsigned char   number of entries in EDDBUF (below)
 0x1ea  unsigned char   number of entries in EDD_MBR_SIG_BUFFER (below)
index 3517a32aaf4152a67098f70dc43e1f43f16d5851..f35ea2237522c0267139af7666e2875b571dd4b4 100644 (file)
@@ -45,10 +45,10 @@ startup_32:
  * at and where we were actually loaded at.  This can only be done
  * with a short local call on x86.  Nothing  else will tell us what
  * address we are running at.  The reserved chunk of the real-mode
- * data at 0x34-0x3f are used as the stack for this calculation.
- * Only 4 bytes are needed.
+ * data at 0x1e4 (defined as a scratch field) are used as the stack
+ * for this calculation. Only 4 bytes are needed.
  */
-       leal 0x40(%esi), %esp
+       leal (0x1e4+4)(%esi), %esp
        call 1f
 1:     popl %ebp
        subl $1b, %ebp
index f9d5692a0106e4c0ee311d034bd5eb0ef7702e3b..1312bfaff306866319fcbb8dec3caf06f933c0d1 100644 (file)
@@ -46,10 +46,10 @@ startup_32:
  * at and where we were actually loaded at.  This can only be done
  * with a short local call on x86.  Nothing  else will tell us what
  * address we are running at.  The reserved chunk of the real-mode
- * data at 0x34-0x3f are used as the stack for this calculation.
- * Only 4 bytes are needed.
+ * data at 0x1e4 (defined as a scratch field) are used as the stack
+ * for this calculation. Only 4 bytes are needed.
  */
-       leal    0x40(%esi), %esp
+       leal    (0x1e4+4)(%esi), %esp
        call    1f
 1:     popl    %ebp
        subl    $1b, %ebp