|
@@ -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;
|
|
|
}
|
|
|
|