mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
target/loongarch: Implement kvm get/set registers
Implement kvm_arch_get/set_registers interfaces, many regs can be get/set in the function, such as core regs, csr regs, fpu regs, mp state, etc. Signed-off-by: Tianrui Zhao <zhaotianrui@loongson.cn> Signed-off-by: xianglai li <lixianglai@loongson.cn> Reviewed-by: Song Gao <gaosong@loongson.cn> Change-Id: Ia8fc48fe08b1768853f7729e77d37cdf270031e4 Message-Id: <20240105075804.1228596-5-zhaotianrui@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn>
This commit is contained in:
@@ -3329,6 +3329,7 @@ if have_system or have_user
|
||||
'target/hppa',
|
||||
'target/i386',
|
||||
'target/i386/kvm',
|
||||
'target/loongarch',
|
||||
'target/mips/tcg',
|
||||
'target/nios2',
|
||||
'target/ppc',
|
||||
|
||||
@@ -540,6 +540,9 @@ static void loongarch_cpu_reset_hold(Object *obj)
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
env->pc = 0x1c000000;
|
||||
memset(env->tlb, 0, sizeof(env->tlb));
|
||||
if (kvm_enabled()) {
|
||||
kvm_arch_reset_vcpu(env);
|
||||
}
|
||||
#endif
|
||||
|
||||
restore_fp_status(env);
|
||||
|
||||
@@ -360,6 +360,7 @@ typedef struct CPUArchState {
|
||||
MemoryRegion iocsr_mem;
|
||||
bool load_elf;
|
||||
uint64_t elf_address;
|
||||
uint32_t mp_state;
|
||||
/* Store ipistate to access from this struct */
|
||||
DeviceState *ipistate;
|
||||
#endif
|
||||
|
||||
@@ -31,8 +31,10 @@ void G_NORETURN do_raise_exception(CPULoongArchState *env,
|
||||
|
||||
const char *loongarch_exception_name(int32_t exception);
|
||||
|
||||
#ifdef CONFIG_TCG
|
||||
int ieee_ex_to_loongarch(int xcpt);
|
||||
void restore_fp_status(CPULoongArchState *env);
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
extern const VMStateDescription vmstate_loongarch_cpu;
|
||||
@@ -44,12 +46,13 @@ uint64_t cpu_loongarch_get_constant_timer_counter(LoongArchCPU *cpu);
|
||||
uint64_t cpu_loongarch_get_constant_timer_ticks(LoongArchCPU *cpu);
|
||||
void cpu_loongarch_store_constant_timer_config(LoongArchCPU *cpu,
|
||||
uint64_t value);
|
||||
|
||||
#ifdef CONFIG_TCG
|
||||
bool loongarch_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
|
||||
MMUAccessType access_type, int mmu_idx,
|
||||
bool probe, uintptr_t retaddr);
|
||||
|
||||
hwaddr loongarch_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
|
||||
#endif
|
||||
#endif /* !CONFIG_USER_ONLY */
|
||||
|
||||
uint64_t read_fcc(CPULoongArchState *env);
|
||||
|
||||
+578
-2
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
||||
# See docs/devel/tracing.rst for syntax documentation.
|
||||
|
||||
#kvm.c
|
||||
kvm_failed_get_regs_core(const char *msg) "Failed to get core regs from KVM: %s"
|
||||
kvm_failed_put_regs_core(const char *msg) "Failed to put core regs into KVM: %s"
|
||||
kvm_failed_get_fpu(const char *msg) "Failed to get fpu from KVM: %s"
|
||||
kvm_failed_put_fpu(const char *msg) "Failed to put fpu into KVM: %s"
|
||||
kvm_failed_get_mpstate(const char *msg) "Failed to get mp_state from KVM: %s"
|
||||
kvm_failed_put_mpstate(const char *msg) "Failed to put mp_state into KVM: %s"
|
||||
kvm_failed_get_cpucfg(const char *msg) "Failed to get cpucfg from KVM: %s"
|
||||
kvm_failed_put_cpucfg(const char *msg) "Failed to put cpucfg into KVM: %s"
|
||||
@@ -0,0 +1 @@
|
||||
#include "trace/trace-target_loongarch.h"
|
||||
Reference in New Issue
Block a user