Skip to content

Commit 90f7e23

Browse files
danielhbMichael Tokarev
authored andcommitted
target/riscv/kvm: turn kvm_riscv_reg_id_ulong() into a macro
We need the reg_id_ulong() helper to be a macro to be able to create a static array of KVMCPUConfig that will hold CSR information. Despite the amount of changes all of them are tedious/trivial: - replace instances of "kvm_riscv_reg_id_ulong" with "KVM_RISCV_REG_ID_ULONG"; - RISCV_CORE_REG(), RISCV_CSR_REG(), RISCV_CONFIG_REG() and RISCV_VECTOR_CSR_REG() only receives one 'name' arg. Remove unneeded 'env' variables when applicable. Signed-off-by: Daniel Henrique Barboza <[email protected]> Reviewed-by: Andrew Jones <[email protected]> Reviewed-by: Alistair Francis <[email protected]> Message-ID: <[email protected]> Signed-off-by: Alistair Francis <[email protected]> Cc: [email protected] (cherry picked from commit 11766e1) Signed-off-by: Michael Tokarev <[email protected]>
1 parent ea8eb87 commit 90f7e23

File tree

1 file changed

+41
-58
lines changed

1 file changed

+41
-58
lines changed

target/riscv/kvm/kvm-cpu.c

Lines changed: 41 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -64,23 +64,11 @@ static bool cap_has_mp_state;
6464
#define KVM_RISCV_REG_ID_U64(type, idx) (KVM_REG_RISCV | KVM_REG_SIZE_U64 | \
6565
type | idx)
6666

67-
static uint64_t kvm_riscv_reg_id_ulong(CPURISCVState *env, uint64_t type,
68-
uint64_t idx)
69-
{
70-
uint64_t id = KVM_REG_RISCV | type | idx;
71-
72-
switch (riscv_cpu_mxl(env)) {
73-
case MXL_RV32:
74-
id |= KVM_REG_SIZE_U32;
75-
break;
76-
case MXL_RV64:
77-
id |= KVM_REG_SIZE_U64;
78-
break;
79-
default:
80-
g_assert_not_reached();
81-
}
82-
return id;
83-
}
67+
#if defined(TARGET_RISCV64)
68+
#define KVM_RISCV_REG_ID_ULONG(type, idx) KVM_RISCV_REG_ID_U64(type, idx)
69+
#else
70+
#define KVM_RISCV_REG_ID_ULONG(type, idx) KVM_RISCV_REG_ID_U32(type, idx)
71+
#endif
8472

8573
static uint64_t kvm_encode_reg_size_id(uint64_t id, size_t size_b)
8674
{
@@ -103,16 +91,16 @@ static uint64_t kvm_riscv_vector_reg_id(RISCVCPU *cpu,
10391
return kvm_encode_reg_size_id(id, size_b);
10492
}
10593

106-
#define RISCV_CORE_REG(env, name) \
107-
kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_CORE, \
94+
#define RISCV_CORE_REG(name) \
95+
KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_CORE, \
10896
KVM_REG_RISCV_CORE_REG(name))
10997

110-
#define RISCV_CSR_REG(env, name) \
111-
kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_CSR, \
98+
#define RISCV_CSR_REG(name) \
99+
KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_CSR, \
112100
KVM_REG_RISCV_CSR_REG(name))
113101

114-
#define RISCV_CONFIG_REG(env, name) \
115-
kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_CONFIG, \
102+
#define RISCV_CONFIG_REG(name) \
103+
KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_CONFIG, \
116104
KVM_REG_RISCV_CONFIG_REG(name))
117105

118106
#define RISCV_TIMER_REG(name) KVM_RISCV_REG_ID_U64(KVM_REG_RISCV_TIMER, \
@@ -122,21 +110,21 @@ static uint64_t kvm_riscv_vector_reg_id(RISCVCPU *cpu,
122110

123111
#define RISCV_FP_D_REG(idx) KVM_RISCV_REG_ID_U64(KVM_REG_RISCV_FP_D, idx)
124112

125-
#define RISCV_VECTOR_CSR_REG(env, name) \
126-
kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_VECTOR, \
113+
#define RISCV_VECTOR_CSR_REG(name) \
114+
KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_VECTOR, \
127115
KVM_REG_RISCV_VECTOR_CSR_REG(name))
128116

129117
#define KVM_RISCV_GET_CSR(cs, env, csr, reg) \
130118
do { \
131-
int _ret = kvm_get_one_reg(cs, RISCV_CSR_REG(env, csr), &reg); \
119+
int _ret = kvm_get_one_reg(cs, RISCV_CSR_REG(csr), &reg); \
132120
if (_ret) { \
133121
return _ret; \
134122
} \
135123
} while (0)
136124

