VMCALLからの復帰

こんなコードをusr.sbin/bhyve/fbsdrun.cへ足してみる:

@@ -463,9 +463,10 @@
        intr = (rip - 0x400) / 0x4;
        printf("intr=%"PRIu64"\n", intr);
 
-       return (VMEXIT_ABORT);
-
-       return (VMEXIT_RESTART);
+       if (intr == 0x14)
+               return (VMEXIT_ABORT);
+       else
+               return (VMEXIT_CONTINUE);
 }

(svn diff -r238884:238885 https://socsvn.freebsd.org/socsvn/soc2012/syuu/bhyve-bios)

$ sudo bhyvebiosload -d ~/testbootsect/testbootsect.bin  -m 128 -M 256 vm0 
$ sudo bhyve -b -m 128 -M 256 vm0
VMCALL handled
rsp=7ff8 rip=44c rax=1 rbx=2 rcx=3 rdx=4
intr=19
VMCALL handled
rsp=7ff8 rip=450 rax=1 rbx=2 rcx=3 rdx=4
intr=20

すると、VMCALLから復帰して2つ目のint命令を実行、再びVMCALLでBHyVeへ戻ってこれた。
これでBIOSエミュレーションがBHyVeのユーザランド上へ構築できるようになったはず。