mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	KVM: x86: Update APICv on APIC reset
In kvm_apic_set_state() we update the hardware virtualized APIC after the full APIC state has been overwritten. Do the same, when the full APIC state has been reset in kvm_lapic_reset(). This updates some hardware state that was previously forgotten, as far as I can tell. Also, this allows removing some APIC-related reset code from vmx_vcpu_reset(). Signed-off-by: Jan H. Schönherr <jschoenh@amazon.de> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									a4888486c5
								
							
						
					
					
						commit
						4191db26b7
					
				
					 2 changed files with 5 additions and 5 deletions
				
			
		| 
						 | 
					@ -1992,6 +1992,11 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu, bool init_event)
 | 
				
			||||||
				vcpu->arch.apic_base | MSR_IA32_APICBASE_BSP);
 | 
									vcpu->arch.apic_base | MSR_IA32_APICBASE_BSP);
 | 
				
			||||||
	vcpu->arch.pv_eoi.msr_val = 0;
 | 
						vcpu->arch.pv_eoi.msr_val = 0;
 | 
				
			||||||
	apic_update_ppr(apic);
 | 
						apic_update_ppr(apic);
 | 
				
			||||||
 | 
						if (vcpu->arch.apicv_active) {
 | 
				
			||||||
 | 
							kvm_x86_ops->apicv_post_state_restore(vcpu);
 | 
				
			||||||
 | 
							kvm_x86_ops->hwapic_irr_update(vcpu, -1);
 | 
				
			||||||
 | 
							kvm_x86_ops->hwapic_isr_update(vcpu, -1);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vcpu->arch.apic_arb_prio = 0;
 | 
						vcpu->arch.apic_arb_prio = 0;
 | 
				
			||||||
	vcpu->arch.apic_attention = 0;
 | 
						vcpu->arch.apic_attention = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5619,11 +5619,6 @@ static void vmx_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kvm_make_request(KVM_REQ_APIC_PAGE_RELOAD, vcpu);
 | 
						kvm_make_request(KVM_REQ_APIC_PAGE_RELOAD, vcpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (kvm_vcpu_apicv_active(vcpu)) {
 | 
					 | 
				
			||||||
		pi_clear_on(&vmx->pi_desc);
 | 
					 | 
				
			||||||
		memset(vmx->pi_desc.pir, 0, sizeof(vmx->pi_desc.pir));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (vmx->vpid != 0)
 | 
						if (vmx->vpid != 0)
 | 
				
			||||||
		vmcs_write16(VIRTUAL_PROCESSOR_ID, vmx->vpid);
 | 
							vmcs_write16(VIRTUAL_PROCESSOR_ID, vmx->vpid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue