Re: [PATCH 0/2] templates/linux_xen: Properly handle multiple initrd files

2022-08-19 Thread Daniel Kiper
On Wed, Aug 17, 2022 at 06:08:12PM -0300, Mauricio Faria de Oliveira wrote:
> [removing xen-devel and Juergen Gross]
>
> Hi Daniel,
>
> On Fri, Aug 12, 2022 at 3:05 AM Juergen Gross  wrote:
> >
> > On 11.08.22 21:10, Mauricio Faria de Oliveira wrote:
> > > Adding the xen-devel list as requested in grub-devel [0]:
> > >
> > > On Thu, Aug 11, 2022 at 1:51 PM Daniel Kiper  wrote:
> > >> In general patches LGTM. However, I would prefer to hear an opinion from 
> > >> Xen
> > >> folks too. So, please repost the patch set and add 
> > >> xen-de...@lists.xenproject.org
> > >> to the list of recipients.
> > >
> > > [0] https://lists.gnu.org/archive/html/grub-devel/2022-08/msg00115.html
> [snip]
> >
> > For both patches:
> >
> > Acked-by: Juergen Gross 
> >
> >
> > Juergen
>
> Just following up on this patchset, now that it's been Acked-by in
> xen-devel, as you requested.

Thank you for doing that!

For both patches Reviewed-by: Daniel Kiper ...

Daniel

___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [PATCH 0/2] templates/linux_xen: Properly handle multiple initrd files

2022-08-17 Thread Mauricio Faria de Oliveira
[removing xen-devel and Juergen Gross]

Hi Daniel,

On Fri, Aug 12, 2022 at 3:05 AM Juergen Gross  wrote:
>
> On 11.08.22 21:10, Mauricio Faria de Oliveira wrote:
> > Adding the xen-devel list as requested in grub-devel [0]:
> >
> > On Thu, Aug 11, 2022 at 1:51 PM Daniel Kiper  wrote:
> >> In general patches LGTM. However, I would prefer to hear an opinion from 
> >> Xen
> >> folks too. So, please repost the patch set and add 
> >> xen-de...@lists.xenproject.org
> >> to the list of recipients.
> >
> > [0] https://lists.gnu.org/archive/html/grub-devel/2022-08/msg00115.html
[snip]
>
> For both patches:
>
> Acked-by: Juergen Gross 
>
>
> Juergen

Just following up on this patchset, now that it's been Acked-by in
xen-devel, as you requested.

Thanks,

-- 
Mauricio Faria de Oliveira

___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [PATCH 0/2] templates/linux_xen: Properly handle multiple initrd files

2022-08-11 Thread Juergen Gross via Grub-devel

On 11.08.22 21:10, Mauricio Faria de Oliveira wrote:

Adding the xen-devel list as requested in grub-devel [0]:

On Thu, Aug 11, 2022 at 1:51 PM Daniel Kiper  wrote:

In general patches LGTM. However, I would prefer to hear an opinion from Xen
folks too. So, please repost the patch set and add 
xen-de...@lists.xenproject.org
to the list of recipients.


[0] https://lists.gnu.org/archive/html/grub-devel/2022-08/msg00115.html

Thanks,
Mauricio

...

The linux_xen template seems to be broken for multiple initrd files.
Linux fails to boot when it needs a real initrd but early/microcode
initrd(s) are found by grub-mkconfig.

Patch 1 allows initrd(s) other than the first early/microcode initrd
to be loaded at all, fixing an implementation error for multiboot[2].

Patch 2 allows Linux to get the real initrd as initrd (vs. an early/
microcode-only initrd), thus being able to boot if it needs a initrd.

Synthetic tests:
---

 # touch /boot/xen /boot/microcode.cpio

Original:

 # grub-mkconfig 2>/dev/null | grep -P '^\t(multiboot|module)'
 multiboot   /boot/xen ...
 module  /boot/vmlinuz-5.4.0-122-generic ...
 module  --nounzip   /boot/microcode.cpio 
/boot/initrd.img-5.4.0-122-generic

Patch 1:

 # grub-mkconfig 2>/dev/null | grep -P '^\t(multiboot|module)'
 multiboot  /boot/xen ...
 module  /boot/vmlinuz-5.4.0-122-generic ...
 module  --nounzip   /boot/microcode.cpio
 module  --nounzip   /boot/initrd.img-5.4.0-122-generic

Patch 2:

 # grub-mkconfig 2>/dev/null | grep -P '^\t(multiboot|module)'
 multiboot  /boot/xen ...
 module  /boot/vmlinuz-5.4.0-122-generic ...
 module  --nounzip   /boot/initrd.img-5.4.0-122-generic
 module  --nounzip   /boot/microcode.cpio

 With fake multiboot2 header:

 # echo -en '\xd6\x50\x52\xe8\x00\x00\x00\x00' > /boot/xen
 # echo -en '\x00\x00\x00\x00\x2a\xaf\xad\x17' >> /boot/xen
 # echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' >> /boot/xen
 # echo -en '\x00\x00\x00\x00\x00\x00\x00\x00' >> /boot/xen

 # grub-file --is-x86-multiboot2 /boot/xen; echo $?
 0
 
 # grub-mkconfig 2>/dev/null | grep -P '^\t(multiboot|module)'

 multiboot2  /boot/xen ...
 module2 /boot/vmlinuz-5.4.0-122-generic ...
 module2 --nounzip   /boot/initrd.img-5.4.0-122-generic
 module2 --nounzip   /boot/microcode.cpio

