From: Ankur Arora Date: Tue, 6 Dec 2022 11:14:07 +0000 (+0000) Subject: i386/xen: implement HVMOP_set_param X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=708daf5f1686b8541dfdae38ae69d36b13471b2f;p=users%2Fdwmw2%2Fqemu.git i386/xen: implement HVMOP_set_param This is the hook for adding the HVM_PARAM_CALLBACK_IRQ parameter in a subsequent commit. Signed-off-by: Ankur Arora Signed-off-by: Joao Martins [dwmw2: Split out from another commit] Signed-off-by: David Woodhouse --- diff --git a/target/i386/kvm/xen-emu.c b/target/i386/kvm/xen-emu.c index d56d63b02e..a27facb90f 100644 --- a/target/i386/kvm/xen-emu.c +++ b/target/i386/kvm/xen-emu.c @@ -486,6 +486,36 @@ static bool kvm_xen_hcall_memory_op(struct kvm_xen_exit *exit, X86CPU *cpu, return true; } +static bool handle_set_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) { + default: + return false; + } + +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) { @@ -527,6 +557,9 @@ static bool kvm_xen_hcall_hvm_op(struct kvm_xen_exit *exit, X86CPU *cpu, ret = -ENOSYS; break; + case HVMOP_set_param: + return handle_set_param(exit, cpu, arg); + default: return false; }