HI Indan,

*ptr = 0xC0FFEE;
__asm volatile("dmb sy" ::: "memory");
*ptrc = 0xDEADBEEF;

test_assert(*ptr == 0xC0FFEE);                       <======== failed
test_assert(*ptrc == 0xDEADBEEF);

In this case 0xC0FFEE assertion failed.

Leonid


On Thu, Mar 28, 2024 at 5:39 PM Indan Zupancic <in...@nul.nu> wrote:

> Hello Leonid,
>
> On 2024-03-28 20:18, Leonid Meyerovich wrote:
> > I run sel4test on the aarch64 platform.
>
> What CPU are you testing on?
>
> > My CACHEFLUSH0001 test in sel4test failed
> >  /* Clean makes data observable to non-cached page */
> > *ptr = 0xC0FFEE;
> > *ptrc = 0xDEADBEEF;
> > test_assert(*ptr == 0xC0FFEE);
> > test_assert(*ptrc == 0xDEADBEEF);
>
> The problem is that the test is not reliable, it assumes
> things it can't safely assume, even though they're usually
> correct. In this case it assumes that the cache line
> containing ptrc doesn't get evicted and that no memory
> reordering happened between the ptr and ptrc writes.
> See also https://github.com/seL4/sel4test/issues/80.
>
> That said, it should usually pass. Is it consistently
> failing for you?
>
> > I have tried to make to 'improve' memory/cache coherence,
> > but the last assertion still failed
>
> It's more likely that the 0xC0FFEE assertion fails,
> but for you the 0xDEADBEEF one fails?
>
> >  /* Clean makes data observable to non-cached page */
> > *ptr = 0xC0FFEE;
> > *ptrc = 0xDEADBEEF;
> >
> > error = seL4_ARM_Page_Clean_Data(framec, 0, PAGE_SIZE_4K);
> > error = seL4_ARM_Page_Invalidate_Data(framec, 0, PAGE_SIZE_4K);
> >
> > __asm volatile("dmb sy" ::: "memory");
>
> Try putting this after the *ptr = 0xC0FFEE; write.
>
> Tip for anyone needing cache maintenance on Aarch64:
> There is no need to use the seL4 system calls, you can
> do (non-invalidating) cache maintenance instructions
> from user space.
>
> Greetings,
>
> Indan
>
_______________________________________________
Devel mailing list -- devel@sel4.systems
To unsubscribe send an email to devel-leave@sel4.systems

Reply via email to