137125
#define KVM_RISCV_SET_CSR(cs, env, csr, reg) \
138126
do { \
139-
int _ret = kvm_set_one_reg(cs, RISCV_CSR_REG(env, csr), &reg); \
127+
int _ret = kvm_set_one_reg(cs, RISCV_CSR_REG(csr), &reg); \
140128
if (_ret) { \
141129
return _ret; \
142130
} \
@@ -244,7 +232,7 @@ static void kvm_riscv_update_cpu_misa_ext(RISCVCPU *cpu, CPUState *cs)
244232

245233
/* If we're here we're going to disable the MISA bit */
246234
reg = 0;
247-
id = kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_ISA_EXT,
235+
id = KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_ISA_EXT,
248236
misa_cfg->kvm_reg_id);
249237
ret = kvm_set_one_reg(cs, id, &reg);
250238
if (ret != 0) {
@@ -430,7 +418,6 @@ static KVMCPUConfig kvm_sbi_dbcn = {
430418

431419
static void kvm_riscv_update_cpu_cfg_isa_ext(RISCVCPU *cpu, CPUState *cs)
432420
{
433-
CPURISCVState *env = &cpu->env;
434421
uint64_t id, reg;
435422
int i, ret;
436423

@@ -441,7 +428,7 @@ static void kvm_riscv_update_cpu_cfg_isa_ext(RISCVCPU *cpu, CPUState *cs)
441428
continue;
442429
}
443430

444-
id = kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_ISA_EXT,
431+
id = KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_ISA_EXT,
445432
multi_ext_cfg->kvm_reg_id);
446433
reg = kvm_cpu_cfg_get(cpu, multi_ext_cfg);
447434
ret = kvm_set_one_reg(cs, id, &reg);
@@ -566,14 +553,14 @@ static int kvm_riscv_get_regs_core(CPUState *cs)
566553
target_ulong reg;
567554
CPURISCVState *env = &RISCV_CPU(cs)->env;
568555

569-
ret = kvm_get_one_reg(cs, RISCV_CORE_REG(env, regs.pc), &reg);
556+
ret = kvm_get_one_reg(cs, RISCV_CORE_REG(regs.pc), &reg);
570557
if (ret) {
571558
return ret;
572559
}
573560
env->pc = reg;
574561

575562
for (i = 1; i < 32; i++) {
576-
uint64_t id = kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_CORE, i);
563+
uint64_t id = KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_CORE, i);
577564
ret = kvm_get_one_reg(cs, id, &reg);
578565
if (ret) {
579566
return ret;
@@ -592,13 +579,13 @@ static int kvm_riscv_put_regs_core(CPUState *cs)
592579
CPURISCVState *env = &RISCV_CPU(cs)->env;
593580

594581
reg = env->pc;
595-
ret = kvm_set_one_reg(cs, RISCV_CORE_REG(env, regs.pc), &reg);
582+
ret = kvm_set_one_reg(cs, RISCV_CORE_REG(regs.pc), &reg);
596583
if (ret) {
597584
return ret;
598585
}
599586

600587
for (i = 1; i < 32; i++) {
601-
uint64_t id = kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_CORE, i);
588+
uint64_t id = KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_CORE, i);
602589
reg = env->gpr[i];
603590
ret = kvm_set_one_reg(cs, id, &reg);
604591
if (ret) {
@@ -796,26 +783,26 @@ static int kvm_riscv_get_regs_vector(CPUState *cs)
796783
return 0;
797784
}
798785

799-
ret = kvm_get_one_reg(cs, RISCV_VECTOR_CSR_REG(env, vstart), &reg);
786+
ret = kvm_get_one_reg(cs, RISCV_VECTOR_CSR_REG(vstart), &reg);
800787
if (ret) {
801788
return ret;
802789
}
803790
env->vstart = reg;
804791

805-
ret = kvm_get_one_reg(cs, RISCV_VECTOR_CSR_REG(env, vl), &reg);
792+
ret = kvm_get_one_reg(cs, RISCV_VECTOR_CSR_REG(vl), &reg);
806793
if (ret) {
807794
return ret;
808795
}
809796
env->vl = reg;
810797

811-
ret = kvm_get_one_reg(cs, RISCV_VECTOR_CSR_REG(env, vtype), &reg);
798+
ret = kvm_get_one_reg(cs, RISCV_VECTOR_CSR_REG(vtype), &reg);
812799
if (ret) {
813800
return ret;
814801
}
815802
env->vtype = reg;
816803

