On 10/09/14 15:12, Daniel Cederman wrote:
Invalidation of data cache lines might cause data written to the stack
to get lost.
---
testsuites/smptests/smpcache01/init.c | 45 +++++++++++++++------------
testsuites/smptests/smpcache01/smpcache01.doc | 2 --
testsuites/smptests/smpcache01/smpcache01.scn | 18 ++++-------
3 files changed, 31 insertions(+), 34 deletions(-)
diff --git a/testsuites/smptests/smpcache01/init.c
b/testsuites/smptests/smpcache01/init.c
index dd2f9f1..99df974 100644
--- a/testsuites/smptests/smpcache01/init.c
+++ b/testsuites/smptests/smpcache01/init.c
@@ -20,6 +20,8 @@
const char rtems_test_name[] = "SMPCACHE 1";
+const char data_to_flush[1024];
+
Please use static variables whenever possible.
#define CPU_COUNT 32
#define WORKER_PRIORITY 100
@@ -44,6 +46,11 @@ static test_context ctx = {
.barrier = SMP_BARRIER_CONTROL_INITIALIZER,
};
+static void function_to_flush( void )
+{
+ /* Does nothing. Used to give a pointer to instruction address space. */
+}
+
static void test_cache_message( const void *d_addr, size_t n_bytes )
{
rtems_test_assert(n_bytes == 123);
@@ -52,22 +59,20 @@ static void test_cache_message( const void *d_addr, size_t
n_bytes )
ctx.count[rtems_get_current_processor()]++;
}
-static void all_cache_manager_smp_functions( size_t set_size,
+static void cache_manager_smp_functions( size_t set_size,
cpu_set_t *cpu_set )
{
- rtems_cache_flush_multiple_data_lines_processor_set( 0, 10, set_size,
- cpu_set );
- rtems_cache_invalidate_multiple_data_lines_processor_set( 0, 10, set_size,
- cpu_set );
There is nothing wrong with
rtems_cache_invalidate_multiple_data_lines_processor_set() provided you use the
right data area.
+ rtems_cache_flush_multiple_data_lines_processor_set( &data_to_flush,
+ sizeof(data_to_flush), set_size, cpu_set );
rtems_cache_flush_entire_data_processor_set( set_size, cpu_set );
- rtems_cache_invalidate_entire_data_processor_set( set_size, cpu_set );
Yes, this one is problematic since it may kill your stack frame.
rtems_cache_invalidate_entire_instruction();
- rtems_cache_invalidate_multiple_instruction_lines( 0, 10 );
+ rtems_cache_invalidate_multiple_instruction_lines( &function_to_flush,
+ 4 /* arbitrary size */ );
}
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.hu...@embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel