[PATCH v3 12/14] ARM64: KVM: vgic_elrsr and vgic_eisr need to be byteswapped in BE case
Marc Zyngier
marc.zyngier at arm.com
Tue May 27 12:11:17 PDT 2014
On 26/05/14 18:35, Christoffer Dall wrote:
> On Tue, May 13, 2014 at 09:14:04AM -0700, Victor Kamensky wrote:
>> On arm64 'u32 vgic_eisr[2];' and 'u32 vgic_elrsr[2]' are accessed as
>> one 'unsigned long *' bit fields, which has 64bit size. So we need to
>> swap least significant word with most significant word when code reads
>> those registers from h/w.
>>
>> Signed-off-by: Victor Kamensky <victor.kamensky at linaro.org>
>> ---
>> arch/arm64/kvm/hyp.S | 7 +++++++
>> 1 file changed, 7 insertions(+)
>>
>> diff --git a/arch/arm64/kvm/hyp.S b/arch/arm64/kvm/hyp.S
>> index 0620691..5035b41 100644
>> --- a/arch/arm64/kvm/hyp.S
>> +++ b/arch/arm64/kvm/hyp.S
>> @@ -415,10 +415,17 @@ CPU_BE( rev w11, w11 )
>> str w4, [x3, #VGIC_CPU_HCR]
>> str w5, [x3, #VGIC_CPU_VMCR]
>> str w6, [x3, #VGIC_CPU_MISR]
>> +#ifndef CONFIG_CPU_BIG_ENDIAN
>> str w7, [x3, #VGIC_CPU_EISR]
>> str w8, [x3, #(VGIC_CPU_EISR + 4)]
>> str w9, [x3, #VGIC_CPU_ELRSR]
>> str w10, [x3, #(VGIC_CPU_ELRSR + 4)]
>> +#else
>> + str w7, [x3, #(VGIC_CPU_EISR + 4)]
>> + str w8, [x3, #VGIC_CPU_EISR]
>> + str w9, [x3, #(VGIC_CPU_ELRSR + 4)]
>> + str w10, [x3, #VGIC_CPU_ELRSR]
>> +#endif
>> str w11, [x3, #VGIC_CPU_APR]
>>
>> /* Clear GICH_HCR */
>> --
>> 1.8.1.4
>>
> Hmm, the data structure doesn't actually clearly define this as bitmap,
> but the architecture clearly defines this as two registers. It feels
> like this critical code is getting over complicated to cater for the
> fact that we can use a convenient for_each_set_bit() function when we
> process a maintenance interrupt.
>
> Marc, what are your thoughts on this? Change vgic_process_maintenance
> and clearly document the array on struct vgic_cpu, or go ahead with this
> change?
So I've already started abstracting access to ELRSR and EISR in my GICv3
patches, and we could perfectly stick the code swapping code in the
accessors, letting the world switch alone.
These changes could easily be lifter from the series, and adapted. This
would also make the "bitmap-ification" more obvious.
M.
--
Jazz is not dead. It just smells funny...
More information about the linux-arm-kernel
mailing list