|
@@ -832,6 +832,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
|
|
|
{
|
|
|
int r = RESUME_HOST;
|
|
|
int s;
|
|
|
+ int idx;
|
|
|
|
|
|
/* update before a new last_exit_type is rewritten */
|
|
|
kvmppc_update_timing_stats(vcpu);
|
|
@@ -1053,6 +1054,8 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ idx = srcu_read_lock(&vcpu->kvm->srcu);
|
|
|
+
|
|
|
gpaddr = kvmppc_mmu_xlate(vcpu, gtlb_index, eaddr);
|
|
|
gfn = gpaddr >> PAGE_SHIFT;
|
|
|
|
|
@@ -1075,6 +1078,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
|
|
|
kvmppc_account_exit(vcpu, MMIO_EXITS);
|
|
|
}
|
|
|
|
|
|
+ srcu_read_unlock(&vcpu->kvm->srcu, idx);
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -1098,6 +1102,8 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
|
|
|
|
|
|
kvmppc_account_exit(vcpu, ITLB_VIRT_MISS_EXITS);
|
|
|
|
|
|
+ idx = srcu_read_lock(&vcpu->kvm->srcu);
|
|
|
+
|
|
|
gpaddr = kvmppc_mmu_xlate(vcpu, gtlb_index, eaddr);
|
|
|
gfn = gpaddr >> PAGE_SHIFT;
|
|
|
|
|
@@ -1114,6 +1120,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
|
|
|
kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_MACHINE_CHECK);
|
|
|
}
|
|
|
|
|
|
+ srcu_read_unlock(&vcpu->kvm->srcu, idx);
|
|
|
break;
|
|
|
}
|
|
|
|