817804
if (kvm_v_vlenb.supported) {
818-
ret = kvm_get_one_reg(cs, RISCV_VECTOR_CSR_REG(env, vlenb), &reg);
805+
ret = kvm_get_one_reg(cs, RISCV_VECTOR_CSR_REG(vlenb), &reg);
819806
if (ret) {
820807
return ret;
821808
}
@@ -853,26 +840,26 @@ static int kvm_riscv_put_regs_vector(CPUState *cs)
853840
}
854841

855842
reg = env->vstart;
856-
ret = kvm_set_one_reg(cs, RISCV_VECTOR_CSR_REG(env, vstart), &reg);
843+
ret = kvm_set_one_reg(cs, RISCV_VECTOR_CSR_REG(vstart), &reg);
857844
if (ret) {
858845
return ret;
859846
}
860847

861848
reg = env->vl;
862-
ret = kvm_set_one_reg(cs, RISCV_VECTOR_CSR_REG(env, vl), &reg);
849+
ret = kvm_set_one_reg(cs, RISCV_VECTOR_CSR_REG(vl), &reg);
863850
if (ret) {
864851
return ret;
865852
}
866853

867854
reg = env->vtype;
868-
ret = kvm_set_one_reg(cs, RISCV_VECTOR_CSR_REG(env, vtype), &reg);
855+
ret = kvm_set_one_reg(cs, RISCV_VECTOR_CSR_REG(vtype), &reg);
869856
if (ret) {
870857
return ret;
871858
}
872859

