diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-08 15:18:14 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-09 09:39:14 +0200 |
commit | 05b7eec276a130cde39fed861ad4a9d1f01e876c (patch) | |
tree | b755151e2886815928279eb356977be4fb0fde6b /testsuites | |
parent | score: Use builtin for _Bitfield_Find_first_bit() (diff) | |
download | rtems-05b7eec276a130cde39fed861ad4a9d1f01e876c.tar.bz2 |
score: Add an SMP sequence lock implementation
Diffstat (limited to 'testsuites')
-rw-r--r-- | testsuites/smptests/smplock01/init.c | 60 | ||||
-rw-r--r-- | testsuites/smptests/smplock01/smplock01.scn | 306 |
2 files changed, 342 insertions, 24 deletions
diff --git a/testsuites/smptests/smplock01/init.c b/testsuites/smptests/smplock01/init.c index 5eeb1ca347..62397a3b27 100644 --- a/testsuites/smptests/smplock01/init.c +++ b/testsuites/smptests/smplock01/init.c @@ -18,6 +18,7 @@ #include <rtems/score/smplock.h> #include <rtems/score/smplockmcs.h> +#include <rtems/score/smplockseq.h> #include <rtems/score/smpbarrier.h> #include <rtems/score/atomic.h> #include <rtems.h> @@ -30,7 +31,7 @@ const char rtems_test_name[] = "SMPLOCK 1"; #define CPU_COUNT 32 -#define TEST_COUNT 10 +#define TEST_COUNT 11 typedef enum { INITIAL, @@ -50,6 +51,11 @@ typedef struct { SMP_lock_Stats mcs_stats; #endif SMP_MCS_lock_Control mcs_lock; + SMP_sequence_lock_Control seq_lock; + char unused_space_for_cache_line_separation_0[128]; + int a; + char unused_space_for_cache_line_separation_1[128]; + int b; } global_context; static global_context context = { @@ -59,7 +65,8 @@ static global_context context = { #if defined(RTEMS_PROFILING) .mcs_stats = SMP_LOCK_STATS_INITIALIZER("global MCS"), #endif - .mcs_lock = SMP_MCS_LOCK_INITIALIZER + .mcs_lock = SMP_MCS_LOCK_INITIALIZER, + .seq_lock = SMP_SEQUENCE_LOCK_INITIALIZER }; static const char * const test_names[TEST_COUNT] = { @@ -72,7 +79,8 @@ static const char * const test_names[TEST_COUNT] = { "local ticket lock with global counter", "local MCS lock with global counter", "global ticket lock with busy section", - "global MCS lock with busy section" + "global MCS lock with busy section", + "sequence lock" }; static void stop_test_timer(rtems_id timer_id, void *arg) @@ -355,6 +363,49 @@ static void test_9_body( ctx->test_counter[test][cpu_self] = counter; } +static void test_10_body( + int test, + global_context *ctx, + SMP_barrier_State *bs, + unsigned int cpu_count, + unsigned int cpu_self +) +{ + unsigned long counter = 0; + unsigned long seq; + + if (cpu_self == 0) { + while (assert_state(ctx, START_TEST)) { + seq = _SMP_sequence_lock_Write_begin(&ctx->seq_lock); + + ctx->a = counter; + ctx->b = counter; + + _SMP_sequence_lock_Write_end(&ctx->seq_lock, seq); + + ++counter; + } + } else { + while (assert_state(ctx, START_TEST)) { + unsigned long a; + unsigned long b; + + do { + seq = _SMP_sequence_lock_Read_begin(&ctx->seq_lock); + + a = ctx->a; + b = ctx->b; + + } while (_SMP_sequence_lock_Read_retry(&ctx->seq_lock, seq)); + + ++counter; + rtems_test_assert(a == b); + } + } + + ctx->test_counter[test][cpu_self] = counter; +} + static const test_body test_bodies[TEST_COUNT] = { test_0_body, test_1_body, @@ -365,7 +416,8 @@ static const test_body test_bodies[TEST_COUNT] = { test_6_body, test_7_body, test_8_body, - test_9_body + test_9_body, + test_10_body }; static void run_tests( diff --git a/testsuites/smptests/smplock01/smplock01.scn b/testsuites/smptests/smplock01/smplock01.scn index d9189f956a..b13bab0e45 100644 --- a/testsuites/smptests/smplock01/smplock01.scn +++ b/testsuites/smptests/smplock01/smplock01.scn @@ -1,22 +1,288 @@ *** BEGIN OF TEST SMPLOCK 1 *** -aquire global lock with local counter - processor 0, local counter 15964 - processor 1, local counter 99982377 - global counter 0, sum of local counter 99998341 -aquire global lock with global counter - processor 0, local counter 166073 - processor 1, local counter 99569103 - global counter 99735176, sum of local counter 99735176 -aquire local lock with local counter - processor 0, local counter 148133948 - processor 1, local counter 148148108 - global counter 0, sum of local counter 296282056 -aquire local lock with global counter - processor 0, local counter 55938783 - processor 1, local counter 55951781 - global counter 55951781, sum of local counter 111890564 -aquire global lock with busy section - processor 0, local counter 10694328 - processor 1, local counter 10694346 - global counter 0, sum of local counter 21388674 +global ticket lock with local counter + processor 0, local counter 830091 + processor 1, local counter 830090 + processor 2, local counter 830091 + processor 3, local counter 830091 + processor 4, local counter 830091 + processor 5, local counter 830091 + processor 6, local counter 830091 + processor 7, local counter 830091 + processor 8, local counter 830089 + processor 9, local counter 830088 + processor 10, local counter 830090 + processor 11, local counter 830090 + processor 12, local counter 830090 + processor 13, local counter 830092 + processor 14, local counter 830093 + processor 15, local counter 830092 + processor 16, local counter 830092 + processor 17, local counter 830092 + processor 18, local counter 830089 + processor 19, local counter 830092 + processor 20, local counter 830090 + processor 21, local counter 830090 + processor 22, local counter 830090 + processor 23, local counter 830092 + global counter 0, sum of local counter 19922178 +global MCS lock with local counter + processor 0, local counter 1579723 + processor 1, local counter 1580054 + processor 2, local counter 1579890 + processor 3, local counter 1579777 + processor 4, local counter 1579884 + processor 5, local counter 1580005 + processor 6, local counter 1578632 + processor 7, local counter 1578637 + processor 8, local counter 1578774 + processor 9, local counter 1578759 + processor 10, local counter 1580282 + processor 11, local counter 1579885 + processor 12, local counter 1580378 + processor 13, local counter 1580043 + processor 14, local counter 1580115 + processor 15, local counter 1580113 + processor 16, local counter 1579911 + processor 17, local counter 1579993 + processor 18, local counter 1580032 + processor 19, local counter 1579588 + processor 20, local counter 1580049 + processor 21, local counter 1580048 + processor 22, local counter 1578484 + processor 23, local counter 1580013 + global counter 0, sum of local counter 37913069 +global ticket lock with global counter + processor 0, local counter 784729 + processor 1, local counter 784730 + processor 2, local counter 784730 + processor 3, local counter 784730 + processor 4, local counter 784731 + processor 5, local counter 784730 + processor 6, local counter 784731 + processor 7, local counter 784730 + processor 8, local counter 784731 + processor 9, local counter 784729 + processor 10, local counter 784729 + processor 11, local counter 784730 + processor 12, local counter 784731 + processor 13, local counter 784729 + processor 14, local counter 784728 + processor 15, local counter 784730 + processor 16, local counter 784729 + processor 17, local counter 784730 + processor 18, local counter 784730 + processor 19, local counter 784729 + processor 20, local counter 784729 + processor 21, local counter 784729 + processor 22, local counter 784729 + processor 23, local counter 784731 + global counter 18833514, sum of local counter 18833514 +global MCS lock with global counter + processor 0, local counter 947856 + processor 1, local counter 947857 + processor 2, local counter 947857 + processor 3, local counter 947855 + processor 4, local counter 947858 + processor 5, local counter 947857 + processor 6, local counter 947856 + processor 7, local counter 947856 + processor 8, local counter 947856 + processor 9, local counter 947856 + processor 10, local counter 947857 + processor 11, local counter 947856 + processor 12, local counter 947855 + processor 13, local counter 947857 + processor 14, local counter 947857 + processor 15, local counter 947855 + processor 16, local counter 947856 + processor 17, local counter 947855 + processor 18, local counter 947858 + processor 19, local counter 947857 + processor 20, local counter 947858 + processor 21, local counter 947857 + processor 22, local counter 947857 + processor 23, local counter 947857 + global counter 22748556, sum of local counter 22748556 +local ticket lock with local counter + processor 0, local counter 77155869 + processor 1, local counter 77158831 + processor 2, local counter 77081105 + processor 3, local counter 77082737 + processor 4, local counter 77075777 + processor 5, local counter 77076154 + processor 6, local counter 77065268 + processor 7, local counter 77066500 + processor 8, local counter 77106686 + processor 9, local counter 77107321 + processor 10, local counter 77060207 + processor 11, local counter 77062079 + processor 12, local counter 77059638 + processor 13, local counter 77059931 + processor 14, local counter 77056750 + processor 15, local counter 77057813 + processor 16, local counter 76659137 + processor 17, local counter 76659205 + processor 18, local counter 76669140 + processor 19, local counter 76670415 + processor 20, local counter 76674221 + processor 21, local counter 76674630 + processor 22, local counter 76434805 + processor 23, local counter 76434361 + global counter 0, sum of local counter 1846208580 +local MCS lock with local counter + processor 0, local counter 44963740 + processor 1, local counter 45045357 + processor 2, local counter 45023035 + processor 3, local counter 45021994 + processor 4, local counter 44912701 + processor 5, local counter 44951749 + processor 6, local counter 45090697 + processor 7, local counter 45089463 + processor 8, local counter 45015619 + processor 9, local counter 45088716 + processor 10, local counter 45064955 + processor 11, local counter 45063568 + processor 12, local counter 44966963 + processor 13, local counter 45002743 + processor 14, local counter 45127830 + processor 15, local counter 45126512 + processor 16, local counter 44947194 + processor 17, local counter 44992882 + processor 18, local counter 45006760 + processor 19, local counter 45005553 + processor 20, local counter 44880447 + processor 21, local counter 44889042 + processor 22, local counter 45036454 + processor 23, local counter 45036288 + global counter 0, sum of local counter 1080350262 +local ticket lock with global counter + processor 0, local counter 3962116 + processor 1, local counter 3963441 + processor 2, local counter 3963482 + processor 3, local counter 3963367 + processor 4, local counter 3962978 + processor 5, local counter 3963102 + processor 6, local counter 3962979 + processor 7, local counter 3962911 + processor 8, local counter 3962974 + processor 9, local counter 3963125 + processor 10, local counter 3963056 + processor 11, local counter 3963093 + processor 12, local counter 3962996 + processor 13, local counter 3963100 + processor 14, local counter 3963096 + processor 15, local counter 3963028 + processor 16, local counter 3967076 + processor 17, local counter 3967251 + processor 18, local counter 3967222 + processor 19, local counter 3967093 + processor 20, local counter 3972862 + processor 21, local counter 3972917 + processor 22, local counter 3967217 + processor 23, local counter 3967220 + global counter 7095791, sum of local counter 95157702 +local MCS lock with global counter + processor 0, local counter 3849478 + processor 1, local counter 3860113 + processor 2, local counter 3966891 + processor 3, local counter 3966750 + processor 4, local counter 3973618 + processor 5, local counter 4014013 + processor 6, local counter 3914674 + processor 7, local counter 3914601 + processor 8, local counter 3910536 + processor 9, local counter 3924908 + processor 10, local counter 3995362 + processor 11, local counter 3995130 + processor 12, local counter 3909912 + processor 13, local counter 3923977 + processor 14, local counter 3995941 + processor 15, local counter 3995667 + processor 16, local counter 3842753 + processor 17, local counter 3852728 + processor 18, local counter 3956029 + processor 19, local counter 3955977 + processor 20, local counter 3961870 + processor 21, local counter 4001067 + processor 22, local counter 3911767 + processor 23, local counter 3911724 + global counter 8503087, sum of local counter 94505486 +global ticket lock with busy section + processor 0, local counter 614377 + processor 1, local counter 614376 + processor 2, local counter 614377 + processor 3, local counter 614377 + processor 4, local counter 614377 + processor 5, local counter 614378 + processor 6, local counter 614377 + processor 7, local counter 614377 + processor 8, local counter 614377 + processor 9, local counter 614376 + processor 10, local counter 614378 + processor 11, local counter 614377 + processor 12, local counter 614377 + processor 13, local counter 614377 + processor 14, local counter 614377 + processor 15, local counter 614376 + processor 16, local counter 614377 + processor 17, local counter 614377 + processor 18, local counter 614377 + processor 19, local counter 614378 + processor 20, local counter 614378 + processor 21, local counter 614377 + processor 22, local counter 614377 + processor 23, local counter 614377 + global counter 0, sum of local counter 14745049 +global MCS lock with busy section + processor 0, local counter 552660 + processor 1, local counter 552661 + processor 2, local counter 552659 + processor 3, local counter 552659 + processor 4, local counter 552660 + processor 5, local counter 552659 + processor 6, local counter 552659 + processor 7, local counter 552660 + processor 8, local counter 552660 + processor 9, local counter 552660 + processor 10, local counter 552660 + processor 11, local counter 552659 + processor 12, local counter 552660 + processor 13, local counter 552659 + processor 14, local counter 552660 + processor 15, local counter 552661 + processor 16, local counter 552660 + processor 17, local counter 552659 + processor 18, local counter 552660 + processor 19, local counter 552661 + processor 20, local counter 552660 + processor 21, local counter 552661 + processor 22, local counter 552660 + processor 23, local counter 552661 + global counter 0, sum of local counter 13263838 +sequence lock + processor 0, local counter 12138641 + processor 1, local counter 8 + processor 2, local counter 64 + processor 3, local counter 89 + processor 4, local counter 208 + processor 5, local counter 227 + processor 6, local counter 69 + processor 7, local counter 82 + processor 8, local counter 2019 + processor 9, local counter 2017 + processor 10, local counter 1914 + processor 11, local counter 2008 + processor 12, local counter 1890 + processor 13, local counter 1902 + processor 14, local counter 1734 + processor 15, local counter 1701 + processor 16, local counter 2198 + processor 17, local counter 2176 + processor 18, local counter 2011 + processor 19, local counter 2047 + processor 20, local counter 2072 + processor 21, local counter 2084 + processor 22, local counter 1866 + processor 23, local counter 1849 + global counter 0, sum of local counter 12170876 *** END OF TEST SMPLOCK 1 *** |