diff mbox

[v16,4/9] x86: add multiboot2 protocol support for EFI platforms

Message ID 20170308164637.GC7367@char.us.oracle.com (mailing list archive)
State New, archived
Headers show

Commit Message

Konrad Rzeszutek Wilk March 8, 2017, 4:46 p.m. UTC
..snip..
> > Now in the process I discovered that my patch for grub-mkconfig to
> > detect multiboot2 payloads and use those instead of multiboot never
> > made it upstream, so I had to modify my grub.cfg by hand (see below).
> 
> It will be nice if you post it after GRUB2 2.02 release.

OK, I will wait (but attaching it here).
From 89a85f31602f6d5f7355ffe6e246059e63cab973 Mon Sep 17 00:00:00 2001
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date: Wed, 8 Mar 2017 11:42:43 -0500
Subject: [PATCH] Use grub-file to figure out whether multiboot2 should be used
 for Xen.gz

The multiboot2 is much more preferable than multiboot. Especially
if booting under EFI where multiboot does not have the functionality
to pass ImageHandler.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
 util/grub.d/20_linux_xen.in | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
diff mbox

Patch

diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in
index c48af94..7aae59f 100644
--- a/util/grub.d/20_linux_xen.in
+++ b/util/grub.d/20_linux_xen.in
@@ -85,6 +85,10 @@  linux_entry ()
   type="$4"
   args="$5"
   xen_args="$6"
+  ver=""
+  if $($grub_file --is-x86-multiboot2 ${xen_dirname}/${xen_basename}); then
+     ver="2"
+  fi
   if [ -z "$boot_device_id" ]; then
       boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
   fi
@@ -122,16 +126,16 @@  linux_entry ()
         else
             xen_rm_opts="no-real-mode edd=off"
         fi
-	multiboot	${rel_xen_dirname}/${xen_basename} placeholder ${xen_args} \${xen_rm_opts}
+	multiboot${ver}	${rel_xen_dirname}/${xen_basename} placeholder ${xen_args} \${xen_rm_opts}
 	echo	'$(echo "$lmessage" | grub_quote)'
-	module	${rel_dirname}/${basename} placeholder root=${linux_root_device_thisversion} ro ${args}
+	module${ver}	${rel_dirname}/${basename} placeholder root=${linux_root_device_thisversion} ro ${args}
 EOF
   if test -n "${initrd}" ; then
     # TRANSLATORS: ramdisk isn't identifier. Should be translated.
     message="$(gettext_printf "Loading initial ramdisk ...")"
     sed "s/^/$submenu_indentation/" << EOF
 	echo	'$(echo "$message" | grub_quote)'
-	module	--nounzip   ${rel_dirname}/${initrd}
+	module${ver}	--nounzip   ${rel_dirname}/${initrd}
 EOF
   fi
   sed "s/^/$submenu_indentation/" << EOF