mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
KVM: SVM: Add helper to deduplicate code for getting AVIC backing page
Add a helper to get the physical address of the AVIC backing page, both to deduplicate code and to prepare for getting the address directly from apic->regs, at which point it won't be all that obvious that the address in question is what SVM calls the AVIC backing page. No functional change intended. Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com> Tested-by: Sairaj Kodilkar <sarunkod@amd.com> Reviewed-by: Naveen N Rao (AMD) <naveen@kernel.org> Link: https://lore.kernel.org/r/20250611224604.313496-12-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
2e002ddc89
commit
3338c639da
|
|
@ -235,14 +235,18 @@ int avic_vm_init(struct kvm *kvm)
|
|||
return err;
|
||||
}
|
||||
|
||||
static phys_addr_t avic_get_backing_page_address(struct vcpu_svm *svm)
|
||||
{
|
||||
return __sme_set(page_to_phys(svm->avic_backing_page));
|
||||
}
|
||||
|
||||
void avic_init_vmcb(struct vcpu_svm *svm, struct vmcb *vmcb)
|
||||
{
|
||||
struct kvm_svm *kvm_svm = to_kvm_svm(svm->vcpu.kvm);
|
||||
phys_addr_t bpa = __sme_set(page_to_phys(svm->avic_backing_page));
|
||||
phys_addr_t lpa = __sme_set(page_to_phys(kvm_svm->avic_logical_id_table_page));
|
||||
phys_addr_t ppa = __sme_set(page_to_phys(kvm_svm->avic_physical_id_table_page));
|
||||
|
||||
vmcb->control.avic_backing_page = bpa;
|
||||
vmcb->control.avic_backing_page = avic_get_backing_page_address(svm);
|
||||
vmcb->control.avic_logical_id = lpa;
|
||||
vmcb->control.avic_physical_id = ppa;
|
||||
vmcb->control.avic_vapic_bar = APIC_DEFAULT_PHYS_BASE;
|
||||
|
|
@ -306,7 +310,7 @@ static int avic_init_backing_page(struct kvm_vcpu *vcpu)
|
|||
BUILD_BUG_ON(__PHYSICAL_MASK_SHIFT >
|
||||
fls64(AVIC_PHYSICAL_ID_ENTRY_BACKING_PAGE_MASK));
|
||||
|
||||
new_entry = __sme_set(page_to_phys(svm->avic_backing_page)) |
|
||||
new_entry = avic_get_backing_page_address(svm) |
|
||||
AVIC_PHYSICAL_ID_ENTRY_VALID_MASK;
|
||||
WRITE_ONCE(*entry, new_entry);
|
||||
|
||||
|
|
@ -846,7 +850,7 @@ get_pi_vcpu_info(struct kvm *kvm, struct kvm_kernel_irq_routing_entry *e,
|
|||
pr_debug("SVM: %s: use GA mode for irq %u\n", __func__,
|
||||
irq.vector);
|
||||
*svm = to_svm(vcpu);
|
||||
vcpu_info->pi_desc_addr = __sme_set(page_to_phys((*svm)->avic_backing_page));
|
||||
vcpu_info->pi_desc_addr = avic_get_backing_page_address(*svm);
|
||||
vcpu_info->vector = irq.vector;
|
||||
|
||||
return 0;
|
||||
|
|
@ -907,7 +911,7 @@ int avic_pi_update_irte(struct kvm_kernel_irqfd *irqfd, struct kvm *kvm,
|
|||
enable_remapped_mode = false;
|
||||
|
||||
/* Try to enable guest_mode in IRTE */
|
||||
pi.base = __sme_set(page_to_phys(svm->avic_backing_page));
|
||||
pi.base = avic_get_backing_page_address(svm);
|
||||
pi.ga_tag = AVIC_GATAG(to_kvm_svm(kvm)->avic_vm_id,
|
||||
svm->vcpu.vcpu_id);
|
||||
pi.is_guest_mode = true;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user