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 <ankur.a.arora@oracle.com> Signed-off-by: Joao Martins <joao.m.martins@oracle.com> [dwmw2: Split out from another commit] Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Reviewed-by: Paul Durrant <paul@xen.org>
This commit is contained in:
parent
105b47fdf2
commit
5dbcd01a8d
|
@ -489,6 +489,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)
|
||||
{
|
||||
|
@ -530,6 +560,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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue