On Mon, Jun 15, 2009 at 9:41 PM, uzer cheg<[email protected]> wrote:
> Dear all,
> I'd like to ask you for an advice regarding Xen Dom0 support in
> current Grub2 trunk.
> Has anybody tried to boot Xen Dom0 by Grub2 on latest versions (r 2322
> for instance)?
>
> I installed Debian Linux 5.0 (lenny) with Dom0.
> It works fine and loads in Xen Dom0 via legacy grub supplied by Debian.
> Than I got latest grub2 via svn and built it as usual. Also I made
> custom /grub2/core.img by grub-mkimage
> On start computer loads old legacy grub. Than it loads grub2 as
> # kernel /grub2/core.img
> Grub2 starts fine and I try to load Xen.
> menuentry "xen" {
>
> multiboot /boot/xen-3.2-1-amd64.gz dom0_mem=640M
> module /boot/vmlinuz-2.6.26-1-amd64 root=/dev/mapper/mainVG-rootLV ro
> module /boot/initrd.img-2.6.26-1-amd64
>
> }
>
> It tries to boot and crash with message
> ...
> (XEN) Early fatal page fault at e008:ffff828c801da4a2 ... etc
> (XEN) Stack dump
>
> I tried to load xen by using command
> multiboot /boot/xen-3.2-1-amd64.gz dom0_mem=640M
>
xen 3.3 has a bug which results in this behaviour. Either use xen 3.4
or try attached dirty workaround for grub2
> Result was the same.
>
>
> Please remeber that the same Xen Dom0 boots Ok via grub legacy.
>
> Do I have to add any special commands to grub2.cfg ?
>
> Is it Xen's fault and do I have to upgrade it?
>
>
> Thank you in advance.
>
>
> _______________________________________________
> Grub-devel mailing list
> [email protected]
> http://lists.gnu.org/mailman/listinfo/grub-devel
>
--
Regards
Vladimir 'phcoder' Serbinenko
diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c
index a59085c..9472f61 100644
--- a/loader/i386/multiboot.c
+++ b/loader/i386/multiboot.c
@@ -269,7 +269,8 @@ grub_multiboot (int argc, char *argv[])
grub_multiboot_payload_size = cmdline_length
/* boot_loader_name_length might need to grow for mbi,etc to be aligned (see below) */
+ boot_loader_name_length + 3
- + sizeof (struct grub_multiboot_info) + mmap_length;
+ + sizeof (struct grub_multiboot_info) + mmap_length
+ + 100000;
if (header->flags & MULTIBOOT_AOUT_KLUDGE)
{
@@ -315,6 +316,7 @@ grub_multiboot (int argc, char *argv[])
mbi_dest = mbi_addr (grub_multiboot_payload_dest);
grub_memset (mbi, 0, sizeof (struct grub_multiboot_info));
mbi->mmap_length = mmap_length;
+ mbi->mods_addr = mmap_addr (grub_multiboot_payload_dest) + mmap_length;
grub_fill_multiboot_mmap (mmap_addr (grub_multiboot_payload_orig));
@@ -440,8 +442,8 @@ grub_module (int argc, char *argv[])
{
struct grub_mod_list *modlist = (struct grub_mod_list *) mbi->mods_addr;
- modlist = grub_realloc (modlist, (mbi->mods_count + 1)
- * sizeof (struct grub_mod_list));
+ // modlist = grub_realloc (modlist, (mbi->mods_count + 1)
+ // * sizeof (struct grub_mod_list));
if (! modlist)
goto fail;
mbi->mods_addr = (grub_uint32_t) modlist;
@@ -454,7 +456,8 @@ grub_module (int argc, char *argv[])
}
else
{
- struct grub_mod_list *modlist = grub_malloc (sizeof (struct grub_mod_list));
+ struct grub_mod_list *modlist = (struct grub_mod_list *) mbi->mods_addr;
+ // struct grub_mod_list *modlist = grub_malloc (sizeof (struct grub_mod_list));
if (! modlist)
goto fail;
modlist->mod_start = (grub_uint32_t) module;
_______________________________________________
Grub-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel