aboutsummaryrefslogtreecommitdiff
path: root/xen/arch
diff options
context:
space:
mode:
Diffstat (limited to 'xen/arch')
-rw-r--r--xen/arch/x86/hvm/hvm.c6
-rw-r--r--xen/arch/x86/hvm/vlapic.c6
2 files changed, 9 insertions, 3 deletions
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 8f49b440dd..51ffc90a57 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -2217,8 +2217,7 @@ int hvm_vcpu_initialise(struct vcpu *v)
goto fail1;
/* NB: vlapic_init must be called before hvm_funcs.vcpu_initialise */
- if ( is_hvm_vcpu(v) )
- rc = vlapic_init(v);
+ rc = vlapic_init(v);
if ( rc != 0 ) /* teardown: vlapic_destroy */
goto fail2;
@@ -4483,7 +4482,8 @@ int hvm_msr_write_intercept(unsigned int msr, uint64_t msr_content)
break;
case MSR_IA32_APICBASE:
- if ( !vlapic_msr_set(vcpu_vlapic(v), msr_content) )
+ if ( unlikely(is_pvh_vcpu(v)) ||
+ !vlapic_msr_set(vcpu_vlapic(v), msr_content) )
goto gp_fault;
break;
diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c
index 0b7b607de4..72b6509c5e 100644
--- a/xen/arch/x86/hvm/vlapic.c
+++ b/xen/arch/x86/hvm/vlapic.c
@@ -1429,6 +1429,12 @@ int vlapic_init(struct vcpu *v)
HVM_DBG_LOG(DBG_LEVEL_VLAPIC, "%d", v->vcpu_id);
+ if ( is_pvh_vcpu(v) )
+ {
+ vlapic->hw.disabled = VLAPIC_HW_DISABLED;
+ return 0;
+ }
+
vlapic->pt.source = PTSRC_lapic;
if (vlapic->regs_page == NULL)