On 19.11.18 20:38, Heiko Carstens wrote:
On Mon, Nov 19, 2018 at 06:25:35PM +0100, Michael Mueller wrote:
@@ -3521,6 +3523,10 @@ static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason)
vcpu->run->s.regs.gprs[15] = vcpu->arch.sie_block->gg15;
atomic_dec(&vcpu->kvm->arch.vcpus_in_sie);
+ if (vcpu->kvm->arch.gib_in_use &&
+ !in_alert_list(vcpu->kvm->arch.gisa) &&
+ !atomic_fetch_andnot(0, &vcpu->kvm->arch.vcpus_in_sie))
+ vcpu->kvm->arch.gisa->iam = vcpu->kvm->arch.iam;
This looks a bit odd to me. Why not simply
!atomic_read(&vcpu->kvm->arch.vcpus_in_sie))
instead of the atomic_fetch_andnot() construct?
Did I miss something?
No trick under the covers here. The atomic_read() will do the job.