[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v6 48/51] i386/xen: handle HVMOP_get_param
From: |
David Woodhouse |
Subject: |
[PATCH v6 48/51] i386/xen: handle HVMOP_get_param |
Date: |
Tue, 10 Jan 2023 12:20:39 +0000 |
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>
---
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 86decbe8d3..25508e6599 100644
--- a/target/i386/kvm/xen-emu.c
+++ b/target/i386/kvm/xen-emu.c
@@ -735,6 +735,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)
{
@@ -779,6 +815,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.35.3
- Re: [PATCH v6 09/51] i386/xen: handle guest hypercalls, (continued)
- [PATCH v6 34/51] hw/xen: Implement EVTCHNOP_alloc_unbound, David Woodhouse, 2023/01/10
- [PATCH v6 21/51] i386/xen: handle VCPUOP_register_vcpu_time_info, David Woodhouse, 2023/01/10
- [PATCH v6 46/51] i386/xen: handle PV timer hypercalls, David Woodhouse, 2023/01/10
- [PATCH v6 26/51] hw/xen: Add xen_evtchn device for event channel emulation, David Woodhouse, 2023/01/10
- [PATCH v6 36/51] hw/xen: Implement EVTCHNOP_bind_vcpu, David Woodhouse, 2023/01/10
- [PATCH v6 24/51] i386/xen: implement HVMOP_set_evtchn_upcall_vector, David Woodhouse, 2023/01/10
- [PATCH v6 33/51] hw/xen: Implement EVTCHNOP_send, David Woodhouse, 2023/01/10
- [PATCH v6 48/51] i386/xen: handle HVMOP_get_param,
David Woodhouse <=
- [PATCH v6 49/51] hw/xen: Add backend implementation of interdomain event channel support, David Woodhouse, 2023/01/10
- [PATCH v6 08/51] xen-platform: allow its creation with XEN_EMULATE mode, David Woodhouse, 2023/01/10
- [PATCH v6 27/51] i386/xen: Add support for Xen event channel delivery to vCPU, David Woodhouse, 2023/01/10
- [PATCH v6 20/51] i386/xen: handle VCPUOP_register_vcpu_info, David Woodhouse, 2023/01/10
- [PATCH v6 22/51] i386/xen: handle VCPUOP_register_runstate_memory_area, David Woodhouse, 2023/01/10
- [PATCH v6 35/51] hw/xen: Implement EVTCHNOP_bind_interdomain, David Woodhouse, 2023/01/10