]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
i386/xen_evtchn: vcpu affinity update support
authorJoao Martins <joao.m.martins@oracle.com>
Thu, 22 Nov 2018 20:19:18 +0000 (15:19 -0500)
committerJoao Martins <joao.m.martins@oracle.com>
Tue, 19 Feb 2019 14:00:57 +0000 (09:00 -0500)
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
target/i386/xen_evtchn.c

index 6fadd37e7f4ecc9448079d819ccffca7066a094b..23df4a813da1f9bf9e9f032bbe180ed2b24c492e 100644 (file)
@@ -275,6 +275,12 @@ static int kvm_clear_xen_event(KVMState *s, XenEvtChn *e)
     return __kvm_set_xen_event(s, e, NULL, KVM_XEN_EVENTFD_DEASSIGN);
 }
 
+static int kvm_update_xen_event(KVMState *s, XenEvtChn *e,
+                                         EventNotifier *n)
+{
+    return __kvm_set_xen_event(s, e, n, KVM_XEN_EVENTFD_UPDATE);
+}
+
 int kvm_xen_evtchn_bind_ipi(X86CPU *cpu, void *arg)
 {
     struct evtchn_bind_ipi *out = arg;
@@ -437,6 +443,7 @@ int kvm_xen_evtchn_bind_vcpu(X86CPU *cpu, void *arg)
     struct evtchn_bind_vcpu bind_vcpu;
     struct XenEvtChn *evtchn;
     CPUState *dest;
+    int r;
 
     memcpy(&bind_vcpu, arg, sizeof(bind_vcpu));
 
@@ -450,8 +457,17 @@ int kvm_xen_evtchn_bind_vcpu(X86CPU *cpu, void *arg)
         return -ENOENT;
     }
 
+    if (evtchn->type != XEN_EVTCHN_TYPE_UNBOUND &&
+        evtchn->type != XEN_EVTCHN_TYPE_INTERDOM)
+        return -EINVAL;
+
     evtchn->notify_vcpu_id = bind_vcpu.vcpu;
 
+    r = kvm_update_xen_event(dest->kvm_state, evtchn, NULL);
+    if (r == -ENOENT) {
+        qemu_log_mask(LOG_TRACE, "port %d not offloaded\n", bind_vcpu.port);
+    }
+
     return 0;
 }