hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/arch/s390/kvm/interrupt.c
....@@ -81,8 +81,9 @@
8181 struct esca_block *sca = vcpu->kvm->arch.sca;
8282 union esca_sigp_ctrl *sigp_ctrl =
8383 &(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;
8585
86
+ old_val = READ_ONCE(*sigp_ctrl);
8687 new_val.scn = src_id;
8788 new_val.c = 1;
8889 old_val.c = 0;
....@@ -93,8 +94,9 @@
9394 struct bsca_block *sca = vcpu->kvm->arch.sca;
9495 union bsca_sigp_ctrl *sigp_ctrl =
9596 &(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;
9798
99
+ old_val = READ_ONCE(*sigp_ctrl);
98100 new_val.scn = src_id;
99101 new_val.c = 1;
100102 old_val.c = 0;
....@@ -124,16 +126,18 @@
124126 struct esca_block *sca = vcpu->kvm->arch.sca;
125127 union esca_sigp_ctrl *sigp_ctrl =
126128 &(sca->cpu[vcpu->vcpu_id].sigp_ctrl);
127
- union esca_sigp_ctrl old = *sigp_ctrl;
129
+ union esca_sigp_ctrl old;
128130
131
+ old = READ_ONCE(*sigp_ctrl);
129132 expect = old.value;
130133 rc = cmpxchg(&sigp_ctrl->value, old.value, 0);
131134 } else {
132135 struct bsca_block *sca = vcpu->kvm->arch.sca;
133136 union bsca_sigp_ctrl *sigp_ctrl =
134137 &(sca->cpu[vcpu->vcpu_id].sigp_ctrl);
135
- union bsca_sigp_ctrl old = *sigp_ctrl;
138
+ union bsca_sigp_ctrl old;
136139
140
+ old = READ_ONCE(*sigp_ctrl);
137141 expect = old.value;
138142 rc = cmpxchg(&sigp_ctrl->value, old.value, 0);
139143 }