Regular tests:
---

Debug patch:

 __start_xen() @ xen.git:xen/arch/x86/setup.c
 ...
 +for (i = 0; i < mbi->mods_count; i++)
 +   printk("MODULE %d size %d string %s\n",
 +  i, mod[i].mod_end - mod[i].mod_start, 
(char*)__va(mod[i].string));
 +
  bitmap_fill(module_map, mbi->mods_count);
  __clear_bit(0, module_map); /* Dom0 kernel is always first */

For /boot/microcode.cpio:

 $ sudo apt install microcode-initrd # on Ubuntu

 $ du --bytes /boot/...
 13660416 /boot/vmlinuz-5.4.0-122-generic
 33062542 /boot/initrd.img-5.4.0-122-generic
 5045248  /boot/microcode.cpio

Original:

 (XEN) MODULE 0 size 13660416 string placeholder 
root=UUID=74dd579c-a377-487d-b8f7-bc7c6df13ba1 ro console=ttyS0
 (XEN) MODULE 1 size 5045248 string /boot/initrd.img-5.4.0-122-generic
 ...
 [2.505207] Kernel panic - not syncing: VFS: Unable to mount root fs on 
unknown-block(0,0)

Patch 1:

 (XEN) MODULE 0 size 13660416 string placeholder 
root=UUID=74dd579c-a377-487d-b8f7-bc7c6df13ba1 ro console=ttyS0
 (XEN) MODULE 1 size 5045248 string
 (XEN) MODULE 2 size 33062542 string
 ...
 [1.890498] Freeing initrd memory: 4928K
 ...
 [2.710948] Kernel panic - not syncing: VFS: Unable to mount root fs on 
unknown-block(0,0)

Patch 2:

 (XEN) MODULE 0 size 13660416 string placeholder 
root=UUID=74dd579c-a377-487d-b8f7-bc7c6df13ba1 ro console=ttyS0
 (XEN) MODULE 1 size 33062542 string
 (XEN) MODULE 2 size 5045248 string
 ...
 [1.968578] Freeing initrd memory: 32288K
 ...
 [2.844889] Run /init as init process
 [2.916532] systemd-udevd[148]: Starting version 245.4-4ubuntu3.17

Xen code:
---

Key code path for this patchset:

 @ xen.git:xen/arch/x86/setup.c:

 void __init noreturn __start_xen(unsigned long mbi_p)
 {
 ...
 unsigned int initrdidx, ...
 multiboot_info_t *mbi;
 module_t *mod;
 unsigned long ..., module_map[1];
 ...
 mbi = __va(mbi_p);
 ...
 mod = __va(mbi->mods_addr);
 ...
 bitmap_fill(module_map, mbi->mods_count);
 __clear_bit(0, module_map); /* Dom0 kernel is always first */
 ...
 microcode_grab_module(module_map, mbi);
# ucode=number can __test_and_clear_bit(number, module_map),
# ucode=scan can't.
 ...
 initrdidx = find_first_bit(module_map, mbi->mods_count);
 if ( bitmap_weight(mod

Re: [PATCH 0/2] templates/linux_xen: Properly handle multiple initrd files

2022-08-11 Thread Mauricio Faria de Oliveira
On Thu, Aug 11, 2022 at 1:51 PM Daniel Kiper  wrote:
>
> On Mon, Aug 08, 2022 at 07:04:23PM -0300, Mauricio Faria de Oliveira wrote:
> > The linux_xen template seems to be broken for multiple initrd files.
> > Linux fails to boot when it needs a real initrd but early/microcode
> > initrd(s) are found by grub-mkconfig.
> >
> > Patch 1 allows initrd(s) other than the first early/microcode initrd
> > to be loaded at all, fixing an implementation error for multiboot[2].
> >
> > Patch 2 allows Linux to get the real initrd as initrd (vs. an early/
> > microcode-only initrd), thus being able to boot if it needs a initrd.
>
> In general patches LGTM. However, I would prefer to hear an opinion from Xen
> folks too. So, please repost the patch set and add 
> xen-de...@lists.xenproject.org
> to the list of recipients.

Sure, I just reposted it with the xen-devel list added. Thanks for the
initial review.

>
> Daniel



-- 
Mauricio Faria de Oliveira

___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [PATCH 0/2] templates/linux_xen: Properly handle multiple initrd files

2022-08-11 Thread Daniel Kiper
On Mon, Aug 08, 2022 at 07:04:23PM -0300, Mauricio Faria de Oliveira wrote:
> The linux_xen template seems to be broken for multiple initrd files.
> Linux fails to boot when it needs a real initrd but early/microcode
> initrd(s) are found by grub-mkconfig.
>
> Patch 1 allows initrd(s) other than the first early/microcode initrd
> to be loaded at all, fixing an implementation error for multiboot[2].
>
> Patch 2 allows Linux to get the real initrd as initrd (vs. an early/
> microcode-only initrd), thus being able to boot if it needs a initrd.

In general patches LGTM. However, I would prefer to hear an opinion from Xen
folks too. So, please repost the patch set and add 
xen-de...@lists.xenproject.org
to the list of recipients.

Daniel

___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel