[Xen-devel] Allow initrd concatenation on ARM64

Message ID CADyBb7voqb=3WK8cvoC+=L9h=YOmBz3Mr5wN3+V6vnfLJ-KFXg@mail.gmail.com
State New
Headers show

Commit Message

Fu Wei Fu Feb. 22, 2016, 3:40 p.m.
Hi Vladimir,

Sorry for late response, I turned to work on other tasks and haven't
sent the test resulted to you.

Last weekend I got a email from Julien about a xen boot problem on
arm64, I just noticed that you have simplified the xen_boot.c to drop
xen_linux, xen_initrd and xen_xsm.

By this way, we still can boot xen on arm64 by loading modules in a
specific order, and simplified the xen boot code.  I guess that is also
a good way to make  a patch for updating boot entrance in grub.cfg.

Is this still OK to update grub.cfg by this way:
(1) in xen_boot.c
  grub_env_set ("grub_xen_boot", "y");
  grub_env_export ("grub_xen_boot");

(2)in util/grub.d/20_linux_xen.in

Please correct me if I misunderstand something, thanks for your help,  :-)
and sorry for delay  :-(

On 12 November 2015 at 21:48, Vladimir 'φ-coder/phcoder' Serbinenko
<phcoder@gmail.com> wrote:
> On 12.11.2015 14:27, Ian Campbell wrote:
>> On Thu, 2015-11-12 at 14:08 +0100, Vladimir 'φ-coder/phcoder' Serbinenko
>> wrote:
>>> While on it also change "xen_linux" to "xen_kernel" to be vendor-neutral
>>> Could someone test please? I only compile-tested it
>> I was expecting this patch to include a change
>> to ./util/grub.d/20_linux_xen.in to update the naming there, but it looks
>> like that aspect of the original series isn't in tree yet?
> We need to figure out what we should do on x86 wrt multiboot vs
> multiboot2 before adapting 20_linux_xen
>> BTW, you have a stray "linux" in the description of the (now) xen_kernel
>> command.
> Fixed locally, thank you
>> Ian.
>> .


diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in
index f532fb9..49aa709 100644
--- a/util/grub.d/20_linux_xen.in
+++ b/util/grub.d/20_linux_xen.in
@@ -120,16 +120,16 @@  linux_entry ()
             xen_rm_opts="no-real-mode edd=off"
- multiboot ${rel_xen_dirname}/${xen_basename} placeholder ${xen_args}
+ ${multiboot_cmd} ${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_linux_cmd} ${rel_dirname}/${basename} placeholder
root=${linux_root_device_thisversion} ro ${args}
   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_initrd_cmd}  ${rel_dirname}/${initrd}
   sed "s/^/$submenu_indentation/" << EOF
@@ -185,6 +185,16 @@  case "$machine" in
     *) GENKERNEL_ARCH="$machine" ;;

+if [ "x$grub_xen_boot" != xy ]; then
+ multiboot_cmd="multiboot"
+ module_linux_cmd="module"
+ module_initrd_cmd="module --nounzip"
+ multiboot_cmd="xen_hypervisor"
+ module_linux_cmd="xen_module"
+ module_initrd_cmd="xen_module"
 # Extra indentation to add to menu entries in a submenu. We're not in a submenu
 # yet, so it's empty. In a submenu it will be equal to '\t' (one tab).

(3)add xen_* aliases on x86,
diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c
index c4d9689..b88d51b 100644
--- a/grub-core/loader/i386/xen.c
+++ b/grub-core/loader/i386/xen.c
@@ -696,10 +696,14 @@  GRUB_MOD_INIT (xen)
                                   0, N_("Load Linux."));
   cmd_multiboot = grub_register_command ("multiboot", grub_cmd_xen,
                                         0, N_("Load Linux."));
+  cmd_multiboot = grub_register_command ("xen_hypervisor", grub_cmd_xen,
+                                        0, N_("Load Linux."));
   cmd_initrd = grub_register_command ("initrd", grub_cmd_initrd,
                                      0, N_("Load initrd."));
   cmd_module = grub_register_command ("module", grub_cmd_module,
                                      0, N_("Load module."));
+  cmd_module = grub_register_command ("xen_module", grub_cmd_module,
+                                     0, N_("Load module."));
   my_mod = mod;