aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/hvm/hvm.c
diff options
context:
space:
mode:
Diffstat (limited to 'xen/arch/x86/hvm/hvm.c')
-rw-r--r--xen/arch/x86/hvm/hvm.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 6c6b0db13b..64116f2bf3 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -1636,6 +1636,9 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, unsigned int *ebx,
{
struct vcpu *v = current;
+ if ( cpuid_viridian_leaves(input, eax, ebx, ecx, edx) )
+ return;
+
if ( cpuid_hypervisor_leaves(input, eax, ebx, ecx, edx) )
return;
@@ -1954,6 +1957,9 @@ int hvm_do_hypercall(struct cpu_user_regs *regs)
break;
}
+ if ( (eax & 0x80000000) && is_viridian_domain(curr->domain) )
+ return viridian_hypercall(regs);
+
if ( (eax >= NR_hypercalls) || !hvm_hypercall32_table[eax] )
{
regs->eax = -ENOSYS;
@@ -2380,6 +2386,10 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
if ( a.value > HVMPTM_one_missed_tick_pending )
rc = -EINVAL;
break;
+ case HVM_PARAM_VIRIDIAN:
+ if ( a.value > 1 )
+ rc = -EINVAL;
+ break;
case HVM_PARAM_IDENT_PT:
rc = -EPERM;
if ( !IS_PRIV(current->domain) )