[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190220201609.28290-31-joao.m.martins@oracle.com>
Date: Wed, 20 Feb 2019 20:16:00 +0000
From: Joao Martins <joao.m.martins@...cle.com>
To: kvm@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: Ankur Arora <ankur.a.arora@...cle.com>,
Boris Ostrovsky <boris.ostrovsky@...cle.com>,
Joao Martins <joao.m.martins@...cle.com>,
Paolo Bonzini <pbonzini@...hat.com>,
Radim Krčmář <rkrcmar@...hat.com>,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>, Borislav Petkov <bp@...en8.de>,
"H. Peter Anvin" <hpa@...or.com>, x86@...nel.org
Subject: [PATCH RFC 30/39] KVM: x86/xen: add additional evtchn ops
From: Ankur Arora <ankur.a.arora@...cle.com>
Add support for changing event channel affinity (EVTCHNOP_bind_vcpu)
and closing an event (EVTCHNOP_close).
We just piggy back on the functionality already implemented for
guest event channels.
Signed-off-by: Ankur Arora <ankur.a.arora@...cle.com>
---
arch/x86/kvm/xen.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/arch/x86/kvm/xen.c b/arch/x86/kvm/xen.c
index 1988ed3866bf..666dd6d1f5a3 100644
--- a/arch/x86/kvm/xen.c
+++ b/arch/x86/kvm/xen.c
@@ -2188,6 +2188,38 @@ static int shim_hcall_evtchn(int op, void *p)
ret = shim_hcall_evtchn_send(xen_shim, send);
break;
}
+ case EVTCHNOP_bind_virq: {
+ struct evtchn_bind_virq *un;
+
+ un = (struct evtchn_bind_virq *) p;
+
+ evt.fd = -1;
+ evt.port = 0;
+ evt.type = XEN_EVTCHN_TYPE_VIRQ;
+ ret = kvm_xen_eventfd_assign(NULL, &xen_shim->port_to_evt,
+ &xen_shim->xen_lock, &evt);
+ un->port = evt.port;
+ break;
+ }
+ case EVTCHNOP_bind_vcpu: {
+ struct evtchn_bind_vcpu *bind_vcpu;
+
+ bind_vcpu = (struct evtchn_bind_vcpu *) p;
+
+ evt.port = bind_vcpu->port;
+ evt.vcpu = bind_vcpu->vcpu;
+ ret = kvm_xen_eventfd_update(NULL, &xen_shim->port_to_evt,
+ &xen_shim->xen_lock, &evt);
+ break;
+ }
+ case EVTCHNOP_close: {
+ struct evtchn_close *cls;
+
+ cls = (struct evtchn_close *) p;
+ ret = kvm_xen_eventfd_deassign(NULL, &xen_shim->port_to_evt,
+ &xen_shim->xen_lock, cls->port);
+ break;
+ }
default:
ret = -EINVAL;
break;
--
2.11.0
Powered by blists - more mailing lists