On Mon, Jul 25, 2016 at 03:56:22PM -0600, Trammell Hudson wrote:
# There seems to be a regression with regard to
# a Xen kernel between Xen 3.1.0 (confirmed working) and 3.1.3
# (confirmed not working).
I was able to reproduce this in qemu, which allowed me to debug
it much faster. The problem is that 3.1.3 is making BIOS calls
to try to initialize the VGA console in xen/arch/x86/boot/video.S,
while 3.1.0 had much of it hard coded in the xen/drivers/video/vga.c
I nop'ed out the calls to do the real mode stuff in
trampoline_boot_cpu_entry, which avoids lots of things like:
# Set the 80x25 mode. If already set, do nothing.
movw $0x5019, bootsym(force_size) # Override possibly broken BIOS
movw $0x1202, %ax # Force 400 scan lines
movb $0x30, %bl
movw $0x0003, %ax # Mode 3
I also replaced vga.c with the one from the 3.1.0 Xen tree to hardcode
the text mode 3 configuration. Now it is able to kexec the Xen 3.1.3
kernel from my Coreboot+Linux payload with no BIOS.
Unfortunately 3.1.3 is ancient; I'm going to build the more modern
Xen 4.6.x to see if I can repeat these fixes to boot into Qubes.