.. | .. |
---|
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 | } |
---|