[PATCH v1 11/17] xen/riscv: add vAPLIC state save/restore hooks
Oleksii Kurochko <[email protected]>
| Newsgroups | org.xenproject.lists.xen-devel |
|---|---|
| Message-ID | <b8aad28481520eb241a1f7519336d3e4bc9aff9f.1784560663.git.oleksii.kurochko@gmail.com> |
vAPLIC state needs to be saved and restored as part of vCPU context management. Introduce vaplic_state_save() and vaplic_state_restore() and wire them to the IMSIC state save/restore helpers when MSI is available. The functions are currently no-ops on platforms without MSI support and will lead to BUG_ON() to not miss add support of no-MSI case. Co-developed-by: Romain Caritey <[email protected]> Signed-off-by: Oleksii Kurochko <[email protected]> --- xen/arch/riscv/include/asm/vaplic.h | 3 +++ xen/arch/riscv/vaplic.c | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/xen/arch/riscv/include/asm/vaplic.h b/xen/arch/riscv/include/asm/vaplic.h index 7bf9247f4eae..fbd224b9a34a 100644 --- a/xen/arch/riscv/include/asm/vaplic.h +++ b/xen/arch/riscv/include/asm/vaplic.h @@ -34,4 +34,7 @@ struct vaplic { int domain_vaplic_init(struct domain *d); void domain_vaplic_deinit(struct domain *d); +void vaplic_state_save(struct vcpu *v); +void vaplic_state_restore(struct vcpu *v); + #endif /* ASM__RISCV__VAPLIC_H */ diff --git a/xen/arch/riscv/vaplic.c b/xen/arch/riscv/vaplic.c index 03240730e344..0723aad9558e 100644 --- a/xen/arch/riscv/vaplic.c +++ b/xen/arch/riscv/vaplic.c @@ -400,9 +400,27 @@ static const struct mmio_handler_ops vaplic_mmio_ops = { .write = vaplic_mmio_write, }; +void vaplic_state_save(struct vcpu *v) +{ + if ( has_msi_support() ) + imsic_state_save(v); + else + BUG_ON("unimplemented"); +} + +void vaplic_state_restore(struct vcpu *v) +{ + if ( has_msi_support() ) + imsic_state_restore(v); + else + BUG_ON("unimplemented"); +} + static const struct vintc_ops vintc_ops = { .vcpu_init = vaplic_init, .vcpu_deinit = vaplic_deinit, + .store_state = vaplic_state_save, + .restore_state = vaplic_state_restore, }; int domain_vaplic_init(struct domain *d) -- 2.54.0