|
@@ -229,12 +229,10 @@ static void ipte_lock_simple(struct kvm_vcpu *vcpu)
|
|
|
goto out;
|
|
|
ic = &vcpu->kvm->arch.sca->ipte_control;
|
|
|
do {
|
|
|
- old = *ic;
|
|
|
- barrier();
|
|
|
+ old = READ_ONCE(*ic);
|
|
|
while (old.k) {
|
|
|
cond_resched();
|
|
|
- old = *ic;
|
|
|
- barrier();
|
|
|
+ old = READ_ONCE(*ic);
|
|
|
}
|
|
|
new = old;
|
|
|
new.k = 1;
|
|
@@ -253,8 +251,7 @@ static void ipte_unlock_simple(struct kvm_vcpu *vcpu)
|
|
|
goto out;
|
|
|
ic = &vcpu->kvm->arch.sca->ipte_control;
|
|
|
do {
|
|
|
- old = *ic;
|
|
|
- barrier();
|
|
|
+ old = READ_ONCE(*ic);
|
|
|
new = old;
|
|
|
new.k = 0;
|
|
|
} while (cmpxchg(&ic->val, old.val, new.val) != old.val);
|
|
@@ -269,12 +266,10 @@ static void ipte_lock_siif(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
ic = &vcpu->kvm->arch.sca->ipte_control;
|
|
|
do {
|
|
|
- old = *ic;
|
|
|
- barrier();
|
|
|
+ old = READ_ONCE(*ic);
|
|
|
while (old.kg) {
|
|
|
cond_resched();
|
|
|
- old = *ic;
|
|
|
- barrier();
|
|
|
+ old = READ_ONCE(*ic);
|
|
|
}
|
|
|
new = old;
|
|
|
new.k = 1;
|
|
@@ -288,8 +283,7 @@ static void ipte_unlock_siif(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
ic = &vcpu->kvm->arch.sca->ipte_control;
|
|
|
do {
|
|
|
- old = *ic;
|
|
|
- barrier();
|
|
|
+ old = READ_ONCE(*ic);
|
|
|
new = old;
|
|
|
new.kh--;
|
|
|
if (!new.kh)
|