diff options
Diffstat (limited to 'xen/arch/x86/hvm/hvm.c')
-rw-r--r-- | xen/arch/x86/hvm/hvm.c | 10 |
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) ) |