|
@@ -1167,9 +1167,9 @@ static void avic_init_vmcb(struct vcpu_svm *svm)
|
|
|
{
|
|
|
struct vmcb *vmcb = svm->vmcb;
|
|
|
struct kvm_arch *vm_data = &svm->vcpu.kvm->arch;
|
|
|
- phys_addr_t bpa = page_to_phys(svm->avic_backing_page);
|
|
|
- phys_addr_t lpa = page_to_phys(vm_data->avic_logical_id_table_page);
|
|
|
- phys_addr_t ppa = page_to_phys(vm_data->avic_physical_id_table_page);
|
|
|
+ phys_addr_t bpa = __sme_set(page_to_phys(svm->avic_backing_page));
|
|
|
+ phys_addr_t lpa = __sme_set(page_to_phys(vm_data->avic_logical_id_table_page));
|
|
|
+ phys_addr_t ppa = __sme_set(page_to_phys(vm_data->avic_physical_id_table_page));
|
|
|
|
|
|
vmcb->control.avic_backing_page = bpa & AVIC_HPA_MASK;
|
|
|
vmcb->control.avic_logical_id = lpa & AVIC_HPA_MASK;
|
|
@@ -1232,8 +1232,8 @@ static void init_vmcb(struct vcpu_svm *svm)
|
|
|
set_intercept(svm, INTERCEPT_MWAIT);
|
|
|
}
|
|
|
|
|
|
- control->iopm_base_pa = iopm_base;
|
|
|
- control->msrpm_base_pa = __pa(svm->msrpm);
|
|
|
+ control->iopm_base_pa = __sme_set(iopm_base);
|
|
|
+ control->msrpm_base_pa = __sme_set(__pa(svm->msrpm));
|
|
|
control->int_ctl = V_INTR_MASKING_MASK;
|
|
|
|
|
|
init_seg(&save->es);
|
|
@@ -1377,9 +1377,9 @@ static int avic_init_backing_page(struct kvm_vcpu *vcpu)
|
|
|
return -EINVAL;
|
|
|
|
|
|
new_entry = READ_ONCE(*entry);
|
|
|
- new_entry = (page_to_phys(svm->avic_backing_page) &
|
|
|
- AVIC_PHYSICAL_ID_ENTRY_BACKING_PAGE_MASK) |
|
|
|
- AVIC_PHYSICAL_ID_ENTRY_VALID_MASK;
|
|
|
+ new_entry = __sme_set((page_to_phys(svm->avic_backing_page) &
|
|
|
+ AVIC_PHYSICAL_ID_ENTRY_BACKING_PAGE_MASK) |
|
|
|
+ AVIC_PHYSICAL_ID_ENTRY_VALID_MASK);
|
|
|
WRITE_ONCE(*entry, new_entry);
|
|
|
|
|
|
svm->avic_physical_id_cache = entry;
|
|
@@ -1647,7 +1647,7 @@ static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
|
|
|
|
|
|
svm->vmcb = page_address(page);
|
|
|
clear_page(svm->vmcb);
|
|
|
- svm->vmcb_pa = page_to_pfn(page) << PAGE_SHIFT;
|
|
|
+ svm->vmcb_pa = __sme_set(page_to_pfn(page) << PAGE_SHIFT);
|
|
|
svm->asid_generation = 0;
|
|
|
init_vmcb(svm);
|
|
|
|
|
@@ -1675,7 +1675,7 @@ static void svm_free_vcpu(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
struct vcpu_svm *svm = to_svm(vcpu);
|
|
|
|
|
|
- __free_page(pfn_to_page(svm->vmcb_pa >> PAGE_SHIFT));
|
|
|
+ __free_page(pfn_to_page(__sme_clr(svm->vmcb_pa) >> PAGE_SHIFT));
|
|
|
__free_pages(virt_to_page(svm->msrpm), MSRPM_ALLOC_ORDER);
|
|
|
__free_page(virt_to_page(svm->nested.hsave));
|
|
|
__free_pages(virt_to_page(svm->nested.msrpm), MSRPM_ALLOC_ORDER);
|
|
@@ -2335,7 +2335,7 @@ static u64 nested_svm_get_tdp_pdptr(struct kvm_vcpu *vcpu, int index)
|
|
|
u64 pdpte;
|
|
|
int ret;
|
|
|
|
|
|
- ret = kvm_vcpu_read_guest_page(vcpu, gpa_to_gfn(cr3), &pdpte,
|
|
|
+ ret = kvm_vcpu_read_guest_page(vcpu, gpa_to_gfn(__sme_clr(cr3)), &pdpte,
|
|
|
offset_in_page(cr3) + index * 8, 8);
|
|
|
if (ret)
|
|
|
return 0;
|
|
@@ -2347,7 +2347,7 @@ static void nested_svm_set_tdp_cr3(struct kvm_vcpu *vcpu,
|
|
|
{
|
|
|
struct vcpu_svm *svm = to_svm(vcpu);
|
|
|
|
|
|
- svm->vmcb->control.nested_cr3 = root;
|
|
|
+ svm->vmcb->control.nested_cr3 = __sme_set(root);
|
|
|
mark_dirty(svm->vmcb, VMCB_NPT);
|
|
|
svm_flush_tlb(vcpu);
|
|
|
}
|
|
@@ -2868,7 +2868,7 @@ static bool nested_svm_vmrun_msrpm(struct vcpu_svm *svm)
|
|
|
svm->nested.msrpm[p] = svm->msrpm[p] | value;
|
|
|
}
|
|
|
|
|
|
- svm->vmcb->control.msrpm_base_pa = __pa(svm->nested.msrpm);
|
|
|
+ svm->vmcb->control.msrpm_base_pa = __sme_set(__pa(svm->nested.msrpm));
|
|
|
|
|
|
return true;
|
|
|
}
|
|
@@ -4501,7 +4501,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 = page_to_phys((*svm)->avic_backing_page);
|
|
|
+ vcpu_info->pi_desc_addr = __sme_set(page_to_phys((*svm)->avic_backing_page));
|
|
|
vcpu_info->vector = irq.vector;
|
|
|
|
|
|
return 0;
|
|
@@ -4552,7 +4552,8 @@ static int svm_update_pi_irte(struct kvm *kvm, unsigned int host_irq,
|
|
|
struct amd_iommu_pi_data pi;
|
|
|
|
|
|
/* Try to enable guest_mode in IRTE */
|
|
|
- pi.base = page_to_phys(svm->avic_backing_page) & AVIC_HPA_MASK;
|
|
|
+ pi.base = __sme_set(page_to_phys(svm->avic_backing_page) &
|
|
|
+ AVIC_HPA_MASK);
|
|
|
pi.ga_tag = AVIC_GATAG(kvm->arch.avic_vm_id,
|
|
|
svm->vcpu.vcpu_id);
|
|
|
pi.is_guest_mode = true;
|
|
@@ -5001,7 +5002,7 @@ static void svm_set_cr3(struct kvm_vcpu *vcpu, unsigned long root)
|
|
|
{
|
|
|
struct vcpu_svm *svm = to_svm(vcpu);
|
|
|
|
|
|
- svm->vmcb->save.cr3 = root;
|
|
|
+ svm->vmcb->save.cr3 = __sme_set(root);
|
|
|
mark_dirty(svm->vmcb, VMCB_CR);
|
|
|
svm_flush_tlb(vcpu);
|
|
|
}
|
|
@@ -5010,7 +5011,7 @@ static void set_tdp_cr3(struct kvm_vcpu *vcpu, unsigned long root)
|
|
|
{
|
|
|
struct vcpu_svm *svm = to_svm(vcpu);
|
|
|
|
|
|
- svm->vmcb->control.nested_cr3 = root;
|
|
|
+ svm->vmcb->control.nested_cr3 = __sme_set(root);
|
|
|
mark_dirty(svm->vmcb, VMCB_NPT);
|
|
|
|
|
|
/* Also sync guest cr3 here in case we live migrate */
|