[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Linux dom0 hangs on boot with Xen 4.22 and Heads firmware


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
  • Date: Wed, 24 Jun 2026 11:57:32 +0200
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=fm1 header.d=invisiblethingslab.com header.i="@invisiblethingslab.com" header.h="Cc:Content-Type:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"; dkim=pass header.s=fm1 header.d=messagingengine.com header.i="@messagingengine.com" header.h="Cc:Content-Type:Date:Feedback-ID:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To:X-ME-Proxy:X-ME-Sender"
  • Cc: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Frediano Ziglio <frediano.ziglio@xxxxxxxxx>
  • Delivery-date: Wed, 24 Jun 2026 09:57:56 +0000
  • Feedback-id: i1568416f:Fastmail
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Wed, Jun 24, 2026 at 09:43:22AM +0200, Jan Beulich wrote:
> On 24.06.2026 02:31, Marek Marczykowski-Górecki wrote:
> > On Mon, Jun 22, 2026 at 10:53:01AM +0200, Jan Beulich wrote:
> >> On 19.06.2026 16:38, Marek Marczykowski-Górecki wrote:
> >>> After updating Xen to 4.22-rc2 on a system with Heads firmware, dom0
> >>> doesn't start anymore. It worked fine with Xen 4.19.
> >>> The last messages on console are:
> >>>
> >>>     [    1.495140] installing Xen timer for CPU 2
> >>>     [    1.496149] installing Xen timer for CPU 4
> >>>     [    1.496587] installing Xen timer for CPU 5
> >>>     [    1.496809] installing Xen timer for CPU 7
> >>>     [    0.008235] [Firmware Bug]: CPU   2: APIC ID mismatch. CPUID: 
> >>> 0x0002 APIC: 0x0028
> >>>     [    0.008235] [Firmware Bug]: CPU   2: APIC ID mismatch. Firmware: 
> >>> 0x0011 APIC: 0x0028
> >>>     [    1.497055] cpu 2 spinlock event irq 200
> >>>     [    0.008235] [Firmware Bug]: CPU   4: APIC ID mismatch. CPUID: 
> >>> 0x0004 APIC: 0x0000
> >>>     [    0.008235] [Firmware Bug]: CPU   4: APIC ID mismatch. Firmware: 
> >>> 0x0019 APIC: 0x0000
> >>>     [    1.497074] cpu 4 spinlock event irq 201
> >>>     [    0.008235] [Firmware Bug]: CPU   5: APIC ID mismatch. CPUID: 
> >>> 0x0005 APIC: 0x0002
> >>>     [    0.008235] [Firmware Bug]: CPU   5: APIC ID mismatch. Firmware: 
> >>> 0x0021 APIC: 0x0002
> >>>     [    1.497074] cpu 5 spinlock event irq 202
> >>>     [    0.008235] [Firmware Bug]: CPU   7: APIC I
> >>>
> >>> Full console log (containing both successful boot of Xen 4.19, and then
> >>> reboot into 4.22):
> >>> https://openqa.qubes-os.org/tests/184780/logfile?filename=serial0.txt
> >>
> >> The 4.19 log also has an anomaly around this point in time. Can you try
> >> again with sync_console added to both the 4.19 and the 4.22 attempt?
> > 
> > Yes, sync_console helped quite a bit, now I get full dom0 panic message:
> > 
> >     [   10.334800] vesafb: cannot reserve video memory at 0x0
> >     [   10.340009] vesafb: mode is 0x0x0, linelength=0, pages=0
> >     [   10.345515] Oops: divide error: 0000 [#1] SMP NOPTI
> >     [   10.346503] CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 
> > 6.17.9-1.qubes.fc41.x86_64 #1 PREEMPT(full) 
> >     [   10.346503] Hardware name: Notebook V54x_6x_TU/V54x_6x_TU, BIOS 
> > Dasharo (coreboot+heads) v0.9.0 01/01/1970
> >     [   10.346503] RIP: e030:vesafb_probe.cold+0xd4/0x5fb
> >     [   10.346503] Code: 08 75 1f 83 3d a8 8c 1d 02 00 75 16 48 c7 c7 90 4a 
> > fd 81 e8 8a ef f9 ff c7 05 d4 54 09 02 05 00 00 00 8b 05 c2 54 09 02 31 d2 
> > <f7> 35 d2 54 09 02 8b 15 fc 54 09 02 48 89 c1 48 c1 e1 20 48 09 ca
> >     [   10.346503] RSP: e02b:ffffc9004001fbb8 EFLAGS: 00010246
> >     [   10.346503] RAX: 0000000000000000 RBX: ffff888101d86f28 RCX: 
> > ffffffff823666e8
> >     [   10.346503] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 
> > 0000000000000003
> >     [   10.346503] RBP: ffff88810197d400 R08: 0000000000000000 R09: 
> > 6c656e696c202c30
> >     [   10.346503] R10: 0000000000000030 R11: 203a626661736576 R12: 
> > 0000000000000000
> >     [   10.346503] R13: 0000000000000000 R14: 0000000000000000 R15: 
> > ffff888106351000
> >     [   10.346503] FS:  0000000000000000(0000) GS:ffff888cef7c1000(0000) 
> > knlGS:0000000000000000
> >     [   10.346503] CS:  e030 DS: 0000 ES: 0000 CR0: 0000000080050033
> >     [   10.346503] CR2: ffffc900064ff000 CR3: 000000000222c000 CR4: 
> > 0000000000050660
> >     [   10.346503] Call Trace:
> >     [   10.346503]  <TASK>
> >     [   10.346503]  ? __pfx___device_attach_driver+0x10/0x10
> >     [   10.346503]  platform_probe+0x39/0x70
> >     [   10.346503]  really_probe+0xdb/0x340
> >     [   10.346503]  ? pm_runtime_barrier+0x54/0x90
> >     [   10.346503]  __driver_probe_device+0x78/0x110
> >     [   10.346503]  driver_probe_device+0x1f/0xa0
> >     [   10.346503]  __device_attach_driver+0x89/0x110
> >     [   10.346503]  bus_for_each_drv+0x94/0xf0
> >     [   10.346503]  __device_attach+0xaf/0x1b0
> >     [   10.346503]  bus_probe_device+0x8d/0xa0
> >     [   10.346503]  device_add+0x508/0x710
> >     [   10.346503]  platform_device_add+0xed/0x250
> >     [   10.346503]  sysfb_init+0x283/0x320
> >     [   10.346503]  ? __pfx_sysfb_init+0x10/0x10
> >     [   10.346503]  do_one_initcall+0x57/0x310
> >     [   10.346503]  do_initcalls+0x1ef/0x240
> >     [   10.346503]  kernel_init_freeable+0x187/0x210
> >     [   10.346503]  ? __pfx_kernel_init+0x10/0x10
> >     [   10.346503]  kernel_init+0x1a/0x140
> >     [   10.346503]  ret_from_fork+0xf2/0x110
> >     [   10.346503]  ? __pfx_kernel_init+0x10/0x10
> >     [   10.346503]  ret_from_fork_asm+0x1a/0x30
> >     [   10.346503]  </TASK>
> >     [   10.346503] Modules linked in:
> >     [   10.559786] ---[ end trace 0000000000000000 ]---
> >     [   10.564581] RIP: e030:vesafb_probe.cold+0xd4/0x5fb
> >     [   10.569546] Code: 08 75 1f 83 3d a8 8c 1d 02 00 75 16 48 c7 c7 90 4a 
> > fd 81 e8 8a ef f9 ff c7 05 d4 54 09 02 05 00 00 00 8b 05 c2 54 09 02 31 d2 
> > <f7> 35 d2 54 09 02 8b 15 fc 54 09 02 48 89 c1 48 c1 e1 20 48 09 ca
> >     [   10.588833] RSP: e02b:ffffc9004001fbb8 EFLAGS: 00010246
> >     [   10.594255] RAX: 0000000000000000 RBX: ffff888101d86f28 RCX: 
> > ffffffff823666e8
> >     [   10.601622] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 
> > 0000000000000003
> >     [   10.609000] RBP: ffff88810197d400 R08: 0000000000000000 R09: 
> > 6c656e696c202c30
> >     [   10.616378] R10: 0000000000000030 R11: 203a626661736576 R12: 
> > 0000000000000000
> >     [   10.623755] R13: 0000000000000000 R14: 0000000000000000 R15: 
> > ffff888106351000
> >     [   10.631136] FS:  0000000000000000(0000) GS:ffff888cef7c1000(0000) 
> > knlGS:0000000000000000
> >     [   10.639483] CS:  e030 DS: 0000 ES: 0000 CR0: 0000000080050033
> >     [   10.645434] CR2: ffffc900064ff000 CR3: 000000000222c000 CR4: 
> > 0000000000050660
> >     [   10.652817] Kernel panic - not syncing: Fatal exception
> >     [   10.653803] Kernel Offset: disabled
> >     (XEN) Hardware Dom0 crashed: 'noreboot' set - not rebooting.
> > 
> >>
> >>> It doesn't reach loading graphics driver in dom0, so I don't have
> >>> anything interesting on VGA (the last output is about the kexec call
> >>> done by Heads). But at least I have a serial console.
> >>
> >> Yet interestingly Xen's "  VGA is ... mode ..." lines differ as well.
> > 
> > This might be relevant given the above.
> 
> Indeed. It looks like d5a73cdc6b90 ("x86/boot: Use boot_vid_info variable
> directly from C code") is at fault, breaking this piece of pre-existing
> code at the bottom of mbi2_reloc():
> 
> #ifdef CONFIG_VIDEO
>     if ( video )
>         video->orig_video_isVGA = 0x23;
> #endif
> 
> Does the patch below help?

Yes, this helps, thanks!

> Jan
> 
> x86/boot: don't blindly mark VGA in graphics mode on MB2 path
> 
> Setting ->orig_video_isVGA to the specific marker should be done only when
> the VBE tag is present and the FRAMEBUFFER is either absent or indicates
> RGB type. Since the "video" variable now starts out non-NULL, this
> property was broken when in particular neither of the tags are present. To
> move back to at least close to original behavior, add a 2nd check to said
> conditional.
> 
> Fixes: d5a73cdc6b90 ("x86/boot: Use boot_vid_info variable directly from C 
> code")
> Reported-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Tested-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>

> --- a/xen/arch/x86/boot/reloc.c
> +++ b/xen/arch/x86/boot/reloc.c
> @@ -339,7 +339,7 @@ static multiboot_info_t *mbi2_reloc(uint
>   end:
>  
>  #ifdef CONFIG_VIDEO
> -    if ( video )
> +    if ( video && video->lfb_size )
>          video->orig_video_isVGA = 0x23;
>  #endif
>  
> 

-- 
Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab

Attachment: signature.asc
Description: PGP signature


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.