@@ -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
8573static 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), ®); \
119+ int _ret = kvm_get_one_reg(cs, RISCV_CSR_REG(csr), ®); \
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), ®); \
127+ int _ret = kvm_set_one_reg(cs, RISCV_CSR_REG(csr), ®); \
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
431419static 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
952939static 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,
1001987static 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,
10191004static 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
13391323static 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