投稿

11月, 2018の投稿を表示しています

(続)kvm にハイパーコールを追加する

この記事の続き前回の記事では kvm にハイパーコールのハンドラを記述していたが,様々な事情でホストのユーザーランドでハンドリングしたいかもしれない。 今回はそのような場合の対処を書く。カーネルへの変更ベースのコードは Linux 4.18 ですまずはおさらい。このように vmcall の番号とハンドラを追加する。diff --git a/include/uapi/linux/kvm_para.h b/include/uapi/linux/kvm_para.h index dcf629dd2889..e0f8b786a62a 100644 --- a/include/uapi/linux/kvm_para.h +++ b/include/uapi/linux/kvm_para.h @@ -26,6 +26,7 @@ #define KVM_HC_MIPS_EXIT_VM 7 #define KVM_HC_MIPS_CONSOLE_OUTPUT 8 #define KVM_HC_CLOCK_PAIRING 9 +#define KVM_HC_TEST 100 /* * hypercalls use architecture specific diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 2b812b3c5088..5158880899f0 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6740,6 +6740,10 @@ int kvm_emulate_hypercall(struct kvm_vcpu *vcpu) ret = kvm_pv_clock_pairing(vcpu, a0, a1); break; #endif + case KVM_HC_TEST: + ret = 0; + some_process(); + vcpu->run->exit_reason = K…