On Sun, Mar 20, 2016 at 09:32:44PM +0100, Thomas Petazzoni wrote:
Hello,
On Sun, 20 Mar 2016 14:36:05 -0400, Rich Felker wrote:
If you mean (1), then before my patch, the ldrex/strex code was only enabled when USE_LDREXSTREX was enabled, and this option had a "depends on COMPILE_IN_THUMB". Hence my patch doesn't change the fact that the ldrex/strex logic is only used on Thumb. Whether it can/should be enabled in non-Thumb configurations is a separate matter from what my patch is doing.
OK, then the logic was wrong before, too. :-)
Right, but my patch is not making it worse than it was.
If you mean (2), then there is indeed a problem. Though, according to http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/14979.html, "On a v6 or later core (ARM11 onwards) you should use the LDREX/STREX instructions instead", which would suggest that such instructions are available.
Indeed, and it's further complicated by the fact that none of these instructions are proper memory barriers so they're basically useless without a separate barrier instruction, which does not exist on pre-v6, and on v6, only as a coprocessor operation that's not available in thumb1 or on uc models. Not until v7 did arm have proper working atomics. :(
Sure. But here as well, my patch is not making things worse I believe.
Agreed. My only concern would be whether your patch makes it harder to fix, but that's not my call to make.
Rich