[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH 02/10] arm64: Add hook to handle guest GICv3 sysreg accesses
From: Manish Jaggi <manish.jaggi@xxxxxxxxxx> In order to start handling guest access to GICv3 system registers, let's add a hook that will get called when we trap a system register access. This handling code is kept independent of other traps. Set CONFIG_VGIC_ERRATA to enable this code. Signed-off-by: Manish Jaggi <manish.jaggi@xxxxxxxxxx> --- xen/arch/arm/arm64/vsysreg.c | 17 +++++++++++++++++ xen/arch/arm/traps.c | 11 +++++++++++ xen/include/asm-arm/arm64/traps.h | 2 ++ 3 files changed, 30 insertions(+) diff --git a/xen/arch/arm/arm64/vsysreg.c b/xen/arch/arm/arm64/vsysreg.c index c57ac12503..a5c17e460f 100644 --- a/xen/arch/arm/arm64/vsysreg.c +++ b/xen/arch/arm/arm64/vsysreg.c @@ -219,6 +219,23 @@ void do_sysreg(struct cpu_user_regs *regs, regs->pc += 4; } +#ifdef CONFIG_VGIC_ERRATA +int do_fixup_vgic_errata(struct cpu_user_regs *regs, const union hsr hsr) +{ + int ret = 0; + + local_irq_disable(); + switch ( hsr.bits & HSR_SYSREG_REGS_MASK ) + { + default: + ret = -1; + break; + } + local_irq_enable(); + + return ret; +} +#endif /* * Local variables: * mode: C diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index f6f6de3691..d4f0581d33 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -2103,6 +2103,17 @@ void do_trap_guest_sync(struct cpu_user_regs *regs) { const union hsr hsr = { .bits = regs->hsr }; +#ifdef CONFIG_VGIC_ERRATA + int ret; + + ret = do_fixup_vgic_errata(regs,hsr); + if ( !ret ) + { + advance_pc(regs, hsr); + return; + } +#endif + enter_hypervisor_head(regs); switch (hsr.ec) { diff --git a/xen/include/asm-arm/arm64/traps.h b/xen/include/asm-arm/arm64/traps.h index 2379b578cb..7378a1b022 100644 --- a/xen/include/asm-arm/arm64/traps.h +++ b/xen/include/asm-arm/arm64/traps.h @@ -5,6 +5,8 @@ void inject_undef64_exception(struct cpu_user_regs *regs, int instr_len); void do_sysreg(struct cpu_user_regs *regs, const union hsr hsr); +int do_fixup_vgic_errata(struct cpu_user_regs *regs, + const union hsr hsr); #endif /* __ASM_ARM64_TRAPS__ */ /* -- 2.14.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |