Seeing error in one test on ARM: org.openjdk.jcstress.tests.volatiles.ReadTwiceOverVolatileReadTest

Aleksey Shipilev shade at redhat.com
Thu Feb 23 19:35:39 UTC 2017


On 02/23/2017 07:52 PM, White, Derek wrote:
> 1) One explanation for this is that the load of w12 completed out-of-order 
> before the load of w10, so it saw the initial order. But this seems to 
> violate the requirement that: " Two reads to the same address by the same 
> observer are observed in program order by all observers within the
> shareability domain of the memory address being accessed." B2.7.2, ARM ARM
> v8. This requirement is independent of the LDAR of w11.

Yes, that's "coherence": a single modification order for a particular location.

> 2) The LDAR adds the additional requirement (paraphrased by cancelling out 
> text of shareability domains): "For a Load-Acquire, observers observe 
> accesses in the following order: 1. The read caused by the Load-Acquire. 2. 
> Reads and writes caused by loads and stores that appear in program order 
> after the Load-Acquire requires that the observer observes the access." 
> B2.7.3.

> There is so much verbiage in the original text, but this seems to imply that 
> the load into w12 can't move above the ldar of w11. But this restriction by 
> itself doesn't prevent an earlier load being delayed after the ldar. So if 
> the 1st and 3rd  loads had different source virtual addresses then the load 
> of w10 could have been delayed after the load of w12.

Yes. Where coherence comes into play again.

Thanks,
-Aleksey



More information about the jcstress-dev mailing list