@@ -90,19 +90,16 @@ static int test_page_flush(env_t env)
9090 test_assert (* ptrc == 0xDEADBEEF );
9191 error = seL4_ARM_Page_Invalidate_Data (framec , 0 , PAGE_SIZE_4K );
9292 assert (!error );
93-
94- /* In case the invalidation performs an implicit clean, write a new
95- value to RAM and make sure the cached read retrieves it
96- Remember to drain any store buffer!
97- */
98- * ptr = 0xBEEFCAFE ;
99- #if defined(CONFIG_ARCH_AARCH32 )
100- asm volatile ("dmb" ::: "memory" );
101- #elif defined(CONFIG_ARCH_AARCH64 )
102- asm volatile ("dmb sy" ::: "memory" );
103- #endif /* CONFIG_ARCH_AARCHxx */
104- test_assert (* ptrc == 0xBEEFCAFE );
105- test_assert (* ptr == 0xBEEFCAFE );
93+ /*
94+ * If invalidate works, both reads should get the uncached value.
95+ *
96+ * If invalidate does an implicit clean, both reads should get the cached value.
97+ * The latter is also true if a random cache eviction happens before the call to
98+ * seL4_ARM_Page_Invalidate_Data finishes.
99+ *
100+ * Whatever happens, both values should always be the same now.
101+ */
102+ test_assert (* ptr == * ptrc );
106103
107104 return sel4test_get_result ();
108105}
@@ -232,15 +229,16 @@ static int test_page_directory_flush(env_t env)
232229 test_assert (* ptrc == 0xDEADBEEF );
233230 err = seL4_ARCH_PageDirectory_Invalidate_Data (env -> page_directory , vstartc , vstartc + PAGE_SIZE_4K );
234231 assert (!err );
235- /* In case the invalidation performs an implicit clean, write a new
236- value to RAM and make sure the cached read retrieves it.
237- Need to do an invalidate before retrieving though to guard
238- against speculative loads */
239- * ptr = 0xBEEFCAFE ;
240- err = seL4_ARCH_PageDirectory_Invalidate_Data (env -> page_directory , vstartc , vstartc + PAGE_SIZE_4K );
241- assert (!err );
242- test_assert (* ptrc == 0xBEEFCAFE );
243- test_assert (* ptr == 0xBEEFCAFE );
232+ /*
233+ * If invalidate works, both reads should get the uncached value.
234+ *
235+ * If invalidate does an implicit clean, both reads should get the cached value.
236+ * The latter is also true if a random cache eviction happens before the call to
237+ * seL4_ARM_Page_Invalidate_Data finishes.
238+ *
239+ * Whatever happens, both values should always be the same now.
240+ */
241+ test_assert (* ptr == * ptrc );
244242
245243 return sel4test_get_result ();
246244}
0 commit comments