Commit 38b6e00387 for qemu.org
commit 38b6e003879a872fc2bcc2c33a7016c8e67ccc93
Author: Bibo Mao <maobibo@loongson.cn>
Date: Thu Oct 29 16:56:53 2026 +0800
target/loongarch: Replace kvm_cpu_has_msgint() with cpu_has_msgint()
target/loongarch: Use cpu_has_msgint() and FIELD_EX32 for cpucfg
cpu_has_msgint() is more generic and can be used in TCG mode, so use it
instead of the KVM-specific feature check.
The cpucfg register is 32 bits wide; use FIELD_EX32() rather than
FIELD_EX64() when extracting its fields.
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
index 277fc4f475..8dae4e12cf 100644
--- a/target/loongarch/cpu.h
+++ b/target/loongarch/cpu.h
@@ -542,6 +542,12 @@ static inline bool is_va32(CPULoongArchState *env)
return va32;
}
+static inline bool cpu_has_msgint(CPULoongArchState *env)
+{
+
+ return FIELD_EX32(env->cpucfg[1], CPUCFG1, MSG_INT);
+}
+
static inline void set_pc(CPULoongArchState *env, uint64_t value)
{
if (is_va32(env)) {
diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c
index db39267375..957e73eb02 100644
--- a/target/loongarch/kvm/kvm.c
+++ b/target/loongarch/kvm/kvm.c
@@ -36,13 +36,6 @@ const KVMCapabilityInfo kvm_arch_required_capabilities[] = {
KVM_CAP_LAST_INFO
};
-static bool kvm_cpu_has_msgint(CPUState *cs)
-{
- LoongArchCPU *cpu = LOONGARCH_CPU(cs);
-
- return FIELD_EX64(cpu->env.cpucfg[1], CPUCFG1, MSG_INT);
-}
-
static int kvm_get_stealtime(CPUState *cs)
{
CPULoongArchState *env = cpu_env(cs);
@@ -374,7 +367,7 @@ static int kvm_loongarch_get_csr(CPUState *cs)
* Since register CSR_ESTAT will sync software pending MSGINT status to
* hardware register and modify HW CSR MSGIS registers.
*/
- if (kvm_cpu_has_msgint(cs)) {
+ if (cpu_has_msgint(env)) {
ret |= kvm_get_one_reg(cs, KVM_IOC_CSRID(LOONGARCH_CSR_MSGIS(0)),
&sys->CSR_MSGIS[0]);
@@ -564,7 +557,7 @@ static int kvm_loongarch_put_csr(CPUState *cs, KvmPutState level)
ret |= kvm_loongarch_put_pmu(cs);
- if (kvm_cpu_has_msgint(cs)) {
+ if (cpu_has_msgint(env)) {
ret |= kvm_set_one_reg(cs, KVM_IOC_CSRID(LOONGARCH_CSR_MSGIS(0)),
&sys->CSR_MSGIS[0]);
diff --git a/target/loongarch/machine.c b/target/loongarch/machine.c
index 952c5497af..4acab2a4a3 100644
--- a/target/loongarch/machine.c
+++ b/target/loongarch/machine.c
@@ -49,7 +49,7 @@ static bool msgint_needed(void *opaque)
{
LoongArchCPU *cpu = opaque;
- return FIELD_EX64(cpu->env.cpucfg[1], CPUCFG1, MSG_INT);
+ return cpu_has_msgint(&cpu->env);
}
static const VMStateDescription vmstate_msgint = {