[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 04/19] xen: arm: provide and use a handle_raz_wi helper
On Thu, 2015-04-02 at 17:01 +0100, Ian Campbell wrote: > On Thu, 2015-04-02 at 16:50 +0100, Ian Campbell wrote: > > > Writing to the bottom half (e.g. w0) of a register implicitly clears the > > top half, IIRC, so I think a kernel is unlikely to want to do this, even > > if it could (which I'm not quite convinced of). > > That said, I'll see if I can make something work with the handle_* > taking the reg number instead of a pointer and calling select_user_reg > in each. Actually don't even need that, I think the following does what is needed. I'm not 100% convinced it is needed though, but it's simple enough, and I can't find anything in the ARM ARM right now which rules out what you are suggesting, even if it is unlikely. Ian. diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index 71e349a..61a2106 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -1585,7 +1585,14 @@ static void handle_raz_wi(struct cpu_user_regs *regs, return inject_undef_exception(regs, hsr); if ( read ) - *reg = 0; + { +#ifdef CONFIG_ARM_64 + if ( psr_mode_is_32bit(regs->cpsr) ) + *reg &= ~0xffffffffUL; + else +#endif + *reg = 0; + } /* else: write ignored */ advance_pc(regs, hsr); @@ -1622,7 +1629,12 @@ static void handle_ro_raz(struct cpu_user_regs *regs, return inject_undef_exception(regs, hsr); /* else: raz */ - *reg = 0; +#ifdef CONFIG_ARM_64 + if ( psr_mode_is_32bit(regs->cpsr) ) + *reg &= ~0xffffffffUL; + else +#endif + *reg = 0; advance_pc(regs, hsr); } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |