On Tue, 13 Nov 2012, Jon Masters wrote: > On 11/11/2012 03:56 AM, Jon Masters wrote: > > > This is an ugly kludge with some hand crafted assembly, but it builds > > locally, and I think the scratch build should succeed this time. Note, I > > was confused by the fact that there are at least *two* different sets of > > atomics implemented in OMPI (it's a mess). With this, both are now > > fixed, regardless of which compiler is being used. > > I've updated the patch, following useful feedback from Nicolas Pitre. > There is at least one bug in the current code (r3 clobbering, bad use of > r12 because I knew it wasn't touched and didn't want to save it, which > was just plain lazy and shouldn't have been done). I've tested these > fixes in a little test harness and have a scratch going now: I can see a few more issues in this patch: The ARMv5 version of opal_atomic_add_32 doesn't return the new value as the ARMv6 version does. If that is necessary, you'll need a "mov r0, r1" before the pop. Same issue for opal_atomic_sub_32. In the ARMv6 file, you use ldrexd/strexd instructions which are only available with the k extension of the ARMv6 architecture. That means non-SMP ARMv6 variants won't support those instructions. You probably should consider using the __kuser_cmpxchg64 kernel helper instead in that case. And of course, the availability of __kuser_cmpxchg64 means that you could add 64 bit support to the ARMv5 version as well if you feel like it. Nicolas _______________________________________________ arm mailing list arm@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/arm