From: Jeremy Fitzhardinge <jeremy@goop.org>
To: "Eric W. Biederman" <ebiederm@xmission.com>,
"H. Peter Anvin" <hpa@zytor.com>
Cc: lkml <linux-kernel@vger.kernel.org>,
Vivek Goyal <vgoyal@in.ibm.com>,
v12n <virtualization@lists.linux-foundation.org>
Subject: [PATCH RFC 1/7] update boot spec to 2.07
Date: Wed, 06 Jun 2007 15:58:38 -0700 [thread overview]
Message-ID: <20070606230922.074177129@goop.org> (raw)
In-Reply-To: 20070606225837.654272428@goop.org
[-- Attachment #1: update-boot-spec.patch --]
[-- Type: text/plain, Size: 5422 bytes --]
Proposed updates for version 2.07 of the boot protocol. This includes:
load_flags.KEEP_SEGMENTS- flag to request/inhibit segment reloads
hardware_subarch - what subarchitecture we're booting under
hardware_subarch_data - per-architecture data
kernel_payload - address of the raw kernel blob
The intention of these changes is to make booting a paravirtualized
kernel work via the normal Linux boot protocol. The intention is that
the bzImage payload can be a properly formed ELF file, so that the
bootloader can use its ELF notes and Phdrs to get more metadata about
the kernel and its requirements.
The ELF file could be the uncompressed kernel vmlinux itself; it would
only take small buildsystem changes to implement this.
kernel_payload was added so that a bootloader can just get to the raw
bits of the kernel, so that it can do its own decompression/relocation
if it wishes. This is not particularly well-defined yet; I just added
it with the hope that it keeps HPA happy.
Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Vivek Goyal <vgoyal@in.ibm.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
---
Documentation/i386/boot.txt | 43 +++++++++++++++++++++++++++++++++++++++-
arch/i386/kernel/asm-offsets.c | 7 ++++++
include/asm-i386/bootparam.h | 10 +++++++--
3 files changed, 57 insertions(+), 3 deletions(-)
===================================================================
--- a/Documentation/i386/boot.txt
+++ b/Documentation/i386/boot.txt
@@ -168,6 +168,9 @@ 0234/1 2.05+ relocatable_kernel Whether
0234/1 2.05+ relocatable_kernel Whether kernel is relocatable or not
0235/3 N/A pad2 Unused
0238/4 2.06+ cmdline_size Maximum size of the kernel command line
+023C/4 2.07+ hardware_subarch Hardware subarchitecture
+0240/8 2.07+ hardware_subarch_data Subarchitecture-specific data
+0248/4 2.07+ kernel_payload Pointer to raw kernel data
(1) For backwards compatibility, if the setup_sects field contains 0, the
real value is 4.
@@ -204,7 +207,7 @@ boot loaders can ignore those fields.
The byte order of all fields is littleendian (this is x86, after all.)
-Field name: setup_secs
+Field name: setup_sects
Type: read
Offset/size: 0x1f1/1
Protocol: ALL
@@ -356,6 +359,13 @@ Protocol: 2.00+
- If 0, the protected-mode code is loaded at 0x10000.
- If 1, the protected-mode code is loaded at 0x100000.
+ Bit 6 (write): KEEP_SEGMENTS
+ Protocol: 2.07+
+ - if 0, reload the segment registers in the 32bit entry point.
+ - if 1, do not reload the segment registers in the 32bit entry point.
+ Assume that %cs %ds %ss %es are all set to flat segments with
+ a base of 0 (or the equivalent for their environment).
+
Bit 7 (write): CAN_USE_HEAP
Set this bit to 1 to indicate that the value entered in the
heap_end_ptr is valid. If this field is clear, some setup code
@@ -479,6 +489,37 @@ Protocol: 2.06+
zero. This means that the command line can contain at most
cmdline_size characters. With protocol version 2.05 and earlier, the
maximum size was 255.
+
+Field name: hardware_subarch
+Type: write
+Offset/size: 0x23c/4
+Protocol: 2.07+
+
+ In a paravirtualized environment the hardware low level architectural
+ pieces such as interrupt handling, page table handling, and
+ accessing process control registers needs to be done differently.
+
+ This field allows the bootloader to inform the kernel we are in one
+ one of those environments.
+
+ 0x00000000 The default x86/PC environment
+ 0x00000001 lguest
+ 0x00000002 Xen
+
+Field name: hardware_subarch_data
+Type: write
+Offset/size: 0x240/8
+Protocol: 2.07+
+
+ A pointer to data that is specific to hardware subarch
+
+Field name: kernel_payload
+Type: read
+Offset/size: 0x248/4
+Protocol: 2.07+
+
+ The relocated pointer to the actual kernel payload, in whatever form
+ it exists in (gzip image, normally).
**** THE KERNEL COMMAND LINE
===================================================================
--- a/arch/i386/kernel/asm-offsets.c
+++ b/arch/i386/kernel/asm-offsets.c
@@ -15,6 +15,7 @@
#include <asm/fixmap.h>
#include <asm/processor.h>
#include <asm/thread_info.h>
+#include <asm/bootparam.h>
#include <asm/elf.h>
#include <xen/interface/xen.h>
@@ -143,4 +144,10 @@ void foo(void)
OFFSET(LGUEST_PAGES_regs_errcode, lguest_pages, regs.errcode);
OFFSET(LGUEST_PAGES_regs, lguest_pages, regs);
#endif
+
+ BLANK();
+ OFFSET(BP_scratch, boot_params, scratch);
+ OFFSET(BP_loadflags, boot_params, hdr.loadflags);
+ OFFSET(BP_hardware_subarch, boot_params, hdr.hardware_subarch);
+ OFFSET(BP_version, boot_params, hdr.version);
}
===================================================================
--- a/include/asm-i386/bootparam.h
+++ b/include/asm-i386/bootparam.h
@@ -24,8 +24,9 @@ struct setup_header {
u16 kernel_version;
u8 type_of_loader;
u8 loadflags;
-#define LOADED_HIGH 0x01
-#define CAN_USE_HEAP 0x80
+#define LOADED_HIGH (1<<0)
+#define KEEP_SEGMENTS (1<<6)
+#define CAN_USE_HEAP (1<<7)
u16 setup_move_size;
u32 code32_start;
u32 ramdisk_image;
@@ -37,6 +38,11 @@ struct setup_header {
u32 initrd_addr_max;
u32 kernel_alignment;
u8 relocatable_kernel;
+ u8 _pad2[3];
+ u32 cmdline_size;
+ u32 hardware_subarch;
+ u64 hardware_subarch_data;
+ u32 kernel_payload;
} __attribute__((packed));
struct sys_desc_table {
--
next prev parent reply other threads:[~2007-06-06 22:58 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-06 22:58 [PATCH RFC 0/7] proposed updates to boot protocol and paravirt booting Jeremy Fitzhardinge
2007-06-06 22:58 ` Jeremy Fitzhardinge [this message]
2007-06-06 22:58 ` [PATCH RFC 2/7] add WEAK() for creating weak asm labels Jeremy Fitzhardinge
2007-06-06 22:58 ` [PATCH RFC 3/7] allow linux/elf.h to be included in assembler Jeremy Fitzhardinge
2007-06-06 22:58 ` [PATCH RFC 4/7] define ELF notes for adding to a boot image Jeremy Fitzhardinge
2007-06-06 22:58 ` [PATCH RFC 5/7] i386: clean up bzImage generation Jeremy Fitzhardinge
2007-06-06 22:58 ` [PATCH RFC 6/7] i386: make the bzImage payload an ELF file Jeremy Fitzhardinge
2007-06-06 23:41 ` H. Peter Anvin
2007-06-06 23:56 ` Jeremy Fitzhardinge
[not found] ` <466749C8.2010700@goop.org>
2007-06-07 0:08 ` H. Peter Anvin
[not found] ` <46674C96.7090104@zytor.com>
2007-06-07 0:20 ` Jeremy Fitzhardinge
[not found] ` <46674F68.6030100@goop.org>
2007-06-07 0:42 ` H. Peter Anvin
[not found] ` <4667547B.8080502@zytor.com>
2007-06-07 1:01 ` Jeremy Fitzhardinge
2007-06-08 3:49 ` Vivek Goyal
[not found] ` <20070608034958.GA10728@in.ibm.com>
2007-06-08 4:01 ` H. Peter Anvin
2007-06-07 1:47 ` Rob Landley
[not found] ` <200706062147.21225.rob@landley.net>
2007-06-07 1:54 ` H. Peter Anvin
2007-06-07 16:08 ` Rob Landley
[not found] ` <200706071208.04777.rob@landley.net>
2007-06-07 16:14 ` H. Peter Anvin
2007-06-06 22:58 ` [PATCH RFC 7/7] i386: paravirt boot sequence Jeremy Fitzhardinge
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070606230922.074177129@goop.org \
--to=jeremy@goop.org \
--cc=ebiederm@xmission.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=vgoyal@in.ibm.com \
--cc=virtualization@lists.linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).