Merge branch 'misc.namei' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux-2.6-microblaze.git] / arch / x86 / kvm / lapic.c
index a24ce8f..76fb009 100644 (file)
@@ -2268,9 +2268,6 @@ void kvm_lapic_set_base(struct kvm_vcpu *vcpu, u64 value)
        u64 old_value = vcpu->arch.apic_base;
        struct kvm_lapic *apic = vcpu->arch.apic;
 
-       if (!apic)
-               value |= MSR_IA32_APICBASE_BSP;
-
        vcpu->arch.apic_base = value;
 
        if ((old_value ^ value) & MSR_IA32_APICBASE_ENABLE)
@@ -2326,6 +2323,13 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu, bool init_event)
        struct kvm_lapic *apic = vcpu->arch.apic;
        int i;
 
+       if (!init_event) {
+               vcpu->arch.apic_base = APIC_DEFAULT_PHYS_BASE |
+                                      MSR_IA32_APICBASE_ENABLE;
+               if (kvm_vcpu_is_reset_bsp(vcpu))
+                       vcpu->arch.apic_base |= MSR_IA32_APICBASE_BSP;
+       }
+
        if (!apic)
                return;
 
@@ -2333,8 +2337,8 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu, bool init_event)
        hrtimer_cancel(&apic->lapic_timer.timer);
 
        if (!init_event) {
-               kvm_lapic_set_base(vcpu, APIC_DEFAULT_PHYS_BASE |
-                                        MSR_IA32_APICBASE_ENABLE);
+               apic->base_address = APIC_DEFAULT_PHYS_BASE;
+
                kvm_apic_set_xapic_id(apic, vcpu->vcpu_id);
        }
        kvm_apic_set_version(apic->vcpu);
@@ -2477,11 +2481,6 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu, int timer_advance_ns)
                lapic_timer_advance_dynamic = false;
        }
 
-       /*
-        * APIC is created enabled. This will prevent kvm_lapic_set_base from
-        * thinking that APIC state has changed.
-        */
-       vcpu->arch.apic_base = MSR_IA32_APICBASE_ENABLE;
        static_branch_inc(&apic_sw_disabled.key); /* sw disabled at reset */
        kvm_iodevice_init(&apic->dev, &apic_mmio_ops);