|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN v4 10/11] xen/Arm: GICv3: Define macros to read/write 64 bit
Hi, On 28/11/2022 15:56, Ayan Kumar Halder wrote: On AArch32, ldrd/strd instructions are not atomic when used to access MMIO. Furthermore, ldrd/strd instructions are not decoded by Arm when running as a guest to access emulated MMIO region. Thus, we have defined readq_relaxed_non_atomic()/writeq_relaxed_non_atomic() which in turn calls readl_relaxed()/writel_relaxed() for the lower and upper 32 bits. For AArch64, readq_relaxed_non_atomic()/writeq_relaxed_non_atomic() invokes readq_relaxed()/writeq_relaxed() respectively. As GICv3 registers (GICD_IROUTER, GICR_TYPER) can be accessed in a non atomic manner, so we have used readq_relaxed_non_atomic()/writeq_relaxed_non_atomic(). I had another look at the code and I think there needs some clarification necessary because the accesses to IROUTER is non-obvious.
Using non atomic here makes sense because AFAIU the interrupt will be disabled. Therefore the GIC should not use the register. }static int gicv3_enable_redist(void) This non-atomic read is OK because GICR_TYPER is read-only. if ( (typer >> 32) == aff ) This can be called with interrupt enabled. So a non-atomic access means the GIC will see a transient value when only one of two 32-bit will be updated. In practice this is fine because only Aff3 is so far defined in the top 32-bits. So effectively, they will be RESS0 and never change. Cheers, -- Julien Grall
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |