KVM: SVM: Prepare to reserve asid for SEV guest
authorBrijesh Singh <[email protected]>
Mon, 4 Dec 2017 16:57:25 +0000 (10:57 -0600)
committerBrijesh Singh <[email protected]>
Mon, 4 Dec 2017 16:57:25 +0000 (10:57 -0600)
Currently, ASID allocation start at 1. Add a svm_vcpu_data.min_asid
which allows supplying a dynamic start ASID.

Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Paolo Bonzini <[email protected]>
Cc: "Radim Krčmář" <[email protected]>
Cc: Joerg Roedel <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Tom Lendacky <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Brijesh Singh <[email protected]>
Reviewed-by: Paolo Bonzini <[email protected]>
Reviewed-by: Borislav Petkov <[email protected]>
arch/x86/kvm/svm.c

index 1c8158a6ee06b9d6da94d92b3179e4a6205b6775..e403cf1f6ba3d3c350849808a67b0a670e59fcf0 100644 (file)
@@ -525,6 +525,7 @@ struct svm_cpu_data {
        u64 asid_generation;
        u32 max_asid;
        u32 next_asid;
+       u32 min_asid;
        struct kvm_ldttss_desc *tss_desc;
 
        struct page *save_area;
@@ -782,6 +783,7 @@ static int svm_hardware_enable(void)
        sd->asid_generation = 1;
        sd->max_asid = cpuid_ebx(SVM_CPUID_FUNC) - 1;
        sd->next_asid = sd->max_asid + 1;
+       sd->min_asid = 1;
 
        gdt = get_current_gdt_rw();
        sd->tss_desc = (struct kvm_ldttss_desc *)(gdt + GDT_ENTRY_TSS);
@@ -2088,7 +2090,7 @@ static void new_asid(struct vcpu_svm *svm, struct svm_cpu_data *sd)
 {
        if (sd->next_asid > sd->max_asid) {
                ++sd->asid_generation;
-               sd->next_asid = 1;
+               sd->next_asid = sd->min_asid;
                svm->vmcb->control.tlb_ctl = TLB_CONTROL_FLUSH_ALL_ASID;
        }