|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v1 11/17] xen/riscv: add vAPLIC state save/restore hooks
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 <Romain.Caritey@xxxxxxxxxxxxx>
Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
---
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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |