Commit 4ce1e1af37 for qemu.org
commit 4ce1e1af37c8ff76eecca043cf7fa825bbd5a430
Author: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Date: Tue Sep 22 10:37:26 2026 +0200
target/s390x: Access S390CpuState atomically
Use qatomic_read/set() in the S390 CPU state accessors.
This avoids non-atomic reads in s390_cpu_has_work().
Reported-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Reviewed-by: Eric Farman <farman@linux.ibm.com>
Message-Id: <20260923171116.31276-6-philmd@oss.qualcomm.com>
diff --git a/target/s390x/cpu-system.c b/target/s390x/cpu-system.c
index e15775875f..d963d9e940 100644
--- a/target/s390x/cpu-system.c
+++ b/target/s390x/cpu-system.c
@@ -276,7 +276,7 @@ void s390_cpu_set_state(S390CpuState cpu_state, S390CPU *cpu)
if (kvm_enabled() && s390_cpu_get_state(cpu) != cpu_state) {
kvm_s390_set_cpu_state(cpu, cpu_state);
}
- cpu->env.cpu_state = cpu_state;
+ qatomic_set(&cpu->env.cpu_state, cpu_state);
}
void s390_cmma_reset(void)
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index bf9f6ed1de..ef73b15218 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -855,7 +855,7 @@ static inline void s390_cpu_set_state(S390CpuState cpu_state, S390CPU *cpu)
#endif /* CONFIG_USER_ONLY */
static inline S390CpuState s390_cpu_get_state(const S390CPU *cpu)
{
- return cpu->env.cpu_state;
+ return qatomic_read(&cpu->env.cpu_state);
}