| .. | .. |
|---|
| 81 | 81 | struct esca_block *sca = vcpu->kvm->arch.sca; |
|---|
| 82 | 82 | union esca_sigp_ctrl *sigp_ctrl = |
|---|
| 83 | 83 | &(sca->cpu[vcpu->vcpu_id].sigp_ctrl); |
|---|
| 84 | | - union esca_sigp_ctrl new_val = {0}, old_val = *sigp_ctrl; |
|---|
| 84 | + union esca_sigp_ctrl new_val = {0}, old_val; |
|---|
| 85 | 85 | |
|---|
| 86 | + old_val = READ_ONCE(*sigp_ctrl); |
|---|
| 86 | 87 | new_val.scn = src_id; |
|---|
| 87 | 88 | new_val.c = 1; |
|---|
| 88 | 89 | old_val.c = 0; |
|---|
| .. | .. |
|---|
| 93 | 94 | struct bsca_block *sca = vcpu->kvm->arch.sca; |
|---|
| 94 | 95 | union bsca_sigp_ctrl *sigp_ctrl = |
|---|
| 95 | 96 | &(sca->cpu[vcpu->vcpu_id].sigp_ctrl); |
|---|
| 96 | | - union bsca_sigp_ctrl new_val = {0}, old_val = *sigp_ctrl; |
|---|
| 97 | + union bsca_sigp_ctrl new_val = {0}, old_val; |
|---|
| 97 | 98 | |
|---|
| 99 | + old_val = READ_ONCE(*sigp_ctrl); |
|---|
| 98 | 100 | new_val.scn = src_id; |
|---|
| 99 | 101 | new_val.c = 1; |
|---|
| 100 | 102 | old_val.c = 0; |
|---|
| .. | .. |
|---|
| 124 | 126 | struct esca_block *sca = vcpu->kvm->arch.sca; |
|---|
| 125 | 127 | union esca_sigp_ctrl *sigp_ctrl = |
|---|
| 126 | 128 | &(sca->cpu[vcpu->vcpu_id].sigp_ctrl); |
|---|
| 127 | | - union esca_sigp_ctrl old = *sigp_ctrl; |
|---|
| 129 | + union esca_sigp_ctrl old; |
|---|
| 128 | 130 | |
|---|
| 131 | + old = READ_ONCE(*sigp_ctrl); |
|---|
| 129 | 132 | expect = old.value; |
|---|
| 130 | 133 | rc = cmpxchg(&sigp_ctrl->value, old.value, 0); |
|---|
| 131 | 134 | } else { |
|---|
| 132 | 135 | struct bsca_block *sca = vcpu->kvm->arch.sca; |
|---|
| 133 | 136 | union bsca_sigp_ctrl *sigp_ctrl = |
|---|
| 134 | 137 | &(sca->cpu[vcpu->vcpu_id].sigp_ctrl); |
|---|
| 135 | | - union bsca_sigp_ctrl old = *sigp_ctrl; |
|---|
| 138 | + union bsca_sigp_ctrl old; |
|---|
| 136 | 139 | |
|---|
| 140 | + old = READ_ONCE(*sigp_ctrl); |
|---|
| 137 | 141 | expect = old.value; |
|---|
| 138 | 142 | rc = cmpxchg(&sigp_ctrl->value, old.value, 0); |
|---|
| 139 | 143 | } |
|---|