Re: PVH boot with qemu

Manuel Bouyer <[email protected]>
Newsgroups gmane.os.netbsd.devel.kernel
Message-ID <[email protected]>
On Mon, Dec 11, 2023 at 08:26:01AM +0100, Emile `iMil' Heitor wrote:
> 
> Here is a clean(er) patch https://github.com/NetBSD/src/compare/trunk...NetBSDfr:NetBSD-src:GENPVH
> 
> Rationale
> 
> Like previously explained, locore.S expects start_info being passed by the
> calling hypervisor on %ebx to be located at the end of the symbol table.
> Qemu and Firecracker don't follow this rule which is not part of the
> official Xen ABI https://xenbits.xen.org/docs/unstable/misc/pvh.html
> 
> What our patch first does is make memory mapping loops happy by copying
> the start_info structure where it's expected.
> After that, memory locations and boot parameters are correctly found and
> boot can proceed.
> Of course, the hypervisor not being Xen, a lot of Xen-related code is
> useless, hence the new VM_GUEST_GENPVH (for Generic PVH) vm_guest type,
> as first suggested by Manuel, and a new kernel option, GENPVH.
> I kept the Xen code structure as it was and changed very little code, only
> some || vm_guest == VM_GUEST_GENPVH and a couple #ifndef GENPVH.
> 
> In order to build a Generic PVH kernel, the following options are needed
> 
> #Xen PV support for PVH and HVM guests
> options         XENPVHVM
> options         XEN
> # Generic PVH support (qemu, firecracker...)
> options         GENPVH
> 
> I've added https://github.com/NetBSDfr/NetBSD-src/blob/GENPVH/sys/arch/amd64/conf/MICROVM
> as an example config file.
> I'll probably end up ditching XENPVHVM and XEN but there's still quite
> some work in there.
> 
> We still need to check if we didn't break anything on Xen side and test
> Firecracker. FYI qemu-system-x86_64 also works with the "microvm"
> machine type.
> 
> Feedback very welcome.


Hello,
I don't understand this part:


#ifndef GENPVH
	/* get a page for HYPERVISOR_shared_info */
	addl	$PAGE_SIZE, %ebx
	addl	$PGOFSET,%ebx
	andl	$~PGOFSET,%ebx
	movl	$RELOC(HYPERVISOR_shared_info_pa),%ebp
	movl	%ebx,(%ebp)
	movl	$0,4(%ebp)
#endif

How can this work on Xen when GENPVH is defined ?
Shouldn't this be made conditional on vm_guest == VM_GUEST_XENPVH ?

-- 
Manuel Bouyer <[email protected]>
     NetBSD: 26 ans d'experience feront toujours la difference
--
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.