1 Star 0 Fork 38

xisme/qemu-kvm_src-anolis

forked from src-anolis-os/qemu-kvm 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
kvm-csr-save-and-restore-optimization.patch 23.64 KB
一键复制 编辑 原始数据 按行查看 历史
Xianglai Li 提交于 2024-08-29 19:00 +08:00 . fix compile error for loongarch
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
From 2b5b79cc839c3b471724c263a1a5e35bf69c1bc9 Mon Sep 17 00:00:00 2001
From: lixianglai <lixianglai@loongson.cn>
Date: Mon, 29 May 2023 07:25:52 -0400
Subject: [PATCH 14/28] kvm csr save and restore optimization.
Signed-off-by: lixianglai <lixianglai@loongson.cn>
---
target/loongarch64/kvm.c | 547 +++++++++++----------------------------
1 file changed, 153 insertions(+), 394 deletions(-)
diff --git a/target/loongarch64/kvm.c b/target/loongarch64/kvm.c
index b5c655812..6885ec6c9 100644
--- a/target/loongarch64/kvm.c
+++ b/target/loongarch64/kvm.c
@@ -95,19 +95,165 @@ int kvm_arch_irqchip_create(KVMState *s)
return 0;
}
+static void kvm_csr_set_addr(uint64_t **addr, uint32_t index, uint64_t *p)
+{
+ addr[index] = p;
+}
+
int kvm_arch_init_vcpu(CPUState *cs)
{
LOONGARCHCPU *cpu = LOONGARCH_CPU(cs);
+ uint64_t **addr;
+ CPULOONGARCHState *env = &cpu->env;
int ret = 0;
cpu->cpuStateEntry = qemu_add_vm_change_state_handler(kvm_loongarch_update_state, cs);
- cpu->kvm_csr_buf = g_malloc0(CSR_BUF_SIZE);
+ cpu->kvm_csr_buf = g_malloc0(CSR_BUF_SIZE + CSR_BUF_SIZE);
+
+ addr = (void *)cpu->kvm_csr_buf + CSR_BUF_SIZE;
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_CRMD, &env->CSR_CRMD);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PRMD, &env->CSR_PRMD);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_EUEN, &env->CSR_EUEN);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_MISC, &env->CSR_MISC);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_ECFG, &env->CSR_ECFG);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_ESTAT, &env->CSR_ESTAT);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_ERA, &env->CSR_ERA);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_BADV, &env->CSR_BADV);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_BADI, &env->CSR_BADI);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_EEPN, &env->CSR_EEPN);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBIDX, &env->CSR_TLBIDX);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBEHI, &env->CSR_TLBEHI);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBELO0, &env->CSR_TLBELO0);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBELO1, &env->CSR_TLBELO1);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_GTLBC, &env->CSR_GTLBC);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TRGP, &env->CSR_TRGP);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_ASID, &env->CSR_ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PGDL, &env->CSR_PGDL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PGDH, &env->CSR_PGDH);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PGD, &env->CSR_PGD);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PWCTL0, &env->CSR_PWCTL0);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PWCTL1, &env->CSR_PWCTL1);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_STLBPGSIZE, &env->CSR_STLBPGSIZE);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_RVACFG, &env->CSR_RVACFG);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_CPUID, &env->CSR_CPUID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PRCFG1, &env->CSR_PRCFG1);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PRCFG2, &env->CSR_PRCFG2);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PRCFG3, &env->CSR_PRCFG3);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_KS0, &env->CSR_KS0);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_KS1, &env->CSR_KS1);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_KS2, &env->CSR_KS2);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_KS3, &env->CSR_KS3);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_KS4, &env->CSR_KS4);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_KS5, &env->CSR_KS5);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_KS6, &env->CSR_KS6);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_KS7, &env->CSR_KS7);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TMID, &env->CSR_TMID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_CNTC, &env->CSR_CNTC);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TINTCLR, &env->CSR_TINTCLR);
+
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_GSTAT, &env->CSR_GSTAT);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_GCFG, &env->CSR_GCFG);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_GINTC, &env->CSR_GINTC);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_GCNTC, &env->CSR_GCNTC);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_LLBCTL, &env->CSR_LLBCTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IMPCTL1, &env->CSR_IMPCTL1);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IMPCTL2, &env->CSR_IMPCTL2);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_GNMI, &env->CSR_GNMI);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBRENT, &env->CSR_TLBRENT);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBRBADV, &env->CSR_TLBRBADV);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBRERA, &env->CSR_TLBRERA);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBRSAVE, &env->CSR_TLBRSAVE);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBRELO0, &env->CSR_TLBRELO0);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBRELO1, &env->CSR_TLBRELO1);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBREHI, &env->CSR_TLBREHI);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_TLBRPRMD, &env->CSR_TLBRPRMD);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_ERRCTL, &env->CSR_ERRCTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_ERRINFO, &env->CSR_ERRINFO);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_ERRINFO1, &env->CSR_ERRINFO1);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_ERRENT, &env->CSR_ERRENT);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_ERRERA, &env->CSR_ERRERA);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_ERRSAVE, &env->CSR_ERRSAVE);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_CTAG, &env->CSR_CTAG);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DMWIN0, &env->CSR_DMWIN0);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DMWIN1, &env->CSR_DMWIN1);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DMWIN2, &env->CSR_DMWIN2);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DMWIN3, &env->CSR_DMWIN3);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PERFCTRL0, &env->CSR_PERFCTRL0);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PERFCNTR0, &env->CSR_PERFCNTR0);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PERFCTRL1, &env->CSR_PERFCTRL1);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PERFCNTR1, &env->CSR_PERFCNTR1);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PERFCTRL2, &env->CSR_PERFCTRL2);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PERFCNTR2, &env->CSR_PERFCNTR2);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PERFCTRL3, &env->CSR_PERFCTRL3);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_PERFCNTR3, &env->CSR_PERFCNTR3);
+
+ /* debug */
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_MWPC, &env->CSR_MWPC);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_MWPS, &env->CSR_MWPS);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB0ADDR, &env->CSR_DB0ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB0MASK, &env->CSR_DB0MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB0CTL, &env->CSR_DB0CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB0ASID, &env->CSR_DB0ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB1ADDR, &env->CSR_DB1ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB1MASK, &env->CSR_DB1MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB1CTL, &env->CSR_DB1CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB1ASID, &env->CSR_DB1ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB2ADDR, &env->CSR_DB2ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB2MASK, &env->CSR_DB2MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB2CTL, &env->CSR_DB2CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB2ASID, &env->CSR_DB2ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB3ADDR, &env->CSR_DB3ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB3MASK, &env->CSR_DB3MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB3CTL, &env->CSR_DB3CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DB3ASID, &env->CSR_DB3ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_FWPC, &env->CSR_FWPC);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_FWPS, &env->CSR_FWPS);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB0ADDR, &env->CSR_IB0ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB0MASK, &env->CSR_IB0MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB0CTL, &env->CSR_IB0CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB0ASID, &env->CSR_IB0ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB1ADDR, &env->CSR_IB1ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB1MASK, &env->CSR_IB1MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB1CTL, &env->CSR_IB1CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB1ASID, &env->CSR_IB1ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB2ADDR, &env->CSR_IB2ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB2MASK, &env->CSR_IB2MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB2CTL, &env->CSR_IB2CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB2ASID, &env->CSR_IB2ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB3ADDR, &env->CSR_IB3ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB3MASK, &env->CSR_IB3MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB3CTL, &env->CSR_IB3CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB3ASID, &env->CSR_IB3ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB4ADDR, &env->CSR_IB4ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB4MASK, &env->CSR_IB4MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB4CTL, &env->CSR_IB4CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB4ASID, &env->CSR_IB4ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB5ADDR, &env->CSR_IB5ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB5MASK, &env->CSR_IB5MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB5CTL, &env->CSR_IB5CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB5ASID, &env->CSR_IB5ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB6ADDR, &env->CSR_IB6ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB6MASK, &env->CSR_IB6MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB6CTL, &env->CSR_IB6CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB6ASID, &env->CSR_IB6ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB7ADDR, &env->CSR_IB7ADDR);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB7MASK, &env->CSR_IB7MASK);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB7CTL, &env->CSR_IB7CTL);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_IB7ASID, &env->CSR_IB7ASID);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DEBUG, &env->CSR_DEBUG);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DERA, &env->CSR_DERA);
+ kvm_csr_set_addr(addr, LOONGARCH_CSR_DESAVE, &env->CSR_DESAVE);
+
DPRINTF("%s\n", __func__);
return ret;
}
int kvm_arch_destroy_vcpu(CPUState *cs)
{
+ LOONGARCHCPU *cpu = LOONGARCH_CPU(cs);
+
+ g_free(cpu->kvm_csr_buf);
+ cpu->kvm_csr_buf = NULL;
return 0;
}
@@ -936,8 +1082,10 @@ static int kvm_loongarch_get_csr_registers(CPUState *cs)
CPULOONGARCHState *env = &cpu->env;
int ret = 0, i;
struct kvm_csr_entry *csrs = cpu->kvm_csr_buf->entries;
+ uint64_t **addr;
kvm_csr_buf_reset(cpu);
+ addr = (void *)cpu->kvm_csr_buf + CSR_BUF_SIZE;
kvm_csr_entry_add(cpu, LOONGARCH_CSR_CRMD, 0);
kvm_csr_entry_add(cpu, LOONGARCH_CSR_PRMD, 0);
@@ -1082,399 +1230,10 @@ static int kvm_loongarch_get_csr_registers(CPUState *cs)
for (i = 0; i < ret; i++) {
uint32_t index = csrs[i].index;
-
- switch (index) {
- case LOONGARCH_CSR_CRMD:
- env->CSR_CRMD = csrs[i].data;
- break;
- case LOONGARCH_CSR_PRMD:
- env->CSR_PRMD = csrs[i].data;
- break;
- case LOONGARCH_CSR_EUEN:
- env->CSR_EUEN = csrs[i].data;
- break;
- case LOONGARCH_CSR_MISC:
- env->CSR_MISC = csrs[i].data;
- break;
- case LOONGARCH_CSR_ECFG:
- env->CSR_ECFG = csrs[i].data;
- break;
- case LOONGARCH_CSR_ESTAT:
- env->CSR_ESTAT = csrs[i].data;
- break;
- case LOONGARCH_CSR_ERA:
- env->CSR_ERA = csrs[i].data;
- break;
- case LOONGARCH_CSR_BADV:
- env->CSR_BADV = csrs[i].data;
- break;
- case LOONGARCH_CSR_BADI:
- env->CSR_BADI = csrs[i].data;
- break;
- case LOONGARCH_CSR_EEPN:
- env->CSR_EEPN = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBIDX:
- env->CSR_TLBIDX = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBEHI:
- env->CSR_TLBEHI = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBELO0:
- env->CSR_TLBELO0 = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBELO1:
- env->CSR_TLBELO1 = csrs[i].data;
- break;
- case LOONGARCH_CSR_GTLBC:
- env->CSR_GTLBC = csrs[i].data;
- break;
- case LOONGARCH_CSR_TRGP:
- env->CSR_TRGP = csrs[i].data;
- break;
- case LOONGARCH_CSR_ASID:
- env->CSR_ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_PGDL:
- env->CSR_PGDL = csrs[i].data;
- break;
- case LOONGARCH_CSR_PGDH:
- env->CSR_PGDH = csrs[i].data;
- break;
- case LOONGARCH_CSR_PGD:
- env->CSR_PGD = csrs[i].data;
- break;
- case LOONGARCH_CSR_PWCTL0:
- env->CSR_PWCTL0 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PWCTL1:
- env->CSR_PWCTL1 = csrs[i].data;
- break;
- case LOONGARCH_CSR_STLBPGSIZE:
- env->CSR_STLBPGSIZE = csrs[i].data;
- break;
- case LOONGARCH_CSR_RVACFG:
- env->CSR_RVACFG = csrs[i].data;
- break;
- case LOONGARCH_CSR_CPUID:
- env->CSR_CPUID = csrs[i].data;
- break;
- case LOONGARCH_CSR_PRCFG1:
- env->CSR_PRCFG1 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PRCFG2:
- env->CSR_PRCFG2 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PRCFG3:
- env->CSR_PRCFG3 = csrs[i].data;
- break;
- case LOONGARCH_CSR_KS0:
- env->CSR_KS0 = csrs[i].data;
- break;
- case LOONGARCH_CSR_KS1:
- env->CSR_KS1 = csrs[i].data;
- break;
- case LOONGARCH_CSR_KS2:
- env->CSR_KS2 = csrs[i].data;
- break;
- case LOONGARCH_CSR_KS3:
- env->CSR_KS3 = csrs[i].data;
- break;
- case LOONGARCH_CSR_KS4:
- env->CSR_KS4 = csrs[i].data;
- break;
- case LOONGARCH_CSR_KS5:
- env->CSR_KS5 = csrs[i].data;
- break;
- case LOONGARCH_CSR_KS6:
- env->CSR_KS6 = csrs[i].data;
- break;
- case LOONGARCH_CSR_KS7:
- env->CSR_KS7 = csrs[i].data;
- break;
-
- case LOONGARCH_CSR_TMID:
- env->CSR_TMID = csrs[i].data;
- break;
- case LOONGARCH_CSR_CNTC:
- env->CSR_CNTC = csrs[i].data;
- break;
- case LOONGARCH_CSR_TINTCLR:
- env->CSR_TINTCLR = csrs[i].data;
- break;
- case LOONGARCH_CSR_GSTAT:
- env->CSR_GSTAT = csrs[i].data;
- break;
- case LOONGARCH_CSR_GCFG:
- env->CSR_GCFG = csrs[i].data;
- break;
- case LOONGARCH_CSR_GINTC:
- env->CSR_GINTC = csrs[i].data;
- break;
- case LOONGARCH_CSR_GCNTC:
- env->CSR_GCNTC = csrs[i].data;
- break;
- case LOONGARCH_CSR_LLBCTL:
- env->CSR_LLBCTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_IMPCTL1:
- env->CSR_IMPCTL1 = csrs[i].data;
- break;
- case LOONGARCH_CSR_IMPCTL2:
- env->CSR_IMPCTL2 = csrs[i].data;
- break;
- case LOONGARCH_CSR_GNMI:
- env->CSR_GNMI = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBRENT:
- env->CSR_TLBRENT = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBRBADV:
- env->CSR_TLBRBADV = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBRERA:
- env->CSR_TLBRERA = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBRSAVE:
- env->CSR_TLBRSAVE = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBRELO0:
- env->CSR_TLBRELO0 = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBRELO1:
- env->CSR_TLBRELO1 = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBREHI:
- env->CSR_TLBREHI = csrs[i].data;
- break;
- case LOONGARCH_CSR_TLBRPRMD:
- env->CSR_TLBRPRMD = csrs[i].data;
- break;
- case LOONGARCH_CSR_ERRCTL:
- env->CSR_ERRCTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_ERRINFO:
- env->CSR_ERRINFO = csrs[i].data;
- break;
- case LOONGARCH_CSR_ERRINFO1:
- env->CSR_ERRINFO1 = csrs[i].data;
- break;
- case LOONGARCH_CSR_ERRENT:
- env->CSR_ERRENT = csrs[i].data;
- break;
- case LOONGARCH_CSR_ERRERA:
- env->CSR_ERRERA = csrs[i].data;
- break;
- case LOONGARCH_CSR_ERRSAVE:
- env->CSR_ERRSAVE = csrs[i].data;
- break;
- case LOONGARCH_CSR_CTAG:
- env->CSR_CTAG = csrs[i].data;
- break;
- case LOONGARCH_CSR_DMWIN0:
- env->CSR_DMWIN0 = csrs[i].data;
- break;
- case LOONGARCH_CSR_DMWIN1:
- env->CSR_DMWIN1 = csrs[i].data;
- break;
- case LOONGARCH_CSR_DMWIN2:
- env->CSR_DMWIN2 = csrs[i].data;
- break;
- case LOONGARCH_CSR_DMWIN3:
- env->CSR_DMWIN3 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PERFCTRL0:
- env->CSR_PERFCTRL0 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PERFCNTR0:
- env->CSR_PERFCNTR0 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PERFCTRL1:
- env->CSR_PERFCTRL1 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PERFCNTR1:
- env->CSR_PERFCNTR1 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PERFCTRL2:
- env->CSR_PERFCTRL2 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PERFCNTR2:
- env->CSR_PERFCNTR2 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PERFCTRL3:
- env->CSR_PERFCTRL3 = csrs[i].data;
- break;
- case LOONGARCH_CSR_PERFCNTR3:
- env->CSR_PERFCNTR3 = csrs[i].data;
- break;
-
- case LOONGARCH_CSR_MWPC:
- env->CSR_MWPC = csrs[i].data;
- break;
- case LOONGARCH_CSR_MWPS:
- env->CSR_MWPS = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB0ADDR:
- env->CSR_DB0ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB0MASK:
- env->CSR_DB0MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB0CTL:
- env->CSR_DB0CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB0ASID:
- env->CSR_DB0ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB1ADDR:
- env->CSR_DB1ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB1MASK:
- env->CSR_DB1MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB1CTL:
- env->CSR_DB1CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB1ASID:
- env->CSR_DB1ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB2ADDR:
- env->CSR_DB2ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB2MASK:
- env->CSR_DB2MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB2CTL:
- env->CSR_DB2CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB2ASID:
- env->CSR_DB2ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB3ADDR:
- env->CSR_DB3ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB3MASK:
- env->CSR_DB3MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB3CTL:
- env->CSR_DB3CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_DB3ASID:
- env->CSR_DB3ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_FWPC:
- env->CSR_FWPC = csrs[i].data;
- break;
- case LOONGARCH_CSR_FWPS:
- env->CSR_FWPS = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB0ADDR:
- env->CSR_IB0ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB0MASK:
- env->CSR_IB0MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB0CTL:
- env->CSR_IB0CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB0ASID:
- env->CSR_IB0ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB1ADDR:
- env->CSR_IB1ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB1MASK:
- env->CSR_IB1MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB1CTL:
- env->CSR_IB1CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB1ASID:
- env->CSR_IB1ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB2ADDR:
- env->CSR_IB2ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB2MASK:
- env->CSR_IB2MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB2CTL:
- env->CSR_IB2CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB2ASID:
- env->CSR_IB2ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB3ADDR:
- env->CSR_IB3ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB3MASK:
- env->CSR_IB3MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB3CTL:
- env->CSR_IB3CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB3ASID:
- env->CSR_IB3ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB4ADDR:
- env->CSR_IB4ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB4MASK:
- env->CSR_IB4MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB4CTL:
- env->CSR_IB4CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB4ASID:
- env->CSR_IB4ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB5ADDR:
- env->CSR_IB5ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB5MASK:
- env->CSR_IB5MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB5CTL:
- env->CSR_IB5CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB5ASID:
- env->CSR_IB5ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB6ADDR:
- env->CSR_IB6ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB6MASK:
- env->CSR_IB6MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB6CTL:
- env->CSR_IB6CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB6ASID:
- env->CSR_IB6ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB7ADDR:
- env->CSR_IB7ADDR = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB7MASK:
- env->CSR_IB7MASK = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB7CTL:
- env->CSR_IB7CTL = csrs[i].data;
- break;
- case LOONGARCH_CSR_IB7ASID:
- env->CSR_IB7ASID = csrs[i].data;
- break;
- case LOONGARCH_CSR_DEBUG:
- env->CSR_DEBUG = csrs[i].data;
- break;
- case LOONGARCH_CSR_DERA:
- env->CSR_DERA = csrs[i].data;
- break;
- case LOONGARCH_CSR_DESAVE:
- env->CSR_DESAVE = csrs[i].data;
- break;
- default:
- break;
+ if (addr[index]) {
+ *addr[index] = csrs[i].data;
+ } else {
+ printf("Failed to get addr CSR 0x%"PRIx32"\n", i);
}
}
--
2.43.5
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/xisme/qemu-kvm_src-anolis.git
git@gitee.com:xisme/qemu-kvm_src-anolis.git
xisme
qemu-kvm_src-anolis
qemu-kvm_src-anolis
vtkm_support_csv

搜索帮助

371d5123 14472233 46e8bd33 14472233