diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-01-22 18:00:48 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-01-22 18:00:48 +0000 |
commit | e2b1ebf4de503eef701bf122362355ec11af34f3 (patch) | |
tree | 504ff98b3f0a7fcfc8a8c9cbda62e84ba4d48f49 /xen/arch/x86/domain_build.c | |
parent | 85952ca7cefe27cdf13e1c24571d964708b876dc (diff) | |
download | xen-e2b1ebf4de503eef701bf122362355ec11af34f3.tar.gz xen-e2b1ebf4de503eef701bf122362355ec11af34f3.tar.bz2 xen-e2b1ebf4de503eef701bf122362355ec11af34f3.zip |
x86: Support booting a bzImage format domain 0 kernel.
This requires a bzImage v2.08 or later kernel.
xen/common/inflate.c is taken unmodified from Linux v2.6.28.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'xen/arch/x86/domain_build.c')
-rw-r--r-- | xen/arch/x86/domain_build.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index 3b8a1a15fe..c4eb21a056 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -32,6 +32,9 @@ #include <public/version.h> +int __init bzimage_parse( + char *output, char **image_start, unsigned long *image_len); + extern unsigned long initial_images_nrpages(void); extern void discard_initial_images(void); @@ -196,7 +199,8 @@ static void __init process_dom0_ioports_disable(void) int __init construct_dom0( struct domain *d, - unsigned long _image_start, unsigned long image_len, + unsigned long _image_base, + unsigned long _image_start, unsigned long image_len, unsigned long _initrd_start, unsigned long initrd_len, char *cmdline) { @@ -213,9 +217,11 @@ int __init construct_dom0( struct vcpu *v = d->vcpu[0]; unsigned long long value; #if defined(__i386__) + char *image_base = (char *)_image_base; /* use lowmem mappings */ char *image_start = (char *)_image_start; /* use lowmem mappings */ char *initrd_start = (char *)_initrd_start; /* use lowmem mappings */ #elif defined(__x86_64__) + char *image_base = __va(_image_base); char *image_start = __va(_image_start); char *initrd_start = __va(_initrd_start); #endif @@ -262,6 +268,9 @@ int __init construct_dom0( nr_pages = compute_dom0_nr_pages(); + if ( (rc = bzimage_parse(image_base, &image_start, &image_len)) != 0 ) + return rc; + if ( (rc = elf_init(&elf, image_start, image_len)) != 0 ) return rc; #ifdef VERBOSE |