| Message ID | 20260227180243309RupzclQ90f5u2KZTabSn0@zte.com.cn |
|---|---|
| State | New |
| Headers | show |
| Series | riscv: AIA: Add in-kernel irqchips save and restore function support | expand |
On Fri, Feb 27, 2026 at 06:02:43PM +0800, liu.xuemei1@zte.com.cn wrote: > From: Xuemei Liu <liu.xuemei1@zte.com.cn> > > Create common function kvm_riscv_aia_access_reg to access APLIC > and IMSIC regs Missing period. LGTM. Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com> Thanks, Chao > > Signed-off-by: Xuemei Liu <liu.xuemei1@zte.com.cn> > --- > target/riscv/kvm/kvm-cpu.c | 7 ++++++- > target/riscv/kvm/kvm_riscv.h | 1 + > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c > index befcbb0a9a..2c29d8d07c 100644 > --- a/target/riscv/kvm/kvm-cpu.c > +++ b/target/riscv/kvm/kvm-cpu.c > @@ -58,6 +58,7 @@ void riscv_kvm_aplic_request(void *opaque, int irq, int level) > } > > static bool cap_has_mp_state; > +static int aia_fd = -1; > > #define KVM_RISCV_REG_ID_U32(type, idx) (KVM_REG_RISCV | KVM_REG_SIZE_U32 | \ > type | idx) > @@ -1842,13 +1843,17 @@ void kvm_arch_accel_class_init(ObjectClass *oc) > "auto"); > } > > +void kvm_riscv_aia_access_reg(int group, uint64_t addr, void *val, bool write) > +{ > + kvm_device_access(aia_fd, group, addr, val, write, &error_abort); > +} > + > void kvm_riscv_aia_create(MachineState *machine, uint64_t group_shift, > uint64_t aia_irq_num, uint64_t aia_msi_num, > uint64_t aplic_base, uint64_t imsic_base, > uint64_t guest_num) > { > int ret, i; > - int aia_fd = -1; > uint64_t default_aia_mode; > uint64_t socket_count = riscv_socket_count(machine); > uint64_t max_hart_per_socket = 0; > diff --git a/target/riscv/kvm/kvm_riscv.h b/target/riscv/kvm/kvm_riscv.h > index 953db94160..cec13d9f31 100644 > --- a/target/riscv/kvm/kvm_riscv.h > +++ b/target/riscv/kvm/kvm_riscv.h > @@ -23,6 +23,7 @@ > > void kvm_riscv_reset_vcpu(RISCVCPU *cpu); > void kvm_riscv_set_irq(RISCVCPU *cpu, int irq, int level); > +void kvm_riscv_aia_access_reg(int group, uint64_t addr, void *val, bool write); > void kvm_riscv_aia_create(MachineState *machine, uint64_t group_shift, > uint64_t aia_irq_num, uint64_t aia_msi_num, > uint64_t aplic_base, uint64_t imsic_base, > -- > 2.27.0 >
diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c index befcbb0a9a..2c29d8d07c 100644 --- a/target/riscv/kvm/kvm-cpu.c +++ b/target/riscv/kvm/kvm-cpu.c @@ -58,6 +58,7 @@ void riscv_kvm_aplic_request(void *opaque, int irq, int level) } static bool cap_has_mp_state; +static int aia_fd = -1; #define KVM_RISCV_REG_ID_U32(type, idx) (KVM_REG_RISCV | KVM_REG_SIZE_U32 | \ type | idx) @@ -1842,13 +1843,17 @@ void kvm_arch_accel_class_init(ObjectClass *oc) "auto"); } +void kvm_riscv_aia_access_reg(int group, uint64_t addr, void *val, bool write) +{ + kvm_device_access(aia_fd, group, addr, val, write, &error_abort); +} + void kvm_riscv_aia_create(MachineState *machine, uint64_t group_shift, uint64_t aia_irq_num, uint64_t aia_msi_num, uint64_t aplic_base, uint64_t imsic_base, uint64_t guest_num) { int ret, i; - int aia_fd = -1; uint64_t default_aia_mode; uint64_t socket_count = riscv_socket_count(machine); uint64_t max_hart_per_socket = 0; diff --git a/target/riscv/kvm/kvm_riscv.h b/target/riscv/kvm/kvm_riscv.h index 953db94160..cec13d9f31 100644 --- a/target/riscv/kvm/kvm_riscv.h +++ b/target/riscv/kvm/kvm_riscv.h @@ -23,6 +23,7 @@ void kvm_riscv_reset_vcpu(RISCVCPU *cpu); void kvm_riscv_set_irq(RISCVCPU *cpu, int irq, int level); +void kvm_riscv_aia_access_reg(int group, uint64_t addr, void *val, bool write); void kvm_riscv_aia_create(MachineState *machine, uint64_t group_shift, uint64_t aia_irq_num, uint64_t aia_msi_num, uint64_t aplic_base, uint64_t imsic_base,