From: Joao Martins Date: Thu, 6 Sep 2018 10:52:01 +0000 (-0400) Subject: i386/xen: handle EVTCHNOP_bind_vcpu X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=f484d8d7788b7871430eab9636998114ff04fa83;p=users%2Fdwmw2%2Fqemu.git i386/xen: handle EVTCHNOP_bind_vcpu Signed-off-by: Joao Martins --- diff --git a/target/i386/xen.c b/target/i386/xen.c index 8f523b58b8..1916ddcb98 100644 --- a/target/i386/xen.c +++ b/target/i386/xen.c @@ -748,6 +748,9 @@ static int kvm_xen_hcall_evtchn_op(struct kvm_xen_exit *exit, X86CPU *cpu, case EVTCHNOP_alloc_unbound: err = kvm_xen_evtchn_alloc_unbound(cpu, eop); break; + case EVTCHNOP_bind_vcpu: + err = kvm_xen_evtchn_bind_vcpu(cpu, eop); + break; case EVTCHNOP_close: err = kvm_xen_evtchn_close(cpu, eop); break; diff --git a/target/i386/xen_evtchn.c b/target/i386/xen_evtchn.c index 4e19bbc554..6fadd37e7f 100644 --- a/target/i386/xen_evtchn.c +++ b/target/i386/xen_evtchn.c @@ -432,6 +432,29 @@ int kvm_xen_evtchn_alloc_unbound(X86CPU *cpu, void *arg) return 0; } +int kvm_xen_evtchn_bind_vcpu(X86CPU *cpu, void *arg) +{ + struct evtchn_bind_vcpu bind_vcpu; + struct XenEvtChn *evtchn; + CPUState *dest; + + memcpy(&bind_vcpu, arg, sizeof(bind_vcpu)); + + dest = qemu_get_cpu(bind_vcpu.vcpu); + if (!dest) { + return -EINVAL; + } + + evtchn = evtchn_from_port(bind_vcpu.port); + if (!evtchn) { + return -ENOENT; + } + + evtchn->notify_vcpu_id = bind_vcpu.vcpu; + + return 0; +} + int kvm_xen_evtchn_close(X86CPU *cpu, void *arg) { struct evtchn_close close; diff --git a/target/i386/xen_evtchn.h b/target/i386/xen_evtchn.h index dce83d112e..97b5d6f097 100644 --- a/target/i386/xen_evtchn.h +++ b/target/i386/xen_evtchn.h @@ -20,6 +20,7 @@ int kvm_xen_evtchn_init(XenState *xen_state); int kvm_xen_evtchn_bind_ipi(X86CPU *cpu, void *arg); int kvm_xen_evtchn_bind_virq(X86CPU *cpu, void *arg); int kvm_xen_evtchn_bind_interdomain(X86CPU *cpu, void *arg); +int kvm_xen_evtchn_bind_vcpu(X86CPU *cpu, void *arg); int kvm_xen_evtchn_alloc_unbound(X86CPU *cpu, void *arg); int kvm_xen_evtchn_close(X86CPU *cpu, void *arg); int kvm_xen_evtchn_unmask(X86CPU *cpu, void *arg);