[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 49/62] i386/xen: handle HVMOP_get_param
From: |
Paolo Bonzini |
Subject: |
[PULL 49/62] i386/xen: handle HVMOP_get_param |
Date: |
Thu, 2 Mar 2023 13:30:16 +0100 |
From: Joao Martins <joao.m.martins@oracle.com>
Which is used to fetch xenstore PFN and port to be used
by the guest. This is preallocated by the toolstack when
guest will just read those and use it straight away.
Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Paul Durrant <paul@xen.org>
---
target/i386/kvm/xen-emu.c | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/target/i386/kvm/xen-emu.c b/target/i386/kvm/xen-emu.c
index 75bcf7b6306f..d2c88ef0d93f 100644
--- a/target/i386/kvm/xen-emu.c
+++ b/target/i386/kvm/xen-emu.c
@@ -765,6 +765,42 @@ out:
return true;
}
+static bool handle_get_param(struct kvm_xen_exit *exit, X86CPU *cpu,
+ uint64_t arg)
+{
+ CPUState *cs = CPU(cpu);
+ struct xen_hvm_param hp;
+ int err = 0;
+
+ /* No need for 32/64 compat handling */
+ qemu_build_assert(sizeof(hp) == 16);
+
+ if (kvm_copy_from_gva(cs, arg, &hp, sizeof(hp))) {
+ err = -EFAULT;
+ goto out;
+ }
+
+ if (hp.domid != DOMID_SELF && hp.domid != xen_domid) {
+ err = -ESRCH;
+ goto out;
+ }
+
+ switch (hp.index) {
+ case HVM_PARAM_STORE_PFN:
+ hp.value = XEN_SPECIAL_PFN(XENSTORE);
+ break;
+ default:
+ return false;
+ }
+
+ if (kvm_copy_to_gva(cs, arg, &hp, sizeof(hp))) {
+ err = -EFAULT;
+ }
+out:
+ exit->u.hcall.result = err;
+ return true;
+}
+
static int kvm_xen_hcall_evtchn_upcall_vector(struct kvm_xen_exit *exit,
X86CPU *cpu, uint64_t arg)
{
@@ -809,6 +845,9 @@ static bool kvm_xen_hcall_hvm_op(struct kvm_xen_exit *exit,
X86CPU *cpu,
case HVMOP_set_param:
return handle_set_param(exit, cpu, arg);
+ case HVMOP_get_param:
+ return handle_get_param(exit, cpu, arg);
+
default:
return false;
}
--
2.39.1
- [PULL 28/62] i386/xen: Add support for Xen event channel delivery to vCPU, (continued)
- [PULL 28/62] i386/xen: Add support for Xen event channel delivery to vCPU, Paolo Bonzini, 2023/03/02
- [PULL 31/62] hw/xen: Implement EVTCHNOP_unmask, Paolo Bonzini, 2023/03/02
- [PULL 38/62] hw/xen: Implement EVTCHNOP_reset, Paolo Bonzini, 2023/03/02
- [PULL 39/62] i386/xen: add monitor commands to test event injection, Paolo Bonzini, 2023/03/02
- [PULL 58/62] kvm/i386: Add xen-evtchn-max-pirq property, Paolo Bonzini, 2023/03/02
- [PULL 29/62] hw/xen: Implement EVTCHNOP_status, Paolo Bonzini, 2023/03/02
- [PULL 41/62] hw/xen: Support HVM_PARAM_CALLBACK_TYPE_PCI_INTX callback, Paolo Bonzini, 2023/03/02
- [PULL 22/62] i386/xen: handle VCPUOP_register_vcpu_time_info, Paolo Bonzini, 2023/03/02
- [PULL 42/62] kvm/i386: Add xen-gnttab-max-frames property, Paolo Bonzini, 2023/03/02
- [PULL 45/62] i386/xen: Implement HYPERVISOR_grant_table_op and GNTTABOP_[gs]et_verson, Paolo Bonzini, 2023/03/02
- [PULL 49/62] i386/xen: handle HVMOP_get_param,
Paolo Bonzini <=
- [PULL 62/62] Makefile: qemu-bundle is a directory, Paolo Bonzini, 2023/03/02
- [PULL 23/62] i386/xen: handle VCPUOP_register_runstate_memory_area, Paolo Bonzini, 2023/03/02
- [PULL 24/62] i386/xen: implement HYPERVISOR_event_channel_op, Paolo Bonzini, 2023/03/02
- [PULL 33/62] hw/xen: Implement EVTCHNOP_bind_ipi, Paolo Bonzini, 2023/03/02
- [PULL 30/62] hw/xen: Implement EVTCHNOP_close, Paolo Bonzini, 2023/03/02
- [PULL 35/62] hw/xen: Implement EVTCHNOP_alloc_unbound, Paolo Bonzini, 2023/03/02
- [PULL 37/62] hw/xen: Implement EVTCHNOP_bind_vcpu, Paolo Bonzini, 2023/03/02
- [PULL 40/62] hw/xen: Support HVM_PARAM_CALLBACK_TYPE_GSI callback, Paolo Bonzini, 2023/03/02
- [PULL 44/62] hw/xen: Support mapping grant frames, Paolo Bonzini, 2023/03/02
- [PULL 51/62] hw/xen: Add xen_xenstore device for xenstore emulation, Paolo Bonzini, 2023/03/02