• Ian Campbell's avatar
    xen: arm: mandate EABI and use generic atomic operations. · 85323a99
    Ian Campbell authored
    Rob Herring has observed that c81611c4 "xen: event channel arrays are
    xen_ulong_t and not unsigned long" introduced a compile failure when building
    without CONFIG_AEABI:
    
    /tmp/ccJaIZOW.s: Assembler messages:
    /tmp/ccJaIZOW.s:831: Error: even register required -- `ldrexd r5,r6,[r4]'
    
    Will Deacon pointed out that this is because OABI does not require even base
    registers for 64-bit values. We can avoid this by simply using the existing
    atomic64_xchg operation and the same containerof trick as used by the cmpxchg
    macros. However since this code is used on memory which is shared with the
    hypervisor we require proper atomic instructions and cannot use the generic
    atomic64 callbacks (which are based on spinlocks), therefore add a dependency
    on !GENERIC_ATOMIC64. Since we already depend on !CPU_V6 there isn't much
    downside to this.
    
    While thinking about this we also observed that OABI has different struct
    alignment requirements to EABI, which is a problem for hypercall argument
    structs which are shared with the hypervisor and which must be in EABI layout.
    Since I don't expect people to want to run OABI kernels on Xen depend on
    CONFIG_AEABI explicitly too (although it also happens to be enforced by the
    !GENERIC_ATOMIC64 requirement too).
    Signed-off-by: default avatarIan Campbell <ian.campbell@citrix.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Rob Herring <robherring2@gmail.com>
    Acked-by: default avatarStefano Stabellini <Stefano.Stabellini@eu.citrix.com>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    85323a99
events.h 466 Bytes