From 5872966db7abaa7f8753541b7a9f242df9752b50 Mon Sep 17 00:00:00 2001 From: Bibo Mao Date: Sun, 28 Apr 2024 11:16:51 +0800 Subject: [PATCH] target/loongarch: Put cpucfg operation before CSR register On Loongarch, cpucfg is register for cpu feature, some other registers depend on cpucfg feature such as perf CSR registers. Here put cpucfg read/write operations before CSR register, so that KVM knows how many perf CSR registers are valid from pre-set cpucfg feature information. Signed-off-by: Bibo Mao Reviewed-by: Song Gao Message-Id: <20240428031651.1354587-1-maobibo@loongson.cn> Signed-off-by: Song Gao --- target/loongarch/kvm/kvm.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c index 8224d94333..bc75552d0f 100644 --- a/target/loongarch/kvm/kvm.c +++ b/target/loongarch/kvm/kvm.c @@ -587,6 +587,11 @@ int kvm_arch_get_registers(CPUState *cs) return ret; } + ret = kvm_loongarch_get_cpucfg(cs); + if (ret) { + return ret; + } + ret = kvm_loongarch_get_csr(cs); if (ret) { return ret; @@ -598,11 +603,6 @@ int kvm_arch_get_registers(CPUState *cs) } ret = kvm_loongarch_get_mpstate(cs); - if (ret) { - return ret; - } - - ret = kvm_loongarch_get_cpucfg(cs); return ret; } @@ -615,6 +615,11 @@ int kvm_arch_put_registers(CPUState *cs, int level) return ret; } + ret = kvm_loongarch_put_cpucfg(cs); + if (ret) { + return ret; + } + ret = kvm_loongarch_put_csr(cs, level); if (ret) { return ret; @@ -626,11 +631,6 @@ int kvm_arch_put_registers(CPUState *cs, int level) } ret = kvm_loongarch_put_mpstate(cs); - if (ret) { - return ret; - } - - ret = kvm_loongarch_put_cpucfg(cs); return ret; }