873860
if (kvm_v_vlenb.supported) {
874861
reg = cpu->cfg.vlenb;
875-
ret = kvm_set_one_reg(cs, RISCV_VECTOR_CSR_REG(env, vlenb), &reg);
862+
ret = kvm_set_one_reg(cs, RISCV_VECTOR_CSR_REG(vlenb), &reg);
876863

877864
for (int i = 0; i < 32; i++) {
878865
/*
@@ -951,25 +938,24 @@ static void kvm_riscv_destroy_scratch_vcpu(KVMScratchCPU *scratch)
951938

952939
static void kvm_riscv_init_machine_ids(RISCVCPU *cpu, KVMScratchCPU *kvmcpu)
953940
{
954-
CPURISCVState *env = &cpu->env;
955941
struct kvm_one_reg reg;
956942
int ret;
957943

958-
reg.id = RISCV_CONFIG_REG(env, mvendorid);
944+
reg.id = RISCV_CONFIG_REG(mvendorid);
959945
reg.addr = (uint64_t)&cpu->cfg.mvendorid;
960946
ret = ioctl(kvmcpu->cpufd, KVM_GET_ONE_REG, &reg);
961947
if (ret != 0) {
962948
error_report("Unable to retrieve mvendorid from host, error %d", ret);
963949
}
964950

965-
reg.id = RISCV_CONFIG_REG(env, marchid);
951+
reg.id = RISCV_CONFIG_REG(marchid);
966952
reg.addr = (uint64_t)&cpu->cfg.marchid;
967953
ret = ioctl(kvmcpu->cpufd, KVM_GET_ONE_REG, &reg);
968954
if (ret != 0) {
969955
error_report("Unable to retrieve marchid from host, error %d", ret);
970956
}
971957

972-
reg.id = RISCV_CONFIG_REG(env, mimpid);
958+
reg.id = RISCV_CONFIG_REG(mimpid);
973959
reg.addr = (uint64_t)&cpu->cfg.mimpid;
974960
ret = ioctl(kvmcpu->cpufd, KVM_GET_ONE_REG, &reg);
975961
if (ret != 0) {
@@ -984,7 +970,7 @@ static void kvm_riscv_init_misa_ext_mask(RISCVCPU *cpu,
984970
struct kvm_one_reg reg;
985971
int ret;
986972

987-
reg.id = RISCV_CONFIG_REG(env, isa);
973+
reg.id = RISCV_CONFIG_REG(isa);
988974
reg.addr = (uint64_t)&env->misa_ext_mask;
989975
ret = ioctl(kvmcpu->cpufd, KVM_GET_ONE_REG, &reg);
990976

@@ -1001,11 +987,10 @@ static void kvm_riscv_init_misa_ext_mask(RISCVCPU *cpu,
1001987
static void kvm_riscv_read_cbomz_blksize(RISCVCPU *cpu, KVMScratchCPU *kvmcpu,
1002988
KVMCPUConfig *cbomz_cfg)
1003989
{
1004-
CPURISCVState *env = &cpu->env;
1005990
struct kvm_one_reg reg;
1006991
int ret;
1007992

1008-
reg.id = kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_CONFIG,
993+
reg.id = KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_CONFIG,
1009994
cbomz_cfg->kvm_reg_id);
1010995
reg.addr = (uint64_t)kvmconfig_get_cfg_addr(cpu, cbomz_cfg);
1011996
ret = ioctl(kvmcpu->cpufd, KVM_GET_ONE_REG, &reg);
@@ -1019,15 +1004,14 @@ static void kvm_riscv_read_cbomz_blksize(RISCVCPU *cpu, KVMScratchCPU *kvmcpu,
10191004
static void kvm_riscv_read_multiext_legacy(RISCVCPU *cpu,
10201005
KVMScratchCPU *kvmcpu)
10211006
{
1022-
CPURISCVState *env = &cpu->env;
10231007
uint64_t val;
10241008
int i, ret;
10251009

10261010
for (i = 0; i < ARRAY_SIZE(kvm_multi_ext_cfgs); i++) {
10271011
KVMCPUConfig *multi_ext_cfg = &kvm_multi_ext_cfgs[i];
10281012
struct kvm_one_reg reg;
10291013

1030-
reg.id = kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_ISA_EXT,
1014+
reg.id = KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_ISA_EXT,
10311015
multi_ext_cfg->kvm_reg_id);
10321016
reg.addr = (uint64_t)&val;
10331017
ret = ioctl(kvmcpu->cpufd, KVM_GET_ONE_REG, &reg);
@@ -1159,7 +1143,7 @@ static void kvm_riscv_init_multiext_cfg(RISCVCPU *cpu, KVMScratchCPU *kvmcpu)
11591143

11601144
for (i = 0; i < ARRAY_SIZE(kvm_multi_ext_cfgs); i++) {
11611145
multi_ext_cfg = &kvm_multi_ext_cfgs[i];
1162-
reg_id = kvm_riscv_reg_id_ulong(&cpu->env, KVM_REG_RISCV_ISA_EXT,
1146+
reg_id = KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_ISA_EXT,
11631147
multi_ext_cfg->kvm_reg_id);
11641148
reg_search = bsearch(&reg_id, reglist->reg, reglist->n,
11651149
sizeof(uint64_t), uint64_cmp);
@@ -1338,12 +1322,11 @@ void kvm_arch_init_irq_routing(KVMState *s)
13381322

13391323
static int kvm_vcpu_set_machine_ids(RISCVCPU *cpu, CPUState *cs)
13401324
{
1341-
CPURISCVState *env = &cpu->env;
13421325
target_ulong reg;
13431326
uint64_t id;
13441327
int ret;
13451328

1346-
id = RISCV_CONFIG_REG(env, mvendorid);
1329+
id = RISCV_CONFIG_REG(mvendorid);
13471330
/*
13481331
* cfg.mvendorid is an uint32 but a target_ulong will
13491332
* be written. Assign it to a target_ulong var to avoid
@@ -1355,13 +1338,13 @@ static int kvm_vcpu_set_machine_ids(RISCVCPU *cpu, CPUState *cs)
13551338
return ret;
13561339
}
13571340

1358-
id = RISCV_CONFIG_REG(env, marchid);
1341+
id = RISCV_CONFIG_REG(marchid);
13591342
ret = kvm_set_one_reg(cs, id, &cpu->cfg.marchid);
13601343
if (ret != 0) {
13611344
return ret;
13621345
}
13631346

1364-
id = RISCV_CONFIG_REG(env, mimpid);
1347+
id = RISCV_CONFIG_REG(mimpid);
13651348
ret = kvm_set_one_reg(cs, id, &cpu->cfg.mimpid);
13661349

13671350
return ret;
@@ -1911,7 +1894,7 @@ void riscv_kvm_cpu_finalize_features(RISCVCPU *cpu, Error **errp)
19111894
if (cpu->cfg.ext_zicbom &&
19121895
riscv_cpu_option_set(kvm_cbom_blocksize.name)) {
19131896

1914-
reg.id = kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_CONFIG,
1897+
reg.id = KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_CONFIG,
19151898
kvm_cbom_blocksize.kvm_reg_id);
19161899
reg.addr = (uint64_t)&val;
19171900
ret = ioctl(kvmcpu.cpufd, KVM_GET_ONE_REG, &reg);
@@ -1930,7 +1913,7 @@ void riscv_kvm_cpu_finalize_features(RISCVCPU *cpu, Error **errp)
19301913
if (cpu->cfg.ext_zicboz &&
19311914
riscv_cpu_option_set(kvm_cboz_blocksize.name)) {
19321915

1933-
reg.id = kvm_riscv_reg_id_ulong(env, KVM_REG_RISCV_CONFIG,
1916+
reg.id = KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_CONFIG,
19341917
kvm_cboz_blocksize.kvm_reg_id);
19351918
reg.addr = (uint64_t)&val;
19361919
ret = ioctl(kvmcpu.cpufd, KVM_GET_ONE_REG, &reg);

0 commit comments

Comments
 (0)