kqemu patch for CURRENT/10-STABLE (was Re: Linux on BHyVe in 10.0-RELEASE )

Shteryana Shopova syrinx at FreeBSD.org
Sun Feb 9 07:30:53 UTC 2014


Hi,

Ok, I seem to have sent an earlier and not-well-though-out version of
the patch - attaching the correct one now (I dug into this a couple of
months ago and needed some time to remember the details). I tried it
with your test setup and - module loads/unloads cleanly, but will
freeze the vbox FreeBSD 10 host if I try to run openbsd 5.5 VM (my
FreeBSD current host freezes too if I try to run a VirtualBox VM with
vmm.ko and nmdm.ko modules loaded, not sure why).

I tested it again on a FreeBSD current host running on real hardware
with a number of VMs/OSes and the results I got are  -

* Ubuntu-12.04.4 both amd64 and i386 fail to boot from CD - get stuck
somewhere after a purple screen
* Debian 7.3.0 both amd64 and i386 boot and install fine from  CD,
booting from hard disk gets stuck at GRUB though
* FreeBSD 10 i386 boots from CD and disk, however is very slow
(installation took literally several hours)
* pfSense 2.1 i386 works fine
* OpenBSD 5.5 i386 boots and installs from CD, boots from disk after
installation only when ACPI is disabled at boot
* OpenBSD 5.5 amd64 boots and installs from CD, booting the installed
OS from disk however crashes qemu late around starting sndiod with

RAX=0000000000000000 RBX=00001a938686c340 RCX=00001a91832031e5
RDX=00001a938dc82b64
RSI=0000000000000012 RDI=00001a938686c350 RBP=00001a938dfb6f60
RSP=00007f7ffffebf30
R8 =00001a938dfb6f60 R9 =000000000000000d R10=0000000000000000
R11=0000000000000000
R12=00001a91832031e5 R13=0000000000000012 R14=00001a9392ff4000
R15=0000000000000000
RIP=00001a938db21c7d RFL=00010246 [---Z-P-] CPL=3 II=0 A20=1 SMM=0
HLT=0
ES =0023 0000000000000000 ffffbfff 00aff300 DPL=3 DS16 [-WA]
CS =002b 0000000000000000 ffffbfff 00affb00 DPL=3 CS64 [-RA]
SS =0023 0000000000000000 ffffbfff 00aff300 DPL=3 DS16 [-WA]
DS =0023 0000000000000000 ffffbfff 00aff300 DPL=3 DS16 [-WA]
FS =0023 0000000000000000 ffffbfff 00aff300 DPL=3 DS16 [-WA]
GS =0023 0000000000000000 ffffbfff 00aff300 DPL=3 DS16 [-WA]
LDT=0000 0000000000000000 00000000 00008200 DPL=0 LDT
TR =0030 ffff800000011000 00000067 00008900 DPL=0 TSS64-avl
GDT=     ffff800000011068 0000003f
IDT=     ffff800000010000 00000fff
CR0=e001003b CR2=00001a938686c348 CR3=000000003f498000 CR4=000007b0
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000
DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
Unsupported return value: 0xffffffff

and

kqemu: closed by pid=26323
kqemu: aborting: Unexpected exception 0x0d in monitor space

in dmesg. This however looks like a problem with kqemu-kmod not
related to the KPI changes. I tested this with kqemu-kmod-devel with
the patch applied and qemu-0.11.1_13 since obviously KQEMU support was
dropped in later versions. Considering that kqemu support was dropped
in newer versions of qemu however, the patch is probably useless and
kqemu-kmod ports should just be marked obsolete.

cheers,
Shteryana

On Thu, Feb 6, 2014 at 10:12 PM, Juergen Lock <nox at jelal.kn-bremen.de> wrote:

> The commit does look relevant but testing your patch on a 10.0-RC1
> vbox guest (it's what I had available) with the RC1 iso like so:
>
>         # kldload kqemu
>         % qemu-system-x86_64 -cdrom /dev/cd0 -m 512 -curses -enable-kqemu
>
> panics like this:
>
> ----------------------------------------------------------
> 10rc1amd64mbr2 dumped core - see /var/crash/vmcore.1
>
-------------- next part --------------
--- kqemu-freebsd.c~	2014-02-07 20:00:33.656255395 +0200
+++ kqemu-freebsd.c	2014-02-08 08:43:19.209100708 +0200
@@ -105,17 +105,29 @@
  */
 struct kqemu_page *CDECL kqemu_alloc_zeroed_page(unsigned long *ppage_index)
 {
+#if __FreeBSD_version < 1000030
     pmap_t pmap;
+#endif
     vm_offset_t va;
     vm_paddr_t pa;
 
+#if __FreeBSD_version >= 1000030
+    va = kmem_malloc(kernel_arena, PAGE_SIZE, M_ZERO | M_WAITOK);
+#else
     va = kmem_alloc(kernel_map, PAGE_SIZE);
+#endif
+
     if (va == 0) {
 	kqemu_log("kqemu_alloc_zeroed_page: NULL\n");
 	return NULL;
     }
+
+#if __FreeBSD_version >= 1000030
+    pa = vtophys(va);
+#else
     pmap = vm_map_pmap(kernel_map);
     pa = pmap_extract(pmap, va);
+#endif
     /* kqemu_log("kqemu_alloc_zeroed_page: %08x\n", pa); */
     *ppage_index = pa >> PAGE_SHIFT;
     return (struct kqemu_page *)va;
@@ -125,7 +137,11 @@
 {
     if (kqemu_debug > 0)
     	kqemu_log("kqemu_free_page(%p)\n", page);
+#if __FreeBSD_version >= 1000030
+    kmem_free(kernel_arena, (vm_offset_t) page, PAGE_SIZE);
+#else
     kmem_free(kernel_map, (vm_offset_t) page, PAGE_SIZE);
+#endif
 }
 
 /* return kernel address of the physical page page_index */


More information about the freebsd-virtualization mailing list