KVM: x86: Introducing kvm_x86_ops.apicv_post_state_restore
Adding kvm_x86_ops hooks to allow APICv to do post state restore. This is required to support VM save and restore feature. Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
18f40c53e1
commit
be8ca170ed
@ -1004,6 +1004,7 @@ struct kvm_x86_ops {
|
|||||||
|
|
||||||
int (*update_pi_irte)(struct kvm *kvm, unsigned int host_irq,
|
int (*update_pi_irte)(struct kvm *kvm, unsigned int host_irq,
|
||||||
uint32_t guest_irq, bool set);
|
uint32_t guest_irq, bool set);
|
||||||
|
void (*apicv_post_state_restore)(struct kvm_vcpu *vcpu);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kvm_arch_async_pf {
|
struct kvm_arch_async_pf {
|
||||||
|
@ -1961,6 +1961,8 @@ void kvm_apic_post_state_restore(struct kvm_vcpu *vcpu,
|
|||||||
1 : count_vectors(apic->regs + APIC_ISR);
|
1 : count_vectors(apic->regs + APIC_ISR);
|
||||||
apic->highest_isr_cache = -1;
|
apic->highest_isr_cache = -1;
|
||||||
if (vcpu->arch.apicv_active) {
|
if (vcpu->arch.apicv_active) {
|
||||||
|
if (kvm_x86_ops->apicv_post_state_restore)
|
||||||
|
kvm_x86_ops->apicv_post_state_restore(vcpu);
|
||||||
kvm_x86_ops->hwapic_irr_update(vcpu,
|
kvm_x86_ops->hwapic_irr_update(vcpu,
|
||||||
apic_find_highest_irr(apic));
|
apic_find_highest_irr(apic));
|
||||||
kvm_x86_ops->hwapic_isr_update(vcpu->kvm,
|
kvm_x86_ops->hwapic_isr_update(vcpu->kvm,
|
||||||
|
@ -4834,6 +4834,15 @@ static void svm_sched_in(struct kvm_vcpu *vcpu, int cpu)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void avic_post_state_restore(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
if (avic_handle_apic_id_update(vcpu) != 0)
|
||||||
|
return;
|
||||||
|
if (avic_handle_dfr_update(vcpu) != 0)
|
||||||
|
return;
|
||||||
|
avic_handle_ldr_update(vcpu);
|
||||||
|
}
|
||||||
|
|
||||||
static struct kvm_x86_ops svm_x86_ops = {
|
static struct kvm_x86_ops svm_x86_ops = {
|
||||||
.cpu_has_kvm_support = has_svm,
|
.cpu_has_kvm_support = has_svm,
|
||||||
.disabled_by_bios = is_disabled,
|
.disabled_by_bios = is_disabled,
|
||||||
@ -4914,6 +4923,7 @@ static struct kvm_x86_ops svm_x86_ops = {
|
|||||||
.sync_pir_to_irr = svm_sync_pir_to_irr,
|
.sync_pir_to_irr = svm_sync_pir_to_irr,
|
||||||
.hwapic_irr_update = svm_hwapic_irr_update,
|
.hwapic_irr_update = svm_hwapic_irr_update,
|
||||||
.hwapic_isr_update = svm_hwapic_isr_update,
|
.hwapic_isr_update = svm_hwapic_isr_update,
|
||||||
|
.apicv_post_state_restore = avic_post_state_restore,
|
||||||
|
|
||||||
.set_tss_addr = svm_set_tss_addr,
|
.set_tss_addr = svm_set_tss_addr,
|
||||||
.get_tdp_level = get_npt_level,
|
.get_tdp_level = get_npt_level,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user