diff options
Diffstat (limited to 'testsuites')
775 files changed, 18077 insertions, 12151 deletions
diff --git a/testsuites/ada/sptests/sp09/sptest.adb b/testsuites/ada/sptests/sp09/sptest.adb index 946829a2c1..fa6aafb349 100644 --- a/testsuites/ada/sptests/sp09/sptest.adb +++ b/testsuites/ada/sptests/sp09/sptest.adb @@ -2595,21 +2595,15 @@ package body SPTEST is TIME := ( 2100, 12, 31, 23, 59, 59, 0 ); RTEMS.CLOCK.SET( TIME, STATUS ); - TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" ); - TEST_SUPPORT.PRINT_TIME( - "TA1 - clock_set - ", - TIME, - " - SUCCESSFUL" + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "CLOCK_SET WITH INVALID YEAR" ); - TEXT_IO.NEW_LINE; - RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS ); - TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" ); - RTEMS.CLOCK.GET_TOD( TIME, STATUS ); - TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" ); TEST_SUPPORT.PRINT_TIME( - "TA1 - clock_get - ", + "TA1 - clock_set - ", TIME, - " - SUCCESSFUL" + " - INVALID_CLOCK" ); TEXT_IO.NEW_LINE; diff --git a/testsuites/ada/sptests/spatcb01/init.c b/testsuites/ada/sptests/spatcb01/init.c index 7db4b111b8..401090ddd9 100644 --- a/testsuites/ada/sptests/spatcb01/init.c +++ b/testsuites/ada/sptests/spatcb01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/ada/sptests/spatcb01/spatcb01.adb b/testsuites/ada/sptests/spatcb01/spatcb01.adb index db74cbb737..19af70e232 100644 --- a/testsuites/ada/sptests/spatcb01/spatcb01.adb +++ b/testsuites/ada/sptests/spatcb01/spatcb01.adb @@ -8,7 +8,7 @@ -- Ensure that the SYSTEM.TASK_PRIMITIVES.OPERATIONS.SPECIFIC implementation -- works. -- --- Copyright (c) 2017 embedded brains GmbH +-- Copyright (c) 2017 embedded brains GmbH & Co. KG -- -- Redistribution and use in source and binary forms, with or without -- modification, are permitted provided that the following conditions diff --git a/testsuites/ada/tmtests/tm01/init.c b/testsuites/ada/tmtests/tm01/init.c index 6c9ec3ff44..3154b15062 100644 --- a/testsuites/ada/tmtests/tm01/init.c +++ b/testsuites/ada/tmtests/tm01/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 1" #define CONFIGURE_MAXIMUM_SEMAPHORES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm02/init.c b/testsuites/ada/tmtests/tm02/init.c index 84fc053e17..f393301465 100644 --- a/testsuites/ada/tmtests/tm02/init.c +++ b/testsuites/ada/tmtests/tm02/init.c @@ -42,7 +42,6 @@ #define ADA_TEST_NAME "ADA TM 2" #define CONFIGURE_MAXIMUM_TIMERS 110 #define CONFIGURE_MAXIMUM_SEMAPHORES 101 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm03/init.c b/testsuites/ada/tmtests/tm03/init.c index 9e88b1cb55..5db2cc861e 100644 --- a/testsuites/ada/tmtests/tm03/init.c +++ b/testsuites/ada/tmtests/tm03/init.c @@ -42,7 +42,6 @@ #define ADA_TEST_NAME "ADA TM 3" #define CONFIGURE_MAXIMUM_TIMERS 110 #define CONFIGURE_MAXIMUM_SEMAPHORES 101 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm04/init.c b/testsuites/ada/tmtests/tm04/init.c index 826795e729..2f4312d1f9 100644 --- a/testsuites/ada/tmtests/tm04/init.c +++ b/testsuites/ada/tmtests/tm04/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 4" #define CONFIGURE_MAXIMUM_SEMAPHORES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm05/init.c b/testsuites/ada/tmtests/tm05/init.c index 9e0036e809..206e20af07 100644 --- a/testsuites/ada/tmtests/tm05/init.c +++ b/testsuites/ada/tmtests/tm05/init.c @@ -42,7 +42,6 @@ #define ADA_TEST_NAME "ADA TM 5" #define CONFIGURE_MAXIMUM_TIMERS 110 #define CONFIGURE_MAXIMUM_SEMAPHORES 101 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm06/init.c b/testsuites/ada/tmtests/tm06/init.c index e7da9b9a48..42c701d01a 100644 --- a/testsuites/ada/tmtests/tm06/init.c +++ b/testsuites/ada/tmtests/tm06/init.c @@ -42,7 +42,6 @@ #define ADA_TEST_NAME "ADA TM 6" #define CONFIGURE_MAXIMUM_TIMERS 110 #define CONFIGURE_MAXIMUM_SEMAPHORES 101 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm07/init.c b/testsuites/ada/tmtests/tm07/init.c index e2b2e476f9..582d4f2a77 100644 --- a/testsuites/ada/tmtests/tm07/init.c +++ b/testsuites/ada/tmtests/tm07/init.c @@ -42,7 +42,6 @@ #define ADA_TEST_NAME "ADA TM 7" #define CONFIGURE_MAXIMUM_TIMERS 110 #define CONFIGURE_MAXIMUM_SEMAPHORES 101 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm08/init.c b/testsuites/ada/tmtests/tm08/init.c index d7a38a816b..4f8baa894c 100644 --- a/testsuites/ada/tmtests/tm08/init.c +++ b/testsuites/ada/tmtests/tm08/init.c @@ -42,7 +42,6 @@ #define ADA_TEST_NAME "ADA TM 8" #define CONFIGURE_MAXIMUM_TIMERS 110 #define CONFIGURE_MAXIMUM_SEMAPHORES 101 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm09/init.c b/testsuites/ada/tmtests/tm09/init.c index 42482a2f69..6e881dde7c 100644 --- a/testsuites/ada/tmtests/tm09/init.c +++ b/testsuites/ada/tmtests/tm09/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 9" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm10/init.c b/testsuites/ada/tmtests/tm10/init.c index 2102a33243..dad2ddbe21 100644 --- a/testsuites/ada/tmtests/tm10/init.c +++ b/testsuites/ada/tmtests/tm10/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 10" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm11/init.c b/testsuites/ada/tmtests/tm11/init.c index fe34ddf192..588f315dc2 100644 --- a/testsuites/ada/tmtests/tm11/init.c +++ b/testsuites/ada/tmtests/tm11/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 11" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm12/init.c b/testsuites/ada/tmtests/tm12/init.c index 7ac3debe6c..7f20fae43b 100644 --- a/testsuites/ada/tmtests/tm12/init.c +++ b/testsuites/ada/tmtests/tm12/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 12" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm13/init.c b/testsuites/ada/tmtests/tm13/init.c index 66a79607b6..e979602297 100644 --- a/testsuites/ada/tmtests/tm13/init.c +++ b/testsuites/ada/tmtests/tm13/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 13" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm14/init.c b/testsuites/ada/tmtests/tm14/init.c index c9ecdd5826..03d99d081a 100644 --- a/testsuites/ada/tmtests/tm14/init.c +++ b/testsuites/ada/tmtests/tm14/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 14" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm15/init.c b/testsuites/ada/tmtests/tm15/init.c index 710599245a..53e380d0a6 100644 --- a/testsuites/ada/tmtests/tm15/init.c +++ b/testsuites/ada/tmtests/tm15/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 15" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm16/init.c b/testsuites/ada/tmtests/tm16/init.c index b54f3559b5..aa7d907c66 100644 --- a/testsuites/ada/tmtests/tm16/init.c +++ b/testsuites/ada/tmtests/tm16/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 16" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm17/init.c b/testsuites/ada/tmtests/tm17/init.c index e9252771cb..c3ba070e1c 100644 --- a/testsuites/ada/tmtests/tm17/init.c +++ b/testsuites/ada/tmtests/tm17/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 17" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm18/init.c b/testsuites/ada/tmtests/tm18/init.c index 104134d726..29dc4f23e6 100644 --- a/testsuites/ada/tmtests/tm18/init.c +++ b/testsuites/ada/tmtests/tm18/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 18" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm19/init.c b/testsuites/ada/tmtests/tm19/init.c index 1961769118..634f2e0f2b 100644 --- a/testsuites/ada/tmtests/tm19/init.c +++ b/testsuites/ada/tmtests/tm19/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 19" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm20/init.c b/testsuites/ada/tmtests/tm20/init.c index 5f252c2f34..e9ae7d17d7 100644 --- a/testsuites/ada/tmtests/tm20/init.c +++ b/testsuites/ada/tmtests/tm20/init.c @@ -42,7 +42,6 @@ #define CONFIGURE_MAXIMUM_TASKS 3 #define ADA_TEST_NAME "ADA TM 20" -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm21/init.c b/testsuites/ada/tmtests/tm21/init.c index 06abc7b7f6..cc7de913f4 100644 --- a/testsuites/ada/tmtests/tm21/init.c +++ b/testsuites/ada/tmtests/tm21/init.c @@ -47,7 +47,6 @@ #define CONFIGURE_MAXIMUM_REGIONS 100 #define CONFIGURE_MAXIMUM_PORTS 100 #define CONFIGURE_MAXIMUM_PERIODS 100 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_MESSAGE_BUFFER_MEMORY \ (CONFIGURE_MAXIMUM_MESSAGE_QUEUES \ diff --git a/testsuites/ada/tmtests/tm22/init.c b/testsuites/ada/tmtests/tm22/init.c index 929bf75b53..9ad7875a5f 100644 --- a/testsuites/ada/tmtests/tm22/init.c +++ b/testsuites/ada/tmtests/tm22/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 22" #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm23/init.c b/testsuites/ada/tmtests/tm23/init.c index 951933f1f4..768bd95df8 100644 --- a/testsuites/ada/tmtests/tm23/init.c +++ b/testsuites/ada/tmtests/tm23/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 23" #define CONFIGURE_MAXIMUM_TIMERS 110 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm24/init.c b/testsuites/ada/tmtests/tm24/init.c index b90daf0738..8b25ab46bd 100644 --- a/testsuites/ada/tmtests/tm24/init.c +++ b/testsuites/ada/tmtests/tm24/init.c @@ -40,7 +40,6 @@ #define CONFIGURE_MAXIMUM_TASKS 111 #define ADA_TEST_NAME "ADA TM 24" -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm25/init.c b/testsuites/ada/tmtests/tm25/init.c index 0ebf5a934b..e0bb5bf4f3 100644 --- a/testsuites/ada/tmtests/tm25/init.c +++ b/testsuites/ada/tmtests/tm25/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 25" #define CONFIGURE_MAXIMUM_SEMAPHORES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm28/init.c b/testsuites/ada/tmtests/tm28/init.c index 484756174c..542135b84e 100644 --- a/testsuites/ada/tmtests/tm28/init.c +++ b/testsuites/ada/tmtests/tm28/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 28" #define CONFIGURE_MAXIMUM_PORTS 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tm29/init.c b/testsuites/ada/tmtests/tm29/init.c index 3f12731be8..f0c509c9b0 100644 --- a/testsuites/ada/tmtests/tm29/init.c +++ b/testsuites/ada/tmtests/tm29/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TM 29" #define CONFIGURE_MAXIMUM_PERIODS 111 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/ada/tmtests/tmck/init.c b/testsuites/ada/tmtests/tmck/init.c index ae32bcc9e7..8c0682be41 100644 --- a/testsuites/ada/tmtests/tmck/init.c +++ b/testsuites/ada/tmtests/tmck/init.c @@ -41,7 +41,6 @@ #define ADA_TEST_NAME "ADA TMCK" #define CONFIGURE_MAXIMUM_SEMAPHORES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_POSIX_INIT_THREAD_TABLE diff --git a/testsuites/benchmarks/dhrystone/dhry_1.c b/testsuites/benchmarks/dhrystone/dhry_1.c index 3ad2e7f204..ef6ecf9251 100644 --- a/testsuites/benchmarks/dhrystone/dhry_1.c +++ b/testsuites/benchmarks/dhrystone/dhry_1.c @@ -133,6 +133,7 @@ execution_start: #ifdef __rtems__ /* avoid used uninitialized warning */ + Int_1_Loc = 0; Int_2_Loc = 0; #endif diff --git a/testsuites/benchmarks/dhrystone/init.c b/testsuites/benchmarks/dhrystone/init.c index 448369074e..ba55976d6d 100644 --- a/testsuites/benchmarks/dhrystone/init.c +++ b/testsuites/benchmarks/dhrystone/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/benchmarks/linpack/init.c b/testsuites/benchmarks/linpack/init.c index 2899674bca..24922eb93b 100644 --- a/testsuites/benchmarks/linpack/init.c +++ b/testsuites/benchmarks/linpack/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/benchmarks/linpack/linpack-pc.c b/testsuites/benchmarks/linpack/linpack-pc.c index 1fef18eb96..5f00df1d7c 100644 --- a/testsuites/benchmarks/linpack/linpack-pc.c +++ b/testsuites/benchmarks/linpack/linpack-pc.c @@ -224,7 +224,7 @@ #include <math.h> #include <stdlib.h> #ifdef __rtems__ -#include <tmacros.h> +#include <rtems/test-printer.h> #undef print_time #define fprintf(f, ...) rtems_printf(&rtems_test_printer, __VA_ARGS__) #endif /* __rtems__ */ diff --git a/testsuites/benchmarks/whetstone/init.c b/testsuites/benchmarks/whetstone/init.c index 37adcb3e89..dd4b1a70e0 100644 --- a/testsuites/benchmarks/whetstone/init.c +++ b/testsuites/benchmarks/whetstone/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/benchmarks/whetstone/whetstone.c b/testsuites/benchmarks/whetstone/whetstone.c index e0a93aa88c..aae68af6a6 100644 --- a/testsuites/benchmarks/whetstone/whetstone.c +++ b/testsuites/benchmarks/whetstone/whetstone.c @@ -57,7 +57,7 @@ C********************************************************************** #include <string.h> #include <math.h> #ifdef __rtems__ -#include <tmacros.h> +#include <rtems/test-printer.h> #define fprintf(f, ...) rtems_printf(&rtems_test_printer, __VA_ARGS__) #endif /* __rtems__ */ diff --git a/testsuites/build/bin/fake-rtems5-ar b/testsuites/build/bin/fake-rtems5-ar index 1561e69e27..899dc2c011 100755 --- a/testsuites/build/bin/fake-rtems5-ar +++ b/testsuites/build/bin/fake-rtems5-ar @@ -2,7 +2,7 @@ # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (C) 2019 embedded brains GmbH +# Copyright (C) 2019 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/build/bin/fake-rtems5-gcc b/testsuites/build/bin/fake-rtems5-gcc index f2ae2d92c5..80198fad4d 100755 --- a/testsuites/build/bin/fake-rtems5-gcc +++ b/testsuites/build/bin/fake-rtems5-gcc @@ -2,7 +2,7 @@ # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (C) 2019 embedded brains GmbH +# Copyright (C) 2019 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/build/bin/fake-rtems5-ld b/testsuites/build/bin/fake-rtems5-ld index 1561e69e27..899dc2c011 100755 --- a/testsuites/build/bin/fake-rtems5-ld +++ b/testsuites/build/bin/fake-rtems5-ld @@ -2,7 +2,7 @@ # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (C) 2019 embedded brains GmbH +# Copyright (C) 2019 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/build/test.py b/testsuites/build/test.py index e8b50983dd..084cd2b673 100755 --- a/testsuites/build/test.py +++ b/testsuites/build/test.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (C) 2019 embedded brains GmbH +# Copyright (C) 2019 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsbdpart01/init.c b/testsuites/fstests/fsbdpart01/init.c index 1133e7b1c9..634604f9ca 100644 --- a/testsuites/fstests/fsbdpart01/init.c +++ b/testsuites/fstests/fsbdpart01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsclose01/init.c b/testsuites/fstests/fsclose01/init.c index ac461c66be..c425fa67c2 100644 --- a/testsuites/fstests/fsclose01/init.c +++ b/testsuites/fstests/fsclose01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2012, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsdosfsformat01/init.c b/testsuites/fstests/fsdosfsformat01/init.c index 1fe39d1d06..876d9c2f58 100644 --- a/testsuites/fstests/fsdosfsformat01/init.c +++ b/testsuites/fstests/fsdosfsformat01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsdosfsname01/create_files.cs b/testsuites/fstests/fsdosfsname01/create_files.cs index 3f16aefc04..3cce61435b 100644 --- a/testsuites/fstests/fsdosfsname01/create_files.cs +++ b/testsuites/fstests/fsdosfsname01/create_files.cs @@ -14,7 +14,7 @@ */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsdosfsname01/create_image.sh b/testsuites/fstests/fsdosfsname01/create_image.sh index bd14baaae4..d37762e509 100755 --- a/testsuites/fstests/fsdosfsname01/create_image.sh +++ b/testsuites/fstests/fsdosfsname01/create_image.sh @@ -2,7 +2,7 @@ # SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2013 embedded brains GmbH. +# Copyright (c) 2013 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsdosfsname01/image_bin_le_multibyte.h b/testsuites/fstests/fsdosfsname01/image_bin_le_multibyte.h index 7b9e931528..3e74ae63a7 100644 --- a/testsuites/fstests/fsdosfsname01/image_bin_le_multibyte.h +++ b/testsuites/fstests/fsdosfsname01/image_bin_le_multibyte.h @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsdosfsname01/image_bin_le_singlebyte.h b/testsuites/fstests/fsdosfsname01/image_bin_le_singlebyte.h index 0e089d7f6d..eb71832354 100644 --- a/testsuites/fstests/fsdosfsname01/image_bin_le_singlebyte.h +++ b/testsuites/fstests/fsdosfsname01/image_bin_le_singlebyte.h @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsdosfsname01/init.c b/testsuites/fstests/fsdosfsname01/init.c index 75854dee17..16fe6e9f84 100644 --- a/testsuites/fstests/fsdosfsname01/init.c +++ b/testsuites/fstests/fsdosfsname01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012, 2013 embedded brains GmbH. All rights reserved. + * Copyright (C) 2012, 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsdosfsname02/init.c b/testsuites/fstests/fsdosfsname02/init.c index 9a8256c9a6..3ff878c997 100644 --- a/testsuites/fstests/fsdosfsname02/init.c +++ b/testsuites/fstests/fsdosfsname02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsdosfssync01/init.c b/testsuites/fstests/fsdosfssync01/init.c index 1fe8177fba..b4e8c08a7e 100644 --- a/testsuites/fstests/fsdosfssync01/init.c +++ b/testsuites/fstests/fsdosfssync01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsdosfswrite01/init.c b/testsuites/fstests/fsdosfswrite01/init.c index 54089835f7..15928cbcf0 100644 --- a/testsuites/fstests/fsdosfswrite01/init.c +++ b/testsuites/fstests/fsdosfswrite01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsfseeko01/init.c b/testsuites/fstests/fsfseeko01/init.c index 3aef821d39..01bf024d95 100644 --- a/testsuites/fstests/fsfseeko01/init.c +++ b/testsuites/fstests/fsfseeko01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsimfsconfig01/init.c b/testsuites/fstests/fsimfsconfig01/init.c index 04acdd2b79..bd994c895c 100644 --- a/testsuites/fstests/fsimfsconfig01/init.c +++ b/testsuites/fstests/fsimfsconfig01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsimfsconfig02/init.c b/testsuites/fstests/fsimfsconfig02/init.c index ce36292119..87f226f8dc 100644 --- a/testsuites/fstests/fsimfsconfig02/init.c +++ b/testsuites/fstests/fsimfsconfig02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsimfsconfig03/init.c b/testsuites/fstests/fsimfsconfig03/init.c index d5a5485d1a..2fe37f3b6e 100644 --- a/testsuites/fstests/fsimfsconfig03/init.c +++ b/testsuites/fstests/fsimfsconfig03/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsimfsgeneric01/init.c b/testsuites/fstests/fsimfsgeneric01/init.c index 28c52bf12d..3a3bbc60d8 100644 --- a/testsuites/fstests/fsimfsgeneric01/init.c +++ b/testsuites/fstests/fsimfsgeneric01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2012, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.doc b/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.doc new file mode 100644 index 0000000000..2ad886a1fb --- /dev/null +++ b/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.doc @@ -0,0 +1,11 @@ +This file describes the directives and concepts tested by this test set. + +test set name: fsjffs2empty01 + +directives: + + - JFFS2 implementation + +concepts: + + - Ensure that the JFFS2 library can remount a filesystem where every block has been written to and all files have been deleted. diff --git a/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.scn b/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.scn new file mode 100644 index 0000000000..56dca74761 --- /dev/null +++ b/testsuites/fstests/fsjffs2empty01/fsjffs2empty01.scn @@ -0,0 +1,6 @@ +*** BEGIN OF TEST FSJFFS2EMPTY 1 *** +Initializing filesystem JFFS2 + + +Shutting down filesystem JFFS2 +*** END OF TEST FSJFFS2EMPTY 1 *** diff --git a/testsuites/fstests/fsjffs2empty01/init.c b/testsuites/fstests/fsjffs2empty01/init.c new file mode 100644 index 0000000000..3232ea8fde --- /dev/null +++ b/testsuites/fstests/fsjffs2empty01/init.c @@ -0,0 +1,245 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2024 On-Line Applications Research (OAR) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <fcntl.h> +#include <stdio.h> +#include <tmacros.h> + +#include <rtems.h> +#include <rtems/jffs2.h> +#include <rtems/libio.h> + +#define BLOCK_SIZE (16UL * 1024UL) + +#define FLASH_SIZE (8UL * BLOCK_SIZE) + +const char rtems_test_name[] = "FSJFFS2EMPTY 1"; + +#define BASE_FOR_TEST "/mnt" +static char big[] = BASE_FOR_TEST "/big"; + +static char keg[523]; + +static void init_keg(void) +{ + uint32_t v = 123; + + for (size_t i = 0; i < sizeof(keg); ++i) { + v = v * 1664525 + 1013904223; + keg[i] = (uint8_t) (v >> 23); + } +} + +static void create_big_file(void) +{ + int rv; + int fd = open(&big[0], O_WRONLY | O_TRUNC | O_CREAT, + S_IRWXU | S_IRWXG | S_IRWXO); + rtems_test_assert(fd >= 0); + + for (int i = 0; i < 100; ++i) { + ssize_t n = write(fd, &keg[0], sizeof(keg)); + rtems_test_assert(n == (ssize_t) sizeof(keg)); + } + + rv = close(fd); + rtems_test_assert(rv == 0); +} + +static void remove_big_file(void) +{ + int rv = unlink(&big[0]); + rtems_test_assert(rv == 0); +} + +typedef struct { + rtems_jffs2_flash_control super; + unsigned char area[FLASH_SIZE]; +} flash_control; + +static unsigned char *get_flash_chunk(rtems_jffs2_flash_control *super, + uint32_t offset) +{ + return &((flash_control *) super)->area[offset]; +} + +static int flash_read( + rtems_jffs2_flash_control *super, + uint32_t offset, + unsigned char *buffer, + size_t size_of_buffer +) +{ + unsigned char *chunk = get_flash_chunk(super, offset); + + memcpy(buffer, chunk, size_of_buffer); + + return 0; +} + +static int flash_write( + rtems_jffs2_flash_control *super, + uint32_t offset, + const unsigned char *buffer, + size_t size_of_buffer +) +{ + unsigned char *chunk = get_flash_chunk(super, offset); + + for (size_t i = 0; i < size_of_buffer; ++i) { + chunk[i] &= buffer[i]; + } + + return 0; +} + +static int flash_erase( + rtems_jffs2_flash_control *super, + uint32_t offset +) +{ + unsigned char *chunk = get_flash_chunk(super, offset); + + memset(chunk, 0xff, BLOCK_SIZE); + + return 0; +} + +static flash_control flash_instance = { + .super = { + .block_size = BLOCK_SIZE, + .flash_size = FLASH_SIZE, + .read = flash_read, + .write = flash_write, + .erase = flash_erase + } +}; + +static rtems_jffs2_compressor_control compressor_instance = { + .compress = rtems_jffs2_compressor_rtime_compress, + .decompress = rtems_jffs2_compressor_rtime_decompress +}; + +static const rtems_jffs2_mount_data mount_data = { + .flash_control = &flash_instance.super, + .compressor_control = &compressor_instance +}; + +static void erase_all(void) +{ + memset(&flash_instance.area[0], 0xff, FLASH_SIZE); +} + +static void test_initialize_filesystem(void) +{ + int rv = mount( + NULL, + BASE_FOR_TEST, + RTEMS_FILESYSTEM_TYPE_JFFS2, + RTEMS_FILESYSTEM_READ_WRITE, + &mount_data + ); + rtems_test_assert(rv == 0); +} + +static void test_shutdown_filesystem(void) +{ + int rv = unmount(BASE_FOR_TEST); + rtems_test_assert(rv == 0); +} + +static rtems_task Init( + rtems_task_argument ignored) +{ + int rv; + + TEST_BEGIN(); + + erase_all(); + + rv = mkdir(BASE_FOR_TEST, S_IRWXU | S_IRWXG | S_IRWXO); + rtems_test_assert(rv == 0); + + puts( "Initializing JFFS2 filesystem" ); + test_initialize_filesystem(); + + init_keg(); + + /* + * Ensure that jiffies != 0, to use most likely path in + * jffs2_mark_node_obsolete(). Without this the failure only happens + * intermittently. + */ + while (rtems_clock_get_ticks_since_boot() == 0) { + /* Wait */ + } + + /* + * This must be done in 2 parts because the FS is only so large and all blocks + * must be written to. + */ + create_big_file(); + remove_big_file(); + + create_big_file(); + remove_big_file(); + + puts( "\n\nShutting down JFFS2 filesystem"); + test_shutdown_filesystem(); + + puts( "Initializing JFFS2 filesystem again" ); + test_initialize_filesystem(); + + puts( "\n\nShutting down JFFS2 filesystem again" ); + test_shutdown_filesystem(); + + TEST_END(); + rtems_test_exit(0); +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER + +#define CONFIGURE_FILESYSTEM_JFFS2 + +#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 40 + +#define CONFIGURE_MAXIMUM_TASKS 2 + +#define CONFIGURE_INIT_TASK_STACK_SIZE (32 * 1024) +#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> diff --git a/testsuites/fstests/fsjffs2gc01/init.c b/testsuites/fstests/fsjffs2gc01/init.c index a72636927d..4d29373b90 100644 --- a/testsuites/fstests/fsjffs2gc01/init.c +++ b/testsuites/fstests/fsjffs2gc01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsnofs01/init.c b/testsuites/fstests/fsnofs01/init.c index 0d11fea284..b1c1488168 100644 --- a/testsuites/fstests/fsnofs01/init.c +++ b/testsuites/fstests/fsnofs01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/fsrofs01/init.c b/testsuites/fstests/fsrofs01/init.c index 5c4dd7e8db..0af88879d9 100644 --- a/testsuites/fstests/fsrofs01/init.c +++ b/testsuites/fstests/fsrofs01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/jffs2_nand_support/fs_config.h b/testsuites/fstests/jffs2_nand_support/fs_config.h new file mode 100644 index 0000000000..548f5203e6 --- /dev/null +++ b/testsuites/fstests/jffs2_nand_support/fs_config.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2023 On-Line Applications Research (OAR) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __JFFS2_SUPPORT_h +#define __JFFS2_SUPPORT_h + +#define FILESYSTEM "JFFS2" + +#endif diff --git a/testsuites/fstests/jffs2_nand_support/fs_support.c b/testsuites/fstests/jffs2_nand_support/fs_support.c new file mode 100644 index 0000000000..9e7c965735 --- /dev/null +++ b/testsuites/fstests/jffs2_nand_support/fs_support.c @@ -0,0 +1,257 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2023 On-Line Applications Research (OAR) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include <tmacros.h> + +#include <sys/stat.h> +#include <sys/types.h> +#include <string.h> + +#include <rtems/jffs2.h> +#include <rtems/libio.h> +#include <rtems/libcsupport.h> + +#include "fstest.h" +#include "fstest_support.h" + +#define FLASH_PAGE_SIZE (1024UL) +/* Out of Band/Spare area size is per-page */ +#define FLASH_PAGE_OOB_SIZE (32UL) + +#define PAGES_PER_BLOCK (16UL) +#define BLOCKS_PER_DEVICE (8UL) + +#define FLASH_OOB_SIZE (BLOCKS_PER_DEVICE * PAGES_PER_BLOCK * FLASH_PAGE_OOB_SIZE) +#define FLASH_BLOCK_SIZE (PAGES_PER_BLOCK * FLASH_PAGE_SIZE) +#define FLASH_SIZE (BLOCKS_PER_DEVICE * FLASH_BLOCK_SIZE) + +typedef struct { + rtems_jffs2_flash_control super; + unsigned char area[FLASH_SIZE]; + unsigned char oob[FLASH_OOB_SIZE]; +} flash_control; + +static flash_control *get_flash_control(rtems_jffs2_flash_control *super) +{ + return (flash_control *) super; +} + +static int flash_read( + rtems_jffs2_flash_control *super, + uint32_t offset, + unsigned char *buffer, + size_t size_of_buffer +) +{ + flash_control *self = get_flash_control(super); + unsigned char *chunk = &self->area[offset]; + + memcpy(buffer, chunk, size_of_buffer); + + return 0; +} + +static int flash_write( + rtems_jffs2_flash_control *super, + uint32_t offset, + const unsigned char *buffer, + size_t size_of_buffer +) +{ + flash_control *self = get_flash_control(super); + unsigned char *chunk = &self->area[offset]; + size_t i; + + for (i = 0; i < size_of_buffer; ++i) { + chunk[i] &= buffer[i]; + } + + return 0; +} + +static int flash_erase( + rtems_jffs2_flash_control *super, + uint32_t offset +) +{ + flash_control *self = get_flash_control(super); + uint32_t page_index = offset / FLASH_PAGE_SIZE; + uint32_t oob_offset = page_index * FLASH_PAGE_OOB_SIZE; + unsigned char *chunk = &self->area[offset]; + unsigned char *oobchunk = &self->oob[oob_offset]; + + memset(chunk, 0xff, FLASH_BLOCK_SIZE); + memset(oobchunk, 0xff, PAGES_PER_BLOCK * FLASH_PAGE_OOB_SIZE); + + return 0; +} + +static int flash_read_oob( + rtems_jffs2_flash_control *super, + uint32_t offset, + uint8_t *buffer, + uint32_t size_of_buffer +) +{ + flash_control *self = get_flash_control(super); + uint32_t page_index = offset / FLASH_PAGE_SIZE; + uint32_t oob_offset = page_index * FLASH_PAGE_OOB_SIZE; + unsigned char *chunk = &self->oob[oob_offset]; + + memcpy(buffer, chunk, size_of_buffer); + + return 0; +} + +static int flash_write_oob( + rtems_jffs2_flash_control *super, + uint32_t offset, + uint8_t *buffer, + uint32_t size_of_buffer +) +{ + flash_control *self = get_flash_control(super); + uint32_t page_index = offset / FLASH_PAGE_SIZE; + uint32_t oob_offset = page_index * FLASH_PAGE_OOB_SIZE; + unsigned char *chunk = &self->oob[oob_offset]; + size_t i; + + for (i = 0; i < size_of_buffer; ++i) { + chunk[i] &= buffer[i]; + } + + return 0; +} + +static int flash_block_is_bad( + rtems_jffs2_flash_control *super, + uint32_t orig_offset, + bool *bad +) +{ + *bad = false; + return 0; +} + +static int flash_block_mark_bad( + rtems_jffs2_flash_control *super, + uint32_t orig_offset +) +{ + return 0; +} + +static uint32_t flash_get_oob_size( + rtems_jffs2_flash_control *super +) +{ + return FLASH_PAGE_OOB_SIZE; +} + +static flash_control flash_instance = { + .super = { + .block_size = FLASH_BLOCK_SIZE, + .flash_size = FLASH_SIZE, + .read = flash_read, + .write = flash_write, + .erase = flash_erase, + .block_is_bad = flash_block_is_bad, + .block_mark_bad = flash_block_mark_bad, + .oob_read = flash_read_oob, + .oob_write = flash_write_oob, + .get_oob_size = flash_get_oob_size, + .write_size = FLASH_PAGE_SIZE + } +}; + +static rtems_jffs2_compressor_control compressor_instance = { + .compress = rtems_jffs2_compressor_rtime_compress, + .decompress = rtems_jffs2_compressor_rtime_decompress +}; + +static const rtems_jffs2_mount_data mount_data = { + .flash_control = &flash_instance.super, + .compressor_control = &compressor_instance +}; + +static void erase_all(void) +{ + memset(&flash_instance.area[0], 0xff, FLASH_SIZE); + memset(&flash_instance.oob[0], 0xff, FLASH_OOB_SIZE); +} + +static rtems_resource_snapshot before_mount; + +void test_initialize_filesystem(void) +{ + int rv; + + erase_all(); + + rv = mkdir(BASE_FOR_TEST, S_IRWXU | S_IRWXG | S_IRWXO); + rtems_test_assert(rv == 0); + + rtems_resource_snapshot_take(&before_mount); + + rv = mount( + NULL, + BASE_FOR_TEST, + RTEMS_FILESYSTEM_TYPE_JFFS2, + RTEMS_FILESYSTEM_READ_WRITE, + &mount_data + ); + rtems_test_assert(rv == 0); +} + +void test_shutdown_filesystem(void) +{ + int rv = unmount(BASE_FOR_TEST); + rtems_test_assert(rv == 0); + rtems_test_assert(rtems_resource_snapshot_check(&before_mount)); +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER + +#define CONFIGURE_FILESYSTEM_JFFS2 + +#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 40 + +#define CONFIGURE_MAXIMUM_TASKS 2 + +#define CONFIGURE_INIT_TASK_STACK_SIZE (32 * 1024) +#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> diff --git a/testsuites/fstests/jffs2_support/fs_config.h b/testsuites/fstests/jffs2_support/fs_config.h index 8740898294..fd334d7b38 100644 --- a/testsuites/fstests/jffs2_support/fs_config.h +++ b/testsuites/fstests/jffs2_support/fs_config.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/jffs2_support/fs_support.c b/testsuites/fstests/jffs2_support/fs_support.c index 2aa04a27c6..fba1c4aaa6 100644 --- a/testsuites/fstests/jffs2_support/fs_support.c +++ b/testsuites/fstests/jffs2_support/fs_support.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -163,7 +163,7 @@ void test_shutdown_filesystem(void) #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 40 -#define CONFIGURE_MAXIMUM_TASKS 1 +#define CONFIGURE_MAXIMUM_TASKS 2 #define CONFIGURE_INIT_TASK_STACK_SIZE (32 * 1024) #define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT diff --git a/testsuites/fstests/tftpfs/init.c b/testsuites/fstests/tftpfs/init.c index fe18476ef3..38e429f11e 100644 --- a/testsuites/fstests/tftpfs/init.c +++ b/testsuites/fstests/tftpfs/init.c @@ -14,7 +14,7 @@ */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -42,6 +42,7 @@ #include "config.h" #endif +#include <stdio.h> #include <stdlib.h> /* malloc(), free() */ #include <ctype.h> /* isprint() */ #include <errno.h> @@ -919,7 +920,7 @@ T_TEST_CASE( tftp_read_null_buffer ) */ T_TEST_CASE( tftp_write_null_tftp_handle ) { - char data_buffer[10]; + char data_buffer[10] = { 0 }; ssize_t res; res = tftp_write( @@ -6895,65 +6896,11 @@ T_TEST_CASE_FIXTURE( OACK_with_surplus_option, &fixture_large_blocksize ) T_no_more_interactions(); } -/* - * Test suite and configuration - */ - const char rtems_test_name[] = "TFTPFS"; -static char buffer[ 512 ]; - -static const T_action actions[] = { - T_report_hash_sha256, - T_check_task_context, - T_check_file_descriptors, - T_check_rtems_barriers, - T_check_rtems_extensions, - T_check_rtems_message_queues, - T_check_rtems_partitions, - T_check_rtems_periods, - T_check_rtems_regions, - T_check_rtems_semaphores, - T_check_rtems_tasks, - T_check_rtems_timers, - T_check_posix_keys -}; - -static const T_config config = { - .name = rtems_test_name, - .buf = buffer, - .buf_size = sizeof( buffer ), - .putchar = T_putchar_default, - .verbosity = RTEMS_TEST_VERBOSITY, - .now = T_now_clock, - .allocate = T_memory_allocate, - .deallocate = T_memory_deallocate, - .action_count = T_ARRAY_SIZE( actions ), - .actions = actions -}; - static void Init( rtems_task_argument argument ) { - (void) argument; - int exit_code; - - /* - * It would be much easier to simply use - * rtems_test_run( argument, TEST_STATE ); - * instead of all the code below and the variables - * buffer, actions, config - * above. Yet, rtems_test_run() sets the verbosity always to - * T_VERBOSE and this would produce plenty of output. - */ - rtems_test_begin( rtems_test_name, TEST_STATE ); - T_register(); - exit_code = T_main( &config ); - - if ( exit_code == 0 ) { - rtems_test_end( rtems_test_name ); - } - - rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, (uint32_t) exit_code ); + rtems_test_run( argument, TEST_STATE ); } /* @@ -6968,7 +6915,7 @@ static void Init( rtems_task_argument argument ) */ #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER -#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER #define CONFIGURE_MAXIMUM_TASKS 1 diff --git a/testsuites/fstests/tftpfs/tftpfs_interactions.c b/testsuites/fstests/tftpfs/tftpfs_interactions.c index ad05978b17..9ab026c5da 100644 --- a/testsuites/fstests/tftpfs/tftpfs_interactions.c +++ b/testsuites/fstests/tftpfs/tftpfs_interactions.c @@ -22,7 +22,7 @@ */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/tftpfs/tftpfs_interactions.h b/testsuites/fstests/tftpfs/tftpfs_interactions.h index f320f685d3..732a542e99 100644 --- a/testsuites/fstests/tftpfs/tftpfs_interactions.h +++ b/testsuites/fstests/tftpfs/tftpfs_interactions.h @@ -12,7 +12,7 @@ */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.c b/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.c index 201e87f0db..995ae05fe0 100644 --- a/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.c +++ b/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.c @@ -21,7 +21,7 @@ */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.h b/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.h index 2c5860882f..0a852353ad 100644 --- a/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.h +++ b/testsuites/fstests/tftpfs/tftpfs_udp_network_fake.h @@ -12,7 +12,7 @@ */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -52,7 +52,7 @@ extern "C" { /** * @defgroup RTEMSTestSuiteTestsTFTPFS Test suite for libtftpsfs tests * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesFilesystem * * @brief This test suite provides a tests for libtftpfs. * diff --git a/testsuites/libtests/POSIX/free.c b/testsuites/libtests/POSIX/free.c index 8550eaa85c..246415ce65 100644 --- a/testsuites/libtests/POSIX/free.c +++ b/testsuites/libtests/POSIX/free.c @@ -12,9 +12,10 @@ #include <stdlib.h> +void* p; + int main (void) { - free((void *) 42); - + free(p); return 0; } diff --git a/testsuites/libtests/block01/block01.doc b/testsuites/libtests/block01/block01.doc index 66fca83ea4..ff4d309f0a 100644 --- a/testsuites/libtests/block01/block01.doc +++ b/testsuites/libtests/block01/block01.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2009 embedded brains GmbH. All rights reserved. +# Copyright (c) 2009 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block01/init.c b/testsuites/libtests/block01/init.c index 6af83f7655..7717b0b7e6 100644 --- a/testsuites/libtests/block01/init.c +++ b/testsuites/libtests/block01/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block02/block02.doc b/testsuites/libtests/block02/block02.doc index 97f9de2e28..e5b99ec8fe 100644 --- a/testsuites/libtests/block02/block02.doc +++ b/testsuites/libtests/block02/block02.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2009 embedded brains GmbH. All rights reserved. +# Copyright (c) 2009 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block02/init.c b/testsuites/libtests/block02/init.c index 3eb399dff4..1e8d179d9d 100644 --- a/testsuites/libtests/block02/init.c +++ b/testsuites/libtests/block02/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block03/block03.doc b/testsuites/libtests/block03/block03.doc index 7c31c06765..221c7dd816 100644 --- a/testsuites/libtests/block03/block03.doc +++ b/testsuites/libtests/block03/block03.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2009 embedded brains GmbH. All rights reserved. +# Copyright (c) 2009 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block03/init.c b/testsuites/libtests/block03/init.c index d4014e784d..da2fa27589 100644 --- a/testsuites/libtests/block03/init.c +++ b/testsuites/libtests/block03/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block04/block04.doc b/testsuites/libtests/block04/block04.doc index 744c4be5be..2c05114636 100644 --- a/testsuites/libtests/block04/block04.doc +++ b/testsuites/libtests/block04/block04.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2009 embedded brains GmbH. All rights reserved. +# Copyright (c) 2009 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block04/init.c b/testsuites/libtests/block04/init.c index 92b7d3af7a..cdbab6e3fc 100644 --- a/testsuites/libtests/block04/init.c +++ b/testsuites/libtests/block04/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block05/block05.doc b/testsuites/libtests/block05/block05.doc index 4c739d41ee..30a246bdf1 100644 --- a/testsuites/libtests/block05/block05.doc +++ b/testsuites/libtests/block05/block05.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2009, 2010 embedded brains GmbH. All rights reserved. +# Copyright (C) 2009, 2010 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block05/init.c b/testsuites/libtests/block05/init.c index 9845ec6895..e54fa9bd32 100644 --- a/testsuites/libtests/block05/init.c +++ b/testsuites/libtests/block05/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block07/block07.doc b/testsuites/libtests/block07/block07.doc index 7643cb8630..18b2f9f656 100644 --- a/testsuites/libtests/block07/block07.doc +++ b/testsuites/libtests/block07/block07.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2009 embedded brains GmbH. All rights reserved. +# Copyright (c) 2009 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block07/init.c b/testsuites/libtests/block07/init.c index 93685ad3b2..a755cde987 100644 --- a/testsuites/libtests/block07/init.c +++ b/testsuites/libtests/block07/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block09/block09.doc b/testsuites/libtests/block09/block09.doc index 9522de911a..ffe672eb1d 100644 --- a/testsuites/libtests/block09/block09.doc +++ b/testsuites/libtests/block09/block09.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2010 embedded brains GmbH. All rights reserved. +# Copyright (c) 2010 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block09/init.c b/testsuites/libtests/block09/init.c index 6c5dfb6ffd..2456952164 100644 --- a/testsuites/libtests/block09/init.c +++ b/testsuites/libtests/block09/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2009, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2009, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block10/block10.doc b/testsuites/libtests/block10/block10.doc index 46ad5c808c..7020cc56c0 100644 --- a/testsuites/libtests/block10/block10.doc +++ b/testsuites/libtests/block10/block10.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2010 embedded brains GmbH. All rights reserved. +# Copyright (c) 2010 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block10/init.c b/testsuites/libtests/block10/init.c index 3ea1022020..693a8a8908 100644 --- a/testsuites/libtests/block10/init.c +++ b/testsuites/libtests/block10/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2010, 2018 embedded brains GmbH. + * Copyright (C) 2010, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block11/init.c b/testsuites/libtests/block11/init.c index 22ae8e1e5a..5d442e768f 100644 --- a/testsuites/libtests/block11/init.c +++ b/testsuites/libtests/block11/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block12/init.c b/testsuites/libtests/block12/init.c index 7d488a9fe9..ad51974fec 100644 --- a/testsuites/libtests/block12/init.c +++ b/testsuites/libtests/block12/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2012, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block13/init.c b/testsuites/libtests/block13/init.c index 9b6f3ed09d..c91ce8818d 100644 --- a/testsuites/libtests/block13/init.c +++ b/testsuites/libtests/block13/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2012, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block14/init.c b/testsuites/libtests/block14/init.c index e3fe71e5da..ba0291d314 100644 --- a/testsuites/libtests/block14/init.c +++ b/testsuites/libtests/block14/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2012, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block15/init.c b/testsuites/libtests/block15/init.c index 4d8b48fc66..9409061631 100644 --- a/testsuites/libtests/block15/init.c +++ b/testsuites/libtests/block15/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block16/init.c b/testsuites/libtests/block16/init.c index 883e1b05ea..d800895fee 100644 --- a/testsuites/libtests/block16/init.c +++ b/testsuites/libtests/block16/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/block17/init.c b/testsuites/libtests/block17/init.c index cedadfced8..bf670f679d 100644 --- a/testsuites/libtests/block17/init.c +++ b/testsuites/libtests/block17/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2013, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/crypt01/init.c b/testsuites/libtests/crypt01/init.c index 0944aa60f7..37966a0200 100644 --- a/testsuites/libtests/crypt01/init.c +++ b/testsuites/libtests/crypt01/init.c @@ -1,7 +1,7 @@ /* * Copyright (c) 2011 The FreeBSD Project. All rights reserved. * - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -36,6 +36,8 @@ #include <crypt.h> #include <string.h> +#include <rtems/stackchk.h> + #include "tmacros.h" const char rtems_test_name[] = "CRYPT 1"; @@ -234,18 +236,20 @@ static void Init(rtems_task_argument arg) test_sha512(); test_generic(); + rtems_test_assert(!rtems_stack_checker_is_blown()); TEST_END(); rtems_test_exit(0); } #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER +#define CONFIGURE_STACK_CHECKER_ENABLED #define CONFIGURE_MAXIMUM_TASKS 1 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION -#define CONFIGURE_INIT_TASK_STACK_SIZE (2 * RTEMS_MINIMUM_STACK_SIZE) +#define CONFIGURE_INIT_TASK_STACK_SIZE (8 * RTEMS_MINIMUM_STACK_SIZE) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/libtests/defaultconfig01/init.c b/testsuites/libtests/defaultconfig01/init.c index 1a5451fb09..b8d702c96f 100644 --- a/testsuites/libtests/defaultconfig01/init.c +++ b/testsuites/libtests/defaultconfig01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/devfs01/init.c b/testsuites/libtests/devfs01/init.c index 193c7641db..b467bbd998 100644 --- a/testsuites/libtests/devfs01/init.c +++ b/testsuites/libtests/devfs01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/dl01/dl01-o1.c b/testsuites/libtests/dl01/dl01-o1.c index ade4d5744d..9350235d85 100644 --- a/testsuites/libtests/dl01/dl01-o1.c +++ b/testsuites/libtests/dl01/dl01-o1.c @@ -29,7 +29,7 @@ * Hello World as a loadable module. */ -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl01/init.c b/testsuites/libtests/dl01/init.c index 59cf3147f0..06fa8004b8 100644 --- a/testsuites/libtests/dl01/init.c +++ b/testsuites/libtests/dl01/init.c @@ -94,7 +94,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U) +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U)) #define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT diff --git a/testsuites/libtests/dl02/dl02-o1.c b/testsuites/libtests/dl02/dl02-o1.c index b442f82ae7..3b3e51825d 100644 --- a/testsuites/libtests/dl02/dl02-o1.c +++ b/testsuites/libtests/dl02/dl02-o1.c @@ -29,7 +29,7 @@ #include <dlfcn.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl02/dl02-o2.c b/testsuites/libtests/dl02/dl02-o2.c index 02a537a84f..6694c5e985 100644 --- a/testsuites/libtests/dl02/dl02-o2.c +++ b/testsuites/libtests/dl02/dl02-o2.c @@ -27,7 +27,7 @@ #include "dl-o2.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__) diff --git a/testsuites/libtests/dl02/init.c b/testsuites/libtests/dl02/init.c index 19563e9093..495a58d287 100644 --- a/testsuites/libtests/dl02/init.c +++ b/testsuites/libtests/dl02/init.c @@ -94,7 +94,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U) +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U)) #define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT) diff --git a/testsuites/libtests/dl03/init.c b/testsuites/libtests/dl03/init.c index 5080323c05..e953f1a4c6 100644 --- a/testsuites/libtests/dl03/init.c +++ b/testsuites/libtests/dl03/init.c @@ -80,7 +80,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U) +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U)) #define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT) diff --git a/testsuites/libtests/dl04/init.c b/testsuites/libtests/dl04/init.c index a733d9da14..54a852800d 100644 --- a/testsuites/libtests/dl04/init.c +++ b/testsuites/libtests/dl04/init.c @@ -94,7 +94,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U) +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U)) #define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT diff --git a/testsuites/libtests/dl05/dl05-o5.cc b/testsuites/libtests/dl05/dl05-o5.cc index c861916ff0..f928cf9004 100644 --- a/testsuites/libtests/dl05/dl05-o5.cc +++ b/testsuites/libtests/dl05/dl05-o5.cc @@ -2,7 +2,7 @@ #include <stdexcept> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl05/init.c b/testsuites/libtests/dl05/init.c index 93d69578f7..7e34af757d 100644 --- a/testsuites/libtests/dl05/init.c +++ b/testsuites/libtests/dl05/init.c @@ -96,7 +96,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (32U * 1024U) +#define CONFIGURE_INIT_TASK_STACK_SIZE (36U * 1024U) #define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT diff --git a/testsuites/libtests/dl06/dl06-o1.c b/testsuites/libtests/dl06/dl06-o1.c index 719d01e91f..1b8482bc3e 100644 --- a/testsuites/libtests/dl06/dl06-o1.c +++ b/testsuites/libtests/dl06/dl06-o1.c @@ -30,7 +30,7 @@ #include <dlfcn.h> #include <math.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl06/dl06-o2.c b/testsuites/libtests/dl06/dl06-o2.c index 837c2e8e4f..0a46c027a8 100644 --- a/testsuites/libtests/dl06/dl06-o2.c +++ b/testsuites/libtests/dl06/dl06-o2.c @@ -30,7 +30,7 @@ #include <stdlib.h> #include <math.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl06/initimpl.h b/testsuites/libtests/dl06/initimpl.h index 66e503b156..0d3987983d 100644 --- a/testsuites/libtests/dl06/initimpl.h +++ b/testsuites/libtests/dl06/initimpl.h @@ -98,7 +98,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U) +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U)) #define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT) diff --git a/testsuites/libtests/dl07/dl-load.c b/testsuites/libtests/dl07/dl-load.c index 58e3e06f78..2946120ca6 100644 --- a/testsuites/libtests/dl07/dl-load.c +++ b/testsuites/libtests/dl07/dl-load.c @@ -32,6 +32,7 @@ RTEMS_RTL_TRACE_WARNING | \ RTEMS_RTL_TRACE_LOAD | \ RTEMS_RTL_TRACE_UNLOAD | \ + RTEMS_RTL_TRACE_LOAD_SECT | \ RTEMS_RTL_TRACE_SYMBOL | \ RTEMS_RTL_TRACE_RELOC | \ RTEMS_RTL_TRACE_ALLOCATOR | \ diff --git a/testsuites/libtests/dl07/dl07-o1.c b/testsuites/libtests/dl07/dl07-o1.c index 24a8086c49..0bca0ab838 100644 --- a/testsuites/libtests/dl07/dl07-o1.c +++ b/testsuites/libtests/dl07/dl07-o1.c @@ -28,7 +28,7 @@ #include "dl-o1.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #include "dl-load.h" #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl07/dl07-o2.c b/testsuites/libtests/dl07/dl07-o2.c index 12cc917ae0..46aef0d6fe 100644 --- a/testsuites/libtests/dl07/dl07-o2.c +++ b/testsuites/libtests/dl07/dl07-o2.c @@ -29,7 +29,7 @@ #include "dl-o1.h" #include "dl-o2.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl07/dl07-o3.c b/testsuites/libtests/dl07/dl07-o3.c index 12a5fe6829..ab60f50e97 100644 --- a/testsuites/libtests/dl07/dl07-o3.c +++ b/testsuites/libtests/dl07/dl07-o3.c @@ -32,7 +32,7 @@ #include "dl-o5.h" #include <inttypes.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl07/dl07-o4.c b/testsuites/libtests/dl07/dl07-o4.c index aeeb404561..e5f831ec24 100644 --- a/testsuites/libtests/dl07/dl07-o4.c +++ b/testsuites/libtests/dl07/dl07-o4.c @@ -29,7 +29,7 @@ #include "dl-o1.h" #include "dl-o4.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl07/dl07-o5.c b/testsuites/libtests/dl07/dl07-o5.c index e487d072ae..83e98f6d9d 100644 --- a/testsuites/libtests/dl07/dl07-o5.c +++ b/testsuites/libtests/dl07/dl07-o5.c @@ -30,7 +30,7 @@ #include "dl-o5.h" #include <inttypes.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl07/init.c b/testsuites/libtests/dl07/init.c index 42b3bed3fc..8db106ba29 100644 --- a/testsuites/libtests/dl07/init.c +++ b/testsuites/libtests/dl07/init.c @@ -100,7 +100,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U) +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U)) #define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT) diff --git a/testsuites/libtests/dl08/dl08-o1.c b/testsuites/libtests/dl08/dl08-o1.c index ccd8bc3587..015e847ea2 100644 --- a/testsuites/libtests/dl08/dl08-o1.c +++ b/testsuites/libtests/dl08/dl08-o1.c @@ -28,7 +28,7 @@ #include "dl-o1.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #include "dl-load.h" #include "dl-o1.h" #include "dl-o2.h" diff --git a/testsuites/libtests/dl08/dl08-o2.c b/testsuites/libtests/dl08/dl08-o2.c index 8d72cb8703..3833cb5768 100644 --- a/testsuites/libtests/dl08/dl08-o2.c +++ b/testsuites/libtests/dl08/dl08-o2.c @@ -29,7 +29,7 @@ #include "dl-o2.h" #include "dl-o3.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl08/dl08-o3.c b/testsuites/libtests/dl08/dl08-o3.c index 267895476c..dc839bf270 100644 --- a/testsuites/libtests/dl08/dl08-o3.c +++ b/testsuites/libtests/dl08/dl08-o3.c @@ -31,7 +31,7 @@ #include "dl-o5.h" #include <inttypes.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl08/dl08-o4.c b/testsuites/libtests/dl08/dl08-o4.c index b77bf60465..d09fd2ec93 100644 --- a/testsuites/libtests/dl08/dl08-o4.c +++ b/testsuites/libtests/dl08/dl08-o4.c @@ -29,7 +29,7 @@ #include "dl-o4.h" #include "dl-o5.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl08/dl08-o5.c b/testsuites/libtests/dl08/dl08-o5.c index 614bff6a24..de86437757 100644 --- a/testsuites/libtests/dl08/dl08-o5.c +++ b/testsuites/libtests/dl08/dl08-o5.c @@ -30,7 +30,7 @@ #include "dl-o6.h" #include <inttypes.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c b/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c index 3a03ec6e84..47d3f66f76 100644 --- a/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c +++ b/testsuites/libtests/dl08/dl08-o6-123456789-123456789.c @@ -29,7 +29,7 @@ #include "dl-o6.h" #include <inttypes.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl08/init.c b/testsuites/libtests/dl08/init.c index 02f999e0c6..23ebe41d63 100644 --- a/testsuites/libtests/dl08/init.c +++ b/testsuites/libtests/dl08/init.c @@ -100,7 +100,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U) +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U)) #define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT) diff --git a/testsuites/libtests/dl09/dl-load.c b/testsuites/libtests/dl09/dl-load.c index 1de7c8fa29..216fb5a201 100644 --- a/testsuites/libtests/dl09/dl-load.c +++ b/testsuites/libtests/dl09/dl-load.c @@ -116,8 +116,12 @@ static void dl_check_resolved(void* handle, bool has_unresolved) rtems_test_assert (unresolved == 0); } } - printf ("handel: %p: %sunresolved externals\n", - handle, unresolved != 0 ? "" : "no "); + if (handle == RTLD_SELF) + printf ("handle: RTL_SELF: %sunresolved externals\n", + unresolved != 0 ? "" : "no "); + else + printf ("handle: %p: %sunresolved externals\n", + handle, unresolved != 0 ? "" : "no "); } static void* dl_load_obj (const char* name, bool has_unresolved) @@ -152,12 +156,20 @@ static void dl_close (void* handle) static int dl_call (void* handle, const char* func) { + static call_sig last_call; call_sig call = dlsym (handle, func); if (call == NULL) { printf("dlsym failed: symbol not found: %s\n", func); return 1; } + if (last_call != NULL && last_call != call) + { + printf("Call location different: moved by: %i (call:%p last:%p)\n", + (int) (call - last_call), + call, last_call); + } + last_call = call; call (); return 0; } @@ -171,7 +183,7 @@ static void dl_object_open (object_def* od, objects* o) if (od->space != 0) { o->space = malloc (od->space); - printf("space alloc: %s: %d: %p\n", od->name, od->space, o->space); + printf("space alloc: %s: %zd: %p\n", od->name, od->space, o->space); rtems_test_assert (o->space != NULL); } dl_load_dump (); diff --git a/testsuites/libtests/dl09/dl09-o1.c b/testsuites/libtests/dl09/dl09-o1.c index 4659fda17c..291d33fcd0 100644 --- a/testsuites/libtests/dl09/dl09-o1.c +++ b/testsuites/libtests/dl09/dl09-o1.c @@ -28,7 +28,7 @@ #include "dl-o1.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #include "dl-load.h" #include "dl-o1.h" #include "dl-o2.h" diff --git a/testsuites/libtests/dl09/dl09-o2.c b/testsuites/libtests/dl09/dl09-o2.c index a6906b4ad9..e8976f3b49 100644 --- a/testsuites/libtests/dl09/dl09-o2.c +++ b/testsuites/libtests/dl09/dl09-o2.c @@ -29,7 +29,7 @@ #include "dl-o2.h" #include "dl-o3.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl09/dl09-o3.c b/testsuites/libtests/dl09/dl09-o3.c index fab70c02c7..d9a056d45d 100644 --- a/testsuites/libtests/dl09/dl09-o3.c +++ b/testsuites/libtests/dl09/dl09-o3.c @@ -31,7 +31,7 @@ #include "dl-o5.h" #include <inttypes.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl09/dl09-o4.c b/testsuites/libtests/dl09/dl09-o4.c index 5cf4eb0f4b..8998059c93 100644 --- a/testsuites/libtests/dl09/dl09-o4.c +++ b/testsuites/libtests/dl09/dl09-o4.c @@ -29,7 +29,7 @@ #include "dl-o4.h" #include "dl-o5.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl09/dl09-o5.c b/testsuites/libtests/dl09/dl09-o5.c index 6b4aedbf68..e5374f3eb8 100644 --- a/testsuites/libtests/dl09/dl09-o5.c +++ b/testsuites/libtests/dl09/dl09-o5.c @@ -30,7 +30,7 @@ #include "dl-o5.h" #include <inttypes.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl09/init.c b/testsuites/libtests/dl09/init.c index e8caf9b6e8..b375fe3f38 100644 --- a/testsuites/libtests/dl09/init.c +++ b/testsuites/libtests/dl09/init.c @@ -100,7 +100,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U) +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U)) #define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT) diff --git a/testsuites/libtests/dl10/dl10-o1.c b/testsuites/libtests/dl10/dl10-o1.c index ccd8bc3587..015e847ea2 100644 --- a/testsuites/libtests/dl10/dl10-o1.c +++ b/testsuites/libtests/dl10/dl10-o1.c @@ -28,7 +28,7 @@ #include "dl-o1.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #include "dl-load.h" #include "dl-o1.h" #include "dl-o2.h" diff --git a/testsuites/libtests/dl10/dl10-o2.c b/testsuites/libtests/dl10/dl10-o2.c index 8d72cb8703..3833cb5768 100644 --- a/testsuites/libtests/dl10/dl10-o2.c +++ b/testsuites/libtests/dl10/dl10-o2.c @@ -29,7 +29,7 @@ #include "dl-o2.h" #include "dl-o3.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl10/dl10-o3.c b/testsuites/libtests/dl10/dl10-o3.c index 267895476c..dc839bf270 100644 --- a/testsuites/libtests/dl10/dl10-o3.c +++ b/testsuites/libtests/dl10/dl10-o3.c @@ -31,7 +31,7 @@ #include "dl-o5.h" #include <inttypes.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl10/dl10-o4.c b/testsuites/libtests/dl10/dl10-o4.c index b77bf60465..d09fd2ec93 100644 --- a/testsuites/libtests/dl10/dl10-o4.c +++ b/testsuites/libtests/dl10/dl10-o4.c @@ -29,7 +29,7 @@ #include "dl-o4.h" #include "dl-o5.h" -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl10/dl10-o5.c b/testsuites/libtests/dl10/dl10-o5.c index 35cfbda2cd..185c259d8c 100644 --- a/testsuites/libtests/dl10/dl10-o5.c +++ b/testsuites/libtests/dl10/dl10-o5.c @@ -29,7 +29,7 @@ #include "dl-o5.h" #include <inttypes.h> -#include <rtems/test-info.h> +#include <rtems/test-printer.h> #define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__); diff --git a/testsuites/libtests/dl10/dl10-o6.c b/testsuites/libtests/dl10/dl10-o6.c index fad9516f7b..2484ff6f2f 100644 --- a/testsuites/libtests/dl10/dl10-o6.c +++ b/testsuites/libtests/dl10/dl10-o6.c @@ -29,7 +29,6 @@ #include "dl-o5.h" #include <inttypes.h> -#include <rtems/test-info.h> int rtems_main_o5 (void) { diff --git a/testsuites/libtests/dl10/init.c b/testsuites/libtests/dl10/init.c index 2a23bd3d15..04f71eaaba 100644 --- a/testsuites/libtests/dl10/init.c +++ b/testsuites/libtests/dl10/init.c @@ -148,7 +148,7 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_INIT_TASK_STACK_SIZE (8U * 1024U) +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U)) #define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT) diff --git a/testsuites/libtests/dl11/dl-load.c b/testsuites/libtests/dl11/dl-load.c new file mode 100644 index 0000000000..b09128acdf --- /dev/null +++ b/testsuites/libtests/dl11/dl-load.c @@ -0,0 +1,207 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2023 On-Line Applications Research Corporation (OAR). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <errno.h> +#include <stdio.h> +#include "tmacros.h" +#include <pthread.h> + +#include <dlfcn.h> + +#include "dl-load.h" + +#include <rtems/rtl/rtl-shell.h> +#include <rtems/rtl/rtl-trace.h> + +#define TEST_TRACE 0 +#if TEST_TRACE + #define SHOW_GLOBAL_SYMS 1 + #if SHOW_GLOBAL_SYMS + #define TRACE_GLOBAL_SYMBOL RTEMS_RTL_TRACE_GLOBAL_SYM + #else + #define TRACE_GLOBAL_SYMBOL 0 + #endif + #define DEBUG_TRACE (RTEMS_RTL_TRACE_DETAIL | \ + RTEMS_RTL_TRACE_WARNING | \ + RTEMS_RTL_TRACE_LOAD | \ + RTEMS_RTL_TRACE_UNLOAD | \ + TRACE_GLOBAL_SYMBOL | \ + RTEMS_RTL_TRACE_SYMBOL | \ + RTEMS_RTL_TRACE_RELOC | \ + RTEMS_RTL_TRACE_ALLOCATOR | \ + RTEMS_RTL_TRACE_UNRESOLVED | \ + RTEMS_RTL_TRACE_ARCHIVES | \ + RTEMS_RTL_TRACE_DEPENDENCY) + #define DL_DEBUG_TRACE DEBUG_TRACE /* RTEMS_RTL_TRACE_ALL */ + #define DL_RTL_CMDS 1 +#else + #define DL_DEBUG_TRACE 0 + #define DL_RTL_CMDS 0 +#endif + +static void dl_load_dump (void) +{ +#if DL_RTL_CMDS + char* list[] = { "rtl", "list", NULL }; + char* sym[] = { "rtl", "sym", NULL }; + printf ("RTL List:\n"); + rtems_rtl_shell_command (2, list); + printf ("RTL Sym:\n"); + rtems_rtl_shell_command (2, sym); +#endif +} + +typedef int (*int_call_t)(void); +typedef int* (*ptr_call_t)(void); + +void* get_errno_ptr(void); +int get_errno(void); + +int_call_t int_call; +ptr_call_t ptr_call; +static int perform_test(void) +{ + int int_call_ret; + int* ptr_call_ret; + ptr_call_ret = ptr_call (); + if (ptr_call_ret != get_errno_ptr()) + { + printf("dlsym ptr_call failed: ret value bad\n"); + return 1; + } + + errno = 12345; + int_call_ret = int_call (); + if (int_call_ret != get_errno()) + { + printf("dlsym int_call failed: ret value bad\n"); + return 1; + } + errno = 0; + + return 0; +} + +static void *secondary_thread(void *arg) +{ + printf("Running test on secondary thread\n"); + if (perform_test()) { + printf("Test failed on secondary task\n"); + return (void *) 1; + } + + return NULL; +} + +static void start_secondary(void) +{ + /* Run the test on a secondary thread */ + pthread_t threadId; + int status; + void *ret; + status = pthread_create( &threadId, NULL, secondary_thread, NULL ); + rtems_test_assert( !status ); + + /* Wait on thread to exit */ + status = pthread_join(threadId, &ret); + rtems_test_assert( !status ); + rtems_test_assert( ret == NULL ); +} + +int dl_load_test(void) +{ + void* handle; + int unresolved; + char* message = "loaded"; + +#if DL_DEBUG_TRACE + rtems_rtl_trace_set_mask (DL_DEBUG_TRACE); +#endif + + printf("load: /dl11-o1.o\n"); + + handle = dlopen ("/dl11-o1.o", RTLD_NOW | RTLD_GLOBAL); + if (!handle) + { + printf("dlopen failed: %s\n", dlerror()); + return 1; + } + + if (dlinfo (handle, RTLD_DI_UNRESOLVED, &unresolved) < 0) + message = "dlinfo error checking unresolved status"; + else if (unresolved) + message = "has unresolved externals"; + + printf ("handle: %p %s\n", handle, message); + + dl_load_dump (); + + ptr_call = dlsym (handle, "get_errno_ptr"); + if (ptr_call == NULL) + { + printf("dlsym failed: symbol get_errno_ptr not found\n"); + return 1; + } + + int_call = dlsym (handle, "get_errno_val"); + if (int_call == NULL) + { + printf("dlsym failed: symbol get_errno_val not found\n"); + return 1; + } + + /* Run the test on the init thread */ + printf("Running test on init task\n"); + if (perform_test()) { + return 1; + } + + start_secondary(); + + if (dlclose (handle) < 0) + { + printf("dlclose failed: %s\n", dlerror()); + return 1; + } + + printf ("handle: %p closed\n", handle); + + return 0; +} + +/* + * Disasseble these to see how the platform accesses TLS + */ +void* get_errno_ptr(void) +{ + return &errno; +} + +int get_errno(void) +{ + return errno; +} diff --git a/testsuites/libtests/dl11/dl-load.h b/testsuites/libtests/dl11/dl-load.h new file mode 100644 index 0000000000..142b195626 --- /dev/null +++ b/testsuites/libtests/dl11/dl-load.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (c) 2014 Chris Johns <chrisj@rtems.org>. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#if !defined(_DL_LOAD_H_) +#define _DL_LOAD_H_ + +int dl_load_test(void); + +#endif diff --git a/testsuites/libtests/dl11/dl11-o1.c b/testsuites/libtests/dl11/dl11-o1.c new file mode 100644 index 0000000000..93ee2a60c7 --- /dev/null +++ b/testsuites/libtests/dl11/dl11-o1.c @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2023 On-Line Applications Research Corporation (OAR). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <errno.h> + +int get_errno_val (void); +int *get_errno_ptr (void); + +int get_errno_val (void) +{ + return errno; +} + +int *get_errno_ptr (void) +{ + return &errno; +} diff --git a/testsuites/libtests/dl11/dl11.doc b/testsuites/libtests/dl11/dl11.doc new file mode 100644 index 0000000000..0fffe1cfd3 --- /dev/null +++ b/testsuites/libtests/dl11/dl11.doc @@ -0,0 +1,44 @@ +# SPDX-License-Identifier: BSD-2-Clause + +# Copyright (C) 2023 On-Line Applications Research Corporation (OAR). +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +This file describes the directives and concepts tested by this test set. + +test set name: dl11 + +directives: + + dlopen + dlinfo + dlsym + dlclose + +concepts: + ++ Load a single ELF object file. ++ Check there are no unreolved externals. ++ Locate the get_errno_val and get_errno_ptr symbols. ++ Call the functions that use TLS variables and verify relocated symbols. ++ Unload the ELF file. diff --git a/testsuites/libtests/dl11/dl11.scn b/testsuites/libtests/dl11/dl11.scn new file mode 100644 index 0000000000..43048c91d2 --- /dev/null +++ b/testsuites/libtests/dl11/dl11.scn @@ -0,0 +1,6 @@ +*** BEGIN OF TEST libdl (RTL) 11 *** +load: /dl11-o1.o +handle: 0x40118e60 loaded +handle: 0x40118e60 closed + +*** END OF TEST libdl (RTL) 11 *** diff --git a/testsuites/libtests/dl11/init.c b/testsuites/libtests/dl11/init.c new file mode 100644 index 0000000000..0ff4557421 --- /dev/null +++ b/testsuites/libtests/dl11/init.c @@ -0,0 +1,105 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (c) 2014 Chris Johns <chrisj@rtems.org>. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tmacros.h" + +#include <errno.h> +#include <string.h> +#include <stdint.h> +#include <unistd.h> + +#include <rtems/rtl/rtl.h> +#include <rtems/imfs.h> + +#include "dl-load.h" + +const char rtems_test_name[] = "libdl (RTL) 11"; + +/* forward declarations to avoid warnings */ +static rtems_task Init(rtems_task_argument argument); + +#include "dl11-tar.h" + +#define TARFILE_START dl11_tar +#define TARFILE_SIZE dl11_tar_size + +static int test(void) +{ + int ret; + ret = dl_load_test(); + if (ret) + rtems_test_exit(ret); + return 0; +} + +static void Init(rtems_task_argument arg) +{ + int te; + + TEST_BEGIN(); + + te = rtems_tarfs_load("/", (void *)TARFILE_START, (size_t)TARFILE_SIZE); + if (te != 0) + { + printf("untar failed: %d\n", te); + rtems_test_exit(1); + exit (1); + } + + test(); + + TEST_END(); + + rtems_test_exit(0); +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER + +#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 4 + +#define CONFIGURE_MAXIMUM_POSIX_THREADS 1 + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_MAXIMUM_SEMAPHORES 1 + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT_TASK_STACK_SIZE (CONFIGURE_MINIMUM_TASK_STACK_SIZE + (4U * 1024U)) + +#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/libtests/exit01/init.c b/testsuites/libtests/exit01/init.c index df4beb15c3..0938cff025 100644 --- a/testsuites/libtests/exit01/init.c +++ b/testsuites/libtests/exit01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/exit02/init.c b/testsuites/libtests/exit02/init.c index 652464ab9b..8d8e43c173 100644 --- a/testsuites/libtests/exit02/init.c +++ b/testsuites/libtests/exit02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/exit03/init.c b/testsuites/libtests/exit03/init.c index b761c0af4a..44acb35c6e 100644 --- a/testsuites/libtests/exit03/init.c +++ b/testsuites/libtests/exit03/init.c @@ -2,7 +2,7 @@ /* * Copyright (c) 2022 Chris Johns (Contemporary Software). All rights reserved. - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/exit03/stdio.cc b/testsuites/libtests/exit03/stdio.cc index 2a14089d01..09f2f1951c 100644 --- a/testsuites/libtests/exit03/stdio.cc +++ b/testsuites/libtests/exit03/stdio.cc @@ -2,7 +2,7 @@ /* * Copyright (c) 2022 Chris Johns (Contemporary Software). All rights reserved. - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/flashdev01/flashdev01.doc b/testsuites/libtests/flashdev01/flashdev01.doc new file mode 100644 index 0000000000..0638a5a842 --- /dev/null +++ b/testsuites/libtests/flashdev01/flashdev01.doc @@ -0,0 +1,11 @@ +This file describes the directives and concepts testd by this test set. + +test set name: flashdev01 + +directives: + + TBD + +concepts: + + - Ensure that the flashdev driver API works. diff --git a/testsuites/libtests/flashdev01/flashdev01.scn b/testsuites/libtests/flashdev01/flashdev01.scn new file mode 100644 index 0000000000..809ff3cd80 --- /dev/null +++ b/testsuites/libtests/flashdev01/flashdev01.scn @@ -0,0 +1,2 @@ +*** BEGIN OF TEST FLASHDEV 1 *** +*** END OF TEST FLASHDEV 1 *** diff --git a/testsuites/libtests/flashdev01/init.c b/testsuites/libtests/flashdev01/init.c new file mode 100644 index 0000000000..6ce9709496 --- /dev/null +++ b/testsuites/libtests/flashdev01/init.c @@ -0,0 +1,190 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2023 Aaron Nyholm + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "tmacros.h" + +#include "test_flashdev.h" + +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> +#include <sys/ioctl.h> + +#define TEST_NAME_LENGTH 10 + +#define TEST_DATA_SIZE (PAGE_SIZE * PAGE_COUNT) +#define PAGE_COUNT 16 +#define PAGE_SIZE 128 +#define WB_SIZE 1 + +const char rtems_test_name[] = "FLASHDEV 1"; + +static void run_test(void); + +static void run_test(void) { + + char buff[TEST_DATA_SIZE] = {0}; + FILE *file; + int fd; + rtems_flashdev* flash; + int status; + char* read_data; + rtems_flashdev_region e_args; + rtems_flashdev_ioctl_page_info pg_info; + rtems_flashdev_region region; + uint32_t jedec; + int page_count; + int type; + size_t wb_size; + + /* Initalize the flash device driver and flashdev */ + flash = test_flashdev_init(); + rtems_test_assert(flash != NULL); + + /* Register the flashdev as a device */ + status = rtems_flashdev_register(flash, "dev/flashdev0"); + rtems_test_assert(!status); + + /* Open the flashdev */ + file = fopen("dev/flashdev0", "r+"); + rtems_test_assert(file != NULL); + fd = fileno(file); + + /* Read data from flash */ + read_data = fgets(buff, TEST_DATA_SIZE, file); + rtems_test_assert(read_data != NULL); + + /* Fseek to start of flash */ + status = fseek(file, 0x0, SEEK_SET); + rtems_test_assert(!status); + + /* Write the test name to the flash */ + status = fwrite(rtems_test_name, TEST_NAME_LENGTH, 1, file); + rtems_test_assert(status == 1); + + /* Fseek to start of flash and read again */ + status = fseek(file, 0x0, SEEK_SET); + rtems_test_assert(!status); + fgets(buff, TEST_DATA_SIZE, file); + rtems_test_assert(!strncmp(buff, rtems_test_name, TEST_NAME_LENGTH)); + + /* Test Erasing */ + e_args.offset = 0x0; + e_args.size = PAGE_SIZE; + status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_ERASE, &e_args); + rtems_test_assert(!status); + + fseek(file, 0x0, SEEK_SET); + fgets(buff, TEST_DATA_SIZE, file); + rtems_test_assert(buff[0] == 0); + + /* Test getting JEDEC ID */ + status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_JEDEC_ID, &jedec); + rtems_test_assert(!status); + rtems_test_assert(jedec == 0x00ABCDEF); + + /* Test getting flash type */ + status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_TYPE, &type); + rtems_test_assert(!status); + rtems_test_assert(type == RTEMS_FLASHDEV_NOR); + + /* Test getting page info from offset */ + pg_info.location = PAGE_SIZE + PAGE_SIZE/2; + + status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_PAGEINFO_BY_OFFSET, &pg_info); + rtems_test_assert(!status); + rtems_test_assert(pg_info.page_info.offset == PAGE_SIZE); + rtems_test_assert(pg_info.page_info.size == PAGE_SIZE); + + /* Test getting page info from index */ + pg_info.location = 2; + status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_PAGEINFO_BY_INDEX, &pg_info); + rtems_test_assert(!status); + rtems_test_assert(pg_info.page_info.offset == 2*PAGE_SIZE); + rtems_test_assert(pg_info.page_info.size == PAGE_SIZE); + + /* Test getting page count */ + status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_PAGE_COUNT, &page_count); + rtems_test_assert(!status); + rtems_test_assert(page_count == PAGE_COUNT); + + /* Test getting write block size */ + status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_WRITE_BLOCK_SIZE, &wb_size); + rtems_test_assert(!status); + rtems_test_assert(wb_size == WB_SIZE); + + /* Test Regions */ + region.offset = 0x400; + region.size = 0x200; + status = ioctl(fd, RTEMS_FLASHDEV_IOCTL_REGION_SET, ®ion); + rtems_test_assert(!status); + + /* Test read to larger then region */ + fseek(file, 0x0, SEEK_SET); + read_data = fgets(buff, 2048, file); + rtems_test_assert(read_data == NULL); + + /* Test fseek outside of region */ + status = fseek(file, 0x201, SEEK_SET); + rtems_test_assert(status); + + /* Write to base unset region and check the writes location */ + fseek(file, 0x0, SEEK_SET); + fwrite("HELLO WORLD", 11, 1, file); + ioctl(fd, RTEMS_FLASHDEV_IOCTL_REGION_UNSET, NULL); + fseek(file, 0x400, SEEK_SET); + fgets(buff, 11, file); + rtems_test_assert(strncmp(buff, "HELLO WORLD", 11)); +} + +static void Init(rtems_task_argument arg) +{ + TEST_BEGIN(); + + run_test(); + + TEST_END(); + rtems_test_exit(0); +} + +#define CONFIGURE_MICROSECONDS_PER_TICK 2000 + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 7 + +#define CONFIGURE_MAXIMUM_TASKS 2 + +#define CONFIGURE_MAXIMUM_SEMAPHORES 1 + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/libtests/flashdev01/test_flashdev.c b/testsuites/libtests/flashdev01/test_flashdev.c new file mode 100644 index 0000000000..708d708977 --- /dev/null +++ b/testsuites/libtests/flashdev01/test_flashdev.c @@ -0,0 +1,275 @@ +/* + * Copyright (C) 2023 Aaron Nyholm + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "test_flashdev.h" + +#include <stdlib.h> +#include <string.h> + +#include <rtems/seterr.h> + +#define TEST_DATA_SIZE (PAGE_SIZE * PAGE_COUNT) +#define PAGE_COUNT 16 +#define PAGE_SIZE 128 +#define WB_SIZE 1 +#define MAX_NUM_REGIONS 48 +#define BITALLOC_SIZE 32 +#define NUM_BITALLOC ((MAX_NUM_REGIONS + BITALLOC_SIZE - 1) / BITALLOC_SIZE) + +/** + * This flash device driver is for testing flashdev + * API calls. + */ +typedef struct test_flashdev { + char* data; + uint32_t jedec_id; + uint32_t bit_allocator[NUM_BITALLOC]; + rtems_flashdev_region regions[MAX_NUM_REGIONS]; +} test_flashdev; + +int test_flashdev_page_by_off( + rtems_flashdev *flash, + off_t search_offset, + off_t *page_offset, + size_t *page_size +); + +int test_flashdev_page_by_index( + rtems_flashdev *flash, + off_t search_index, + off_t *page_offset, + size_t *page_size +); + +int test_flashdev_page_count( + rtems_flashdev *flash, + int *page_count +); + +int test_flashdev_wb_size( + rtems_flashdev *flash, + size_t *write_block_size +); + +uint32_t test_flashdev_jedec_id( + rtems_flashdev* flash +); + +int test_flashdev_type( + rtems_flashdev* flash, + rtems_flashdev_flash_type* type +); + +int test_flashdev_read( + rtems_flashdev* flash, + uintptr_t offset, + size_t count, + void* buffer +); + +int test_flashdev_write( + rtems_flashdev* flash, + uintptr_t offset, + size_t count, + const void* buffer +); + +int test_flashdev_erase( + rtems_flashdev* flash, + uintptr_t offset, + size_t count +); + +/* Find page info by offset handler */ +int test_flashdev_page_by_off( + rtems_flashdev *flash, + off_t search_offset, + off_t *page_offset, + size_t *page_size +) +{ + *page_offset = search_offset - (search_offset%PAGE_SIZE); + *page_size = PAGE_SIZE; + return 0; +} + +/* Find page by index handler */ +int test_flashdev_page_by_index( + rtems_flashdev *flash, + off_t search_index, + off_t *page_offset, + size_t *page_size +) +{ + *page_offset = search_index * PAGE_SIZE; + *page_size = PAGE_SIZE; + return 0; +} + +/* Page count handler */ +int test_flashdev_page_count( + rtems_flashdev *flash, + int *page_count +) +{ + *page_count = PAGE_COUNT; + return 0; +} + +/* Write block size handler */ +int test_flashdev_wb_size( + rtems_flashdev *flash, + size_t *write_block_size +) +{ + *write_block_size = WB_SIZE; + return 0; +} + +/* JEDEC ID handler, this would normally require a READID + * call to the physical flash device. + */ +uint32_t test_flashdev_jedec_id( + rtems_flashdev* flash +) +{ + test_flashdev* driver = flash->driver; + return driver->jedec_id; +} + +/* Function to identify what kind of flash is attached. */ +int test_flashdev_type( + rtems_flashdev *flash, + rtems_flashdev_flash_type *type +) +{ + *type = RTEMS_FLASHDEV_NOR; + return 0; +} + +/* Read flash call. Any offset or count protections are + * required to be done in the driver function. */ +int test_flashdev_read( + rtems_flashdev* flash, + uintptr_t offset, + size_t count, + void* buffer +) +{ + test_flashdev* driver = flash->driver; + + if (offset + count > TEST_DATA_SIZE) { + rtems_set_errno_and_return_minus_one( EINVAL ); + } + + memcpy(buffer, &driver->data[offset], count); + return 0; +} + +/* Write Flash call. Any offset or count protections are + * required to be done in the driver function. */ +int test_flashdev_write( + rtems_flashdev* flash, + uintptr_t offset, + size_t count, + const void* buffer +) +{ + test_flashdev* driver = flash->driver; + + if (offset + count > TEST_DATA_SIZE) { + rtems_set_errno_and_return_minus_one( EINVAL ); + } + + memcpy(&driver->data[offset], buffer, count); + return 0; +} + +/* Erase Flash call. Any offset or count protections are + * required to be done in the driver function. */ +int test_flashdev_erase( + rtems_flashdev* flash, + uintptr_t offset, + size_t count +) +{ + test_flashdev* driver = flash->driver; + + if (offset + count > TEST_DATA_SIZE) { + rtems_set_errno_and_return_minus_one( EINVAL ); + } + + if (offset%PAGE_SIZE || count%PAGE_SIZE) { + rtems_set_errno_and_return_minus_one( EINVAL ); + } + + memset(&driver->data[offset], 0, count); + return 0; +} + +/* Initialize Flashdev and underlying driver. */ +rtems_flashdev* test_flashdev_init(void) +{ + rtems_flashdev *flash = rtems_flashdev_alloc_and_init(sizeof(rtems_flashdev)); + + if (flash == NULL) { + return NULL; + } + + test_flashdev* flash_driver = calloc(1, sizeof(test_flashdev)); + + if (flash_driver == NULL) { + rtems_flashdev_destroy_and_free(flash); + return NULL; + } + + flash_driver->data = calloc(1, TEST_DATA_SIZE); + if (flash_driver->data == NULL) { + free(flash_driver); + rtems_flashdev_destroy_and_free(flash); + return NULL; + } + + flash_driver->jedec_id = 0x00ABCDEF; + + rtems_flashdev_region_table *ftable = calloc(1, sizeof(rtems_flashdev_region_table)); + ftable->max_regions = MAX_NUM_REGIONS; + ftable->regions = flash_driver->regions; + ftable->bit_allocator = flash_driver->bit_allocator; + + flash->driver = flash_driver; + flash->read = &test_flashdev_read; + flash->write = &test_flashdev_write; + flash->erase = &test_flashdev_erase; + flash->jedec_id = &test_flashdev_jedec_id; + flash->flash_type = &test_flashdev_type; + flash->page_info_by_offset = &test_flashdev_page_by_off; + flash->page_info_by_index = &test_flashdev_page_by_index; + flash->page_count = &test_flashdev_page_count; + flash->write_block_size = &test_flashdev_wb_size; + flash->region_table = ftable; + + return flash; +} diff --git a/testsuites/libtests/flashdev01/test_flashdev.h b/testsuites/libtests/flashdev01/test_flashdev.h new file mode 100644 index 0000000000..8b03959c42 --- /dev/null +++ b/testsuites/libtests/flashdev01/test_flashdev.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2023 Aaron Nyholm + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __TEST_FLASHDEV_H +#define __TEST_FLASHDEV_H + +#include <dev/flash/flashdev.h> + +rtems_flashdev* test_flashdev_init(void); + +#endif /* __TEST_FLASHDEV_H */ diff --git a/testsuites/libtests/flashdisk01/init.c b/testsuites/libtests/flashdisk01/init.c index 0caeb4e181..da9fc2a5b5 100644 --- a/testsuites/libtests/flashdisk01/init.c +++ b/testsuites/libtests/flashdisk01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/flashdisk01/test-file-system.c b/testsuites/libtests/flashdisk01/test-file-system.c index 66b18de273..f8c87fb8ad 100644 --- a/testsuites/libtests/flashdisk01/test-file-system.c +++ b/testsuites/libtests/flashdisk01/test-file-system.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2010-2012 embedded brains GmbH. All rights reserved. + * Copyright (C) 2010, 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/flashdisk01/test-file-system.h b/testsuites/libtests/flashdisk01/test-file-system.h index 5bb5064246..b592ac7dca 100644 --- a/testsuites/libtests/flashdisk01/test-file-system.h +++ b/testsuites/libtests/flashdisk01/test-file-system.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2010-2012 embedded brains GmbH. All rights reserved. + * Copyright (C) 2010, 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/getentropy01/init.c b/testsuites/libtests/getentropy01/init.c index 12f9741665..afdd0c88c1 100644 --- a/testsuites/libtests/getentropy01/init.c +++ b/testsuites/libtests/getentropy01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/heapwalk/init.c b/testsuites/libtests/heapwalk/init.c index d7f0302b0f..2864feac28 100644 --- a/testsuites/libtests/heapwalk/init.c +++ b/testsuites/libtests/heapwalk/init.c @@ -6,7 +6,7 @@ * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). * - * Copyright (c) 2009 embedded brains GmbH. + * Copyright (c) 2009 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/i2c01/init.c b/testsuites/libtests/i2c01/init.c index b6480fb99e..452bea4ac1 100644 --- a/testsuites/libtests/i2c01/init.c +++ b/testsuites/libtests/i2c01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/irqs01/init.c b/testsuites/libtests/irqs01/init.c index ab7ca926ca..604aaf1f22 100644 --- a/testsuites/libtests/irqs01/init.c +++ b/testsuites/libtests/irqs01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/libfdt01/init.c b/testsuites/libtests/libfdt01/init.c index 80a8361339..6f369daf82 100644 --- a/testsuites/libtests/libfdt01/init.c +++ b/testsuites/libtests/libfdt01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/libfdt01/some.dts b/testsuites/libtests/libfdt01/some.dts index c6e2fc84ad..c4c7d926c6 100644 --- a/testsuites/libtests/libfdt01/some.dts +++ b/testsuites/libtests/libfdt01/some.dts @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/malloctest/init.c b/testsuites/libtests/malloctest/init.c index 05d97a27d5..d72f49112e 100644 --- a/testsuites/libtests/malloctest/init.c +++ b/testsuites/libtests/malloctest/init.c @@ -4,7 +4,7 @@ * COPYRIGHT (c) 1989-2011, 2014. * On-Line Applications Research Corporation (OAR). * - * Copyright (c) 2009, 2016 embedded brains GmbH. + * Copyright (C) 2009, 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,8 +60,15 @@ static void test_realloc(void) for (i=2 ; i<2048 ; i++) { p2 = realloc(p1, i); if (p2 != p1) +/* + * This was added to address the following warning. + * warning: pointer 'p1' may be used after 'realloc' + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuse-after-free" printf( "realloc - failed grow in place: " "%p != realloc(%p,%zu)\n", p1, p2, i); +#pragma GCC diagnostic pop p1 = p2; } free(p1); @@ -71,8 +78,15 @@ static void test_realloc(void) for (i=2047 ; i>=1; i--) { p2 = realloc(p1, i); if (p2 != p1) - printf( "realloc - failed shrink in place: " +/* + * This was added to address the following warning. + * warning: pointer 'p1' may be used after 'realloc' + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuse-after-free" + printf( "realloc - failed shrink in place: " "%p != realloc(%p,%zu)\n", p1, p2, i); +#pragma GCC diagnostic pop p1 = p2; } free(p1); @@ -84,8 +98,15 @@ static void test_realloc(void) p2 = malloc(32); p3 = realloc(p1, 64); if (p3 == p1 || p3 == NULL) - printf( +/* + * This was added to address the following warning. + * warning: pointer may be used after 'realloc' + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuse-after-free" + printf( "realloc - failed non-in place: realloc(%p,%d) = %p\n", p1, 64, p3); +#pragma GCC diagnostic pop free(p3); free(p2); @@ -122,7 +143,14 @@ static void test_realloc(void) /* * Realloc with a bad pointer to force a point */ - p4 = realloc( test_realloc, 32 ); +/* + * This was added to address the following warning. + * warning: 'realloc' called on unallocated object + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfree-nonheap-object" + p4 = realloc( test_realloc, 32 ); +#pragma GCC diagnostic pop p4 = _realloc_r( NULL, NULL, 1 ); } @@ -1528,8 +1556,15 @@ static void test_early_malloc( void ) free( q ); +/* + * This was added to address the following warning. + * warning: pointer 'q' used after 'free' + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuse-after-free" r = realloc( q, 128 ); rtems_test_assert( r == q ); +#pragma GCC diagnostic pop s = malloc( 1 ); rtems_test_assert( s != NULL ); diff --git a/testsuites/libtests/md501/init.c b/testsuites/libtests/md501/init.c index 00941acd85..e388f082b2 100644 --- a/testsuites/libtests/md501/init.c +++ b/testsuites/libtests/md501/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/newlib01/init.c b/testsuites/libtests/newlib01/init.c index 0bb3c4628b..d3ccbddba1 100644 --- a/testsuites/libtests/newlib01/init.c +++ b/testsuites/libtests/newlib01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2022 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -43,6 +43,10 @@ #include "tmacros.h" +#ifndef _REENT_CLEANUP +#define _REENT_CLEANUP(ptr) ((ptr)->__cleanup) +#endif + const char rtems_test_name[] = "NEWLIB 1"; static const char stdio_file_path[] = "/stdio-file"; @@ -129,7 +133,6 @@ static void test_lrand48(void) static void stdio_file_worker(rtems_task_argument arg) { test_context *ctx = &test_instance; - struct _reent *reent = _REENT; FILE *output; char buf[1] = { 'x' }; size_t n; @@ -137,7 +140,7 @@ static void stdio_file_worker(rtems_task_argument arg) test_rand(); test_lrand48(); - rtems_test_assert(reent->__cleanup == NULL); + rtems_test_assert(_REENT_CLEANUP(_REENT) == NULL); output = stdout = fopen(&stdio_file_path[0], "r+"); rtems_test_assert(stdout != NULL); @@ -145,9 +148,9 @@ static void stdio_file_worker(rtems_task_argument arg) /* * Check newlib's __sinit does not touch our assigned file pointer. */ - rtems_test_assert(reent->__cleanup == NULL); + rtems_test_assert(_REENT_CLEANUP(_REENT) == NULL); rtems_test_assert(fflush(stdout) == 0); - rtems_test_assert(reent->__cleanup != NULL); + rtems_test_assert(_REENT_CLEANUP(_REENT) != NULL); rtems_test_assert(stdout == output); n = fwrite(&buf[0], sizeof(buf), 1, stdout); diff --git a/testsuites/libtests/ofw01/some.dts b/testsuites/libtests/ofw01/some.dts index e828622d02..6a5023414f 100644 --- a/testsuites/libtests/ofw01/some.dts +++ b/testsuites/libtests/ofw01/some.dts @@ -2,7 +2,7 @@ /* * Copyright (c) 2020 Niteesh G S <niteesh.gs@gmail.com>. All rights reserved. - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/pwdgrp01/init.c b/testsuites/libtests/pwdgrp01/init.c index 3420c8eafa..e241237272 100644 --- a/testsuites/libtests/pwdgrp01/init.c +++ b/testsuites/libtests/pwdgrp01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/pwdgrp02/init.c b/testsuites/libtests/pwdgrp02/init.c index 8a67ec1f53..3fb74b226c 100644 --- a/testsuites/libtests/pwdgrp02/init.c +++ b/testsuites/libtests/pwdgrp02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/rbheap01/init.c b/testsuites/libtests/rbheap01/init.c index 34e7aacbb5..ab6d36ec34 100644 --- a/testsuites/libtests/rbheap01/init.c +++ b/testsuites/libtests/rbheap01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012-2015 embedded brains GmbH. All rights reserved. + * Copyright (C) 2012, 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/record01/init.c b/testsuites/libtests/record01/init.c index fea509089a..eb257b8a2e 100644 --- a/testsuites/libtests/record01/init.c +++ b/testsuites/libtests/record01/init.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/record02/init.c b/testsuites/libtests/record02/init.c index 7568f06e18..3c4dac25a0 100644 --- a/testsuites/libtests/record02/init.c +++ b/testsuites/libtests/record02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2018, 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2018, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/regulator01/regulator01.c b/testsuites/libtests/regulator01/regulator01.c new file mode 100644 index 0000000000..cc5af01223 --- /dev/null +++ b/testsuites/libtests/regulator01/regulator01.c @@ -0,0 +1,1310 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @defgroup RegulatorTests Regulator Test Cases + * + * @brief Unit test cases for the Regulator + * + * This is a set of unit test cases for the regulator. + */ + +/** + * @ingroup RegulatorTests + * + * @file + * + * @brief Test 01 for Regulator Library + */ + +/* + * Copyright (C) 2022 On-Line Applications Research Corporation (OAR) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +#include <rtems.h> +#include <rtems/test-info.h> +#include <tmacros.h> + +#include <rtems/regulator.h> + +/** + * @brief Regulator Test Name + */ +const char rtems_test_name[] = "Regulator 1"; + +/* + * Prototypes for wrapped functions + */ +void *__wrap_malloc(size_t size); +void *__real_malloc(size_t size); + +/** + * @ingroup RegulatorTests + * @brief Calloc Wrapper Trigger Count + */ +static int malloc_trigger_count; + +/** + * @ingroup RegulatorTests + * @brief Calloc Wrapper Call Count + */ +static int malloc_call_count; + +/** + * @ingroup RegulatorTests + * @brief Calloc Wrapper Trigger enable + */ +static bool malloc_trigger_enabled; + +/** + * @ingroup RegulatorTests + * @brief Enable Calloc Wrapper Trigger + */ +static void malloc_trigger_enable( + int trigger_count +) +{ + malloc_trigger_enabled = true; + malloc_trigger_count = trigger_count; + malloc_call_count = 0; +} +/** + * @ingroup RegulatorTests + * @brief Reset Calloc Wrapper Trigger and Count + */ +static void malloc_trigger_reset(void) +{ + malloc_trigger_enabled = 0; + malloc_trigger_count = 0; + malloc_call_count = 0; +} +/** + * @ingroup RegulatorTests + * @brief Calloc Wrapper to Trigger Allocation Errors + */ +void *__wrap_malloc(size_t size) +{ + if (malloc_trigger_enabled) { + malloc_call_count++; + if (malloc_call_count == malloc_trigger_count) { + return NULL; + } + } + + return __real_malloc(size); +} + +/** + * @brief Constant to simpify code + */ +#define FIVE_SECONDS (5 * rtems_clock_get_ticks_per_second()) + +/** + * @ingroup RegulatorTests + * @brief Empty Deliver Method for Testing + */ +static bool test_regulator_deliverer( + void *context, + void *message, + size_t length +) +{ + (void) context; + (void) message; + (void) length; + + return true; +} + +/** + * @ingroup RegulatorTests + * @brief Maximum length of a test message that is delivered + */ +#define MAXIMUM_MESSAGE_LENGTH 32 + +/** + * @ingroup RegulatorTests + * @brief Maximum number of test messages to buffer + */ +#define MAXIMUM_MESSAGES_TO_BUFFER 10 + +/** + * @ingroup RegulatorTests + * @brief Structure for capturing messages as delivered + */ +typedef struct { + rtems_interval processed; + char message[MAXIMUM_MESSAGE_LENGTH]; +} message_log_t; + +/** + * @ingroup RegulatorTests + * @brief Set of Delivered messages + */ +message_log_t delivered_messages[MAXIMUM_MESSAGES_TO_BUFFER]; + +/** + * @ingroup RegulatorTests + * @brief Count of Delivered messages + */ +int delivered_message_count; + +/** + * @ingroup RegulatorTests + * @brief Reset Delivered Message Set + * + * This is used at the beginning of a test case which is going to + * check that message contents and delivery times were as expected. + */ +static void delivered_messages_reset(void) +{ + delivered_message_count = 0; + memset(delivered_messages, 0xc5, sizeof(delivered_messages)); +} + +/** + * @brief Context for Logger Delivery Function + */ +typedef struct { + /** Regulator instance being operated on */ + rtems_regulator_instance *regulator; +} deliverer_logger_context_t; + +/** + * @brief Context Instance for Logger Delivery Function + */ +static deliverer_logger_context_t deliverer_logger_context; + +/** + * @ingroup RegulatorTests + * @brief Empty Deliver Method for Testing + * + * This deliverer method implementation logs the messages along with + * their time of arrival. This is used by the test cases to verify + * proper delivery. + */ +static bool test_regulator_deliverer_logger( + void *context, + void *message, + size_t length +) +{ + deliverer_logger_context_t *the_context; + + the_context = (deliverer_logger_context_t *)context; + + static bool caller_releases_buffer = true; + + size_t len; + rtems_interval ticks; + rtems_status_code sc; + + len = strnlen(message, MAXIMUM_MESSAGE_LENGTH) + 1; + rtems_test_assert(len = length); + + ticks = rtems_clock_get_ticks_since_boot(); + + delivered_messages[delivered_message_count].processed = ticks; + + strcpy(delivered_messages[delivered_message_count].message, message); + + delivered_message_count++; + + /* + * Alternate releasing the buffer here and allowing the calling Delivery + * Thread to do it. This increases coverage of that logic. + */ + if (caller_releases_buffer == true) { + caller_releases_buffer = false; + return true; + } + + sc = rtems_regulator_release_buffer(the_context->regulator, message); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + return false; +} + + +/** + * @ingroup RegulatorTests + * @brief Helper to create a Regulator instance + * + * This helper creates a regulator instance with some arbitrary attributes. + * This is used in multiple test cases to have a valie regulator instance to + * trigger error cases. + */ +static rtems_regulator_instance *test_regulator_create_regulator_OK(void) +{ + rtems_status_code sc; + rtems_regulator_attributes attributes = { + .deliverer = test_regulator_deliverer, + .deliverer_context = NULL, + .maximum_message_size = 16, + .maximum_messages = 10, + .delivery_thread_priority = 16, + .delivery_thread_stack_size = 0, + .delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000), + .maximum_to_dequeue_per_period = 3 + }; + rtems_regulator_instance *regulator; + + regulator = NULL; + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(regulator != NULL); + + return regulator; +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create() maximum_to_dequeue_per_period + * attributes error + * + * This unit test verifies that rtems_regulator_create() returns an error when + * the maximum_to_dequeue_per_period attribute is zero. + */ +static void test_regulator_create_max_dequeue_zero(void) +{ + rtems_status_code sc; + rtems_regulator_attributes attributes = { + .deliverer = test_regulator_deliverer, + .deliverer_context = NULL, + .maximum_message_size = 16, + .maximum_messages = 10, + .delivery_thread_priority = 16, + .delivery_thread_stack_size = 0, + .delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000), + .maximum_to_dequeue_per_period = 0 + }; + rtems_regulator_instance *regulator; + + regulator = NULL; + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_INVALID_NUMBER); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create() NULL attributes error + * + * This unit test verifies that rtems_regulator_create() returns an error when + * the attributes argument is NULL. + */ +static void test_regulator_create_null_attributes(void) +{ + rtems_status_code sc; + rtems_regulator_instance *regulator; + + sc = rtems_regulator_create(NULL, ®ulator); + rtems_test_assert(sc == RTEMS_INVALID_ADDRESS); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create NULL regulator error + * + * This unit test verifies that rtems_regulator_create() returns an error when + * the regulator argument is NULL. + */ +static void test_regulator_create_null_regulator(void) +{ + rtems_status_code sc; + rtems_regulator_attributes attributes; + + sc = rtems_regulator_create(&attributes, NULL); + rtems_test_assert(sc == RTEMS_INVALID_ADDRESS); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create deliverer is NULL + * + * This unit test verifies that rtems_regulator_create() returns an error when + * the the attributes deliverer field is NULL. + */ +static void test_regulator_create_deliverer_is_null(void) +{ + rtems_status_code sc; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = NULL; + attributes.maximum_messages = 0; + attributes.maximum_message_size = 16; + attributes.maximum_to_dequeue_per_period = 1; + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_INVALID_ADDRESS); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create maximum_messages is 0 error + * + * This unit test verifies that rtems_regulator_create() returns an error when + * the the attributes maximum_messages field is 0. + */ +static void test_regulator_create_maximum_messages_is_zero(void) +{ + rtems_status_code sc; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = test_regulator_deliverer; + attributes.maximum_messages = 0; + attributes.maximum_message_size = 16; + attributes.maximum_to_dequeue_per_period = 1; + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_INVALID_NUMBER); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create maximum_message_size is 0 error + * + * This unit test verifies that rtems_regulator_create() returns an error when + * the the attributes maximum_message_size field is 0. + */ +static void test_regulator_create_maximum_message_size_is_zero(void) +{ + rtems_status_code sc; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = test_regulator_deliverer; + attributes.maximum_messages = 10; + attributes.maximum_message_size = 0; + attributes.maximum_to_dequeue_per_period = 1; + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_INVALID_SIZE); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create maximum_to_dequeue_per_period is 0 error + * + * This unit test verifies that rtems_regulator_create() returns an error when + * the the attributes maximum_to_dequeue_per_period field is 0. + */ +static void test_regulator_create_maximum_to_dequeue_per_period_is_zero(void) +{ + rtems_status_code sc; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = test_regulator_deliverer; + attributes.maximum_messages = 10; + attributes.maximum_message_size = 0; + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_INVALID_SIZE); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create returns error on failure to allocate regulator + * + * This unit test verifies that rtems_regulator_create() returns an error when + * it is unable to allocate the mmemory for the regulator instance. + */ +static void test_regulator_create_malloc_regulator_fails(void) +{ + rtems_status_code sc; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = test_regulator_deliverer; + attributes.maximum_messages = 10; + attributes.maximum_message_size = 16; + attributes.delivery_thread_priority = 32; + attributes.maximum_to_dequeue_per_period = 1; + attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000); + + malloc_trigger_enable(1); + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_NO_MEMORY); + + malloc_trigger_reset(); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create returns error on failure to allocate buffers + * + * This unit test verifies that rtems_regulator_create() returns an error when + * it is unable to allocate the mmemory for the regulator buffers. + */ +static void test_regulator_create_malloc_buffers_fails(void) +{ + rtems_status_code sc; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = test_regulator_deliverer; + attributes.maximum_messages = 10; + attributes.maximum_message_size = 16; + attributes.delivery_thread_priority = 32; + attributes.maximum_to_dequeue_per_period = 1; + attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000); + + malloc_trigger_enable(2); + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_NO_MEMORY); + + malloc_trigger_reset(); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create and delete work + * + * This unit test verifies that rtems_regulator_create() can successfully create + * the the attributes delivery_thread_priority field is 0. + */ +static void test_regulator_create_delivery_thread_priority_is_zero(void) +{ + rtems_status_code sc; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = test_regulator_deliverer; + attributes.maximum_messages = 10; + attributes.maximum_message_size = 16; + attributes.delivery_thread_priority = 0; + attributes.maximum_to_dequeue_per_period = 1; + attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000); + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_INVALID_PRIORITY); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create rtems_partition_create error + * + * This unit test verifies that rtems_regulator_create() correctly returns an + * error when the call to rtems_partition_create() fails. + */ +static void test_regulator_create_partition_create_fails(void) +{ + rtems_status_code sc; + rtems_id partition_id; + unsigned long partition_area[16]; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + sc = rtems_partition_create( + rtems_build_name('T', 'P', 'T', 'P'), + partition_area, + 16 * sizeof(unsigned long), + 2 * sizeof(unsigned long), + RTEMS_DEFAULT_ATTRIBUTES, + &partition_id + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = test_regulator_deliverer; + attributes.maximum_messages = 10; + attributes.maximum_message_size = 16; + attributes.delivery_thread_priority = 8; + attributes.maximum_to_dequeue_per_period = 1; + attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000); + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_TOO_MANY); + + sc = rtems_partition_delete(partition_id); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create rtems_message_queue_create error + * + * This unit test verifies that rtems_regulator_create() correctly returns an + * error when the call to rtems_message_queue_create() fails. + */ +static void test_regulator_create_message_queue_create_fails(void) +{ + rtems_status_code sc; + rtems_id queue_id; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + sc = rtems_message_queue_create( + rtems_build_name('T', 'Q', 'T', 'Q'), + 4, + sizeof(unsigned long), + RTEMS_DEFAULT_ATTRIBUTES, + &queue_id + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = test_regulator_deliverer; + attributes.maximum_messages = 10; + attributes.maximum_message_size = 16; + attributes.delivery_thread_priority = 8; + attributes.maximum_to_dequeue_per_period = 1; + attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000); + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_TOO_MANY); + + sc = rtems_message_queue_delete(queue_id); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_create rtems_task_create error + * + * This unit test verifies that rtems_regulator_create() correctly returns an + * error when the call to rtems_task_create() fails. + */ +static void test_regulator_create_task_create_fails(void) +{ + rtems_status_code sc; + rtems_id task_id; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + sc = rtems_task_create( + rtems_build_name('T', 'T', 'T', 'T'), + 80, + 0, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &task_id + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = test_regulator_deliverer; + attributes.maximum_messages = 10; + attributes.maximum_message_size = 16; + attributes.delivery_thread_priority = 8; + attributes.maximum_to_dequeue_per_period = 1; + attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000); + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_TOO_MANY); + + sc = rtems_task_delete(task_id); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); +} + +/** + * @ingroup RegulatorTests + * @brief Verify Regulator Output Thread Handles Error on Period Create + * + * This unit test verifies that regulator output thread correctly exits + * when the call to rtems_rate_monotonic_create() fails. + * + * This error condition/path cannot be directly detected via a return code, + * It is verified via a debugger or code coverage reports. + */ +static void test_regulator_create_rate_monotonic_create_fails(void) +{ + rtems_status_code sc; + rtems_id period_id; + rtems_regulator_attributes attributes; + rtems_regulator_instance *regulator; + + sc = rtems_rate_monotonic_create( + rtems_build_name('T', 'S', 'T', 'P'), + &period_id + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + (void) memset(&attributes, 0, sizeof(rtems_regulator_attributes)); + + attributes.deliverer = test_regulator_deliverer; + attributes.maximum_messages = 10; + attributes.maximum_message_size = 16; + attributes.delivery_thread_priority = 8; + attributes.maximum_to_dequeue_per_period = 1; + attributes.delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000); + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + /* + * Let the output thread execute and encounter the create error. + */ + + sleep(1); + + /* + * Now deallocate the resources allocated earlier + */ + sc = rtems_regulator_delete(regulator, FIVE_SECONDS); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_rate_monotonic_delete(period_id); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_delete NULL regulator error + * + * This unit test verifies that rtems_regulator_delete() returns an error when + * the regulator argument is NULL. + */ +static void test_regulator_delete_null_regulator(void) +{ + rtems_status_code sc; + + sc = rtems_regulator_delete(NULL, FIVE_SECONDS); + rtems_test_assert(sc == RTEMS_INVALID_ADDRESS); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_delete uninitialized regulator error + * + * This unit test verifies that rtems_regulator_delete() returns an error when + * the regulator argument is uninitialized. + */ +static void test_regulator_delete_uninitialized_regulator(void) +{ + rtems_status_code sc; + rtems_regulator_instance regulator; + + (void) memset(®ulator, 0, sizeof(regulator)); + + sc = rtems_regulator_delete(®ulator, 0); + rtems_test_assert(sc == RTEMS_INCORRECT_STATE); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_delete successful case + * + * This unit test verifies that rtems_regulator_delete() can be successfully + * deleted. + */ +static void test_regulator_delete_OK(void) +{ + rtems_status_code sc; + rtems_regulator_instance *regulator; + + regulator = test_regulator_create_regulator_OK(); + rtems_test_assert(regulator != NULL); + + sc = rtems_regulator_delete(regulator, FIVE_SECONDS); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_obtain_buffer NULL regulator error + * + * This unit test verifies that rtems_regulator_obtain_buffer() returns an error when + * the regulator argument is NULL. + */ +static void test_regulator_obtain_buffer_null_regulator(void) +{ + rtems_status_code sc; + void *buffer; + + sc = rtems_regulator_obtain_buffer(NULL, &buffer); + rtems_test_assert(sc == RTEMS_INVALID_ADDRESS); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_obtain_buffer uninitialized regulator error + * + * This unit test verifies that rtems_regulator_obtain_buffer() returns an error when + * the regulator argument is uninitialized. + */ +static void test_regulator_obtain_buffer_uninitialized_regulator(void) +{ + rtems_status_code sc; + rtems_regulator_instance regulator; + void *buffer; + + (void) memset(®ulator, 0, sizeof(regulator)); + + sc = rtems_regulator_obtain_buffer(®ulator, &buffer); + rtems_test_assert(sc == RTEMS_INCORRECT_STATE); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_obtain_buffer successful case + * + * This unit test verifies that rtems_regulator_obtain_buffer() can be successfully + * obtained from an initialized regulator. + */ +static void test_regulator_obtain_buffer_OK(void) +{ + rtems_status_code sc; + rtems_regulator_instance *regulator; + void *buffer; + + regulator = test_regulator_create_regulator_OK(); + rtems_test_assert(regulator != NULL); + + sc = rtems_regulator_obtain_buffer(regulator, &buffer); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(buffer != NULL); + + /* + * Not really testing this here but cannot delete underlying partition + * if there are buffers outstanding. + */ + sc = rtems_regulator_release_buffer(regulator, buffer); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(buffer != NULL); + + sc = rtems_regulator_delete(regulator, FIVE_SECONDS); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_release_buffer NULL regulator error + * + * This unit test verifies that rtems_regulator_release_buffer() returns an error when + * the regulator argument is NULL. + */ +static void test_regulator_release_buffer_null_regulator(void) +{ + rtems_status_code sc; + void *buffer; + + sc = rtems_regulator_release_buffer(NULL, &buffer); + rtems_test_assert(sc == RTEMS_INVALID_ADDRESS); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_release_buffer uninitialized regulator error + * + * This unit test verifies that rtems_regulator_release_buffer() returns an + * error when the regulator argument is uninitialized. + */ +static void test_regulator_release_buffer_uninitialized_regulator(void) +{ + rtems_status_code sc; + rtems_regulator_instance regulator; + void *buffer; + + (void) memset(®ulator, 0, sizeof(regulator)); + + sc = rtems_regulator_release_buffer(®ulator, &buffer); + rtems_test_assert(sc == RTEMS_INCORRECT_STATE); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_release_buffer successful case + * + * This unit test verifies that rtems_regulator_release_buffer() can be successfully + * invoked with a buffer previously allocated by rtems_regulator_obtain_buffer(). + */ +static void test_regulator_release_buffer_OK(void) +{ + rtems_status_code sc; + rtems_regulator_instance *regulator; + void *buffer; + + regulator = test_regulator_create_regulator_OK(); + rtems_test_assert(regulator != NULL); + + sc = rtems_regulator_obtain_buffer(regulator, &buffer); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(buffer != NULL); + + sc = rtems_regulator_release_buffer(regulator, buffer); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_regulator_delete(regulator, FIVE_SECONDS); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_send NULL regulator error + * + * This unit test verifies that rtems_regulator_send() returns an error when + * the regulator argument is NULL. + */ +static void test_regulator_send_null_regulator(void) +{ + rtems_status_code sc; + void *buffer; + size_t length; + + buffer = &length; + length = sizeof(size_t); + + sc = rtems_regulator_send(NULL, buffer, length); + rtems_test_assert(sc == RTEMS_INVALID_ADDRESS); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_send NULL message error + * + * This unit test verifies that rtems_regulator_send() returns an error when + * the message argument is NULL. + */ +static void test_regulator_send_null_message(void) +{ + rtems_status_code sc; + size_t length; + rtems_regulator_instance regulator; + + length = sizeof(size_t); + + sc = rtems_regulator_send(®ulator, NULL, length); + rtems_test_assert(sc == RTEMS_INVALID_ADDRESS); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_send zero length message error + * + * This unit test verifies that rtems_regulator_send() returns an + * error when the message length is 0. + */ +static void test_regulator_send_length_is_zero(void) +{ + rtems_status_code sc; + rtems_regulator_instance regulator; + void *buffer; + size_t length; + + buffer = &length; + length = 0; + + sc = rtems_regulator_send(®ulator, buffer, length); + rtems_test_assert(sc == RTEMS_INVALID_NUMBER); +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_send uninitialized regulator error + * + * This unit test verifies that rtems_regulator_send() returns an + * error when the regulator argument is uninitialized. + */ +static void test_regulator_send_uninitialized_regulator(void) +{ + rtems_status_code sc; + rtems_regulator_instance regulator; + void *buffer; + size_t length; + + buffer = &length; + length = sizeof(size_t); + + (void) memset(®ulator, 0, sizeof(regulator)); + + sc = rtems_regulator_send(®ulator, buffer, length); + rtems_test_assert(sc == RTEMS_INCORRECT_STATE); +} + +/** + * @ingroup RegulatorTests + * @brief Verify Cannot Delete with Message Outstanding + * + * This unit test verifies that when the regulator is successfully + * initialized, that it cannot be deleted with an undelivered message. + * It also verifies some basic statistics are working. + */ +static void test_regulator_cannot_delete_with_outstanding(void) +{ + rtems_status_code sc; + rtems_regulator_instance *regulator; + char message[MAXIMUM_MESSAGE_LENGTH]; + void *buffer; + size_t length; + int match; + rtems_regulator_attributes attributes = { + .deliverer = test_regulator_deliverer_logger, + .deliverer_context = &deliverer_logger_context, + .maximum_message_size = 16, + .maximum_messages = 10, + .delivery_thread_priority = 16, + .delivery_thread_stack_size = 0, + .delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(250), + .maximum_to_dequeue_per_period = 3 + }; + rtems_regulator_statistics stats; + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(regulator != NULL); + + deliverer_logger_context.regulator = regulator; + + delivered_messages_reset(); + + // Ensure statistics show no buffers obtained or processed + sc = rtems_regulator_get_statistics(regulator, &stats); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(stats.obtained == 0); + rtems_test_assert(stats.released == 0); + rtems_test_assert(stats.delivered == 0); + rtems_test_assert(stats.period_statistics.count == 0); + rtems_test_assert(stats.period_statistics.missed_count == 0); + + // Obtain a buffer which should change the statistics + sc = rtems_regulator_obtain_buffer(regulator, &buffer); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(buffer != NULL); + + // Ensure statistics show one buffer obtained + sc = rtems_regulator_get_statistics(regulator, &stats); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(stats.obtained == 1); + rtems_test_assert(stats.released == 0); + rtems_test_assert(stats.delivered == 0); + rtems_test_assert(stats.period_statistics.count == 0); + rtems_test_assert(stats.period_statistics.missed_count == 0); + + + // Format and send the message -- statistics do not change + length = snprintf(message, MAXIMUM_MESSAGE_LENGTH, "message %d", 1024) + 1; + strcpy(buffer, message); + + sc = rtems_regulator_send(regulator, buffer, length); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + // Ensure statistics show one buffer obtained + sc = rtems_regulator_get_statistics(regulator, &stats); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(stats.obtained == 1); + rtems_test_assert(stats.released == 0); + rtems_test_assert(stats.delivered == 0); + rtems_test_assert(stats.period_statistics.count == 0); + rtems_test_assert(stats.period_statistics.missed_count == 0); + + // This is the actual failing case -- cannot delete w/outstanding + sc = rtems_regulator_delete(regulator, FIVE_SECONDS); + rtems_test_assert(sc == RTEMS_RESOURCE_IN_USE); + + // Now let the deliveries happen + sleep(1); + + // Ensure statistics show all buffers released + sc = rtems_regulator_get_statistics(regulator, &stats); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(stats.obtained == 1); + rtems_test_assert(stats.released == 1); + rtems_test_assert(stats.delivered == 1); + rtems_test_assert(stats.period_statistics.count != 0); + rtems_test_assert(stats.period_statistics.missed_count == 0); + + rtems_test_assert(delivered_message_count == 1); + match = strncmp( + delivered_messages[0].message, + message, + MAXIMUM_MESSAGE_LENGTH + ); + rtems_test_assert(match == 0); + + sc = rtems_regulator_delete(regulator, FIVE_SECONDS); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + deliverer_logger_context.regulator = NULL; +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_send and output thread delivers message + * + * This unit test verifies that when the regulator is + * successfully initialized and used as expected, a message sent via + * rtems_regulator_send() is delivered as expected. + */ +static void test_regulator_send_one_message_OK(void) +{ + rtems_status_code sc; + rtems_regulator_instance *regulator; + char message[MAXIMUM_MESSAGE_LENGTH]; + void *buffer; + size_t length; + int match; + rtems_regulator_attributes attributes = { + .deliverer = test_regulator_deliverer_logger, + .deliverer_context = &deliverer_logger_context, + .maximum_message_size = 16, + .maximum_messages = 10, + .delivery_thread_priority = 16, + .delivery_thread_stack_size = 0, + .delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(250), + .maximum_to_dequeue_per_period = 3 + }; + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(regulator != NULL); + + deliverer_logger_context.regulator = regulator; + + delivered_messages_reset(); + + sc = rtems_regulator_obtain_buffer(regulator, &buffer); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(buffer != NULL); + + length = snprintf(message, MAXIMUM_MESSAGE_LENGTH, "message %d", 1024) + 1; + strcpy(buffer, message); + + sc = rtems_regulator_send(regulator, buffer, length); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sleep(1); + + rtems_test_assert(delivered_message_count == 1); + match = strncmp( + delivered_messages[0].message, + message, + MAXIMUM_MESSAGE_LENGTH + ); + rtems_test_assert(match == 0); + + sc = rtems_regulator_delete(regulator, FIVE_SECONDS); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + deliverer_logger_context.regulator = NULL; +} + +/** + * @ingroup RegulatorTests + * @brief Verify rtems_regulator_send and output thread delivers messages + * + * This unit test verifies that when the regulator is successfully initialized + * and used as expected, and multiple messages are sent via rtems_regulator_send() + * that they are delivered as expected. + */ +#include <stdio.h> +static void test_regulator_send_multiple_messages_OK(void) +{ + rtems_status_code sc; + rtems_regulator_instance *regulator; + char message[MAXIMUM_MESSAGE_LENGTH]; + void *buffer; + size_t length; + int match; + int i; + time_t base_time; + time_t tmp_time; + rtems_interval base_ticks; + rtems_interval ticks; + rtems_interval ticks_per_second; + + rtems_regulator_attributes attributes = { + .deliverer = test_regulator_deliverer_logger, + .deliverer_context = &deliverer_logger_context, + .maximum_message_size = MAXIMUM_MESSAGE_LENGTH, + .maximum_messages = 10, + .delivery_thread_priority = 16, + .delivery_thread_stack_size = 0, + .delivery_thread_period = RTEMS_MILLISECONDS_TO_TICKS(1000), + .maximum_to_dequeue_per_period = 2 + }; + + delivered_messages_reset(); + + sc = rtems_regulator_create(&attributes, ®ulator); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(regulator != NULL); + + deliverer_logger_context.regulator = regulator; + + /* + * Ensure the messages are sent on a second boundary to ensure the + * output thread will process them as expected. + */ + tmp_time = time(NULL); + do { + base_time = time(NULL); + } while (tmp_time == base_time); + + /** + * Send five messages as a burst which will need to be smoothly sent at + * the configured rate. + */ + for (i=1 ; i <= 5 ; i++) { + sc = rtems_regulator_obtain_buffer(regulator, &buffer); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(buffer != NULL); + + length = snprintf(message, MAXIMUM_MESSAGE_LENGTH, "message %d", i); + strcpy(buffer, message); + + sc = rtems_regulator_send(regulator, buffer, length); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + } + + /* + * Let the output thread executed and deliver the messages. + */ + sleep(5); + + /** + * Ensure the five messages were delivered as follows: + * + * - deliver all 5 + * - contents are "message N" where N is 1 to 5 + * - message 1 and 2 delivered during the first second + * - message 3 and 4 delivered during the second second + * - message 5 delivered during the third second + * - no further messages delivered + */ + + rtems_test_assert(delivered_message_count == 5); + + for (i=0 ; i < 5 ; i++) { + (void) snprintf(message, MAXIMUM_MESSAGE_LENGTH, "message %d", i+1); +// printf("%d %s\n", i, delivered_messages[i].message); + match = strncmp( + delivered_messages[i].message, + message, + MAXIMUM_MESSAGE_LENGTH + ); + rtems_test_assert(match == 0); + } + + /** + * Verify that messages were delivered in the proper groups. Check that + * the delivery time matches expectations. + */ + rtems_test_assert(delivered_messages[0].processed == delivered_messages[1].processed); + rtems_test_assert(delivered_messages[1].processed != delivered_messages[2].processed); + rtems_test_assert(delivered_messages[2].processed == delivered_messages[3].processed); + rtems_test_assert(delivered_messages[3].processed != delivered_messages[4].processed); + + /** + * Verify that the message groups were properly spaced temporally. They + * should be one second apart. + */ + ticks_per_second = rtems_clock_get_ticks_per_second(); + + base_ticks = delivered_messages[1].processed; + ticks = delivered_messages[2].processed; + rtems_test_assert(ticks_per_second == ticks - base_ticks); + + base_ticks = delivered_messages[3].processed; + ticks = delivered_messages[4].processed; + rtems_test_assert(ticks_per_second == ticks - base_ticks); + + sc = rtems_regulator_delete(regulator, FIVE_SECONDS); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + deliverer_logger_context.regulator = NULL; +} + +/* Necessary prototype */ +rtems_task test_regulator(rtems_task_argument); + +/** + * @ingroup RegulatorTestshttps://devel.rtems.org/milestone/6.1 + * @brief Test entry task which invokes test cases + */ +rtems_task test_regulator(rtems_task_argument arg) +{ + (void) arg; + + TEST_BEGIN(); + + malloc_trigger_reset(); + + test_regulator_create_max_dequeue_zero(); + test_regulator_create_null_attributes(); + test_regulator_create_null_regulator(); + test_regulator_create_deliverer_is_null(); + test_regulator_create_maximum_messages_is_zero(); + test_regulator_create_maximum_message_size_is_zero(); + test_regulator_create_maximum_to_dequeue_per_period_is_zero(); + test_regulator_create_malloc_regulator_fails(); + test_regulator_create_malloc_buffers_fails(); + test_regulator_create_delivery_thread_priority_is_zero(); + test_regulator_create_partition_create_fails(); + test_regulator_create_message_queue_create_fails(); + test_regulator_create_task_create_fails(); + test_regulator_create_rate_monotonic_create_fails(); + + test_regulator_delete_null_regulator(); + test_regulator_delete_uninitialized_regulator(); + test_regulator_delete_OK(); + + test_regulator_obtain_buffer_null_regulator(); + test_regulator_obtain_buffer_uninitialized_regulator(); + test_regulator_obtain_buffer_OK(); + + test_regulator_release_buffer_null_regulator(); + test_regulator_release_buffer_uninitialized_regulator(); + test_regulator_release_buffer_OK(); + + test_regulator_send_null_regulator(); + test_regulator_send_null_message(); + test_regulator_send_length_is_zero(); + test_regulator_send_uninitialized_regulator(); + + test_regulator_send_one_message_OK(); + test_regulator_cannot_delete_with_outstanding(); + + test_regulator_send_multiple_messages_OK(); + + TEST_END(); + + rtems_test_exit(0); +} diff --git a/testsuites/libtests/regulator01/regulator01.doc b/testsuites/libtests/regulator01/regulator01.doc new file mode 100644 index 0000000000..ff4e8005ec --- /dev/null +++ b/testsuites/libtests/regulator01/regulator01.doc @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: BSD-2-Clause + +# Copyright (c) 2023 OAR Corporation +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +This file describes the directives and concepts tested by this test set. + +test set name: regulator01 + +directives: + + rtems_regulator_create + + rtems_regulator_delete + + rtems_regulator_obtain_buffer + + rtems_regulator_release_buffer + + rtems_regulator_send + +concepts + + Verify rtems_regulator_create() maximum_to_dequeue_per_period + + Verify rtems_regulator_create() NULL attributes error + + Verify rtems_regulator_create NULL regulator error + + Verify rtems_regulator_create deliverer is NULL + + Verify rtems_regulator_create maximum_messages is 0 error + + Verify rtems_regulator_create maximum_message_size is 0 error + + Verify rtems_regulator_create maximum_to_dequeue_per_period is 0 error + + Verify rtems_regulator_create returns error on failure to allocate regulator + + Verify rtems_regulator_create returns error on failure to allocate buffers + + Verify rtems_regulator_create and delete work + + Verify rtems_regulator_create rtems_partition_create error + + Verify rtems_regulator_create rtems_message_queue_create error + + Verify rtems_regulator_create rtems_task_create error + + Verify Regulator Output Thread Handles Error on Period Create + + Verify rtems_regulator_delete NULL regulator error + + Verify rtems_regulator_delete uninitialized regulator error + + Verify rtems_regulator_delete successful case + + Verify rtems_regulator_obtain_buffer NULL regulator error + + Verify rtems_regulator_obtain_buffer uninitialized regulator error + + Verify rtems_regulator_obtain_buffer successful case + + Verify rtems_regulator_release_buffer NULL regulator error + + Verify rtems_regulator_release_buffer uninitialized regulator error + + Verify rtems_regulator_release_buffer successful case + + Verify rtems_regulator_send NULL regulator error + + Verify rtems_regulator_send NULL message error + + Verify rtems_regulator_send zero length message error + + Verify rtems_regulator_send uninitialized regulator error + + Verify rtems_regulator_send and output thread delivers message + + Verify rtems_regulator_send and cannot delete with outstanding messages diff --git a/testsuites/libtests/regulator01/rtems_config.c b/testsuites/libtests/regulator01/rtems_config.c new file mode 100644 index 0000000000..ca96e1b1dd --- /dev/null +++ b/testsuites/libtests/regulator01/rtems_config.c @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @brief RTEMS Configuration for regulator tests + */ + +/* + * COPYRIGHT (c) 2022. * On-Line Applications Research Corporation (OAR). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + + +#include <rtems.h> + +rtems_task test_regulator(rtems_task_argument); + +#include <bsp.h> /* for device driver prototypes */ + +/* NOTICE: the clock driver is explicitly disabled */ +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE +#define CONFIGURE_INIT_TASK_ENTRY_POINT test_regulator +#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT + +/* Use hard limits to make it easier to trip object creation errors */ +#define CONFIGURE_MAXIMUM_TASKS 2 +#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 +#define CONFIGURE_MAXIMUM_PARTITIONS 1 +#define CONFIGURE_MAXIMUM_PERIODS 1 + +#define CONFIGURE_UNIFIED_WORK_AREAS +#define CONFIGURE_MINIMUM_TASK_STACK_SIZE (8 * 1024) + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> diff --git a/testsuites/libtests/sha/init.c b/testsuites/libtests/sha/init.c index c65517253a..7d8c4ada3e 100644 --- a/testsuites/libtests/sha/init.c +++ b/testsuites/libtests/sha/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -29,8 +29,11 @@ #include "config.h" #endif +#include <sha224.h> #include <sha256.h> +#include <sha384.h> #include <sha512.h> +#include <sha512t.h> #include <stdio.h> #include <string.h> @@ -49,7 +52,32 @@ static const char *const test_vectors[] = { }; static const unsigned char -test_sha256_results[RTEMS_ARRAY_SIZE(test_vectors)][32] = { +test_sha224_results[RTEMS_ARRAY_SIZE(test_vectors)][SHA224_DIGEST_LENGTH] = { + { + 0x23, 0x09, 0x7d, 0x22, 0x34, 0x05, 0xd8, 0x22, + 0x86, 0x42, 0xa4, 0x77, 0xbd, 0xa2, 0x55, 0xb3, + 0x2a, 0xad, 0xbc, 0xe4, 0xbd, 0xa0, 0xb3, 0xf7, + 0xe3, 0x6c, 0x9d, 0xa7 + }, { + 0xd1, 0x4a, 0x02, 0x8c, 0x2a, 0x3a, 0x2b, 0xc9, + 0x47, 0x61, 0x02, 0xbb, 0x28, 0x82, 0x34, 0xc4, + 0x15, 0xa2, 0xb0, 0x1f, 0x82, 0x8e, 0xa6, 0x2a, + 0xc5, 0xb3, 0xe4, 0x2f + }, { + 0x75, 0x38, 0x8b, 0x16, 0x51, 0x27, 0x76, 0xcc, + 0x5d, 0xba, 0x5d, 0xa1, 0xfd, 0x89, 0x01, 0x50, + 0xb0, 0xc6, 0x45, 0x5c, 0xb4, 0xf5, 0x8b, 0x19, + 0x52, 0x52, 0x25, 0x25 + }, { + 0xc9, 0x7c, 0xa9, 0xa5, 0x59, 0x85, 0x0c, 0xe9, + 0x7a, 0x04, 0xa9, 0x6d, 0xef, 0x6d, 0x99, 0xa9, + 0xe0, 0xe0, 0xe2, 0xab, 0x14, 0xe6, 0xb8, 0xdf, + 0x26, 0x5f, 0xc0, 0xb3 + } +}; + +static const unsigned char +test_sha256_results[RTEMS_ARRAY_SIZE(test_vectors)][SHA256_DIGEST_LENGTH] = { { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, @@ -74,7 +102,40 @@ test_sha256_results[RTEMS_ARRAY_SIZE(test_vectors)][32] = { }; static const unsigned char -test_sha512_results[RTEMS_ARRAY_SIZE(test_vectors)][64] = { +test_sha384_results[RTEMS_ARRAY_SIZE(test_vectors)][SHA384_DIGEST_LENGTH] = { + { + 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, + 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, + 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, + 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, + 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, + 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 + }, { + 0x38, 0xb0, 0x60, 0xa7, 0x51, 0xac, 0x96, 0x38, + 0x4c, 0xd9, 0x32, 0x7e, 0xb1, 0xb1, 0xe3, 0x6a, + 0x21, 0xfd, 0xb7, 0x11, 0x14, 0xbe, 0x07, 0x43, + 0x4c, 0x0c, 0xc7, 0xbf, 0x63, 0xf6, 0xe1, 0xda, + 0x27, 0x4e, 0xde, 0xbf, 0xe7, 0x6f, 0x65, 0xfb, + 0xd5, 0x1a, 0xd2, 0xf1, 0x48, 0x98, 0xb9, 0x5b + }, { + 0x33, 0x91, 0xfd, 0xdd, 0xfc, 0x8d, 0xc7, 0x39, + 0x37, 0x07, 0xa6, 0x5b, 0x1b, 0x47, 0x09, 0x39, + 0x7c, 0xf8, 0xb1, 0xd1, 0x62, 0xaf, 0x05, 0xab, + 0xfe, 0x8f, 0x45, 0x0d, 0xe5, 0xf3, 0x6b, 0xc6, + 0xb0, 0x45, 0x5a, 0x85, 0x20, 0xbc, 0x4e, 0x6f, + 0x5f, 0xe9, 0x5b, 0x1f, 0xe3, 0xc8, 0x45, 0x2b + }, { + 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8, + 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47, + 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2, + 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12, + 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9, + 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39 + } +}; + +static const unsigned char +test_sha512_results[RTEMS_ARRAY_SIZE(test_vectors)][SHA512_DIGEST_LENGTH] = { { 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, @@ -114,6 +175,56 @@ test_sha512_results[RTEMS_ARRAY_SIZE(test_vectors)][64] = { } }; +static const unsigned char test_sha512_224_results +[RTEMS_ARRAY_SIZE(test_vectors)][SHA512_224_DIGEST_LENGTH] = { + { + 0x46, 0x34, 0x27, 0x0f, 0x70, 0x7b, 0x6a, 0x54, + 0xda, 0xae, 0x75, 0x30, 0x46, 0x08, 0x42, 0xe2, + 0x0e, 0x37, 0xed, 0x26, 0x5c, 0xee, 0xe9, 0xa4, + 0x3e, 0x89, 0x24, 0xaa + }, { + 0x6e, 0xd0, 0xdd, 0x02, 0x80, 0x6f, 0xa8, 0x9e, + 0x25, 0xde, 0x06, 0x0c, 0x19, 0xd3, 0xac, 0x86, + 0xca, 0xbb, 0x87, 0xd6, 0xa0, 0xdd, 0xd0, 0x5c, + 0x33, 0x3b, 0x84, 0xf4 + }, { + 0xe5, 0x30, 0x2d, 0x6d, 0x54, 0xbb, 0x24, 0x22, + 0x75, 0xd1, 0xe7, 0x62, 0x2d, 0x68, 0xdf, 0x6e, + 0xb0, 0x2d, 0xed, 0xd1, 0x3f, 0x56, 0x4c, 0x13, + 0xdb, 0xda, 0x21, 0x74 + }, { + 0x23, 0xfe, 0xc5, 0xbb, 0x94, 0xd6, 0x0b, 0x23, + 0x30, 0x81, 0x92, 0x64, 0x0b, 0x0c, 0x45, 0x33, + 0x35, 0xd6, 0x64, 0x73, 0x4f, 0xe4, 0x0e, 0x72, + 0x68, 0x67, 0x4a, 0xf9 + } +}; + +static const unsigned char test_sha512_256_results +[RTEMS_ARRAY_SIZE(test_vectors)][SHA512_256_DIGEST_LENGTH] = { + { + 0x53, 0x04, 0x8e, 0x26, 0x81, 0x94, 0x1e, 0xf9, + 0x9b, 0x2e, 0x29, 0xb7, 0x6b, 0x4c, 0x7d, 0xab, + 0xe4, 0xc2, 0xd0, 0xc6, 0x34, 0xfc, 0x6d, 0x46, + 0xe0, 0xe2, 0xf1, 0x31, 0x07, 0xe7, 0xaf, 0x23 + }, { + 0xc6, 0x72, 0xb8, 0xd1, 0xef, 0x56, 0xed, 0x28, + 0xab, 0x87, 0xc3, 0x62, 0x2c, 0x51, 0x14, 0x06, + 0x9b, 0xdd, 0x3a, 0xd7, 0xb8, 0xf9, 0x73, 0x74, + 0x98, 0xd0, 0xc0, 0x1e, 0xce, 0xf0, 0x96, 0x7a + }, { + 0xbd, 0xe8, 0xe1, 0xf9, 0xf1, 0x9b, 0xb9, 0xfd, + 0x34, 0x06, 0xc9, 0x0e, 0xc6, 0xbc, 0x47, 0xbd, + 0x36, 0xd8, 0xad, 0xa9, 0xf1, 0x18, 0x80, 0xdb, + 0xc8, 0xa2, 0x2a, 0x70, 0x78, 0xb6, 0xa4, 0x61 + }, { + 0x39, 0x28, 0xe1, 0x84, 0xfb, 0x86, 0x90, 0xf8, + 0x40, 0xda, 0x39, 0x88, 0x12, 0x1d, 0x31, 0xbe, + 0x65, 0xcb, 0x9d, 0x3e, 0xf8, 0x3e, 0xe6, 0x14, + 0x6f, 0xea, 0xc8, 0x61, 0xe1, 0x9b, 0x56, 0x3a + } +}; + static void print_result(const unsigned char *r, size_t n) { size_t i; @@ -133,6 +244,29 @@ static void print_result(const unsigned char *r, size_t n) printf("\n"); } +static void test_sha224(void) +{ + size_t i; + + printf("test SHA224\n"); + + for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) { + SHA224_CTX ctx; + unsigned char r[SHA224_DIGEST_LENGTH]; + const char *s = test_vectors[i]; + + SHA224_Init(&ctx); + SHA224_Update(&ctx, s, strlen(s)); + SHA224_Final(r, &ctx); + + print_result(&r[0], sizeof(r)); + + rtems_test_assert( + memcmp(&r[0], &test_sha224_results[i][0], sizeof(r)) == 0 + ); + } +} + static void test_sha256(void) { size_t i; @@ -141,7 +275,7 @@ static void test_sha256(void) for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) { SHA256_CTX ctx; - unsigned char r[32]; + unsigned char r[SHA256_DIGEST_LENGTH]; const char *s = test_vectors[i]; SHA256_Init(&ctx); @@ -156,6 +290,29 @@ static void test_sha256(void) } } +static void test_sha384(void) +{ + size_t i; + + printf("test SHA384\n"); + + for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) { + SHA384_CTX ctx; + unsigned char r[SHA384_DIGEST_LENGTH]; + const char *s = test_vectors[i]; + + SHA384_Init(&ctx); + SHA384_Update(&ctx, s, strlen(s)); + SHA384_Final(r, &ctx); + + print_result(&r[0], sizeof(r)); + + rtems_test_assert( + memcmp(&r[0], &test_sha384_results[i][0], sizeof(r)) == 0 + ); + } +} + static void test_sha512(void) { size_t i; @@ -164,7 +321,7 @@ static void test_sha512(void) for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) { SHA512_CTX ctx; - unsigned char r[64]; + unsigned char r[SHA512_DIGEST_LENGTH]; const char *s = test_vectors[i]; SHA512_Init(&ctx); @@ -179,12 +336,62 @@ static void test_sha512(void) } } +static void test_sha512_224(void) +{ + size_t i; + + printf("test SHA512-224\n"); + + for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) { + SHA512_CTX ctx; + unsigned char r[SHA512_224_DIGEST_LENGTH]; + const char *s = test_vectors[i]; + + SHA512_224_Init(&ctx); + SHA512_224_Update(&ctx, s, strlen(s)); + SHA512_224_Final(r, &ctx); + + print_result(&r[0], sizeof(r)); + + rtems_test_assert( + memcmp(&r[0], &test_sha512_224_results[i][0], sizeof(r)) == 0 + ); + } +} + +static void test_sha512_256(void) +{ + size_t i; + + printf("test SHA512-256\n"); + + for (i = 0; i < RTEMS_ARRAY_SIZE(test_vectors); ++i) { + SHA512_CTX ctx; + unsigned char r[SHA512_256_DIGEST_LENGTH]; + const char *s = test_vectors[i]; + + SHA512_256_Init(&ctx); + SHA512_256_Update(&ctx, s, strlen(s)); + SHA512_256_Final(r, &ctx); + + print_result(&r[0], sizeof(r)); + + rtems_test_assert( + memcmp(&r[0], &test_sha512_256_results[i][0], sizeof(r)) == 0 + ); + } +} + static void Init(rtems_task_argument arg) { TEST_BEGIN(); + test_sha224(); test_sha256(); + test_sha384(); test_sha512(); + test_sha512_224(); + test_sha512_256(); rtems_stack_checker_report_usage(); TEST_END(); diff --git a/testsuites/libtests/shell01/init.c b/testsuites/libtests/shell01/init.c index 0fc29b8936..83564d9937 100644 --- a/testsuites/libtests/shell01/init.c +++ b/testsuites/libtests/shell01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2019 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/sparsedisk01/init.c b/testsuites/libtests/sparsedisk01/init.c index c756daa188..5398bf98ce 100644 --- a/testsuites/libtests/sparsedisk01/init.c +++ b/testsuites/libtests/sparsedisk01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/spi01/init.c b/testsuites/libtests/spi01/init.c index aeabdc04d0..7b68d0f76a 100644 --- a/testsuites/libtests/spi01/init.c +++ b/testsuites/libtests/spi01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/stackchk01/init.c b/testsuites/libtests/stackchk01/init.c index 9e58409b17..b87b6baa2d 100644 --- a/testsuites/libtests/stackchk01/init.c +++ b/testsuites/libtests/stackchk01/init.c @@ -35,14 +35,18 @@ const char rtems_test_name[] = "STACKCHK 1"; -/* forward declarations to avoid warnings */ -rtems_task Init(rtems_task_argument argument); +static void stack_visitor( const rtems_stack_checker_info *info, void *arg ) +{ + if ( rtems_object_id_get_api( info->id ) == 1 ) { + *(uintptr_t *) arg = info->used; + } +} -rtems_task Init( - rtems_task_argument argument -) +static rtems_task Init( rtems_task_argument argument ) { - bool blown; + bool blown; + uintptr_t used; + uintptr_t limit; TEST_BEGIN(); @@ -50,14 +54,26 @@ rtems_task Init( blown = rtems_stack_checker_is_blown(); rtems_test_assert(!blown); + rtems_task_wake_after( 2 ); + used = 0; + rtems_stack_checker_iterate( stack_visitor, &used ); + limit = CPU_STACK_MINIMUM_SIZE / 4; + printf( + "check used IDLE stack size: 0 < %" PRIuPTR " <= %" PRIuPTR "\n", + used, + limit + ); + rtems_test_assert( used > 0 ); + rtems_test_assert( used <= limit ); + TEST_END(); rtems_test_exit(0); } /* configuration information */ +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER -#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER #define CONFIGURE_MAXIMUM_TASKS 1 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION diff --git a/testsuites/libtests/stackchk01/stackchk01.doc b/testsuites/libtests/stackchk01/stackchk01.doc index 5b3d9c894b..cbb9fb62f9 100644 --- a/testsuites/libtests/stackchk01/stackchk01.doc +++ b/testsuites/libtests/stackchk01/stackchk01.doc @@ -30,9 +30,17 @@ This file describes the directives and concepts tested by this test set. test set name: stackchk01 directives: - rtems_stack_checker_is_blown + +* CPU_STACK_MINIMUM_SIZE + +* rtems_stack_checker_is_blown + +* rtems_stack_checker_iterate concepts: -+ ensure that dynamic checks for a blown stack work both when the stack +* Ensure that dynamic checks for a blown stack work both when the stack is not blown and when it is. + +* Ensure that the CPU_STACK_MINIMUM_SIZE is suffiently larger than the stack + usage in simple applications. diff --git a/testsuites/libtests/termios01/termios_testdriver.c b/testsuites/libtests/termios01/termios_testdriver.c index d0a9534b52..49810a37e0 100644 --- a/testsuites/libtests/termios01/termios_testdriver.c +++ b/testsuites/libtests/termios01/termios_testdriver.c @@ -192,7 +192,7 @@ rtems_device_driver termios_test_driver_open( termios_test_driver_set_attributes, /* setAttributes */ NULL, /* stopRemoteTx */ NULL, /* startRemoteTx */ - 0 /* outputUsesInterrupts */ + TERMIOS_POLLED /* outputUsesInterrupts */ }; if ( minor > 2 ) { diff --git a/testsuites/libtests/termios03/termios_testdriver_polled.c b/testsuites/libtests/termios03/termios_testdriver_polled.c index a852fe1f20..8daf8d6685 100644 --- a/testsuites/libtests/termios03/termios_testdriver_polled.c +++ b/testsuites/libtests/termios03/termios_testdriver_polled.c @@ -159,7 +159,7 @@ rtems_device_driver termios_test_driver_open( termios_test_driver_set_attributes, /* setAttributes */ NULL, /* stopRemoteTx */ NULL, /* startRemoteTx */ - 0 /* outputUsesInterrupts */ + TERMIOS_POLLED /* outputUsesInterrupts */ }; if ( minor > 2 ) { diff --git a/testsuites/libtests/termios04/termios_testdriver_impl.h b/testsuites/libtests/termios04/termios_testdriver_impl.h index cfe9ebedf4..740f9e0778 100644 --- a/testsuites/libtests/termios04/termios_testdriver_impl.h +++ b/testsuites/libtests/termios04/termios_testdriver_impl.h @@ -271,7 +271,7 @@ rtems_device_driver termios_test_driver_open( #if defined(TASK_DRIVEN) TERMIOS_TASK_DRIVEN /* outputUsesInterrupts */ #else - 0 /* outputUsesInterrupts */ + TERMIOS_POLLED /* outputUsesInterrupts */ #endif }; diff --git a/testsuites/libtests/termios09/init.c b/testsuites/libtests/termios09/init.c index 3cb71fb267..a7c2518ecc 100644 --- a/testsuites/libtests/termios09/init.c +++ b/testsuites/libtests/termios09/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/init.c b/testsuites/libtests/ttest01/init.c index 658f8f6289..433bc0581b 100644 --- a/testsuites/libtests/ttest01/init.c +++ b/testsuites/libtests/ttest01/init.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/t-self-test.h b/testsuites/libtests/ttest01/t-self-test.h index 1035872c9d..d2767d5e70 100644 --- a/testsuites/libtests/ttest01/t-self-test.h +++ b/testsuites/libtests/ttest01/t-self-test.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (C) 2019 embedded brains GmbH + * Copyright (C) 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-assert.c b/testsuites/libtests/ttest01/test-assert.c index 398539fe8e..2a401ca577 100644 --- a/testsuites/libtests/ttest01/test-assert.c +++ b/testsuites/libtests/ttest01/test-assert.c @@ -86,7 +86,7 @@ T_TEST_OUTPUT(assert2, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-checks.c b/testsuites/libtests/ttest01/test-checks.c index fa5591121e..14f3cda44c 100644 --- a/testsuites/libtests/ttest01/test-checks.c +++ b/testsuites/libtests/ttest01/test-checks.c @@ -5415,7 +5415,7 @@ T_TEST_OUTPUT(check_false_no_fmt, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-destructor.c b/testsuites/libtests/ttest01/test-destructor.c index 0a2f650ed2..5e30e6c203 100644 --- a/testsuites/libtests/ttest01/test-destructor.c +++ b/testsuites/libtests/ttest01/test-destructor.c @@ -31,7 +31,7 @@ T_TEST_OUTPUT(destructor, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-eno.c b/testsuites/libtests/ttest01/test-eno.c index c334b5e1f7..744feb6434 100644 --- a/testsuites/libtests/ttest01/test-eno.c +++ b/testsuites/libtests/ttest01/test-eno.c @@ -50,7 +50,7 @@ T_TEST_OUTPUT(test_eno_success, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-example.c b/testsuites/libtests/ttest01/test-example.c index 6fa062f6c8..94bd9487db 100644 --- a/testsuites/libtests/ttest01/test-example.c +++ b/testsuites/libtests/ttest01/test-example.c @@ -32,7 +32,7 @@ T_TEST_OUTPUT(example, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-fixture.c b/testsuites/libtests/ttest01/test-fixture.c index e1f59876ca..3cc0f64d63 100644 --- a/testsuites/libtests/ttest01/test-fixture.c +++ b/testsuites/libtests/ttest01/test-fixture.c @@ -185,7 +185,7 @@ T_TEST_OUTPUT(fixture, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2020 embedded brains GmbH + * Copyright (C) 2018, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-leak.c b/testsuites/libtests/ttest01/test-leak.c index 923ad1989c..c63ef0cd48 100644 --- a/testsuites/libtests/ttest01/test-leak.c +++ b/testsuites/libtests/ttest01/test-leak.c @@ -215,7 +215,7 @@ T_TEST_OUTPUT(missing_key_delete, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-log.c b/testsuites/libtests/ttest01/test-log.c index bf1b822c0e..38573f2f6b 100644 --- a/testsuites/libtests/ttest01/test-log.c +++ b/testsuites/libtests/ttest01/test-log.c @@ -23,7 +23,7 @@ T_TEST_OUTPUT(log, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-malloc.c b/testsuites/libtests/ttest01/test-malloc.c index 14066ddf7b..ffaa4c6682 100644 --- a/testsuites/libtests/ttest01/test-malloc.c +++ b/testsuites/libtests/ttest01/test-malloc.c @@ -93,7 +93,7 @@ T_TEST_OUTPUT(calloc_auto, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-plan.c b/testsuites/libtests/ttest01/test-plan.c index d7632b8590..0b8ccd4477 100644 --- a/testsuites/libtests/ttest01/test-plan.c +++ b/testsuites/libtests/ttest01/test-plan.c @@ -95,7 +95,7 @@ T_TEST_OUTPUT(nested_plan, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-psx.c b/testsuites/libtests/ttest01/test-psx.c index b43fd96846..9b82543c26 100644 --- a/testsuites/libtests/ttest01/test-psx.c +++ b/testsuites/libtests/ttest01/test-psx.c @@ -72,7 +72,7 @@ T_TEST_OUTPUT(test_psx_success, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-rtems.c b/testsuites/libtests/ttest01/test-rtems.c index 1f94b7318c..a44323886e 100644 --- a/testsuites/libtests/ttest01/test-rtems.c +++ b/testsuites/libtests/ttest01/test-rtems.c @@ -111,7 +111,7 @@ T_TEST_OUTPUT(rsc_success, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-simple.c b/testsuites/libtests/ttest01/test-simple.c index f98e3a1dfa..7732d2f937 100644 --- a/testsuites/libtests/ttest01/test-simple.c +++ b/testsuites/libtests/ttest01/test-simple.c @@ -31,7 +31,7 @@ T_TEST_OUTPUT(a_test_case, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-step.c b/testsuites/libtests/ttest01/test-step.c index 6d5ee9f7ab..38d0cb6518 100644 --- a/testsuites/libtests/ttest01/test-step.c +++ b/testsuites/libtests/ttest01/test-step.c @@ -23,7 +23,7 @@ T_TEST_OUTPUT(step, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-task-context.c b/testsuites/libtests/ttest01/test-task-context.c index 56139f9474..884e3e3d34 100644 --- a/testsuites/libtests/ttest01/test-task-context.c +++ b/testsuites/libtests/ttest01/test-task-context.c @@ -23,7 +23,7 @@ T_TEST_OUTPUT(check_task_context, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2019 embedded brains GmbH + * Copyright (C) 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-time.c b/testsuites/libtests/ttest01/test-time.c index a324290e56..2b5039015b 100644 --- a/testsuites/libtests/ttest01/test-time.c +++ b/testsuites/libtests/ttest01/test-time.c @@ -280,7 +280,7 @@ T_TEST_OUTPUT(begin_time, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest01/test-verbosity.c b/testsuites/libtests/ttest01/test-verbosity.c index 486969c85c..fc54724ce1 100644 --- a/testsuites/libtests/ttest01/test-verbosity.c +++ b/testsuites/libtests/ttest01/test-verbosity.c @@ -34,7 +34,7 @@ T_TEST_OUTPUT(verbosity_changes, /* * SPDX-License-Identifier: BSD-2-Clause OR CC-BY-SA-4.0 * - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/ttest02/init.c b/testsuites/libtests/ttest02/init.c index 4d540c9a86..881bbedc92 100644 --- a/testsuites/libtests/ttest02/init.c +++ b/testsuites/libtests/ttest02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/libtests/utf8proc01/init.c b/testsuites/libtests/utf8proc01/init.c index 660459ae24..71a8936257 100644 --- a/testsuites/libtests/utf8proc01/init.c +++ b/testsuites/libtests/utf8proc01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/psxtests/psx08/init.c b/testsuites/psxtests/psx08/init.c index b4b22a5338..3af6f83d7f 100644 --- a/testsuites/psxtests/psx08/init.c +++ b/testsuites/psxtests/psx08/init.c @@ -4,6 +4,8 @@ * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). * + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -36,6 +38,119 @@ const char rtems_test_name[] = "PSX 8"; +static void *async_join_thread( void *arg ) +{ + pthread_t *th; + int eno; + int type; + + th = arg; + + type = PTHREAD_CANCEL_ASYNCHRONOUS; + eno = pthread_setcanceltype( type, &type ); + rtems_test_assert( eno == 0 ); + rtems_test_assert( type == PTHREAD_CANCEL_DEFERRED ); + + (void) pthread_join( *th, NULL ); + rtems_test_assert( 0 ); +} + +static void test_join_deadlock( void ) +{ + pthread_t td; + pthread_t self; + int eno; + void *value; + + self = pthread_self(); + + eno = pthread_create( &td, NULL, async_join_thread, &self ); + rtems_test_assert( eno == 0 ); + + sched_yield(); + + eno = pthread_join( td, NULL ); + rtems_test_assert( eno == EDEADLK ); + + eno = pthread_cancel( td ); + rtems_test_assert( eno == 0 ); + + value = NULL; + eno = pthread_join( td, &value ); + rtems_test_assert( eno == 0 ); + rtems_test_assert( value == PTHREAD_CANCELED ); +} + +typedef struct { + pthread_t protected_join; + pthread_t deleter; + rtems_status_code delete_status; +} delete_deadlock_context; + +static void *protected_join_thread( void *arg ) +{ + delete_deadlock_context *ctx; + int state; + int eno; + void *value; + + ctx = arg; + + state = PTHREAD_CANCEL_DISABLE; + eno = pthread_setcancelstate( state, &state ); + rtems_test_assert( eno == 0 ); + rtems_test_assert( state == PTHREAD_CANCEL_ENABLE ); + + value = NULL; + eno = pthread_join( ctx->deleter, &value ); + rtems_test_assert( eno == 0 ); + rtems_test_assert( value == &ctx->deleter ); + + state = PTHREAD_CANCEL_ENABLE; + eno = pthread_setcancelstate( state, &state ); + rtems_test_assert( eno == 0 ); + rtems_test_assert( state == PTHREAD_CANCEL_DISABLE ); + + pthread_testcancel(); + rtems_test_assert( 0 ); +} + +static void *deleter_thread( void *arg ) +{ + delete_deadlock_context *ctx; + + ctx = arg; + ctx->delete_status = rtems_task_delete( ctx->protected_join ); + return &ctx->deleter; +} + +static void test_delete_deadlock( void ) +{ + delete_deadlock_context ctx; + int eno; + void *value; + + ctx.delete_status = RTEMS_NOT_IMPLEMENTED; + + eno = pthread_create( + &ctx.protected_join, + NULL, + protected_join_thread, + &ctx + ); + rtems_test_assert( eno == 0 ); + + eno = pthread_create( &ctx.deleter, NULL, deleter_thread, &ctx ); + rtems_test_assert( eno == 0 ); + + value = NULL; + eno = pthread_join( ctx.protected_join, &value ); + rtems_test_assert( eno == 0 ); + rtems_test_assert( value == PTHREAD_CANCELED ); + + rtems_test_assert( ctx.delete_status == RTEMS_INCORRECT_STATE ); +} + void *POSIX_Init( void *argument ) @@ -54,6 +169,9 @@ void *POSIX_Init( Init_id = pthread_self(); printf( "Init's ID is 0x%08" PRIxpthread_t "\n", Init_id ); + test_join_deadlock(); + test_delete_deadlock(); + puts( "Init: pthread_detach - ESRCH (invalid id)" ); status = pthread_detach( (pthread_t) -1 ); rtems_test_assert( status == ESRCH ); diff --git a/testsuites/psxtests/psx12/init.c b/testsuites/psxtests/psx12/init.c index 76737b0c3b..6526805313 100644 --- a/testsuites/psxtests/psx12/init.c +++ b/testsuites/psxtests/psx12/init.c @@ -226,6 +226,8 @@ static void *POSIX_Init( void *argument ) puts( "Init: pthread_create - SUCCESSFUL" ); + pthread_setschedprio( pthread_self(), SS_PRIO_LOW ); + /* Align with clock tick */ sleep( 1 ); diff --git a/testsuites/psxtests/psx13/test.c b/testsuites/psxtests/psx13/test.c index 0754dbcf30..951953ae98 100644 --- a/testsuites/psxtests/psx13/test.c +++ b/testsuites/psxtests/psx13/test.c @@ -639,6 +639,8 @@ static void FutimensTest( void ) /* EBADF test case */ /* Case: Pass an invalid file descriptor */ + _Timespec_Set_to_zero( &time[0] ); + _Timespec_Set_to_zero( &time[1] ); rv = futimens( -1, time ); rtems_test_assert( rv == -1 ); rtems_test_assert( errno == EBADF ); diff --git a/testsuites/psxtests/psx15/init.c b/testsuites/psxtests/psx15/init.c index e6ade823f7..fff3db01c3 100644 --- a/testsuites/psxtests/psx15/init.c +++ b/testsuites/psxtests/psx15/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2010 embedded brains GmbH. All rights reserved. + * Copyright (c) 2010 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/psxtests/psxbarrier01/test.c b/testsuites/psxtests/psxbarrier01/test.c index 3bea278aac..1f3bdb138c 100644 --- a/testsuites/psxtests/psxbarrier01/test.c +++ b/testsuites/psxtests/psxbarrier01/test.c @@ -6,7 +6,7 @@ * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). * - * Copyright (c) 2017 embedded brains GmbH + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/psxtests/psxchroot01/test.c b/testsuites/psxtests/psxchroot01/test.c index 8270bf5b58..7ac6a80d56 100644 --- a/testsuites/psxtests/psxchroot01/test.c +++ b/testsuites/psxtests/psxchroot01/test.c @@ -5,7 +5,7 @@ * On-Line Applications Research Corporation (OAR). * * Modifications to support reference counting in the file system are - * Copyright (c) 2012 embedded brains GmbH. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/psxtests/psxcleanup02/init.c b/testsuites/psxtests/psxcleanup02/init.c index 89ae7f1930..c123a817ea 100644 --- a/testsuites/psxtests/psxcleanup02/init.c +++ b/testsuites/psxtests/psxcleanup02/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/psxtests/psxcleanup02/main.c b/testsuites/psxtests/psxcleanup02/main.c index 071d84c059..a72c30970a 100644 --- a/testsuites/psxtests/psxcleanup02/main.c +++ b/testsuites/psxtests/psxcleanup02/main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/psxtests/psxclock/init.c b/testsuites/psxtests/psxclock/init.c index 2300056f61..eb2f1d130c 100644 --- a/testsuites/psxtests/psxclock/init.c +++ b/testsuites/psxtests/psxclock/init.c @@ -50,6 +50,174 @@ static void check_enosys(int status) rtems_test_exit(0); } +static void wait_ticks( rtems_interval ticks ) +{ + /* + * Avoid any clock related sleep calls + */ + rtems_test_assert( rtems_task_wake_after( ticks ) == RTEMS_SUCCESSFUL ); +} + +struct clock_context; +typedef struct clock_context clock_context; +typedef void (*clock_sleeper)(clock_context* ctx); +struct clock_context { + const char* name; + int instance; + rtems_id tid; + int counter; + int result; + rtems_interval ticks; + struct timespec tspec; + clock_sleeper sleeper; +}; + +static void clock_context_init( + clock_context* ctx, const char* name, int instance, + time_t secs, long nsecs, clock_sleeper sleeper) +{ + memset( ctx, 0, sizeof( *ctx ) ); + ctx->name = name; + ctx->instance = instance; + ctx->tspec.tv_sec = secs; + ctx->tspec.tv_nsec = nsecs; + ctx->sleeper = sleeper; +} + +static void test_nanosleep( clock_context* ctx ) +{ + if ( nanosleep ( &ctx->tspec, NULL ) < 0 ) + { + ctx->result = errno; + } +} + +static void test_clock_nanosleep_realtime( clock_context* ctx ) +{ + if ( clock_nanosleep ( CLOCK_REALTIME, 0, &ctx->tspec, NULL ) < 0 ) + { + ctx->result = errno; + } +} + +static void test_clock_nanosleep_monotonic( clock_context* ctx ) +{ + if ( clock_nanosleep ( CLOCK_MONOTONIC, 0, &ctx->tspec, NULL ) < 0 ) + { + ctx->result = errno; + } +} + +static void test_clock_check( clock_context* ctx, const rtems_interval ticks_per_sec ) +{ + const long tick_period_nsec = 1000000000LLU / ticks_per_sec; + rtems_interval ticks = + (((ctx->tspec.tv_sec * 1000000000LLU) + ctx->tspec.tv_nsec) / tick_period_nsec) + 1; + rtems_test_assert( ctx->result == 0 ); + printf( + "clock: %s: sec=%" PRIdtime_t" nsec=%li ticks=%u expected-ticks=%u\n", + ctx->name, ctx->tspec.tv_sec, ctx->tspec.tv_nsec, ctx->ticks, ticks); + rtems_test_assert( ctx->ticks == ticks ); +} + +static void task_clock( rtems_task_argument arg ) +{ + clock_context* ctx = (clock_context*) arg; + rtems_interval start = rtems_clock_get_ticks_since_boot(); + rtems_interval end; + ctx->result = 0; + ctx->sleeper( ctx ); + end = rtems_clock_get_ticks_since_boot(); + ctx->ticks = end - start; + ++ctx->counter; + rtems_task_delete( RTEMS_SELF ); +} + +static void test_start_task( clock_context* ctx ) +{ + rtems_status_code sc; + sc = rtems_task_create( + rtems_build_name( 'C', 'R', 'T', '0' + ctx->instance ), + 1, + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &ctx->tid + ); + rtems_test_assert( sc == RTEMS_SUCCESSFUL ); + sc = rtems_task_start( ctx->tid, task_clock, (rtems_task_argument) ctx ); + rtems_test_assert( sc == RTEMS_SUCCESSFUL ); +} + +static void test_settime_and_sleeping_step( int step ) +{ + const rtems_interval ticks_per_sec = rtems_clock_get_ticks_per_second(); + struct timespec tv; + + clock_context ns_ctx; + clock_context cnr_ctx; + clock_context cnm_ctx; + + printf( "\nClock settime while sleeping: step=%i\n", step ); + + clock_context_init( + &ns_ctx, "nanosleep", 0, 0, 500000000, + test_nanosleep ); + clock_context_init( + &cnr_ctx, "clock_nanosleep(CLOCK_REALTIME)", 0, 0, 500000000, + test_clock_nanosleep_realtime ); + clock_context_init( + &cnm_ctx, "clock_nanosleep(CLOCK_MONOTONIC)", 0, 0, 500000000, + test_clock_nanosleep_monotonic ); + + /* Sat, 01 Jan 2000 00:00:00 GMT */ + tv.tv_sec = 946684800; + tv.tv_nsec = 0; + rtems_test_assert( clock_settime( CLOCK_REALTIME, &tv ) == 0 ); + + wait_ticks( 1 ); + + test_start_task( &ns_ctx ); + test_start_task( &cnr_ctx ); + test_start_task( &cnm_ctx ); + + wait_ticks( 2 ); + + /* + * Jump forwards 1 second + */ + if ( step != 0 ) + { + tv.tv_sec = 946684800 + step; + tv.tv_nsec = 0; + rtems_test_assert( clock_settime( CLOCK_REALTIME, &tv ) == 0 ); + } + + while (true) + { + int counts = 0; + wait_ticks( ticks_per_sec / 4 ); + counts += ns_ctx.counter; + counts += cnr_ctx.counter; + counts += cnm_ctx.counter; + if (counts == 3) + { + break; + } + } + + test_clock_check( &ns_ctx, ticks_per_sec ); + test_clock_check( &cnr_ctx, ticks_per_sec ); + test_clock_check( &cnm_ctx, ticks_per_sec ); +} + +static void test_settime_and_sleeping( void ) +{ + test_settime_and_sleeping_step( 0 ); + test_settime_and_sleeping_step( 1 ); + test_settime_and_sleeping_step( -1 ); +} + typedef struct { int counter; struct timespec delta; @@ -358,6 +526,8 @@ static rtems_task Init( } #endif + test_settime_and_sleeping( ); + TEST_END(); rtems_test_exit(0); } @@ -370,7 +540,7 @@ static rtems_task Init( #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION #define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_MAXIMUM_TASKS 2 +#define CONFIGURE_MAXIMUM_TASKS 4 #define CONFIGURE_INIT #include <rtems/confdefs.h> diff --git a/testsuites/psxtests/psxclockrealtime01/init.c b/testsuites/psxtests/psxclockrealtime01/init.c index 720e7ced52..722a756ebb 100644 --- a/testsuites/psxtests/psxclockrealtime01/init.c +++ b/testsuites/psxtests/psxclockrealtime01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/psxtests/psxconfig01/init.c b/testsuites/psxtests/psxconfig01/init.c index f1fcfe2b3b..77a96d1c67 100644 --- a/testsuites/psxtests/psxconfig01/init.c +++ b/testsuites/psxtests/psxconfig01/init.c @@ -10,7 +10,7 @@ /* * Copyright (c) 2014. On-Line Applications Research Corporation (OAR). - * Copyright (c) 2011-2014 embedded brains GmbH. All rights reserved. + * Copyright (C) 2011, 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -200,7 +200,7 @@ static rtems_task Init(rtems_task_argument argument); #include <rtems/confdefs.h> typedef struct RTEMS_ALIGNED(RTEMS_PARTITION_ALIGNMENT) { - uint64_t data [16]; + uint64_t data [32]; } area; #if CONFIGURE_MAXIMUM_PARTITIONS > 0 diff --git a/testsuites/psxtests/psxconfig01/psxconfig01.doc b/testsuites/psxtests/psxconfig01/psxconfig01.doc index 524c8a9994..d8f70bded3 100644 --- a/testsuites/psxtests/psxconfig01/psxconfig01.doc +++ b/testsuites/psxtests/psxconfig01/psxconfig01.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2011 embedded brains GmbH. +# Copyright (c) 2011 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/psxtests/psxenosys/init.c b/testsuites/psxtests/psxenosys/init.c index 40f83aa0f0..d9a4d835f7 100644 --- a/testsuites/psxtests/psxenosys/init.c +++ b/testsuites/psxtests/psxenosys/init.c @@ -104,9 +104,15 @@ void *POSIX_Init( sc = fork(); check_enosys( sc ); - puts( "pthread_atfork -- ENOSYS" ); + /* + * The behavior of pthread_atfork() in single process environments was + * undefined by POSIX but the fACE Technical Standard required returning + * 0. Before ticket #4713, this did return ENOSYS. Just leaving this test + * case here for convenience. + */ + puts( "pthread_atfork -- 0" ); sc = pthread_atfork( NULL, NULL, NULL ); - check_enosys( sc ); + rtems_test_assert( !sc ); puts( "pthread_getcpuclockid -- ENOSYS" ); sc = pthread_getcpuclockid( 0, NULL ); diff --git a/testsuites/psxtests/psxenosys/psxenosys.scn b/testsuites/psxtests/psxenosys/psxenosys.scn index 1ed64f92e9..9e88acd05a 100644 --- a/testsuites/psxtests/psxenosys/psxenosys.scn +++ b/testsuites/psxtests/psxenosys/psxenosys.scn @@ -9,7 +9,7 @@ execv -- ENOSYS execve -- ENOSYS execvp -- ENOSYS fork -- ENOSYS -pthread_atfork -- ENOSYS +pthread_atfork -- 0 pthread_getcpuclockid -- ENOSYS sched_setparam -- ENOSYS sched_getparam -- ENOSYS diff --git a/testsuites/psxtests/psxftw01/init.c b/testsuites/psxtests/psxftw01/init.c index ee0e40c84a..5bd89928d1 100644 --- a/testsuites/psxtests/psxftw01/init.c +++ b/testsuites/psxtests/psxftw01/init.c @@ -6,7 +6,7 @@ /* * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (C) 2020 Eshan Dhawan, embedded brains GmbH, Joel Sherrill + * Copyright (C) 2020 Eshan Dhawan, embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -66,36 +66,6 @@ void *POSIX_Init (void * argument); static char file_traverse_order[6][20]; static int file_order; -static char buffer[512]; - -static const T_action actions[] = { - T_report_hash_sha256, - T_check_task_context, - T_check_file_descriptors, - T_check_rtems_barriers, - T_check_rtems_extensions, - T_check_rtems_message_queues, - T_check_rtems_partitions, - T_check_rtems_periods, - T_check_rtems_regions, - T_check_rtems_semaphores, - T_check_rtems_tasks, - T_check_rtems_timers, - T_check_posix_keys -}; - -static const T_config config = { - .name = "psxftw01", - .buf = buffer, - .buf_size = sizeof(buffer), - .putchar = rtems_put_char, - .verbosity = T_VERBOSE, - .now = T_now_clock, - .action_count = T_ARRAY_SIZE(actions), - .actions = actions -}; - - static int fn_function (const char *fpath, const struct stat *sb, int tflag, struct FTW *ftwbuf) { @@ -122,9 +92,7 @@ T_TEST_CASE(ftw) TARFILE_SIZE, &rtems_test_printer ); - if (sc != RTEMS_SUCCESSFUL) { - printf ("error: untar failed: %s\n", rtems_status_text (sc)); - } + T_rsc_success( sc ); /* Array with expected file order */ char arr_ftw_depth[5][20] = { "test_file", "test_script", "def", "abc", "home" }; @@ -136,49 +104,31 @@ T_TEST_CASE(ftw) file_order = 0; flags |= FTW_DEPTH; r = nftw( files_path, fn_function, 5, flags ); - - T_quiet_psx_success(r); + T_psx_success( r ); /*comparing the nftw file tree to the expexted file tree traversal */ for (i = 0; i < file_order; i++){ r = strcmp( arr_ftw_depth[i], file_traverse_order[i]); - if (r){ - printf( "Incorrect Order " ); - } - T_quiet_psx_success(r); + T_eq_int( r, 0 ); } /*----------------Test Block 2--------------------*/ flags = 0; file_order = 0; flags |= FTW_PHYS; r = nftw( files_path, fn_function, 5, flags ); - T_quiet_psx_success(r); + T_psx_success(r); /*comparing the nftw file tree to the expected file tree traversal*/ for (i = 0; i < file_order; i++){ r = strcmp( arr_ftw_phys[i], file_traverse_order[i]); - if (r){ - printf( "Incorrect Order " ); - } - T_quiet_psx_success(r); + T_eq_int( r, 0 ); } } void *POSIX_Init (void * argument) { - int exit_code; - - TEST_BEGIN(); - - T_register(); - exit_code = T_main(&config); - if (exit_code == 0) { - TEST_END(); - } - - rtems_test_exit(exit_code); - + rtems_test_run( (rtems_task_argument) argument, TEST_STATE ); } /* NOTICE: the clock driver is explicitly disabled */ diff --git a/testsuites/psxtests/psxglobalcon01/init.cc b/testsuites/psxtests/psxglobalcon01/init.cc index 2ccbba9e34..a61734bcd1 100644 --- a/testsuites/psxtests/psxglobalcon01/init.cc +++ b/testsuites/psxtests/psxglobalcon01/init.cc @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/psxtests/psxglobalcon02/init.cc b/testsuites/psxtests/psxglobalcon02/init.cc index 0e530246e0..3d8206261a 100644 --- a/testsuites/psxtests/psxglobalcon02/init.cc +++ b/testsuites/psxtests/psxglobalcon02/init.cc @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/psxtests/psxintrcritical01/init.c b/testsuites/psxtests/psxintrcritical01/init.c index deb95da994..27126e31ec 100644 --- a/testsuites/psxtests/psxintrcritical01/init.c +++ b/testsuites/psxtests/psxintrcritical01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * COPYRIGHT (c) 1989-2012. * On-Line Applications Research Corporation (OAR). diff --git a/testsuites/psxtests/psxkey07/init.c b/testsuites/psxtests/psxkey07/init.c index 593df739db..ff7b3a0bd0 100644 --- a/testsuites/psxtests/psxkey07/init.c +++ b/testsuites/psxtests/psxkey07/init.c @@ -39,23 +39,25 @@ const char rtems_test_name[] = "PSXKEY 7"; -/* forward declarations to avoid warnings */ -rtems_task Init(rtems_task_argument argument); -rtems_task Test_Thread(rtems_task_argument argument); +#define INITIAL_TASK_COUNT 10 -pthread_key_t Key; -int created_thread_count, setted_thread_count, got_thread_count; -int all_thread_created; -pthread_mutex_t mutex1, mutex2; -pthread_cond_t create_condition_var, set_condition_var; +#define ADDITIONAL_TASK_COUNT 13 -rtems_task Test_Thread(rtems_task_argument argument) +static pthread_key_t Key; +static int created_thread_count, setted_thread_count, got_thread_count; +static int all_thread_created; +static pthread_mutex_t mutex1, mutex2; +static pthread_cond_t create_condition_var, set_condition_var; + +static rtems_task Test_Thread(rtems_task_argument argument) { int sc; int *value_p, *value_p2; value_p = malloc( sizeof( int ) ); rtems_test_assert(value_p != NULL); + + *value_p = 123; sc = pthread_setspecific( Key, value_p ); rtems_test_assert( !sc ); @@ -79,12 +81,13 @@ rtems_task Test_Thread(rtems_task_argument argument) rtems_task_exit(); } -rtems_task Init(rtems_task_argument argument) +static rtems_task Init(rtems_task_argument argument) { rtems_status_code rc; int sc; struct timespec delay_request; - uintptr_t max_free_size = 13 * RTEMS_MINIMUM_STACK_SIZE; + uintptr_t max_free_size = + ADDITIONAL_TASK_COUNT * RTEMS_MINIMUM_STACK_SIZE; void *greedy; all_thread_created = 0; @@ -215,8 +218,10 @@ rtems_task Init(rtems_task_argument argument) #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION -#define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(10) -#define CONFIGURE_MAXIMUM_POSIX_KEYS 1 +#define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(INITIAL_TASK_COUNT) +#define CONFIGURE_MAXIMUM_POSIX_KEYS 1 +#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS \ + (INITIAL_TASK_COUNT + ADDITIONAL_TASK_COUNT) #define CONFIGURE_UNIFIED_WORK_AREAS #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/psxtests/psxmount/test.c b/testsuites/psxtests/psxmount/test.c index 9ce68dda59..202baed46c 100644 --- a/testsuites/psxtests/psxmount/test.c +++ b/testsuites/psxtests/psxmount/test.c @@ -5,7 +5,7 @@ * On-Line Applications Research Corporation (OAR). * * Modifications to support reference counting in the file system are - * Copyright (c) 2012 embedded brains GmbH. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/psxtests/psxonce01/init.c b/testsuites/psxtests/psxonce01/init.c index dfa0204d62..033b1a02f3 100644 --- a/testsuites/psxtests/psxonce01/init.c +++ b/testsuites/psxtests/psxonce01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2019 embedded brains GmbH + * Copyright (C) 2019 embedded brains GmbH & Co. KG * Copyright (C) 2019 Sebastian Huber * * COPYRIGHT (c) 1989-2009. diff --git a/testsuites/psxtests/psxonce01/psxonce01.doc b/testsuites/psxtests/psxonce01/psxonce01.doc index 7abbd2e037..3ca5d680c7 100644 --- a/testsuites/psxtests/psxonce01/psxonce01.doc +++ b/testsuites/psxtests/psxonce01/psxonce01.doc @@ -3,7 +3,7 @@ # COPYRIGHT (c) 1989-2009. # On-Line Applications Research Corporation (OAR). # Copyright (c) 2013 Annelies Odermann <annelies.odermann@gmail.com> -# Copyright (c) 2014 embedded brains GmbH. +# Copyright (c) 2014 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/psxtests/psxrwlock01/test.c b/testsuites/psxtests/psxrwlock01/test.c index 5767aa7c07..f6954007c0 100644 --- a/testsuites/psxtests/psxrwlock01/test.c +++ b/testsuites/psxtests/psxrwlock01/test.c @@ -454,10 +454,6 @@ int main( status = pthread_rwlock_timedrdlock( NULL, &abstime); rtems_test_assert( status == EINVAL ); - puts( "pthread_rwlock_timedrdlock( &rwlock, NULL) -- EINVAL" ); - status = pthread_rwlock_timedrdlock( &rwlock, NULL); - rtems_test_assert( status == EINVAL ); - puts( "pthread_rwlock_tryrdlock(NULL) -- EINVAL" ); status = pthread_rwlock_tryrdlock(NULL); rtems_test_assert( status == EINVAL ); @@ -470,10 +466,6 @@ int main( status = pthread_rwlock_timedwrlock( NULL, &abstime ); rtems_test_assert( status == EINVAL ); - puts( "pthread_rwlock_timedwrlock( &rwlock, NULL) -- EINVAL" ); - status = pthread_rwlock_timedwrlock( &rwlock, NULL); - rtems_test_assert( status == EINVAL ); - puts( "pthread_rwlock_trywrlock(NULL) -- EINVAL" ); status = pthread_rwlock_trywrlock(NULL); rtems_test_assert( status == EINVAL ); @@ -482,6 +474,26 @@ int main( status = pthread_rwlock_unlock(NULL); rtems_test_assert( status == EINVAL ); + status = pthread_rwlock_init( &rwlock, NULL ); + rtems_test_assert( status == 0 ); + + status = pthread_rwlock_wrlock( &rwlock ); + rtems_test_assert( status == 0 ); + + puts( "pthread_rwlock_timedrdlock( &rwlock, NULL) -- EINVAL" ); + status = pthread_rwlock_timedrdlock( &rwlock, NULL); + rtems_test_assert( status == EINVAL ); + + puts( "pthread_rwlock_timedwrlock( &rwlock, NULL) -- EINVAL" ); + status = pthread_rwlock_timedwrlock( &rwlock, NULL); + rtems_test_assert( status == EINVAL ); + + status = pthread_rwlock_unlock( &rwlock ); + rtems_test_assert( status == 0 ); + + status = pthread_rwlock_destroy( &rwlock ); + rtems_test_assert( status == 0 ); + /*************** BAD ID CHECK *****************/ /* make a valid abstime */ puts( "clock_gettime(CLOCK_REALTIME, &abstime) -- OK" ); diff --git a/testsuites/psxtests/psxthreadname01/init.c b/testsuites/psxtests/psxthreadname01/init.c index 3183272ce8..c5d5cef604 100644 --- a/testsuites/psxtests/psxthreadname01/init.c +++ b/testsuites/psxtests/psxthreadname01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/psxtests/psxtimer01/psxtimer.c b/testsuites/psxtests/psxtimer01/psxtimer.c index 560dc2eebd..57d23c1582 100644 --- a/testsuites/psxtests/psxtimer01/psxtimer.c +++ b/testsuites/psxtests/psxtimer01/psxtimer.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ -/* +/** + * @file POSIX Timer Test * * This is a simple real-time applications which contains 3 periodic tasks. * @@ -12,8 +13,10 @@ * * The share data is protected with a POSIX mutex. * - * Other POSIX facilities such as timers, condition, .. is also used - * + * Other POSIX facilities such as timers, condition, .. are also used. + */ + +/* * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). * diff --git a/testsuites/psxtests/psxtimer02/psxtimer.c b/testsuites/psxtests/psxtimer02/psxtimer.c index 7da0f7acd1..26d1d5a67c 100644 --- a/testsuites/psxtests/psxtimer02/psxtimer.c +++ b/testsuites/psxtests/psxtimer02/psxtimer.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ -/* +/** + * @file POSIX Timer Test #2 * * This is a simple real-time applications which contains 3 periodic tasks. * @@ -12,8 +13,10 @@ * * The share data is protected with a POSIX mutex. * - * Other POSIX facilities such as timers, condition, .. is also used - * + * Other POSIX facilities such as timers, condition, .. are also used. + */ + +/* * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). * diff --git a/testsuites/psxtests/psxtimer_face01/psxtimer.c b/testsuites/psxtests/psxtimer_face01/psxtimer.c new file mode 100644 index 0000000000..155afc5ce0 --- /dev/null +++ b/testsuites/psxtests/psxtimer_face01/psxtimer.c @@ -0,0 +1,123 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file POSIX Timer Test of FACE Behavior + */ + +/* + * COPYRIGHT (c) 2022. On-Line Applications Research Corporation (OAR). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <pmacros.h> +#include "tmacros.h" + +#include <unistd.h> +#include <errno.h> +#include <sched.h> +#include <time.h> /* time facilities */ +#include <stdio.h> /* console facilities */ + +const char rtems_test_name[] = "PSXTIMER FACE 1"; + +static void *POSIX_Init ( + void *argument +) + +{ + struct sigevent event; + int status; + timer_t timer; + + /* + * If these are not filled in correctly, we do not execute pass the + * error checking for a NULL event pointer. + */ + event.sigev_notify = SIGEV_SIGNAL; + event.sigev_signo = SIGUSR1; + + TEST_BEGIN(); + + /* + * When FACE timer behavior is configured, creating a POSIX timer + * using CLOCK_REALTIME is not allowed. + */ + puts( "timer_create - CLOCK_REALTIME forbidden - EPERM" ); + status = timer_create( CLOCK_REALTIME, &event, &timer ); + fatal_posix_service_status_errno( status, EPERM, "not allowed" ); + + /* + * When FACE timer behavior is configured, creating a POSIX timer + * on a value other than CLOCK_REALTIME or CLOCK_MONOTONIC is not allowed. + */ + puts( "timer_create - CLOCK_PROCESS_CPUTIME_ID not allowed - EINVAL" ); + status = timer_create( CLOCK_PROCESS_CPUTIME_ID, &event, &timer ); + fatal_posix_service_status_errno( status, EINVAL, "invalid clock" ); + + /* + * When FACE timer behavior is configured, creating a POSIX timer + * on CLOCK_MONOTONIC allowed. + */ + puts( "timer_create - OK" ); + status = timer_create( CLOCK_MONOTONIC, &event, &timer ); + posix_service_failed( status, "timer_create OK" ); + + /* + * Delete the previously created timer. + */ + puts( "timer_delete - OK" ); + status = timer_delete( timer ); + posix_service_failed( status, "timer_delete ok" ); + + /* + */ + puts( "timer_create - CLOCK_MONOTONIC is allowed - OK" ); + status = timer_create( CLOCK_MONOTONIC, &event, &timer ); + posix_service_failed( status, "timer_create ok" ); + + TEST_END(); + rtems_test_exit (0); +} + +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_MAXIMUM_POSIX_THREADS 1 +#define CONFIGURE_MAXIMUM_POSIX_TIMERS 1 + +#define CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> + +/* end of include file */ diff --git a/testsuites/psxtests/psxtimer_face01/psxtimer_face01.doc b/testsuites/psxtests/psxtimer_face01/psxtimer_face01.doc new file mode 100644 index 0000000000..e975419539 --- /dev/null +++ b/testsuites/psxtests/psxtimer_face01/psxtimer_face01.doc @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: BSD-2-Clause + +# COPYRIGHT (c) 1989-2009. +# On-Line Applications Research Corporation (OAR). +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +This file describes the directives and concepts tested by this test set. + +test set name: psxtimer_face01 + +directives: + timer_create + CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR + +concepts: + ++ This test exercises the CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR configure + option which alters the behavior of timer_create(). + + - With CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR defined, timer_create() + returns EPERM to indicate this is not allowed. + + - With CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR defined, timer_create() + for CLOCK_MONOTONIC is allowed. + + - With CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR defined, timer_create() + for any other clock value is an error. + diff --git a/testsuites/psxtests/psxtimer_face01/psxtimer_face01.scn b/testsuites/psxtests/psxtimer_face01/psxtimer_face01.scn new file mode 100644 index 0000000000..b83b41f281 --- /dev/null +++ b/testsuites/psxtests/psxtimer_face01/psxtimer_face01.scn @@ -0,0 +1,6 @@ +*** BEGIN OF TEST FACE 1 *** +timer_create - CLOCK_REALTIME forbidden - EPERM +timer_create - CLOCK_PROCESS_CPUTIME_ID not allowed - EINVAL +timer_create - OK +timer_delete - OK +*** END OF TEST PSXTIMER FACE 1 *** diff --git a/testsuites/rhealstone/rhdeadlockbrk/deadlockbrk.c b/testsuites/rhealstone/rhdeadlockbrk/deadlockbrk.c index 3538003a4a..8154c93338 100644 --- a/testsuites/rhealstone/rhdeadlockbrk/deadlockbrk.c +++ b/testsuites/rhealstone/rhdeadlockbrk/deadlockbrk.c @@ -206,7 +206,6 @@ rtems_task Task03( rtems_task_argument ignored ) #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_MAXIMUM_SEMAPHORES 1 #define CONFIGURE_MAXIMUM_TASKS 4 diff --git a/testsuites/rhealstone/rhilatency/ilatency.c b/testsuites/rhealstone/rhilatency/ilatency.c index f4a450795f..8985453619 100644 --- a/testsuites/rhealstone/rhilatency/ilatency.c +++ b/testsuites/rhealstone/rhilatency/ilatency.c @@ -22,7 +22,6 @@ #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS 2 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_SCHEDULER_PRIORITY @@ -45,10 +44,6 @@ uint32_t Interrupt_nest; uint32_t timer_overhead; uint32_t Interrupt_enter_time; -rtems_isr Isr_handler( - rtems_vector_number vector -); - rtems_task Init( rtems_task_argument argument ) @@ -91,6 +86,19 @@ rtems_task Init( rtems_task_exit(); } +#ifdef TM27_USE_VECTOR_HANDLER +static rtems_isr Isr_handler( rtems_vector_number arg ) +#else +static void Isr_handler( void *arg ) +#endif +{ + (void) arg; + + /* See how long it took system to recognize interrupt */ + Interrupt_enter_time = benchmark_timer_read(); + Clear_tm27_intr(); +} + rtems_task Task_1( rtems_task_argument argument ) @@ -114,12 +122,3 @@ rtems_task Task_1( TEST_END(); rtems_test_exit( 0 ); } - -rtems_isr Isr_handler( - rtems_vector_number vector -) -{ - /* See how long it took system to recognize interrupt */ - Interrupt_enter_time = benchmark_timer_read(); - Clear_tm27_intr(); -} diff --git a/testsuites/rhealstone/rhmlatency/mlatency.c b/testsuites/rhealstone/rhmlatency/mlatency.c index a61e1917e5..76b1113644 100644 --- a/testsuites/rhealstone/rhmlatency/mlatency.c +++ b/testsuites/rhealstone/rhmlatency/mlatency.c @@ -151,7 +151,6 @@ rtems_task Task02( rtems_task_argument ignored ) #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 #define CONFIGURE_MESSAGE_BUFFER_MEMORY \ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(1, MESSAGE_SIZE) -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_INIT diff --git a/testsuites/rhealstone/rhtaskpreempt/taskpreempt.c b/testsuites/rhealstone/rhtaskpreempt/taskpreempt.c index c5d2b6c809..00534b094d 100644 --- a/testsuites/rhealstone/rhtaskpreempt/taskpreempt.c +++ b/testsuites/rhealstone/rhtaskpreempt/taskpreempt.c @@ -113,7 +113,6 @@ rtems_task Init( rtems_task_argument ignored ) /* configuration information */ #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_MAXIMUM_TASKS 3 #define CONFIGURE_INIT diff --git a/testsuites/rhealstone/rhtaskswitch/taskswitch.c b/testsuites/rhealstone/rhtaskswitch/taskswitch.c index a2cef9fe32..3bcf1ec354 100644 --- a/testsuites/rhealstone/rhtaskswitch/taskswitch.c +++ b/testsuites/rhealstone/rhtaskswitch/taskswitch.c @@ -115,7 +115,6 @@ rtems_task Init( rtems_task_argument ignored ) /* configuration information */ #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_MAXIMUM_TASKS 3 #define CONFIGURE_INIT diff --git a/testsuites/samples/cdtest/main.cc b/testsuites/samples/cdtest/main.cc index 894e404ba1..1c5057a32b 100644 --- a/testsuites/samples/cdtest/main.cc +++ b/testsuites/samples/cdtest/main.cc @@ -25,9 +25,11 @@ #include <rtems.h> #include <rtems/bspIo.h> #include <rtems/test-info.h> +#include <rtems/sysinit.h> #include <cstdio> #include <cstdlib> +#include <cstring> #include <stdexcept> #ifdef RTEMS_TEST_IO_STREAM @@ -44,13 +46,6 @@ extern rtems_task main_task(rtems_task_argument); static int num_inst = 0; -static void check_begin_of_test(void) -{ - if ( num_inst == 0 ) { - TEST_BEGIN(); - } -} - static void check_end_of_test(void) { if ( num_inst == 0 ) { @@ -62,7 +57,6 @@ class AClass { public: AClass(const char *p = "LOCAL" ) : ptr( p ) { - check_begin_of_test(); num_inst++; printf( "%s: Hey I'm in base class constructor number %d for %p.\n", @@ -104,7 +98,6 @@ class BClass : public AClass { public: BClass(const char *p = "LOCAL" ) : AClass( p ) { - check_begin_of_test(); num_inst++; printf( "%s: Hey I'm in derived class constructor number %d for %p.\n", @@ -244,3 +237,50 @@ rtems_task main_task( printf( "Global Dtors should be called after this line....\n" ); exit(0); } + +/* + * Exceptions during system initialization work only on targets which do not + * need a registration of exception frames during the global construction. In + * particular, targets which use the DWARF2 unwinder cannot use exceptions + * during system initialization. + */ +#if defined(__arm__) +#define CAN_DO_EXCEPTIONS_DURING_SYSINIT +#endif + +#ifdef CAN_DO_EXCEPTIONS_DURING_SYSINIT +static void early_exception() +{ + try + { + throw "early exception"; + } + catch( const char *e ) + { + rtems_test_assert(strcmp(e, "early exception") == 0); + throw "early exception 2"; + } +} +#endif + +static void test_exceptions_during_system_init() +{ + TEST_BEGIN(); + +#ifdef CAN_DO_EXCEPTIONS_DURING_SYSINIT + try + { + early_exception(); + } + catch( const char *e ) + { + rtems_test_assert(strcmp(e, "early exception 2") == 0); + } +#endif +} + +RTEMS_SYSINIT_ITEM( + test_exceptions_during_system_init, + RTEMS_SYSINIT_IDLE_THREADS, + RTEMS_SYSINIT_ORDER_LAST +); diff --git a/testsuites/samples/iostream/init.cc b/testsuites/samples/iostream/init.cc index 22d973019b..ddd38a9d15 100644 --- a/testsuites/samples/iostream/init.cc +++ b/testsuites/samples/iostream/init.cc @@ -44,16 +44,17 @@ #include <stdlib.h> +#include <tmacros.h> + const char rtems_test_name[] = "IOSTREAM"; rtems_task Init( rtems_task_argument ignored ) { - std::cout << std::endl << std::endl - << "*** BEGIN OF TEST " << rtems_test_name << " ***" << std::endl; + TEST_BEGIN(); std::cout << "Hello World" << std::endl; - std::cout << "*** END OF TEST " << rtems_test_name << " ***" << std::endl; - exit( 0 ); + TEST_END(); + rtems_test_exit( 0 ); } diff --git a/testsuites/samples/minimum/init.c b/testsuites/samples/minimum/init.c index c988d6d750..ee14a1aef4 100644 --- a/testsuites/samples/minimum/init.c +++ b/testsuites/samples/minimum/init.c @@ -81,7 +81,12 @@ static void *Init( uintptr_t ignored ) * demonstrates that the user can specify how small of a minimum * stack they want. */ +#ifdef RTEMS_GCOV_COVERAGE +#define CONFIGURE_MINIMUM_TASK_STACK_SIZE \ + (CPU_STACK_MINIMUM_SIZE - CPU_STACK_ALIGNMENT) +#else #define CONFIGURE_MINIMUM_TASK_STACK_SIZE 512 +#endif /* * Keep the interrupt/initialization stack as is. Otherwise, the test may fail @@ -100,21 +105,6 @@ static void *Init( uintptr_t ignored ) #define CONFIGURE_MAXIMUM_PRIORITY 15 /* - * This configures RTEMS to use a single memory pool for the RTEMS Workspace - * and C Program Heap. If not defined, there will be separate memory pools - * for the RTEMS Workspace and C Program Heap. Having separate pools - * does haved some advantages in the event a task blows a stack or writes - * outside its memory area. However, in low memory systems the overhead of - * the two pools plus the potential for unused memory in either pool is - * very undesirable. - * - * In high memory environments, this is desirable when you want to use - * the RTEMS "unlimited" objects option. You will be able to create objects - * until you run out of memory. - */ -#define CONFIGURE_UNIFIED_WORK_AREAS - -/* * In this application, the initialization task performs the system * initialization and then transforms itself into the idle task. */ diff --git a/testsuites/smptests/smp05/init.c b/testsuites/smptests/smp05/init.c index c8a9da2131..eb6461f3bc 100644 --- a/testsuites/smptests/smp05/init.c +++ b/testsuites/smptests/smp05/init.c @@ -35,6 +35,8 @@ const char rtems_test_name[] = "SMP 5"; +static volatile bool init_task_done; + rtems_task Init( rtems_task_argument argument ); @@ -54,6 +56,10 @@ rtems_task Test_task( rtems_task_argument argument ) { + while (!init_task_done) { + /* Wait */ + } + locked_printf( "Shut down from CPU %" PRIu32 "\n", rtems_scheduler_get_processor() ); success(); } @@ -95,6 +101,8 @@ rtems_task Init( directive_failed( status, "task start" ); } + init_task_done = true; + while (1) ; } diff --git a/testsuites/smptests/smp07/init.c b/testsuites/smptests/smp07/init.c index 3e1a852bd4..7066720a47 100644 --- a/testsuites/smptests/smp07/init.c +++ b/testsuites/smptests/smp07/init.c @@ -78,8 +78,6 @@ rtems_task Test_task( if ( !TSRFired ) locked_printf( "*** ERROR TSR DID NOT FIRE BUT TEST TASK AWAKE***" ); - TaskRan = true; - /* Print that the task is up and running. */ locked_printf( " CPU %" PRIu32 " running Task %s after semaphore release\n", @@ -87,6 +85,8 @@ rtems_task Test_task( name ); + TaskRan = true; + rtems_task_exit(); } diff --git a/testsuites/smptests/smp08/tasks.c b/testsuites/smptests/smp08/tasks.c index b71f437027..446c0d11da 100644 --- a/testsuites/smptests/smp08/tasks.c +++ b/testsuites/smptests/smp08/tasks.c @@ -54,8 +54,12 @@ rtems_task Test_task( status = rtems_clock_get_tod( &time ); rtems_test_assert( status == RTEMS_SUCCESSFUL ); if ( time.second >= 35 ) { - TEST_END(); - rtems_test_exit( 0 ); + if ( task_index == 1 ) { + TEST_END(); + rtems_test_exit( 0 ); + } else { + rtems_task_exit(); + } } PrintTaskInfo( p, &time ); diff --git a/testsuites/smptests/smpatomic01/init.c b/testsuites/smptests/smpatomic01/init.c index fa149c335a..a10c3d5990 100644 --- a/testsuites/smptests/smpatomic01/init.c +++ b/testsuites/smptests/smpatomic01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2013, 2016 embedded brains GmbH & Co. KG * * Copyright (c) 2013 Deng Hengyi. * diff --git a/testsuites/smptests/smpcache01/init.c b/testsuites/smptests/smpcache01/init.c index 04e842eaa4..148a0fd9b7 100644 --- a/testsuites/smptests/smpcache01/init.c +++ b/testsuites/smptests/smpcache01/init.c @@ -2,7 +2,7 @@ /* * Copyright (c) 2014 Aeroflex Gaisler AB. All rights reserved. - * Copyright (c) 2017 embedded brains GmbH. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpcapture02/init.c b/testsuites/smptests/smpcapture02/init.c index 4b11e6bbd7..e15945cb91 100644 --- a/testsuites/smptests/smpcapture02/init.c +++ b/testsuites/smptests/smpcapture02/init.c @@ -1,10 +1,29 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + /* * COPYRIGHT (c) 2015 * Cobham Gaisler * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ /* diff --git a/testsuites/smptests/smpclock01/init.c b/testsuites/smptests/smpclock01/init.c index fc67542091..ffecf0ddaa 100644 --- a/testsuites/smptests/smpclock01/init.c +++ b/testsuites/smptests/smpclock01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpfatal01/init.c b/testsuites/smptests/smpfatal01/init.c index d2a48d3fad..21673521b9 100644 --- a/testsuites/smptests/smpfatal01/init.c +++ b/testsuites/smptests/smpfatal01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpfatal02/init.c b/testsuites/smptests/smpfatal02/init.c index c992aec334..19299a730f 100644 --- a/testsuites/smptests/smpfatal02/init.c +++ b/testsuites/smptests/smpfatal02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpfatal03/init.c b/testsuites/smptests/smpfatal03/init.c index d1301b7150..ff42bd8b38 100644 --- a/testsuites/smptests/smpfatal03/init.c +++ b/testsuites/smptests/smpfatal03/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/smptests/smpfatal04/init.c b/testsuites/smptests/smpfatal04/init.c index 9d66ba1048..7674fde288 100644 --- a/testsuites/smptests/smpfatal04/init.c +++ b/testsuites/smptests/smpfatal04/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpfatal05/init.c b/testsuites/smptests/smpfatal05/init.c index 69aaf03863..ad9e32240f 100644 --- a/testsuites/smptests/smpfatal05/init.c +++ b/testsuites/smptests/smpfatal05/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpfatal06/init.c b/testsuites/smptests/smpfatal06/init.c index 93db300939..b48664f253 100644 --- a/testsuites/smptests/smpfatal06/init.c +++ b/testsuites/smptests/smpfatal06/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpfatal08/init.c b/testsuites/smptests/smpfatal08/init.c index 484f8959a1..6ad59f204b 100644 --- a/testsuites/smptests/smpfatal08/init.c +++ b/testsuites/smptests/smpfatal08/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpfatal09/init.c b/testsuites/smptests/smpfatal09/init.c index dfdd11d84c..6caca32c82 100644 --- a/testsuites/smptests/smpfatal09/init.c +++ b/testsuites/smptests/smpfatal09/init.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (C) 2018 embedded brains GmbH + * Copyright (C) 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpipi01/init.c b/testsuites/smptests/smpipi01/init.c index d54a1af3b8..f8172fed96 100644 --- a/testsuites/smptests/smpipi01/init.c +++ b/testsuites/smptests/smpipi01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2019 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -198,6 +198,43 @@ static const Per_CPU_Job_context counter_1_job_context = { .arg = &test_instance }; +static void sync_handler(void *arg) +{ + test_context *ctx = arg; + SMP_barrier_State *bs = &ctx->worker_barrier_state; + + /* (E) */ + barrier(ctx, bs); +} + +static const Per_CPU_Job_context sync_context = { + .handler = sync_handler, + .arg = &test_instance +}; + +static void wait_for_ipi_done(test_context *ctx, Per_CPU_Control *cpu) +{ + Per_CPU_Job job; + unsigned long done; + + job.context = &sync_context; + _Per_CPU_Submit_job(cpu, &job); + + while (cpu->isr_nest_level == 0) { + RTEMS_COMPILER_MEMORY_BARRIER(); + } + + /* (E) */ + barrier(ctx, &ctx->main_barrier_state); + + while (cpu->isr_nest_level != 0) { + RTEMS_COMPILER_MEMORY_BARRIER(); + } + + done = _Atomic_Load_ulong( &job.done, ATOMIC_ORDER_ACQUIRE ); + rtems_test_assert( done == PER_CPU_JOB_DONE ); +} + static void test_send_message_flood( test_context *ctx, uint32_t cpu_count @@ -211,20 +248,15 @@ static void test_send_message_flood( ctx->jobs[cpu_index][0].context = &counter_0_job_context; ctx->jobs[cpu_index][1].context = &counter_1_job_context; - _Per_CPU_Submit_job(cpu, &ctx->jobs[cpu_index][0]); + _Per_CPU_Add_job(cpu, &ctx->jobs[cpu_index][0]); } for (cpu_index = 0; cpu_index < cpu_count; ++cpu_index) { Per_CPU_Control *cpu; - Per_CPU_Control *cpu_self; uint32_t i; cpu = _Per_CPU_Get_by_index(cpu_index); - cpu_self = _Thread_Dispatch_disable(); - _SMP_Synchronize(); - _Thread_Dispatch_enable(cpu_self); - for (i = 0; i < cpu_count; ++i) { if (i != cpu_index) { ctx->copy_counters[i] = ctx->counters[i].value; @@ -235,6 +267,10 @@ static void test_send_message_flood( _SMP_Send_message(cpu, SMP_MESSAGE_PERFORM_JOBS); } + if (cpu_index != cpu_index_self) { + wait_for_ipi_done(ctx, cpu); + } + for (i = 0; i < cpu_count; ++i) { if (i != cpu_index) { rtems_test_assert(ctx->copy_counters[i] == ctx->counters[i].value); diff --git a/testsuites/smptests/smpirqs01/init.c b/testsuites/smptests/smpirqs01/init.c index 03238227fd..7404c77418 100644 --- a/testsuites/smptests/smpirqs01/init.c +++ b/testsuites/smptests/smpirqs01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpload01/init.c b/testsuites/smptests/smpload01/init.c index d28e728746..5fb26acff9 100644 --- a/testsuites/smptests/smpload01/init.c +++ b/testsuites/smptests/smpload01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smplock01/init.c b/testsuites/smptests/smplock01/init.c index 9f162a5b12..2defa2b5c0 100644 --- a/testsuites/smptests/smplock01/init.c +++ b/testsuites/smptests/smplock01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2013, 2024 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -47,6 +47,8 @@ const char rtems_test_name[] = "SMPLOCK 1"; typedef struct { rtems_test_parallel_context base; + const char *test_sep; + const char *counter_sep; unsigned long counter[TEST_COUNT]; unsigned long local_counter[CPU_COUNT][TEST_COUNT][CPU_COUNT]; SMP_lock_Control lock RTEMS_ALIGNED(CPU_CACHE_LINE_BYTES); @@ -84,40 +86,69 @@ static rtems_interval test_init( return test_duration(); } +static const rtems_test_parallel_job test_jobs[TEST_COUNT]; + static void test_fini( test_context *ctx, - const char *name, + const char *lock_type, + bool global_lock, + const char *section_type, size_t test, size_t active_workers ) { + bool cascade = test_jobs[test].cascade; unsigned long sum = 0; - unsigned long n = active_workers; - unsigned long i; + const char *value_sep; + size_t i; + + if (active_workers == 1 || !cascade) { + printf( + "%s{\n" + " \"lock-type\": \"%s\",\n" + " \"lock-object\": \"%s\",\n" + " \"section-type\": \"%s\",\n" + " \"results\": [", + ctx->test_sep, + lock_type, + global_lock ? "global" : "local", + section_type + ); + ctx->test_sep = ", "; + ctx->counter_sep = "\n "; + } - printf(" <%s activeWorker=\"%lu\">\n", name, n); + printf( + "%s{\n" + " \"counter\": [", ctx->counter_sep); + ctx->counter_sep = "\n }, "; + value_sep = ""; - for (i = 0; i < n; ++i) { + for (i = 0; i < active_workers; ++i) { unsigned long local_counter = ctx->local_counter[active_workers - 1][test][i]; sum += local_counter; printf( - " <LocalCounter worker=\"%lu\">%lu</LocalCounter>\n", - i, + "%s%lu", + value_sep, local_counter ); + value_sep = ", "; } printf( - " <GlobalCounter>%lu</GlobalCounter>\n" - " <SumOfLocalCounter>%lu</SumOfLocalCounter>\n" - " </%s>\n", + "],\n" + " \"global-counter\": %lu,\n" + " \"sum-of-local-counter\": %lu", ctx->counter[test], - sum, - name + sum ); + + if (active_workers == rtems_scheduler_get_processor_maximum() || !cascade) { + printf("\n }\n ]\n }"); + } } static void test_0_body( @@ -151,7 +182,9 @@ static void test_0_fini( test_fini( ctx, - "GlobalTicketLockWithLocalCounter", + "Ticket Lock", + true, + "local counter", 0, active_workers ); @@ -188,7 +221,9 @@ static void test_1_fini( test_fini( ctx, - "GlobalMCSLockWithLocalCounter", + "MCS Lock", + true, + "local counter", 1, active_workers ); @@ -226,7 +261,9 @@ static void test_2_fini( test_fini( ctx, - "GlobalTicketLockWithGlobalCounter", + "Ticket Lock", + true, + "global counter", 2, active_workers ); @@ -264,7 +301,9 @@ static void test_3_fini( test_fini( ctx, - "GlobalMCSLockWithGlobalCounter", + "MCS Lock", + true, + "global counter", 3, active_workers ); @@ -306,7 +345,9 @@ static void test_4_fini( test_fini( ctx, - "LocalTicketLockWithLocalCounter", + "Ticket Lock", + false, + "local counter", 4, active_workers ); @@ -353,7 +394,9 @@ static void test_5_fini( test_fini( ctx, - "LocalMCSLockWithLocalCounter", + "MCS Lock", + false, + "local counter", 5, active_workers ); @@ -399,7 +442,9 @@ static void test_6_fini( test_fini( ctx, - "LocalTicketLockWithGlobalCounter", + "Ticket Lock", + false, + "global counter", 6, active_workers ); @@ -450,7 +495,9 @@ static void test_7_fini( test_fini( ctx, - "LocalMCSLockWithGlobalCounter", + "MCS Lock", + false, + "global counter", 7, active_workers ); @@ -497,7 +544,9 @@ static void test_8_fini( test_fini( ctx, - "GlobalTicketLockWithBusySection", + "Ticket Lock", + true, + "busy loop", 8, active_workers ); @@ -535,7 +584,9 @@ static void test_9_fini( test_fini( ctx, - "GlobalMCSLockWithBusySection", + "MCS Lock", + true, + "busy loop", 9, active_workers ); @@ -595,7 +646,9 @@ static void test_10_fini( test_fini( ctx, - "SequenceLock", + "Sequence Lock", + true, + "two global counter", 10, active_workers ); @@ -634,7 +687,9 @@ static void test_11_fini( test_fini( ctx, - "GlobalTASLockWithLocalCounter", + "TAS Lock", + true, + "local counter", 11, active_workers ); @@ -675,7 +730,9 @@ static void test_12_fini( test_fini( ctx, - "GlobalTTASLockWithLocalCounter", + "TTAS Lock", + true, + "local counter", 12, active_workers ); @@ -753,11 +810,11 @@ static const rtems_test_parallel_job test_jobs[TEST_COUNT] = { static void test(void) { test_context *ctx = &test_instance; - const char *test = "SMPLock01"; - printf("<%s>\n", test); + printf("*** BEGIN OF JSON DATA ***\n[\n "); + ctx->test_sep = ""; rtems_test_parallel(&ctx->base, NULL, &test_jobs[0], TEST_COUNT); - printf("</%s>\n", test); + printf("\n]\n*** END OF JSON DATA ***\n"); } static void Init(rtems_task_argument arg) diff --git a/testsuites/smptests/smplock01/smplock01.scn b/testsuites/smptests/smplock01/smplock01.scn index 3d4b90f507..1d2e3c98e1 100644 --- a/testsuites/smptests/smplock01/smplock01.scn +++ b/testsuites/smptests/smplock01/smplock01.scn @@ -1,2576 +1,239 @@ + + SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020 + Bug-reports to jiri@gaisler.se + + GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks + + Loaded build/sparc/gr740/testsuites/smptests/smplock01.exe, entry 0x00000000 + + *** BEGIN OF TEST SMPLOCK 1 *** -<SMPLock01> - <GlobalTicketLockWithLocalCounter activeWorker="1"> - <LocalCounter worker="0">18357037</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>18357037</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="2"> - <LocalCounter worker="0">10121166</LocalCounter> - <LocalCounter worker="1">10121320</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>20242486</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="3"> - <LocalCounter worker="0">5707325</LocalCounter> - <LocalCounter worker="1">5707356</LocalCounter> - <LocalCounter worker="2">5707357</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>17122038</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="4"> - <LocalCounter worker="0">4194779</LocalCounter> - <LocalCounter worker="1">4194794</LocalCounter> - <LocalCounter worker="2">4194790</LocalCounter> - <LocalCounter worker="3">4194794</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>16779157</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="5"> - <LocalCounter worker="0">3328106</LocalCounter> - <LocalCounter worker="1">3328112</LocalCounter> - <LocalCounter worker="2">3328107</LocalCounter> - <LocalCounter worker="3">3328109</LocalCounter> - <LocalCounter worker="4">3328114</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>16640548</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="6"> - <LocalCounter worker="0">2719456</LocalCounter> - <LocalCounter worker="1">2719464</LocalCounter> - <LocalCounter worker="2">2719465</LocalCounter> - <LocalCounter worker="3">2719465</LocalCounter> - <LocalCounter worker="4">2719465</LocalCounter> - <LocalCounter worker="5">2719464</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>16316779</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="7"> - <LocalCounter worker="0">2281694</LocalCounter> - <LocalCounter worker="1">2281698</LocalCounter> - <LocalCounter worker="2">2281695</LocalCounter> - <LocalCounter worker="3">2281700</LocalCounter> - <LocalCounter worker="4">2281700</LocalCounter> - <LocalCounter worker="5">2281697</LocalCounter> - <LocalCounter worker="6">2281699</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>15971883</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="8"> - <LocalCounter worker="0">1973749</LocalCounter> - <LocalCounter worker="1">1973751</LocalCounter> - <LocalCounter worker="2">1973749</LocalCounter> - <LocalCounter worker="3">1973754</LocalCounter> - <LocalCounter worker="4">1973753</LocalCounter> - <LocalCounter worker="5">1973751</LocalCounter> - <LocalCounter worker="6">1973749</LocalCounter> - <LocalCounter worker="7">1973749</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>15790005</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="9"> - <LocalCounter worker="0">531562</LocalCounter> - <LocalCounter worker="1">531561</LocalCounter> - <LocalCounter worker="2">531558</LocalCounter> - <LocalCounter worker="3">531556</LocalCounter> - <LocalCounter worker="4">531562</LocalCounter> - <LocalCounter worker="5">531566</LocalCounter> - <LocalCounter worker="6">531561</LocalCounter> - <LocalCounter worker="7">531560</LocalCounter> - <LocalCounter worker="8">531589</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4784075</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="10"> - <LocalCounter worker="0">467120</LocalCounter> - <LocalCounter worker="1">467127</LocalCounter> - <LocalCounter worker="2">467117</LocalCounter> - <LocalCounter worker="3">467120</LocalCounter> - <LocalCounter worker="4">467123</LocalCounter> - <LocalCounter worker="5">467116</LocalCounter> - <LocalCounter worker="6">467122</LocalCounter> - <LocalCounter worker="7">467116</LocalCounter> - <LocalCounter worker="8">467180</LocalCounter> - <LocalCounter worker="9">467179</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4671320</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="11"> - <LocalCounter worker="0">426740</LocalCounter> - <LocalCounter worker="1">426739</LocalCounter> - <LocalCounter worker="2">426742</LocalCounter> - <LocalCounter worker="3">426737</LocalCounter> - <LocalCounter worker="4">426740</LocalCounter> - <LocalCounter worker="5">426741</LocalCounter> - <LocalCounter worker="6">426747</LocalCounter> - <LocalCounter worker="7">426735</LocalCounter> - <LocalCounter worker="8">426768</LocalCounter> - <LocalCounter worker="9">426765</LocalCounter> - <LocalCounter worker="10">426767</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4694221</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="12"> - <LocalCounter worker="0">388705</LocalCounter> - <LocalCounter worker="1">388703</LocalCounter> - <LocalCounter worker="2">388710</LocalCounter> - <LocalCounter worker="3">388706</LocalCounter> - <LocalCounter worker="4">388701</LocalCounter> - <LocalCounter worker="5">388702</LocalCounter> - <LocalCounter worker="6">388702</LocalCounter> - <LocalCounter worker="7">388705</LocalCounter> - <LocalCounter worker="8">388740</LocalCounter> - <LocalCounter worker="9">388739</LocalCounter> - <LocalCounter worker="10">388740</LocalCounter> - <LocalCounter worker="11">388739</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4664592</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="13"> - <LocalCounter worker="0">356920</LocalCounter> - <LocalCounter worker="1">356917</LocalCounter> - <LocalCounter worker="2">356916</LocalCounter> - <LocalCounter worker="3">356917</LocalCounter> - <LocalCounter worker="4">356920</LocalCounter> - <LocalCounter worker="5">356919</LocalCounter> - <LocalCounter worker="6">356920</LocalCounter> - <LocalCounter worker="7">356917</LocalCounter> - <LocalCounter worker="8">356948</LocalCounter> - <LocalCounter worker="9">356947</LocalCounter> - <LocalCounter worker="10">356948</LocalCounter> - <LocalCounter worker="11">356947</LocalCounter> - <LocalCounter worker="12">356953</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4640089</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="14"> - <LocalCounter worker="0">330192</LocalCounter> - <LocalCounter worker="1">330192</LocalCounter> - <LocalCounter worker="2">330186</LocalCounter> - <LocalCounter worker="3">330185</LocalCounter> - <LocalCounter worker="4">330190</LocalCounter> - <LocalCounter worker="5">330183</LocalCounter> - <LocalCounter worker="6">330187</LocalCounter> - <LocalCounter worker="7">330187</LocalCounter> - <LocalCounter worker="8">330226</LocalCounter> - <LocalCounter worker="9">330225</LocalCounter> - <LocalCounter worker="10">330225</LocalCounter> - <LocalCounter worker="11">330228</LocalCounter> - <LocalCounter worker="12">330225</LocalCounter> - <LocalCounter worker="13">330226</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4622857</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="15"> - <LocalCounter worker="0">303180</LocalCounter> - <LocalCounter worker="1">303186</LocalCounter> - <LocalCounter worker="2">303190</LocalCounter> - <LocalCounter worker="3">303180</LocalCounter> - <LocalCounter worker="4">303188</LocalCounter> - <LocalCounter worker="5">303181</LocalCounter> - <LocalCounter worker="6">303183</LocalCounter> - <LocalCounter worker="7">303191</LocalCounter> - <LocalCounter worker="8">303199</LocalCounter> - <LocalCounter worker="9">303204</LocalCounter> - <LocalCounter worker="10">303209</LocalCounter> - <LocalCounter worker="11">303207</LocalCounter> - <LocalCounter worker="12">303212</LocalCounter> - <LocalCounter worker="13">303215</LocalCounter> - <LocalCounter worker="14">303217</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4547942</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="16"> - <LocalCounter worker="0">274980</LocalCounter> - <LocalCounter worker="1">274975</LocalCounter> - <LocalCounter worker="2">274979</LocalCounter> - <LocalCounter worker="3">274983</LocalCounter> - <LocalCounter worker="4">274979</LocalCounter> - <LocalCounter worker="5">274977</LocalCounter> - <LocalCounter worker="6">274974</LocalCounter> - <LocalCounter worker="7">274980</LocalCounter> - <LocalCounter worker="8">274977</LocalCounter> - <LocalCounter worker="9">274984</LocalCounter> - <LocalCounter worker="10">274983</LocalCounter> - <LocalCounter worker="11">274981</LocalCounter> - <LocalCounter worker="12">274982</LocalCounter> - <LocalCounter worker="13">274978</LocalCounter> - <LocalCounter worker="14">274980</LocalCounter> - <LocalCounter worker="15">274977</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4399669</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="17"> - <LocalCounter worker="0">261695</LocalCounter> - <LocalCounter worker="1">261697</LocalCounter> - <LocalCounter worker="2">261696</LocalCounter> - <LocalCounter worker="3">261696</LocalCounter> - <LocalCounter worker="4">261694</LocalCounter> - <LocalCounter worker="5">261695</LocalCounter> - <LocalCounter worker="6">261697</LocalCounter> - <LocalCounter worker="7">261692</LocalCounter> - <LocalCounter worker="8">261696</LocalCounter> - <LocalCounter worker="9">261692</LocalCounter> - <LocalCounter worker="10">261696</LocalCounter> - <LocalCounter worker="11">261697</LocalCounter> - <LocalCounter worker="12">261697</LocalCounter> - <LocalCounter worker="13">261695</LocalCounter> - <LocalCounter worker="14">261692</LocalCounter> - <LocalCounter worker="15">261691</LocalCounter> - <LocalCounter worker="16">261708</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4448826</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="18"> - <LocalCounter worker="0">240007</LocalCounter> - <LocalCounter worker="1">240008</LocalCounter> - <LocalCounter worker="2">240007</LocalCounter> - <LocalCounter worker="3">240008</LocalCounter> - <LocalCounter worker="4">240010</LocalCounter> - <LocalCounter worker="5">240007</LocalCounter> - <LocalCounter worker="6">240006</LocalCounter> - <LocalCounter worker="7">240008</LocalCounter> - <LocalCounter worker="8">240008</LocalCounter> - <LocalCounter worker="9">240007</LocalCounter> - <LocalCounter worker="10">240010</LocalCounter> - <LocalCounter worker="11">240007</LocalCounter> - <LocalCounter worker="12">240010</LocalCounter> - <LocalCounter worker="13">240007</LocalCounter> - <LocalCounter worker="14">240007</LocalCounter> - <LocalCounter worker="15">240010</LocalCounter> - <LocalCounter worker="16">240020</LocalCounter> - <LocalCounter worker="17">240017</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4320164</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="19"> - <LocalCounter worker="0">225896</LocalCounter> - <LocalCounter worker="1">225897</LocalCounter> - <LocalCounter worker="2">225897</LocalCounter> - <LocalCounter worker="3">225898</LocalCounter> - <LocalCounter worker="4">225899</LocalCounter> - <LocalCounter worker="5">225898</LocalCounter> - <LocalCounter worker="6">225898</LocalCounter> - <LocalCounter worker="7">225896</LocalCounter> - <LocalCounter worker="8">225896</LocalCounter> - <LocalCounter worker="9">225896</LocalCounter> - <LocalCounter worker="10">225897</LocalCounter> - <LocalCounter worker="11">225898</LocalCounter> - <LocalCounter worker="12">225900</LocalCounter> - <LocalCounter worker="13">225899</LocalCounter> - <LocalCounter worker="14">225895</LocalCounter> - <LocalCounter worker="15">225894</LocalCounter> - <LocalCounter worker="16">225906</LocalCounter> - <LocalCounter worker="17">225905</LocalCounter> - <LocalCounter worker="18">225907</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4292072</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="20"> - <LocalCounter worker="0">214338</LocalCounter> - <LocalCounter worker="1">214338</LocalCounter> - <LocalCounter worker="2">214338</LocalCounter> - <LocalCounter worker="3">214336</LocalCounter> - <LocalCounter worker="4">214338</LocalCounter> - <LocalCounter worker="5">214337</LocalCounter> - <LocalCounter worker="6">214335</LocalCounter> - <LocalCounter worker="7">214337</LocalCounter> - <LocalCounter worker="8">214338</LocalCounter> - <LocalCounter worker="9">214337</LocalCounter> - <LocalCounter worker="10">214337</LocalCounter> - <LocalCounter worker="11">214338</LocalCounter> - <LocalCounter worker="12">214337</LocalCounter> - <LocalCounter worker="13">214337</LocalCounter> - <LocalCounter worker="14">214339</LocalCounter> - <LocalCounter worker="15">214338</LocalCounter> - <LocalCounter worker="16">214343</LocalCounter> - <LocalCounter worker="17">214343</LocalCounter> - <LocalCounter worker="18">214345</LocalCounter> - <LocalCounter worker="19">214345</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4286774</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="21"> - <LocalCounter worker="0">198227</LocalCounter> - <LocalCounter worker="1">198229</LocalCounter> - <LocalCounter worker="2">198227</LocalCounter> - <LocalCounter worker="3">198228</LocalCounter> - <LocalCounter worker="4">198228</LocalCounter> - <LocalCounter worker="5">198229</LocalCounter> - <LocalCounter worker="6">198229</LocalCounter> - <LocalCounter worker="7">198228</LocalCounter> - <LocalCounter worker="8">198227</LocalCounter> - <LocalCounter worker="9">198230</LocalCounter> - <LocalCounter worker="10">198227</LocalCounter> - <LocalCounter worker="11">198228</LocalCounter> - <LocalCounter worker="12">198229</LocalCounter> - <LocalCounter worker="13">198230</LocalCounter> - <LocalCounter worker="14">198228</LocalCounter> - <LocalCounter worker="15">198230</LocalCounter> - <LocalCounter worker="16">198231</LocalCounter> - <LocalCounter worker="17">198232</LocalCounter> - <LocalCounter worker="18">198233</LocalCounter> - <LocalCounter worker="19">198233</LocalCounter> - <LocalCounter worker="20">198232</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4162815</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="22"> - <LocalCounter worker="0">192321</LocalCounter> - <LocalCounter worker="1">192322</LocalCounter> - <LocalCounter worker="2">192322</LocalCounter> - <LocalCounter worker="3">192323</LocalCounter> - <LocalCounter worker="4">192325</LocalCounter> - <LocalCounter worker="5">192324</LocalCounter> - <LocalCounter worker="6">192323</LocalCounter> - <LocalCounter worker="7">192324</LocalCounter> - <LocalCounter worker="8">192325</LocalCounter> - <LocalCounter worker="9">192325</LocalCounter> - <LocalCounter worker="10">192323</LocalCounter> - <LocalCounter worker="11">192323</LocalCounter> - <LocalCounter worker="12">192323</LocalCounter> - <LocalCounter worker="13">192323</LocalCounter> - <LocalCounter worker="14">192324</LocalCounter> - <LocalCounter worker="15">192324</LocalCounter> - <LocalCounter worker="16">192329</LocalCounter> - <LocalCounter worker="17">192326</LocalCounter> - <LocalCounter worker="18">192325</LocalCounter> - <LocalCounter worker="19">192329</LocalCounter> - <LocalCounter worker="20">192326</LocalCounter> - <LocalCounter worker="21">192327</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4231136</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="23"> - <LocalCounter worker="0">177893</LocalCounter> - <LocalCounter worker="1">177892</LocalCounter> - <LocalCounter worker="2">177895</LocalCounter> - <LocalCounter worker="3">177894</LocalCounter> - <LocalCounter worker="4">177892</LocalCounter> - <LocalCounter worker="5">177891</LocalCounter> - <LocalCounter worker="6">177893</LocalCounter> - <LocalCounter worker="7">177893</LocalCounter> - <LocalCounter worker="8">177893</LocalCounter> - <LocalCounter worker="9">177893</LocalCounter> - <LocalCounter worker="10">177894</LocalCounter> - <LocalCounter worker="11">177894</LocalCounter> - <LocalCounter worker="12">177893</LocalCounter> - <LocalCounter worker="13">177893</LocalCounter> - <LocalCounter worker="14">177894</LocalCounter> - <LocalCounter worker="15">177894</LocalCounter> - <LocalCounter worker="16">177895</LocalCounter> - <LocalCounter worker="17">177895</LocalCounter> - <LocalCounter worker="18">177896</LocalCounter> - <LocalCounter worker="19">177897</LocalCounter> - <LocalCounter worker="20">177894</LocalCounter> - <LocalCounter worker="21">177896</LocalCounter> - <LocalCounter worker="22">177894</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4091558</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalTicketLockWithLocalCounter activeWorker="24"> - <LocalCounter worker="0">168726</LocalCounter> - <LocalCounter worker="1">168726</LocalCounter> - <LocalCounter worker="2">168726</LocalCounter> - <LocalCounter worker="3">168726</LocalCounter> - <LocalCounter worker="4">168726</LocalCounter> - <LocalCounter worker="5">168725</LocalCounter> - <LocalCounter worker="6">168726</LocalCounter> - <LocalCounter worker="7">168726</LocalCounter> - <LocalCounter worker="8">168726</LocalCounter> - <LocalCounter worker="9">168726</LocalCounter> - <LocalCounter worker="10">168728</LocalCounter> - <LocalCounter worker="11">168727</LocalCounter> - <LocalCounter worker="12">168727</LocalCounter> - <LocalCounter worker="13">168726</LocalCounter> - <LocalCounter worker="14">168726</LocalCounter> - <LocalCounter worker="15">168728</LocalCounter> - <LocalCounter worker="16">168727</LocalCounter> - <LocalCounter worker="17">168729</LocalCounter> - <LocalCounter worker="18">168726</LocalCounter> - <LocalCounter worker="19">168725</LocalCounter> - <LocalCounter worker="20">168728</LocalCounter> - <LocalCounter worker="21">168727</LocalCounter> - <LocalCounter worker="22">168726</LocalCounter> - <LocalCounter worker="23">168726</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4049435</SumOfLocalCounter> - </GlobalTicketLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="1"> - <LocalCounter worker="0">13090449</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>13090449</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="2"> - <LocalCounter worker="0">6384726</LocalCounter> - <LocalCounter worker="1">6384887</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>12769613</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="3"> - <LocalCounter worker="0">2955420</LocalCounter> - <LocalCounter worker="1">2955434</LocalCounter> - <LocalCounter worker="2">2955434</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>8866288</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="4"> - <LocalCounter worker="0">2866696</LocalCounter> - <LocalCounter worker="1">2866710</LocalCounter> - <LocalCounter worker="2">2866711</LocalCounter> - <LocalCounter worker="3">2866708</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>11466825</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="5"> - <LocalCounter worker="0">2996690</LocalCounter> - <LocalCounter worker="1">2996699</LocalCounter> - <LocalCounter worker="2">2996701</LocalCounter> - <LocalCounter worker="3">2996698</LocalCounter> - <LocalCounter worker="4">2996701</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>14983489</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="6"> - <LocalCounter worker="0">2540852</LocalCounter> - <LocalCounter worker="1">2540864</LocalCounter> - <LocalCounter worker="2">2540864</LocalCounter> - <LocalCounter worker="3">2540862</LocalCounter> - <LocalCounter worker="4">2540861</LocalCounter> - <LocalCounter worker="5">2540863</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>15245166</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="7"> - <LocalCounter worker="0">2182035</LocalCounter> - <LocalCounter worker="1">2182054</LocalCounter> - <LocalCounter worker="2">2182053</LocalCounter> - <LocalCounter worker="3">2182053</LocalCounter> - <LocalCounter worker="4">2182053</LocalCounter> - <LocalCounter worker="5">2182055</LocalCounter> - <LocalCounter worker="6">2182055</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>15274358</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="8"> - <LocalCounter worker="0">1920366</LocalCounter> - <LocalCounter worker="1">1920373</LocalCounter> - <LocalCounter worker="2">1920374</LocalCounter> - <LocalCounter worker="3">1920373</LocalCounter> - <LocalCounter worker="4">1920371</LocalCounter> - <LocalCounter worker="5">1920374</LocalCounter> - <LocalCounter worker="6">1920373</LocalCounter> - <LocalCounter worker="7">1920372</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>15362976</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="9"> - <LocalCounter worker="0">1216597</LocalCounter> - <LocalCounter worker="1">1216602</LocalCounter> - <LocalCounter worker="2">1216602</LocalCounter> - <LocalCounter worker="3">1216602</LocalCounter> - <LocalCounter worker="4">1216601</LocalCounter> - <LocalCounter worker="5">1216602</LocalCounter> - <LocalCounter worker="6">1216603</LocalCounter> - <LocalCounter worker="7">1216601</LocalCounter> - <LocalCounter worker="8">1216600</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>10949410</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="10"> - <LocalCounter worker="0">1007168</LocalCounter> - <LocalCounter worker="1">1007170</LocalCounter> - <LocalCounter worker="2">1007171</LocalCounter> - <LocalCounter worker="3">1007170</LocalCounter> - <LocalCounter worker="4">1007170</LocalCounter> - <LocalCounter worker="5">1007170</LocalCounter> - <LocalCounter worker="6">1007171</LocalCounter> - <LocalCounter worker="7">1007170</LocalCounter> - <LocalCounter worker="8">1007170</LocalCounter> - <LocalCounter worker="9">1007171</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>10071701</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="11"> - <LocalCounter worker="0">772281</LocalCounter> - <LocalCounter worker="1">772283</LocalCounter> - <LocalCounter worker="2">772283</LocalCounter> - <LocalCounter worker="3">772284</LocalCounter> - <LocalCounter worker="4">772281</LocalCounter> - <LocalCounter worker="5">772283</LocalCounter> - <LocalCounter worker="6">772283</LocalCounter> - <LocalCounter worker="7">772282</LocalCounter> - <LocalCounter worker="8">772281</LocalCounter> - <LocalCounter worker="9">772282</LocalCounter> - <LocalCounter worker="10">772282</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>8495105</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="12"> - <LocalCounter worker="0">672837</LocalCounter> - <LocalCounter worker="1">672841</LocalCounter> - <LocalCounter worker="2">672841</LocalCounter> - <LocalCounter worker="3">672841</LocalCounter> - <LocalCounter worker="4">672841</LocalCounter> - <LocalCounter worker="5">672842</LocalCounter> - <LocalCounter worker="6">672841</LocalCounter> - <LocalCounter worker="7">672841</LocalCounter> - <LocalCounter worker="8">672842</LocalCounter> - <LocalCounter worker="9">672841</LocalCounter> - <LocalCounter worker="10">672841</LocalCounter> - <LocalCounter worker="11">672841</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>8074090</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="13"> - <LocalCounter worker="0">595160</LocalCounter> - <LocalCounter worker="1">595163</LocalCounter> - <LocalCounter worker="2">595162</LocalCounter> - <LocalCounter worker="3">595163</LocalCounter> - <LocalCounter worker="4">595161</LocalCounter> - <LocalCounter worker="5">595162</LocalCounter> - <LocalCounter worker="6">595162</LocalCounter> - <LocalCounter worker="7">595163</LocalCounter> - <LocalCounter worker="8">595162</LocalCounter> - <LocalCounter worker="9">595162</LocalCounter> - <LocalCounter worker="10">595162</LocalCounter> - <LocalCounter worker="11">595162</LocalCounter> - <LocalCounter worker="12">595162</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>7737106</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="14"> - <LocalCounter worker="0">581536</LocalCounter> - <LocalCounter worker="1">581540</LocalCounter> - <LocalCounter worker="2">581539</LocalCounter> - <LocalCounter worker="3">581539</LocalCounter> - <LocalCounter worker="4">581539</LocalCounter> - <LocalCounter worker="5">581539</LocalCounter> - <LocalCounter worker="6">581539</LocalCounter> - <LocalCounter worker="7">581538</LocalCounter> - <LocalCounter worker="8">581540</LocalCounter> - <LocalCounter worker="9">581539</LocalCounter> - <LocalCounter worker="10">581538</LocalCounter> - <LocalCounter worker="11">581539</LocalCounter> - <LocalCounter worker="12">581539</LocalCounter> - <LocalCounter worker="13">581540</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>8141544</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="15"> - <LocalCounter worker="0">578439</LocalCounter> - <LocalCounter worker="1">578441</LocalCounter> - <LocalCounter worker="2">578442</LocalCounter> - <LocalCounter worker="3">578441</LocalCounter> - <LocalCounter worker="4">578442</LocalCounter> - <LocalCounter worker="5">578441</LocalCounter> - <LocalCounter worker="6">578442</LocalCounter> - <LocalCounter worker="7">578444</LocalCounter> - <LocalCounter worker="8">578441</LocalCounter> - <LocalCounter worker="9">578442</LocalCounter> - <LocalCounter worker="10">578441</LocalCounter> - <LocalCounter worker="11">578440</LocalCounter> - <LocalCounter worker="12">578441</LocalCounter> - <LocalCounter worker="13">578441</LocalCounter> - <LocalCounter worker="14">578442</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>8676620</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="16"> - <LocalCounter worker="0">527784</LocalCounter> - <LocalCounter worker="1">527783</LocalCounter> - <LocalCounter worker="2">527785</LocalCounter> - <LocalCounter worker="3">527784</LocalCounter> - <LocalCounter worker="4">527784</LocalCounter> - <LocalCounter worker="5">527783</LocalCounter> - <LocalCounter worker="6">527782</LocalCounter> - <LocalCounter worker="7">527784</LocalCounter> - <LocalCounter worker="8">527782</LocalCounter> - <LocalCounter worker="9">527782</LocalCounter> - <LocalCounter worker="10">527784</LocalCounter> - <LocalCounter worker="11">527783</LocalCounter> - <LocalCounter worker="12">527783</LocalCounter> - <LocalCounter worker="13">527783</LocalCounter> - <LocalCounter worker="14">527783</LocalCounter> - <LocalCounter worker="15">527783</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>8444532</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="17"> - <LocalCounter worker="0">468012</LocalCounter> - <LocalCounter worker="1">468009</LocalCounter> - <LocalCounter worker="2">468009</LocalCounter> - <LocalCounter worker="3">468010</LocalCounter> - <LocalCounter worker="4">468011</LocalCounter> - <LocalCounter worker="5">468010</LocalCounter> - <LocalCounter worker="6">468011</LocalCounter> - <LocalCounter worker="7">468009</LocalCounter> - <LocalCounter worker="8">468009</LocalCounter> - <LocalCounter worker="9">468010</LocalCounter> - <LocalCounter worker="10">468011</LocalCounter> - <LocalCounter worker="11">468012</LocalCounter> - <LocalCounter worker="12">468009</LocalCounter> - <LocalCounter worker="13">468011</LocalCounter> - <LocalCounter worker="14">468011</LocalCounter> - <LocalCounter worker="15">468011</LocalCounter> - <LocalCounter worker="16">468012</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>7956177</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="18"> - <LocalCounter worker="0">439238</LocalCounter> - <LocalCounter worker="1">439222</LocalCounter> - <LocalCounter worker="2">439228</LocalCounter> - <LocalCounter worker="3">439225</LocalCounter> - <LocalCounter worker="4">439226</LocalCounter> - <LocalCounter worker="5">439228</LocalCounter> - <LocalCounter worker="6">439226</LocalCounter> - <LocalCounter worker="7">439219</LocalCounter> - <LocalCounter worker="8">439231</LocalCounter> - <LocalCounter worker="9">439213</LocalCounter> - <LocalCounter worker="10">439226</LocalCounter> - <LocalCounter worker="11">439215</LocalCounter> - <LocalCounter worker="12">439215</LocalCounter> - <LocalCounter worker="13">439222</LocalCounter> - <LocalCounter worker="14">439224</LocalCounter> - <LocalCounter worker="15">439217</LocalCounter> - <LocalCounter worker="16">439226</LocalCounter> - <LocalCounter worker="17">439230</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>7906031</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="19"> - <LocalCounter worker="0">392577</LocalCounter> - <LocalCounter worker="1">392658</LocalCounter> - <LocalCounter worker="2">392677</LocalCounter> - <LocalCounter worker="3">392625</LocalCounter> - <LocalCounter worker="4">392645</LocalCounter> - <LocalCounter worker="5">392611</LocalCounter> - <LocalCounter worker="6">392643</LocalCounter> - <LocalCounter worker="7">392617</LocalCounter> - <LocalCounter worker="8">392519</LocalCounter> - <LocalCounter worker="9">392507</LocalCounter> - <LocalCounter worker="10">392525</LocalCounter> - <LocalCounter worker="11">392515</LocalCounter> - <LocalCounter worker="12">392513</LocalCounter> - <LocalCounter worker="13">392488</LocalCounter> - <LocalCounter worker="14">392567</LocalCounter> - <LocalCounter worker="15">392567</LocalCounter> - <LocalCounter worker="16">392175</LocalCounter> - <LocalCounter worker="17">392148</LocalCounter> - <LocalCounter worker="18">392153</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>7457730</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="20"> - <LocalCounter worker="0">393189</LocalCounter> - <LocalCounter worker="1">393145</LocalCounter> - <LocalCounter worker="2">393365</LocalCounter> - <LocalCounter worker="3">393284</LocalCounter> - <LocalCounter worker="4">393215</LocalCounter> - <LocalCounter worker="5">393191</LocalCounter> - <LocalCounter worker="6">393247</LocalCounter> - <LocalCounter worker="7">393229</LocalCounter> - <LocalCounter worker="8">392255</LocalCounter> - <LocalCounter worker="9">392239</LocalCounter> - <LocalCounter worker="10">392268</LocalCounter> - <LocalCounter worker="11">392259</LocalCounter> - <LocalCounter worker="12">392312</LocalCounter> - <LocalCounter worker="13">392395</LocalCounter> - <LocalCounter worker="14">392318</LocalCounter> - <LocalCounter worker="15">392431</LocalCounter> - <LocalCounter worker="16">389204</LocalCounter> - <LocalCounter worker="17">389161</LocalCounter> - <LocalCounter worker="18">389146</LocalCounter> - <LocalCounter worker="19">389191</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>7841044</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="21"> - <LocalCounter worker="0">333867</LocalCounter> - <LocalCounter worker="1">333818</LocalCounter> - <LocalCounter worker="2">333796</LocalCounter> - <LocalCounter worker="3">333998</LocalCounter> - <LocalCounter worker="4">333786</LocalCounter> - <LocalCounter worker="5">333970</LocalCounter> - <LocalCounter worker="6">333966</LocalCounter> - <LocalCounter worker="7">333946</LocalCounter> - <LocalCounter worker="8">331691</LocalCounter> - <LocalCounter worker="9">331644</LocalCounter> - <LocalCounter worker="10">331574</LocalCounter> - <LocalCounter worker="11">331570</LocalCounter> - <LocalCounter worker="12">331815</LocalCounter> - <LocalCounter worker="13">331757</LocalCounter> - <LocalCounter worker="14">331873</LocalCounter> - <LocalCounter worker="15">331902</LocalCounter> - <LocalCounter worker="16">321858</LocalCounter> - <LocalCounter worker="17">321819</LocalCounter> - <LocalCounter worker="18">321778</LocalCounter> - <LocalCounter worker="19">321915</LocalCounter> - <LocalCounter worker="20">322036</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>6934379</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="22"> - <LocalCounter worker="0">336076</LocalCounter> - <LocalCounter worker="1">336030</LocalCounter> - <LocalCounter worker="2">335863</LocalCounter> - <LocalCounter worker="3">335861</LocalCounter> - <LocalCounter worker="4">335954</LocalCounter> - <LocalCounter worker="5">336069</LocalCounter> - <LocalCounter worker="6">335963</LocalCounter> - <LocalCounter worker="7">335891</LocalCounter> - <LocalCounter worker="8">336178</LocalCounter> - <LocalCounter worker="9">335697</LocalCounter> - <LocalCounter worker="10">335574</LocalCounter> - <LocalCounter worker="11">335581</LocalCounter> - <LocalCounter worker="12">335586</LocalCounter> - <LocalCounter worker="13">336068</LocalCounter> - <LocalCounter worker="14">336138</LocalCounter> - <LocalCounter worker="15">336049</LocalCounter> - <LocalCounter worker="16">330987</LocalCounter> - <LocalCounter worker="17">330865</LocalCounter> - <LocalCounter worker="18">331086</LocalCounter> - <LocalCounter worker="19">330937</LocalCounter> - <LocalCounter worker="20">331150</LocalCounter> - <LocalCounter worker="21">330937</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>7360540</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="23"> - <LocalCounter worker="0">317093</LocalCounter> - <LocalCounter worker="1">317207</LocalCounter> - <LocalCounter worker="2">317153</LocalCounter> - <LocalCounter worker="3">317177</LocalCounter> - <LocalCounter worker="4">317207</LocalCounter> - <LocalCounter worker="5">317164</LocalCounter> - <LocalCounter worker="6">317198</LocalCounter> - <LocalCounter worker="7">317132</LocalCounter> - <LocalCounter worker="8">317445</LocalCounter> - <LocalCounter worker="9">317166</LocalCounter> - <LocalCounter worker="10">317044</LocalCounter> - <LocalCounter worker="11">317000</LocalCounter> - <LocalCounter worker="12">317012</LocalCounter> - <LocalCounter worker="13">317587</LocalCounter> - <LocalCounter worker="14">317522</LocalCounter> - <LocalCounter worker="15">317568</LocalCounter> - <LocalCounter worker="16">315579</LocalCounter> - <LocalCounter worker="17">315563</LocalCounter> - <LocalCounter worker="18">315657</LocalCounter> - <LocalCounter worker="19">315582</LocalCounter> - <LocalCounter worker="20">315453</LocalCounter> - <LocalCounter worker="21">315445</LocalCounter> - <LocalCounter worker="22">315774</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>7284728</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalMCSLockWithLocalCounter activeWorker="24"> - <LocalCounter worker="0">312519</LocalCounter> - <LocalCounter worker="1">312750</LocalCounter> - <LocalCounter worker="2">312612</LocalCounter> - <LocalCounter worker="3">312671</LocalCounter> - <LocalCounter worker="4">312685</LocalCounter> - <LocalCounter worker="5">312707</LocalCounter> - <LocalCounter worker="6">312543</LocalCounter> - <LocalCounter worker="7">312680</LocalCounter> - <LocalCounter worker="8">313250</LocalCounter> - <LocalCounter worker="9">312566</LocalCounter> - <LocalCounter worker="10">312775</LocalCounter> - <LocalCounter worker="11">312827</LocalCounter> - <LocalCounter worker="12">312652</LocalCounter> - <LocalCounter worker="13">313141</LocalCounter> - <LocalCounter worker="14">313261</LocalCounter> - <LocalCounter worker="15">313270</LocalCounter> - <LocalCounter worker="16">312883</LocalCounter> - <LocalCounter worker="17">312649</LocalCounter> - <LocalCounter worker="18">312529</LocalCounter> - <LocalCounter worker="19">312615</LocalCounter> - <LocalCounter worker="20">312755</LocalCounter> - <LocalCounter worker="21">312833</LocalCounter> - <LocalCounter worker="22">312673</LocalCounter> - <LocalCounter worker="23">312728</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>7506574</SumOfLocalCounter> - </GlobalMCSLockWithLocalCounter> - <GlobalTicketLockWithGlobalCounter activeWorker="24"> - <LocalCounter worker="0">149325</LocalCounter> - <LocalCounter worker="1">149327</LocalCounter> - <LocalCounter worker="2">149325</LocalCounter> - <LocalCounter worker="3">149325</LocalCounter> - <LocalCounter worker="4">149325</LocalCounter> - <LocalCounter worker="5">149327</LocalCounter> - <LocalCounter worker="6">149325</LocalCounter> - <LocalCounter worker="7">149324</LocalCounter> - <LocalCounter worker="8">149326</LocalCounter> - <LocalCounter worker="9">149325</LocalCounter> - <LocalCounter worker="10">149326</LocalCounter> - <LocalCounter worker="11">149326</LocalCounter> - <LocalCounter worker="12">149326</LocalCounter> - <LocalCounter worker="13">149325</LocalCounter> - <LocalCounter worker="14">149325</LocalCounter> - <LocalCounter worker="15">149325</LocalCounter> - <LocalCounter worker="16">149325</LocalCounter> - <LocalCounter worker="17">149325</LocalCounter> - <LocalCounter worker="18">149325</LocalCounter> - <LocalCounter worker="19">149326</LocalCounter> - <LocalCounter worker="20">149325</LocalCounter> - <LocalCounter worker="21">149326</LocalCounter> - <LocalCounter worker="22">149325</LocalCounter> - <LocalCounter worker="23">149325</LocalCounter> - <GlobalCounter>3583809</GlobalCounter> - <SumOfLocalCounter>3583809</SumOfLocalCounter> - </GlobalTicketLockWithGlobalCounter> - <GlobalMCSLockWithGlobalCounter activeWorker="24"> - <LocalCounter worker="0">219612</LocalCounter> - <LocalCounter worker="1">219612</LocalCounter> - <LocalCounter worker="2">219612</LocalCounter> - <LocalCounter worker="3">219612</LocalCounter> - <LocalCounter worker="4">219612</LocalCounter> - <LocalCounter worker="5">219612</LocalCounter> - <LocalCounter worker="6">219613</LocalCounter> - <LocalCounter worker="7">219612</LocalCounter> - <LocalCounter worker="8">219612</LocalCounter> - <LocalCounter worker="9">219614</LocalCounter> - <LocalCounter worker="10">219612</LocalCounter> - <LocalCounter worker="11">219611</LocalCounter> - <LocalCounter worker="12">219613</LocalCounter> - <LocalCounter worker="13">219614</LocalCounter> - <LocalCounter worker="14">219612</LocalCounter> - <LocalCounter worker="15">219612</LocalCounter> - <LocalCounter worker="16">219613</LocalCounter> - <LocalCounter worker="17">219613</LocalCounter> - <LocalCounter worker="18">219611</LocalCounter> - <LocalCounter worker="19">219612</LocalCounter> - <LocalCounter worker="20">219611</LocalCounter> - <LocalCounter worker="21">219612</LocalCounter> - <LocalCounter worker="22">219612</LocalCounter> - <LocalCounter worker="23">219613</LocalCounter> - <GlobalCounter>5270694</GlobalCounter> - <SumOfLocalCounter>5270694</SumOfLocalCounter> - </GlobalMCSLockWithGlobalCounter> - <LocalTicketLockWithLocalCounter activeWorker="1"> - <LocalCounter worker="0">17976591</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>17976591</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="2"> - <LocalCounter worker="0">17093434</LocalCounter> - <LocalCounter worker="1">17094750</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>34188184</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="3"> - <LocalCounter worker="0">16126005</LocalCounter> - <LocalCounter worker="1">16127191</LocalCounter> - <LocalCounter worker="2">16875254</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>49128450</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="4"> - <LocalCounter worker="0">15412620</LocalCounter> - <LocalCounter worker="1">15413887</LocalCounter> - <LocalCounter worker="2">15366643</LocalCounter> - <LocalCounter worker="3">15366578</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>61559728</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="5"> - <LocalCounter worker="0">16308721</LocalCounter> - <LocalCounter worker="1">16310021</LocalCounter> - <LocalCounter worker="2">16318960</LocalCounter> - <LocalCounter worker="3">16318983</LocalCounter> - <LocalCounter worker="4">16426938</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>81683623</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="6"> - <LocalCounter worker="0">15193884</LocalCounter> - <LocalCounter worker="1">15195117</LocalCounter> - <LocalCounter worker="2">15113407</LocalCounter> - <LocalCounter worker="3">15121476</LocalCounter> - <LocalCounter worker="4">15104027</LocalCounter> - <LocalCounter worker="5">15104373</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>90832284</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="7"> - <LocalCounter worker="0">15794728</LocalCounter> - <LocalCounter worker="1">15792858</LocalCounter> - <LocalCounter worker="2">15790710</LocalCounter> - <LocalCounter worker="3">15798703</LocalCounter> - <LocalCounter worker="4">15746011</LocalCounter> - <LocalCounter worker="5">15746393</LocalCounter> - <LocalCounter worker="6">15839713</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>110509116</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="8"> - <LocalCounter worker="0">14538979</LocalCounter> - <LocalCounter worker="1">14540011</LocalCounter> - <LocalCounter worker="2">14540067</LocalCounter> - <LocalCounter worker="3">14543590</LocalCounter> - <LocalCounter worker="4">14523331</LocalCounter> - <LocalCounter worker="5">14523800</LocalCounter> - <LocalCounter worker="6">14541196</LocalCounter> - <LocalCounter worker="7">14543759</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>116294733</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="9"> - <LocalCounter worker="0">14597172</LocalCounter> - <LocalCounter worker="1">14598178</LocalCounter> - <LocalCounter worker="2">14594621</LocalCounter> - <LocalCounter worker="3">14598190</LocalCounter> - <LocalCounter worker="4">14558148</LocalCounter> - <LocalCounter worker="5">14558565</LocalCounter> - <LocalCounter worker="6">14603981</LocalCounter> - <LocalCounter worker="7">14614317</LocalCounter> - <LocalCounter worker="8">18013252</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>134736424</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="10"> - <LocalCounter worker="0">14529346</LocalCounter> - <LocalCounter worker="1">14530425</LocalCounter> - <LocalCounter worker="2">14525274</LocalCounter> - <LocalCounter worker="3">14530395</LocalCounter> - <LocalCounter worker="4">14501600</LocalCounter> - <LocalCounter worker="5">14501959</LocalCounter> - <LocalCounter worker="6">14539379</LocalCounter> - <LocalCounter worker="7">14546701</LocalCounter> - <LocalCounter worker="8">16764576</LocalCounter> - <LocalCounter worker="9">16764953</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>149734608</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="11"> - <LocalCounter worker="0">14552313</LocalCounter> - <LocalCounter worker="1">14545774</LocalCounter> - <LocalCounter worker="2">14543859</LocalCounter> - <LocalCounter worker="3">14545590</LocalCounter> - <LocalCounter worker="4">14521699</LocalCounter> - <LocalCounter worker="5">14522178</LocalCounter> - <LocalCounter worker="6">14548350</LocalCounter> - <LocalCounter worker="7">14554882</LocalCounter> - <LocalCounter worker="8">15834293</LocalCounter> - <LocalCounter worker="9">15834734</LocalCounter> - <LocalCounter worker="10">16861946</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>164865618</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="12"> - <LocalCounter worker="0">14544735</LocalCounter> - <LocalCounter worker="1">14545749</LocalCounter> - <LocalCounter worker="2">14545348</LocalCounter> - <LocalCounter worker="3">14545729</LocalCounter> - <LocalCounter worker="4">14531175</LocalCounter> - <LocalCounter worker="5">14531582</LocalCounter> - <LocalCounter worker="6">14545221</LocalCounter> - <LocalCounter worker="7">14552316</LocalCounter> - <LocalCounter worker="8">15709806</LocalCounter> - <LocalCounter worker="9">15710183</LocalCounter> - <LocalCounter worker="10">15613298</LocalCounter> - <LocalCounter worker="11">15613336</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>178988478</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="13"> - <LocalCounter worker="0">14631943</LocalCounter> - <LocalCounter worker="1">14629081</LocalCounter> - <LocalCounter worker="2">14626428</LocalCounter> - <LocalCounter worker="3">14629173</LocalCounter> - <LocalCounter worker="4">14592751</LocalCounter> - <LocalCounter worker="5">14593171</LocalCounter> - <LocalCounter worker="6">14633428</LocalCounter> - <LocalCounter worker="7">14642988</LocalCounter> - <LocalCounter worker="8">16103014</LocalCounter> - <LocalCounter worker="9">16103498</LocalCounter> - <LocalCounter worker="10">16121344</LocalCounter> - <LocalCounter worker="11">16121522</LocalCounter> - <LocalCounter worker="12">16592935</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>198021276</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="14"> - <LocalCounter worker="0">14663977</LocalCounter> - <LocalCounter worker="1">14657392</LocalCounter> - <LocalCounter worker="2">14653868</LocalCounter> - <LocalCounter worker="3">14657385</LocalCounter> - <LocalCounter worker="4">14618995</LocalCounter> - <LocalCounter worker="5">14619260</LocalCounter> - <LocalCounter worker="6">14663280</LocalCounter> - <LocalCounter worker="7">14669006</LocalCounter> - <LocalCounter worker="8">14932649</LocalCounter> - <LocalCounter worker="9">14933133</LocalCounter> - <LocalCounter worker="10">14914884</LocalCounter> - <LocalCounter worker="11">14922839</LocalCounter> - <LocalCounter worker="12">14912239</LocalCounter> - <LocalCounter worker="13">14912618</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>206731525</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="15"> - <LocalCounter worker="0">14574685</LocalCounter> - <LocalCounter worker="1">14571820</LocalCounter> - <LocalCounter worker="2">14569180</LocalCounter> - <LocalCounter worker="3">14571882</LocalCounter> - <LocalCounter worker="4">14535038</LocalCounter> - <LocalCounter worker="5">14535448</LocalCounter> - <LocalCounter worker="6">14576273</LocalCounter> - <LocalCounter worker="7">14588007</LocalCounter> - <LocalCounter worker="8">15847051</LocalCounter> - <LocalCounter worker="9">15847907</LocalCounter> - <LocalCounter worker="10">15842926</LocalCounter> - <LocalCounter worker="11">15845292</LocalCounter> - <LocalCounter worker="12">15844741</LocalCounter> - <LocalCounter worker="13">15845144</LocalCounter> - <LocalCounter worker="14">15858663</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>227454057</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="16"> - <LocalCounter worker="0">14565742</LocalCounter> - <LocalCounter worker="1">14566794</LocalCounter> - <LocalCounter worker="2">14563059</LocalCounter> - <LocalCounter worker="3">14566698</LocalCounter> - <LocalCounter worker="4">14539138</LocalCounter> - <LocalCounter worker="5">14539550</LocalCounter> - <LocalCounter worker="6">14572545</LocalCounter> - <LocalCounter worker="7">14582815</LocalCounter> - <LocalCounter worker="8">14708684</LocalCounter> - <LocalCounter worker="9">14709444</LocalCounter> - <LocalCounter worker="10">14704986</LocalCounter> - <LocalCounter worker="11">14705363</LocalCounter> - <LocalCounter worker="12">14739299</LocalCounter> - <LocalCounter worker="13">14739959</LocalCounter> - <LocalCounter worker="14">14685047</LocalCounter> - <LocalCounter worker="15">14684929</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>234174052</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="17"> - <LocalCounter worker="0">14578846</LocalCounter> - <LocalCounter worker="1">14579881</LocalCounter> - <LocalCounter worker="2">14577981</LocalCounter> - <LocalCounter worker="3">14579886</LocalCounter> - <LocalCounter worker="4">14572709</LocalCounter> - <LocalCounter worker="5">14573049</LocalCounter> - <LocalCounter worker="6">14582536</LocalCounter> - <LocalCounter worker="7">14584350</LocalCounter> - <LocalCounter worker="8">15007742</LocalCounter> - <LocalCounter worker="9">15008395</LocalCounter> - <LocalCounter worker="10">15007420</LocalCounter> - <LocalCounter worker="11">15007658</LocalCounter> - <LocalCounter worker="12">15014167</LocalCounter> - <LocalCounter worker="13">15014785</LocalCounter> - <LocalCounter worker="14">15005244</LocalCounter> - <LocalCounter worker="15">15005419</LocalCounter> - <LocalCounter worker="16">18174844</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>254874912</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="18"> - <LocalCounter worker="0">14520800</LocalCounter> - <LocalCounter worker="1">14521760</LocalCounter> - <LocalCounter worker="2">14516500</LocalCounter> - <LocalCounter worker="3">14519179</LocalCounter> - <LocalCounter worker="4">14488245</LocalCounter> - <LocalCounter worker="5">14488682</LocalCounter> - <LocalCounter worker="6">14533956</LocalCounter> - <LocalCounter worker="7">14545682</LocalCounter> - <LocalCounter worker="8">14854184</LocalCounter> - <LocalCounter worker="9">14854859</LocalCounter> - <LocalCounter worker="10">14853940</LocalCounter> - <LocalCounter worker="11">14854226</LocalCounter> - <LocalCounter worker="12">14853922</LocalCounter> - <LocalCounter worker="13">14854597</LocalCounter> - <LocalCounter worker="14">14853928</LocalCounter> - <LocalCounter worker="15">14854269</LocalCounter> - <LocalCounter worker="16">16695502</LocalCounter> - <LocalCounter worker="17">16695771</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>268360002</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="19"> - <LocalCounter worker="0">14767102</LocalCounter> - <LocalCounter worker="1">14756811</LocalCounter> - <LocalCounter worker="2">14754774</LocalCounter> - <LocalCounter worker="3">14756725</LocalCounter> - <LocalCounter worker="4">14720166</LocalCounter> - <LocalCounter worker="5">14720526</LocalCounter> - <LocalCounter worker="6">14759446</LocalCounter> - <LocalCounter worker="7">14768164</LocalCounter> - <LocalCounter worker="8">15010901</LocalCounter> - <LocalCounter worker="9">15011570</LocalCounter> - <LocalCounter worker="10">15010636</LocalCounter> - <LocalCounter worker="11">15010954</LocalCounter> - <LocalCounter worker="12">15010667</LocalCounter> - <LocalCounter worker="13">15011279</LocalCounter> - <LocalCounter worker="14">15010747</LocalCounter> - <LocalCounter worker="15">15011090</LocalCounter> - <LocalCounter worker="16">16740850</LocalCounter> - <LocalCounter worker="17">16741140</LocalCounter> - <LocalCounter worker="18">16740556</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>288314104</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="20"> - <LocalCounter worker="0">14503694</LocalCounter> - <LocalCounter worker="1">14504695</LocalCounter> - <LocalCounter worker="2">14504309</LocalCounter> - <LocalCounter worker="3">14504656</LocalCounter> - <LocalCounter worker="4">14481517</LocalCounter> - <LocalCounter worker="5">14481930</LocalCounter> - <LocalCounter worker="6">14504225</LocalCounter> - <LocalCounter worker="7">14511441</LocalCounter> - <LocalCounter worker="8">14881230</LocalCounter> - <LocalCounter worker="9">14881959</LocalCounter> - <LocalCounter worker="10">14880910</LocalCounter> - <LocalCounter worker="11">14881278</LocalCounter> - <LocalCounter worker="12">14881048</LocalCounter> - <LocalCounter worker="13">14881629</LocalCounter> - <LocalCounter worker="14">14881078</LocalCounter> - <LocalCounter worker="15">14881274</LocalCounter> - <LocalCounter worker="16">15921487</LocalCounter> - <LocalCounter worker="17">15921957</LocalCounter> - <LocalCounter worker="18">15772241</LocalCounter> - <LocalCounter worker="19">15772141</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>298434699</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="21"> - <LocalCounter worker="0">14585345</LocalCounter> - <LocalCounter worker="1">14586417</LocalCounter> - <LocalCounter worker="2">14584462</LocalCounter> - <LocalCounter worker="3">14586324</LocalCounter> - <LocalCounter worker="4">14561834</LocalCounter> - <LocalCounter worker="5">14562194</LocalCounter> - <LocalCounter worker="6">14589003</LocalCounter> - <LocalCounter worker="7">14593127</LocalCounter> - <LocalCounter worker="8">14651792</LocalCounter> - <LocalCounter worker="9">14652414</LocalCounter> - <LocalCounter worker="10">14651588</LocalCounter> - <LocalCounter worker="11">14651811</LocalCounter> - <LocalCounter worker="12">14651560</LocalCounter> - <LocalCounter worker="13">14652081</LocalCounter> - <LocalCounter worker="14">14651657</LocalCounter> - <LocalCounter worker="15">14651849</LocalCounter> - <LocalCounter worker="16">15956242</LocalCounter> - <LocalCounter worker="17">15956591</LocalCounter> - <LocalCounter worker="18">15917381</LocalCounter> - <LocalCounter worker="19">15917342</LocalCounter> - <LocalCounter worker="20">16692459</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>314303473</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="22"> - <LocalCounter worker="0">14567398</LocalCounter> - <LocalCounter worker="1">14564632</LocalCounter> - <LocalCounter worker="2">14561858</LocalCounter> - <LocalCounter worker="3">14564593</LocalCounter> - <LocalCounter worker="4">14537808</LocalCounter> - <LocalCounter worker="5">14538183</LocalCounter> - <LocalCounter worker="6">14568901</LocalCounter> - <LocalCounter worker="7">14571570</LocalCounter> - <LocalCounter worker="8">14824939</LocalCounter> - <LocalCounter worker="9">14825595</LocalCounter> - <LocalCounter worker="10">14824563</LocalCounter> - <LocalCounter worker="11">14824936</LocalCounter> - <LocalCounter worker="12">14824664</LocalCounter> - <LocalCounter worker="13">14825180</LocalCounter> - <LocalCounter worker="14">14824622</LocalCounter> - <LocalCounter worker="15">14824869</LocalCounter> - <LocalCounter worker="16">15000394</LocalCounter> - <LocalCounter worker="17">15000816</LocalCounter> - <LocalCounter worker="18">15132415</LocalCounter> - <LocalCounter worker="19">15132390</LocalCounter> - <LocalCounter worker="20">14957113</LocalCounter> - <LocalCounter worker="21">14957467</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>325254906</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="23"> - <LocalCounter worker="0">14533130</LocalCounter> - <LocalCounter worker="1">14526680</LocalCounter> - <LocalCounter worker="2">14523900</LocalCounter> - <LocalCounter worker="3">14526694</LocalCounter> - <LocalCounter worker="4">14473827</LocalCounter> - <LocalCounter worker="5">14474177</LocalCounter> - <LocalCounter worker="6">14530917</LocalCounter> - <LocalCounter worker="7">14540399</LocalCounter> - <LocalCounter worker="8">14689348</LocalCounter> - <LocalCounter worker="9">14690045</LocalCounter> - <LocalCounter worker="10">14689080</LocalCounter> - <LocalCounter worker="11">14689352</LocalCounter> - <LocalCounter worker="12">14689191</LocalCounter> - <LocalCounter worker="13">14689822</LocalCounter> - <LocalCounter worker="14">14689153</LocalCounter> - <LocalCounter worker="15">14689383</LocalCounter> - <LocalCounter worker="16">15149225</LocalCounter> - <LocalCounter worker="17">15149721</LocalCounter> - <LocalCounter worker="18">15149099</LocalCounter> - <LocalCounter worker="19">15149020</LocalCounter> - <LocalCounter worker="20">15149087</LocalCounter> - <LocalCounter worker="21">15149374</LocalCounter> - <LocalCounter worker="22">15723066</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>340263690</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalTicketLockWithLocalCounter activeWorker="24"> - <LocalCounter worker="0">14520191</LocalCounter> - <LocalCounter worker="1">14521316</LocalCounter> - <LocalCounter worker="2">14520064</LocalCounter> - <LocalCounter worker="3">14521273</LocalCounter> - <LocalCounter worker="4">14508861</LocalCounter> - <LocalCounter worker="5">14509277</LocalCounter> - <LocalCounter worker="6">14522439</LocalCounter> - <LocalCounter worker="7">14523376</LocalCounter> - <LocalCounter worker="8">14971139</LocalCounter> - <LocalCounter worker="9">14971788</LocalCounter> - <LocalCounter worker="10">14970834</LocalCounter> - <LocalCounter worker="11">14971145</LocalCounter> - <LocalCounter worker="12">14970850</LocalCounter> - <LocalCounter worker="13">14971356</LocalCounter> - <LocalCounter worker="14">14970773</LocalCounter> - <LocalCounter worker="15">14971212</LocalCounter> - <LocalCounter worker="16">14302288</LocalCounter> - <LocalCounter worker="17">14302674</LocalCounter> - <LocalCounter worker="18">14292318</LocalCounter> - <LocalCounter worker="19">14292258</LocalCounter> - <LocalCounter worker="20">14327757</LocalCounter> - <LocalCounter worker="21">14328109</LocalCounter> - <LocalCounter worker="22">14203917</LocalCounter> - <LocalCounter worker="23">14204596</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>350169811</SumOfLocalCounter> - </LocalTicketLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="1"> - <LocalCounter worker="0">12082070</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>12082070</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="2"> - <LocalCounter worker="0">11860565</LocalCounter> - <LocalCounter worker="1">11861524</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>23722089</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="3"> - <LocalCounter worker="0">10937185</LocalCounter> - <LocalCounter worker="1">11666176</LocalCounter> - <LocalCounter worker="2">11377885</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>33981246</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="4"> - <LocalCounter worker="0">10711169</LocalCounter> - <LocalCounter worker="1">11044642</LocalCounter> - <LocalCounter worker="2">10712186</LocalCounter> - <LocalCounter worker="3">10711772</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>43179769</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="5"> - <LocalCounter worker="0">10681736</LocalCounter> - <LocalCounter worker="1">10803241</LocalCounter> - <LocalCounter worker="2">10697774</LocalCounter> - <LocalCounter worker="3">10697365</LocalCounter> - <LocalCounter worker="4">10786731</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>53666847</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="6"> - <LocalCounter worker="0">10202899</LocalCounter> - <LocalCounter worker="1">10453899</LocalCounter> - <LocalCounter worker="2">10236078</LocalCounter> - <LocalCounter worker="3">10235641</LocalCounter> - <LocalCounter worker="4">10203405</LocalCounter> - <LocalCounter worker="5">10435466</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>61767388</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="7"> - <LocalCounter worker="0">10057432</LocalCounter> - <LocalCounter worker="1">10126310</LocalCounter> - <LocalCounter worker="2">10062880</LocalCounter> - <LocalCounter worker="3">10062441</LocalCounter> - <LocalCounter worker="4">10056560</LocalCounter> - <LocalCounter worker="5">10117801</LocalCounter> - <LocalCounter worker="6">10136814</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>70620238</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="8"> - <LocalCounter worker="0">9534620</LocalCounter> - <LocalCounter worker="1">9563972</LocalCounter> - <LocalCounter worker="2">9529566</LocalCounter> - <LocalCounter worker="3">9529136</LocalCounter> - <LocalCounter worker="4">9534974</LocalCounter> - <LocalCounter worker="5">9559121</LocalCounter> - <LocalCounter worker="6">9532504</LocalCounter> - <LocalCounter worker="7">9532098</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>76315991</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="9"> - <LocalCounter worker="0">9588196</LocalCounter> - <LocalCounter worker="1">9644812</LocalCounter> - <LocalCounter worker="2">9569541</LocalCounter> - <LocalCounter worker="3">9569144</LocalCounter> - <LocalCounter worker="4">9588269</LocalCounter> - <LocalCounter worker="5">9635446</LocalCounter> - <LocalCounter worker="6">9587520</LocalCounter> - <LocalCounter worker="7">9587124</LocalCounter> - <LocalCounter worker="8">12171038</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>88941090</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="10"> - <LocalCounter worker="0">9494406</LocalCounter> - <LocalCounter worker="1">9569092</LocalCounter> - <LocalCounter worker="2">9483166</LocalCounter> - <LocalCounter worker="3">9482828</LocalCounter> - <LocalCounter worker="4">9494096</LocalCounter> - <LocalCounter worker="5">9549855</LocalCounter> - <LocalCounter worker="6">9493566</LocalCounter> - <LocalCounter worker="7">9493228</LocalCounter> - <LocalCounter worker="8">11870461</LocalCounter> - <LocalCounter worker="9">11870751</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>99801449</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="11"> - <LocalCounter worker="0">9547513</LocalCounter> - <LocalCounter worker="1">9618639</LocalCounter> - <LocalCounter worker="2">9531079</LocalCounter> - <LocalCounter worker="3">9530708</LocalCounter> - <LocalCounter worker="4">9544013</LocalCounter> - <LocalCounter worker="5">9582528</LocalCounter> - <LocalCounter worker="6">9546188</LocalCounter> - <LocalCounter worker="7">9545855</LocalCounter> - <LocalCounter worker="8">10981480</LocalCounter> - <LocalCounter worker="9">11695200</LocalCounter> - <LocalCounter worker="10">11417956</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>110541159</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="12"> - <LocalCounter worker="0">9480940</LocalCounter> - <LocalCounter worker="1">9534711</LocalCounter> - <LocalCounter worker="2">9471781</LocalCounter> - <LocalCounter worker="3">9471472</LocalCounter> - <LocalCounter worker="4">9481875</LocalCounter> - <LocalCounter worker="5">9525995</LocalCounter> - <LocalCounter worker="6">9478339</LocalCounter> - <LocalCounter worker="7">9478029</LocalCounter> - <LocalCounter worker="8">10711265</LocalCounter> - <LocalCounter worker="9">11114755</LocalCounter> - <LocalCounter worker="10">10711627</LocalCounter> - <LocalCounter worker="11">10711294</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>119172083</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="13"> - <LocalCounter worker="0">9546022</LocalCounter> - <LocalCounter worker="1">9587726</LocalCounter> - <LocalCounter worker="2">9539512</LocalCounter> - <LocalCounter worker="3">9539112</LocalCounter> - <LocalCounter worker="4">9546798</LocalCounter> - <LocalCounter worker="5">9572802</LocalCounter> - <LocalCounter worker="6">9547437</LocalCounter> - <LocalCounter worker="7">9547014</LocalCounter> - <LocalCounter worker="8">10700918</LocalCounter> - <LocalCounter worker="9">10778357</LocalCounter> - <LocalCounter worker="10">10711682</LocalCounter> - <LocalCounter worker="11">10711355</LocalCounter> - <LocalCounter worker="12">10766560</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>130095295</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="14"> - <LocalCounter worker="0">9529110</LocalCounter> - <LocalCounter worker="1">9587899</LocalCounter> - <LocalCounter worker="2">9523029</LocalCounter> - <LocalCounter worker="3">9522600</LocalCounter> - <LocalCounter worker="4">9529393</LocalCounter> - <LocalCounter worker="5">9562307</LocalCounter> - <LocalCounter worker="6">9531767</LocalCounter> - <LocalCounter worker="7">9531364</LocalCounter> - <LocalCounter worker="8">10124795</LocalCounter> - <LocalCounter worker="9">10538492</LocalCounter> - <LocalCounter worker="10">10167869</LocalCounter> - <LocalCounter worker="11">10167494</LocalCounter> - <LocalCounter worker="12">10101866</LocalCounter> - <LocalCounter worker="13">10500389</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>137918374</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="15"> - <LocalCounter worker="0">9566449</LocalCounter> - <LocalCounter worker="1">9604833</LocalCounter> - <LocalCounter worker="2">9559288</LocalCounter> - <LocalCounter worker="3">9558898</LocalCounter> - <LocalCounter worker="4">9567098</LocalCounter> - <LocalCounter worker="5">9599387</LocalCounter> - <LocalCounter worker="6">9566496</LocalCounter> - <LocalCounter worker="7">9566147</LocalCounter> - <LocalCounter worker="8">10075047</LocalCounter> - <LocalCounter worker="9">10164135</LocalCounter> - <LocalCounter worker="10">10082703</LocalCounter> - <LocalCounter worker="11">10082326</LocalCounter> - <LocalCounter worker="12">10075244</LocalCounter> - <LocalCounter worker="13">10155140</LocalCounter> - <LocalCounter worker="14">10178314</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>147401505</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="16"> - <LocalCounter worker="0">9508977</LocalCounter> - <LocalCounter worker="1">9585956</LocalCounter> - <LocalCounter worker="2">9501428</LocalCounter> - <LocalCounter worker="3">9501014</LocalCounter> - <LocalCounter worker="4">9508465</LocalCounter> - <LocalCounter worker="5">9556360</LocalCounter> - <LocalCounter worker="6">9512315</LocalCounter> - <LocalCounter worker="7">9511916</LocalCounter> - <LocalCounter worker="8">9534416</LocalCounter> - <LocalCounter worker="9">9549972</LocalCounter> - <LocalCounter worker="10">9531251</LocalCounter> - <LocalCounter worker="11">9530849</LocalCounter> - <LocalCounter worker="12">9535299</LocalCounter> - <LocalCounter worker="13">9547690</LocalCounter> - <LocalCounter worker="14">9533669</LocalCounter> - <LocalCounter worker="15">9533330</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>152482907</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="17"> - <LocalCounter worker="0">9456577</LocalCounter> - <LocalCounter worker="1">9518572</LocalCounter> - <LocalCounter worker="2">9448329</LocalCounter> - <LocalCounter worker="3">9447904</LocalCounter> - <LocalCounter worker="4">9456755</LocalCounter> - <LocalCounter worker="5">9492156</LocalCounter> - <LocalCounter worker="6">9456619</LocalCounter> - <LocalCounter worker="7">9456290</LocalCounter> - <LocalCounter worker="8">9469695</LocalCounter> - <LocalCounter worker="9">9504090</LocalCounter> - <LocalCounter worker="10">9467165</LocalCounter> - <LocalCounter worker="11">9466779</LocalCounter> - <LocalCounter worker="12">9469736</LocalCounter> - <LocalCounter worker="13">9490753</LocalCounter> - <LocalCounter worker="14">9470460</LocalCounter> - <LocalCounter worker="15">9470100</LocalCounter> - <LocalCounter worker="16">12081737</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>163623717</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="18"> - <LocalCounter worker="0">9528572</LocalCounter> - <LocalCounter worker="1">9578324</LocalCounter> - <LocalCounter worker="2">9512159</LocalCounter> - <LocalCounter worker="3">9511743</LocalCounter> - <LocalCounter worker="4">9526173</LocalCounter> - <LocalCounter worker="5">9569951</LocalCounter> - <LocalCounter worker="6">9534866</LocalCounter> - <LocalCounter worker="7">9534526</LocalCounter> - <LocalCounter worker="8">9544758</LocalCounter> - <LocalCounter worker="9">9593215</LocalCounter> - <LocalCounter worker="10">9539533</LocalCounter> - <LocalCounter worker="11">9539119</LocalCounter> - <LocalCounter worker="12">9545198</LocalCounter> - <LocalCounter worker="13">9585695</LocalCounter> - <LocalCounter worker="14">9543578</LocalCounter> - <LocalCounter worker="15">9543186</LocalCounter> - <LocalCounter worker="16">11927396</LocalCounter> - <LocalCounter worker="17">11927804</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>176585796</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="19"> - <LocalCounter worker="0">9477447</LocalCounter> - <LocalCounter worker="1">9564597</LocalCounter> - <LocalCounter worker="2">9452396</LocalCounter> - <LocalCounter worker="3">9451981</LocalCounter> - <LocalCounter worker="4">9473225</LocalCounter> - <LocalCounter worker="5">9533594</LocalCounter> - <LocalCounter worker="6">9478730</LocalCounter> - <LocalCounter worker="7">9478355</LocalCounter> - <LocalCounter worker="8">9491282</LocalCounter> - <LocalCounter worker="9">9542542</LocalCounter> - <LocalCounter worker="10">9469974</LocalCounter> - <LocalCounter worker="11">9469570</LocalCounter> - <LocalCounter worker="12">9488649</LocalCounter> - <LocalCounter worker="13">9533937</LocalCounter> - <LocalCounter worker="14">9493941</LocalCounter> - <LocalCounter worker="15">9493595</LocalCounter> - <LocalCounter worker="16">10869069</LocalCounter> - <LocalCounter worker="17">11610326</LocalCounter> - <LocalCounter worker="18">11333158</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>185706368</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="20"> - <LocalCounter worker="0">9513336</LocalCounter> - <LocalCounter worker="1">9581580</LocalCounter> - <LocalCounter worker="2">9502256</LocalCounter> - <LocalCounter worker="3">9501888</LocalCounter> - <LocalCounter worker="4">9514403</LocalCounter> - <LocalCounter worker="5">9561923</LocalCounter> - <LocalCounter worker="6">9510586</LocalCounter> - <LocalCounter worker="7">9510218</LocalCounter> - <LocalCounter worker="8">9577756</LocalCounter> - <LocalCounter worker="9">9601845</LocalCounter> - <LocalCounter worker="10">9576720</LocalCounter> - <LocalCounter worker="11">9576333</LocalCounter> - <LocalCounter worker="12">9576562</LocalCounter> - <LocalCounter worker="13">9591627</LocalCounter> - <LocalCounter worker="14">9575875</LocalCounter> - <LocalCounter worker="15">9575454</LocalCounter> - <LocalCounter worker="16">10774344</LocalCounter> - <LocalCounter worker="17">11131500</LocalCounter> - <LocalCounter worker="18">10795173</LocalCounter> - <LocalCounter worker="19">10794817</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>196344196</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="21"> - <LocalCounter worker="0">9489784</LocalCounter> - <LocalCounter worker="1">9553505</LocalCounter> - <LocalCounter worker="2">9480407</LocalCounter> - <LocalCounter worker="3">9480031</LocalCounter> - <LocalCounter worker="4">9487187</LocalCounter> - <LocalCounter worker="5">9517609</LocalCounter> - <LocalCounter worker="6">9490215</LocalCounter> - <LocalCounter worker="7">9489795</LocalCounter> - <LocalCounter worker="8">9480100</LocalCounter> - <LocalCounter worker="9">9512956</LocalCounter> - <LocalCounter worker="10">9469789</LocalCounter> - <LocalCounter worker="11">9469408</LocalCounter> - <LocalCounter worker="12">9478224</LocalCounter> - <LocalCounter worker="13">9507407</LocalCounter> - <LocalCounter worker="14">9480884</LocalCounter> - <LocalCounter worker="15">9480522</LocalCounter> - <LocalCounter worker="16">10558463</LocalCounter> - <LocalCounter worker="17">10781768</LocalCounter> - <LocalCounter worker="18">10586536</LocalCounter> - <LocalCounter worker="19">10586157</LocalCounter> - <LocalCounter worker="20">10751665</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>205132412</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="22"> - <LocalCounter worker="0">9529280</LocalCounter> - <LocalCounter worker="1">9596479</LocalCounter> - <LocalCounter worker="2">9526225</LocalCounter> - <LocalCounter worker="3">9525841</LocalCounter> - <LocalCounter worker="4">9530068</LocalCounter> - <LocalCounter worker="5">9560604</LocalCounter> - <LocalCounter worker="6">9526967</LocalCounter> - <LocalCounter worker="7">9526692</LocalCounter> - <LocalCounter worker="8">9535973</LocalCounter> - <LocalCounter worker="9">9579641</LocalCounter> - <LocalCounter worker="10">9521811</LocalCounter> - <LocalCounter worker="11">9521452</LocalCounter> - <LocalCounter worker="12">9533157</LocalCounter> - <LocalCounter worker="13">9572320</LocalCounter> - <LocalCounter worker="14">9537636</LocalCounter> - <LocalCounter worker="15">9537265</LocalCounter> - <LocalCounter worker="16">10282870</LocalCounter> - <LocalCounter worker="17">10460861</LocalCounter> - <LocalCounter worker="18">10307364</LocalCounter> - <LocalCounter worker="19">10307036</LocalCounter> - <LocalCounter worker="20">10284193</LocalCounter> - <LocalCounter worker="21">10447335</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>214751070</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="23"> - <LocalCounter worker="0">9474195</LocalCounter> - <LocalCounter worker="1">9526351</LocalCounter> - <LocalCounter worker="2">9466045</LocalCounter> - <LocalCounter worker="3">9465650</LocalCounter> - <LocalCounter worker="4">9474273</LocalCounter> - <LocalCounter worker="5">9509635</LocalCounter> - <LocalCounter worker="6">9475163</LocalCounter> - <LocalCounter worker="7">9474803</LocalCounter> - <LocalCounter worker="8">9527687</LocalCounter> - <LocalCounter worker="9">9582242</LocalCounter> - <LocalCounter worker="10">9516774</LocalCounter> - <LocalCounter worker="11">9516407</LocalCounter> - <LocalCounter worker="12">9526734</LocalCounter> - <LocalCounter worker="13">9556254</LocalCounter> - <LocalCounter worker="14">9528842</LocalCounter> - <LocalCounter worker="15">9528456</LocalCounter> - <LocalCounter worker="16">9971596</LocalCounter> - <LocalCounter worker="17">10094615</LocalCounter> - <LocalCounter worker="18">9984885</LocalCounter> - <LocalCounter worker="19">9984498</LocalCounter> - <LocalCounter worker="20">9969546</LocalCounter> - <LocalCounter worker="21">10080306</LocalCounter> - <LocalCounter worker="22">10113352</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>222348309</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalMCSLockWithLocalCounter activeWorker="24"> - <LocalCounter worker="0">9570183</LocalCounter> - <LocalCounter worker="1">9596856</LocalCounter> - <LocalCounter worker="2">9566396</LocalCounter> - <LocalCounter worker="3">9565955</LocalCounter> - <LocalCounter worker="4">9570347</LocalCounter> - <LocalCounter worker="5">9592890</LocalCounter> - <LocalCounter worker="6">9571708</LocalCounter> - <LocalCounter worker="7">9571344</LocalCounter> - <LocalCounter worker="8">9568931</LocalCounter> - <LocalCounter worker="9">9609557</LocalCounter> - <LocalCounter worker="10">9562498</LocalCounter> - <LocalCounter worker="11">9562127</LocalCounter> - <LocalCounter worker="12">9567335</LocalCounter> - <LocalCounter worker="13">9602518</LocalCounter> - <LocalCounter worker="14">9566096</LocalCounter> - <LocalCounter worker="15">9565736</LocalCounter> - <LocalCounter worker="16">9608409</LocalCounter> - <LocalCounter worker="17">9631716</LocalCounter> - <LocalCounter worker="18">9604886</LocalCounter> - <LocalCounter worker="19">9604505</LocalCounter> - <LocalCounter worker="20">9607807</LocalCounter> - <LocalCounter worker="21">9629640</LocalCounter> - <LocalCounter worker="22">9603907</LocalCounter> - <LocalCounter worker="23">9629626</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>230130973</SumOfLocalCounter> - </LocalMCSLockWithLocalCounter> - <LocalTicketLockWithGlobalCounter activeWorker="24"> - <LocalCounter worker="0">903446</LocalCounter> - <LocalCounter worker="1">903762</LocalCounter> - <LocalCounter worker="2">903658</LocalCounter> - <LocalCounter worker="3">903679</LocalCounter> - <LocalCounter worker="4">903658</LocalCounter> - <LocalCounter worker="5">903690</LocalCounter> - <LocalCounter worker="6">903665</LocalCounter> - <LocalCounter worker="7">903667</LocalCounter> - <LocalCounter worker="8">905432</LocalCounter> - <LocalCounter worker="9">905463</LocalCounter> - <LocalCounter worker="10">905415</LocalCounter> - <LocalCounter worker="11">905426</LocalCounter> - <LocalCounter worker="12">905442</LocalCounter> - <LocalCounter worker="13">905442</LocalCounter> - <LocalCounter worker="14">905434</LocalCounter> - <LocalCounter worker="15">905417</LocalCounter> - <LocalCounter worker="16">902746</LocalCounter> - <LocalCounter worker="17">902734</LocalCounter> - <LocalCounter worker="18">902731</LocalCounter> - <LocalCounter worker="19">902719</LocalCounter> - <LocalCounter worker="20">902734</LocalCounter> - <LocalCounter worker="21">902750</LocalCounter> - <LocalCounter worker="22">902746</LocalCounter> - <LocalCounter worker="23">902708</LocalCounter> - <GlobalCounter>2057722</GlobalCounter> - <SumOfLocalCounter>21694564</SumOfLocalCounter> - </LocalTicketLockWithGlobalCounter> - <LocalMCSLockWithGlobalCounter activeWorker="24"> - <LocalCounter worker="0">859801</LocalCounter> - <LocalCounter worker="1">967785</LocalCounter> - <LocalCounter worker="2">883645</LocalCounter> - <LocalCounter worker="3">883619</LocalCounter> - <LocalCounter worker="4">860037</LocalCounter> - <LocalCounter worker="5">968025</LocalCounter> - <LocalCounter worker="6">883058</LocalCounter> - <LocalCounter worker="7">883016</LocalCounter> - <LocalCounter worker="8">865337</LocalCounter> - <LocalCounter worker="9">974824</LocalCounter> - <LocalCounter worker="10">882369</LocalCounter> - <LocalCounter worker="11">882341</LocalCounter> - <LocalCounter worker="12">863544</LocalCounter> - <LocalCounter worker="13">972159</LocalCounter> - <LocalCounter worker="14">892721</LocalCounter> - <LocalCounter worker="15">892715</LocalCounter> - <LocalCounter worker="16">857049</LocalCounter> - <LocalCounter worker="17">963725</LocalCounter> - <LocalCounter worker="18">880627</LocalCounter> - <LocalCounter worker="19">880584</LocalCounter> - <LocalCounter worker="20">856853</LocalCounter> - <LocalCounter worker="21">963380</LocalCounter> - <LocalCounter worker="22">854026</LocalCounter> - <LocalCounter worker="23">952345</LocalCounter> - <GlobalCounter>1763851</GlobalCounter> - <SumOfLocalCounter>21623585</SumOfLocalCounter> - </LocalMCSLockWithGlobalCounter> - <GlobalTicketLockWithBusySection activeWorker="24"> - <LocalCounter worker="0">122500</LocalCounter> - <LocalCounter worker="1">122500</LocalCounter> - <LocalCounter worker="2">122500</LocalCounter> - <LocalCounter worker="3">122500</LocalCounter> - <LocalCounter worker="4">122499</LocalCounter> - <LocalCounter worker="5">122500</LocalCounter> - <LocalCounter worker="6">122500</LocalCounter> - <LocalCounter worker="7">122500</LocalCounter> - <LocalCounter worker="8">122500</LocalCounter> - <LocalCounter worker="9">122500</LocalCounter> - <LocalCounter worker="10">122500</LocalCounter> - <LocalCounter worker="11">122500</LocalCounter> - <LocalCounter worker="12">122500</LocalCounter> - <LocalCounter worker="13">122500</LocalCounter> - <LocalCounter worker="14">122500</LocalCounter> - <LocalCounter worker="15">122500</LocalCounter> - <LocalCounter worker="16">122499</LocalCounter> - <LocalCounter worker="17">122501</LocalCounter> - <LocalCounter worker="18">122500</LocalCounter> - <LocalCounter worker="19">122500</LocalCounter> - <LocalCounter worker="20">122501</LocalCounter> - <LocalCounter worker="21">122501</LocalCounter> - <LocalCounter worker="22">122501</LocalCounter> - <LocalCounter worker="23">122501</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2940003</SumOfLocalCounter> - </GlobalTicketLockWithBusySection> - <GlobalMCSLockWithBusySection activeWorker="24"> - <LocalCounter worker="0">109856</LocalCounter> - <LocalCounter worker="1">109857</LocalCounter> - <LocalCounter worker="2">109857</LocalCounter> - <LocalCounter worker="3">109856</LocalCounter> - <LocalCounter worker="4">109857</LocalCounter> - <LocalCounter worker="5">109856</LocalCounter> - <LocalCounter worker="6">109857</LocalCounter> - <LocalCounter worker="7">109857</LocalCounter> - <LocalCounter worker="8">109856</LocalCounter> - <LocalCounter worker="9">109856</LocalCounter> - <LocalCounter worker="10">109857</LocalCounter> - <LocalCounter worker="11">109858</LocalCounter> - <LocalCounter worker="12">109858</LocalCounter> - <LocalCounter worker="13">109857</LocalCounter> - <LocalCounter worker="14">109856</LocalCounter> - <LocalCounter worker="15">109856</LocalCounter> - <LocalCounter worker="16">109858</LocalCounter> - <LocalCounter worker="17">109857</LocalCounter> - <LocalCounter worker="18">109857</LocalCounter> - <LocalCounter worker="19">109857</LocalCounter> - <LocalCounter worker="20">109856</LocalCounter> - <LocalCounter worker="21">109857</LocalCounter> - <LocalCounter worker="22">109856</LocalCounter> - <LocalCounter worker="23">109857</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2636562</SumOfLocalCounter> - </GlobalMCSLockWithBusySection> - <SequenceLock activeWorker="24"> - <LocalCounter worker="0">2443697</LocalCounter> - <LocalCounter worker="1">1</LocalCounter> - <LocalCounter worker="2">11</LocalCounter> - <LocalCounter worker="3">19</LocalCounter> - <LocalCounter worker="4">34</LocalCounter> - <LocalCounter worker="5">4</LocalCounter> - <LocalCounter worker="6">11</LocalCounter> - <LocalCounter worker="7">27</LocalCounter> - <LocalCounter worker="8">738</LocalCounter> - <LocalCounter worker="9">715</LocalCounter> - <LocalCounter worker="10">708</LocalCounter> - <LocalCounter worker="11">710</LocalCounter> - <LocalCounter worker="12">716</LocalCounter> - <LocalCounter worker="13">722</LocalCounter> - <LocalCounter worker="14">663</LocalCounter> - <LocalCounter worker="15">680</LocalCounter> - <LocalCounter worker="16">818</LocalCounter> - <LocalCounter worker="17">816</LocalCounter> - <LocalCounter worker="18">798</LocalCounter> - <LocalCounter worker="19">793</LocalCounter> - <LocalCounter worker="20">749</LocalCounter> - <LocalCounter worker="21">737</LocalCounter> - <LocalCounter worker="22">681</LocalCounter> - <LocalCounter worker="23">713</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2455561</SumOfLocalCounter> - </SequenceLock> - <GlobalTASLockWithLocalCounter activeWorker="1"> - <LocalCounter worker="0">19899718</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>19899718</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="2"> - <LocalCounter worker="0">11323121</LocalCounter> - <LocalCounter worker="1">8390566</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>19713687</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="3"> - <LocalCounter worker="0">3505442</LocalCounter> - <LocalCounter worker="1">3505599</LocalCounter> - <LocalCounter worker="2">12137521</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>19148562</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="4"> - <LocalCounter worker="0">3973366</LocalCounter> - <LocalCounter worker="1">3973543</LocalCounter> - <LocalCounter worker="2">5643661</LocalCounter> - <LocalCounter worker="3">5644098</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>19234668</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="5"> - <LocalCounter worker="0">3605358</LocalCounter> - <LocalCounter worker="1">3605432</LocalCounter> - <LocalCounter worker="2">5184535</LocalCounter> - <LocalCounter worker="3">5184801</LocalCounter> - <LocalCounter worker="4">1514959</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>19095085</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="6"> - <LocalCounter worker="0">3062204</LocalCounter> - <LocalCounter worker="1">3061638</LocalCounter> - <LocalCounter worker="2">2657329</LocalCounter> - <LocalCounter worker="3">2657997</LocalCounter> - <LocalCounter worker="4">3694149</LocalCounter> - <LocalCounter worker="5">3693569</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>18826886</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="7"> - <LocalCounter worker="0">1413952</LocalCounter> - <LocalCounter worker="1">1413322</LocalCounter> - <LocalCounter worker="2">5634774</LocalCounter> - <LocalCounter worker="3">5634907</LocalCounter> - <LocalCounter worker="4">807079</LocalCounter> - <LocalCounter worker="5">806823</LocalCounter> - <LocalCounter worker="6">2780299</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>18491156</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="8"> - <LocalCounter worker="0">2266504</LocalCounter> - <LocalCounter worker="1">2264023</LocalCounter> - <LocalCounter worker="2">2150464</LocalCounter> - <LocalCounter worker="3">2152501</LocalCounter> - <LocalCounter worker="4">2234184</LocalCounter> - <LocalCounter worker="5">2235885</LocalCounter> - <LocalCounter worker="6">2045159</LocalCounter> - <LocalCounter worker="7">2042094</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>17390814</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="9"> - <LocalCounter worker="0">378978</LocalCounter> - <LocalCounter worker="1">493897</LocalCounter> - <LocalCounter worker="2">540956</LocalCounter> - <LocalCounter worker="3">307717</LocalCounter> - <LocalCounter worker="4">559266</LocalCounter> - <LocalCounter worker="5">435771</LocalCounter> - <LocalCounter worker="6">289002</LocalCounter> - <LocalCounter worker="7">524768</LocalCounter> - <LocalCounter worker="8">904</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3531259</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="10"> - <LocalCounter worker="0">315240</LocalCounter> - <LocalCounter worker="1">314639</LocalCounter> - <LocalCounter worker="2">343225</LocalCounter> - <LocalCounter worker="3">343430</LocalCounter> - <LocalCounter worker="4">330617</LocalCounter> - <LocalCounter worker="5">273430</LocalCounter> - <LocalCounter worker="6">114457</LocalCounter> - <LocalCounter worker="7">400594</LocalCounter> - <LocalCounter worker="8">199708</LocalCounter> - <LocalCounter worker="9">398954</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3034294</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="11"> - <LocalCounter worker="0">398649</LocalCounter> - <LocalCounter worker="1">243725</LocalCounter> - <LocalCounter worker="2">313197</LocalCounter> - <LocalCounter worker="3">341559</LocalCounter> - <LocalCounter worker="4">400879</LocalCounter> - <LocalCounter worker="5">485957</LocalCounter> - <LocalCounter worker="6">256149</LocalCounter> - <LocalCounter worker="7">312463</LocalCounter> - <LocalCounter worker="8">79929</LocalCounter> - <LocalCounter worker="9">79959</LocalCounter> - <LocalCounter worker="10">61</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2912527</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="12"> - <LocalCounter worker="0">200097</LocalCounter> - <LocalCounter worker="1">314280</LocalCounter> - <LocalCounter worker="2">484541</LocalCounter> - <LocalCounter worker="3">400413</LocalCounter> - <LocalCounter worker="4">187776</LocalCounter> - <LocalCounter worker="5">244998</LocalCounter> - <LocalCounter worker="6">244859</LocalCounter> - <LocalCounter worker="7">330577</LocalCounter> - <LocalCounter worker="8">159931</LocalCounter> - <LocalCounter worker="9">122121</LocalCounter> - <LocalCounter worker="10">159973</LocalCounter> - <LocalCounter worker="11">199451</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3049017</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="13"> - <LocalCounter worker="0">104</LocalCounter> - <LocalCounter worker="1">145</LocalCounter> - <LocalCounter worker="2">209</LocalCounter> - <LocalCounter worker="3">169</LocalCounter> - <LocalCounter worker="4">206</LocalCounter> - <LocalCounter worker="5">120</LocalCounter> - <LocalCounter worker="6">166</LocalCounter> - <LocalCounter worker="7">188</LocalCounter> - <LocalCounter worker="8">798353</LocalCounter> - <LocalCounter worker="9">639101</LocalCounter> - <LocalCounter worker="10">1237960</LocalCounter> - <LocalCounter worker="11">840661</LocalCounter> - <LocalCounter worker="12">439274</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3956656</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="14"> - <LocalCounter worker="0">80</LocalCounter> - <LocalCounter worker="1">111</LocalCounter> - <LocalCounter worker="2">119</LocalCounter> - <LocalCounter worker="3">149</LocalCounter> - <LocalCounter worker="4">169</LocalCounter> - <LocalCounter worker="5">117</LocalCounter> - <LocalCounter worker="6">126</LocalCounter> - <LocalCounter worker="7">139</LocalCounter> - <LocalCounter worker="8">574829</LocalCounter> - <LocalCounter worker="9">803988</LocalCounter> - <LocalCounter worker="10">370549</LocalCounter> - <LocalCounter worker="11">846318</LocalCounter> - <LocalCounter worker="12">608269</LocalCounter> - <LocalCounter worker="13">608119</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3813082</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="15"> - <LocalCounter worker="0">8</LocalCounter> - <LocalCounter worker="1">20</LocalCounter> - <LocalCounter worker="2">34</LocalCounter> - <LocalCounter worker="3">65</LocalCounter> - <LocalCounter worker="4">84</LocalCounter> - <LocalCounter worker="5">38</LocalCounter> - <LocalCounter worker="6">60</LocalCounter> - <LocalCounter worker="7">95</LocalCounter> - <LocalCounter worker="8">482715</LocalCounter> - <LocalCounter worker="9">607538</LocalCounter> - <LocalCounter worker="10">482392</LocalCounter> - <LocalCounter worker="11">667855</LocalCounter> - <LocalCounter worker="12">409336</LocalCounter> - <LocalCounter worker="13">630426</LocalCounter> - <LocalCounter worker="14">408163</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3688829</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="16"> - <LocalCounter worker="0">117285</LocalCounter> - <LocalCounter worker="1">117670</LocalCounter> - <LocalCounter worker="2">117122</LocalCounter> - <LocalCounter worker="3">116813</LocalCounter> - <LocalCounter worker="4">117713</LocalCounter> - <LocalCounter worker="5">117774</LocalCounter> - <LocalCounter worker="6">117459</LocalCounter> - <LocalCounter worker="7">117328</LocalCounter> - <LocalCounter worker="8">303833</LocalCounter> - <LocalCounter worker="9">326784</LocalCounter> - <LocalCounter worker="10">277325</LocalCounter> - <LocalCounter worker="11">373516</LocalCounter> - <LocalCounter worker="12">263215</LocalCounter> - <LocalCounter worker="13">390871</LocalCounter> - <LocalCounter worker="14">446935</LocalCounter> - <LocalCounter worker="15">301501</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3623144</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="17"> - <LocalCounter worker="0">341558</LocalCounter> - <LocalCounter worker="1">231787</LocalCounter> - <LocalCounter worker="2">347677</LocalCounter> - <LocalCounter worker="3">218478</LocalCounter> - <LocalCounter worker="4">303719</LocalCounter> - <LocalCounter worker="5">154437</LocalCounter> - <LocalCounter worker="6">229631</LocalCounter> - <LocalCounter worker="7">216461</LocalCounter> - <LocalCounter worker="8">123537</LocalCounter> - <LocalCounter worker="9">103366</LocalCounter> - <LocalCounter worker="10">55161</LocalCounter> - <LocalCounter worker="11">90025</LocalCounter> - <LocalCounter worker="12">84691</LocalCounter> - <LocalCounter worker="13">68924</LocalCounter> - <LocalCounter worker="14">53786</LocalCounter> - <LocalCounter worker="15">190767</LocalCounter> - <LocalCounter worker="16">986</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2814991</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="18"> - <LocalCounter worker="0">200069</LocalCounter> - <LocalCounter worker="1">264598</LocalCounter> - <LocalCounter worker="2">170182</LocalCounter> - <LocalCounter worker="3">138554</LocalCounter> - <LocalCounter worker="4">102824</LocalCounter> - <LocalCounter worker="5">175867</LocalCounter> - <LocalCounter worker="6">284187</LocalCounter> - <LocalCounter worker="7">164345</LocalCounter> - <LocalCounter worker="8">233732</LocalCounter> - <LocalCounter worker="9">178177</LocalCounter> - <LocalCounter worker="10">140189</LocalCounter> - <LocalCounter worker="11">153958</LocalCounter> - <LocalCounter worker="12">123252</LocalCounter> - <LocalCounter worker="13">227322</LocalCounter> - <LocalCounter worker="14">194095</LocalCounter> - <LocalCounter worker="15">54981</LocalCounter> - <LocalCounter worker="16">1079</LocalCounter> - <LocalCounter worker="17">1026</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2808437</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="19"> - <LocalCounter worker="0">321115</LocalCounter> - <LocalCounter worker="1">371397</LocalCounter> - <LocalCounter worker="2">225899</LocalCounter> - <LocalCounter worker="3">354262</LocalCounter> - <LocalCounter worker="4">361476</LocalCounter> - <LocalCounter worker="5">350114</LocalCounter> - <LocalCounter worker="6">291933</LocalCounter> - <LocalCounter worker="7">196999</LocalCounter> - <LocalCounter worker="8">22397</LocalCounter> - <LocalCounter worker="9">25153</LocalCounter> - <LocalCounter worker="10">102182</LocalCounter> - <LocalCounter worker="11">21372</LocalCounter> - <LocalCounter worker="12">70582</LocalCounter> - <LocalCounter worker="13">29948</LocalCounter> - <LocalCounter worker="14">18969</LocalCounter> - <LocalCounter worker="15">57177</LocalCounter> - <LocalCounter worker="16">477</LocalCounter> - <LocalCounter worker="17">391</LocalCounter> - <LocalCounter worker="18">916</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2822759</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="20"> - <LocalCounter worker="0">393436</LocalCounter> - <LocalCounter worker="1">309283</LocalCounter> - <LocalCounter worker="2">168529</LocalCounter> - <LocalCounter worker="3">224983</LocalCounter> - <LocalCounter worker="4">196844</LocalCounter> - <LocalCounter worker="5">140974</LocalCounter> - <LocalCounter worker="6">197196</LocalCounter> - <LocalCounter worker="7">84830</LocalCounter> - <LocalCounter worker="8">111946</LocalCounter> - <LocalCounter worker="9">111914</LocalCounter> - <LocalCounter worker="10">112325</LocalCounter> - <LocalCounter worker="11">112014</LocalCounter> - <LocalCounter worker="12">168007</LocalCounter> - <LocalCounter worker="13">111972</LocalCounter> - <LocalCounter worker="14">112201</LocalCounter> - <LocalCounter worker="15">252562</LocalCounter> - <LocalCounter worker="16">49</LocalCounter> - <LocalCounter worker="17">41</LocalCounter> - <LocalCounter worker="18">37</LocalCounter> - <LocalCounter worker="19">44</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2809187</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="21"> - <LocalCounter worker="0">183153</LocalCounter> - <LocalCounter worker="1">263091</LocalCounter> - <LocalCounter worker="2">196238</LocalCounter> - <LocalCounter worker="3">56135</LocalCounter> - <LocalCounter worker="4">252253</LocalCounter> - <LocalCounter worker="5">112377</LocalCounter> - <LocalCounter worker="6">168624</LocalCounter> - <LocalCounter worker="7">252596</LocalCounter> - <LocalCounter worker="8">195948</LocalCounter> - <LocalCounter worker="9">43703</LocalCounter> - <LocalCounter worker="10">140073</LocalCounter> - <LocalCounter worker="11">223721</LocalCounter> - <LocalCounter worker="12">251924</LocalCounter> - <LocalCounter worker="13">169611</LocalCounter> - <LocalCounter worker="14">112360</LocalCounter> - <LocalCounter worker="15">168176</LocalCounter> - <LocalCounter worker="16">41</LocalCounter> - <LocalCounter worker="17">14</LocalCounter> - <LocalCounter worker="18">29</LocalCounter> - <LocalCounter worker="19">41</LocalCounter> - <LocalCounter worker="20">41</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2790149</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="22"> - <LocalCounter worker="0">84315</LocalCounter> - <LocalCounter worker="1">168428</LocalCounter> - <LocalCounter worker="2">56084</LocalCounter> - <LocalCounter worker="3">280784</LocalCounter> - <LocalCounter worker="4">160642</LocalCounter> - <LocalCounter worker="5">195812</LocalCounter> - <LocalCounter worker="6">224182</LocalCounter> - <LocalCounter worker="7">112335</LocalCounter> - <LocalCounter worker="8">223416</LocalCounter> - <LocalCounter worker="9">279221</LocalCounter> - <LocalCounter worker="10">223306</LocalCounter> - <LocalCounter worker="11">195550</LocalCounter> - <LocalCounter worker="12">83826</LocalCounter> - <LocalCounter worker="13">83644</LocalCounter> - <LocalCounter worker="14">153478</LocalCounter> - <LocalCounter worker="15">251574</LocalCounter> - <LocalCounter worker="16">31</LocalCounter> - <LocalCounter worker="17">17</LocalCounter> - <LocalCounter worker="18">26</LocalCounter> - <LocalCounter worker="19">27</LocalCounter> - <LocalCounter worker="20">31</LocalCounter> - <LocalCounter worker="21">22</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2776751</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="23"> - <LocalCounter worker="0">251094</LocalCounter> - <LocalCounter worker="1">111612</LocalCounter> - <LocalCounter worker="2">111946</LocalCounter> - <LocalCounter worker="3">250878</LocalCounter> - <LocalCounter worker="4">270360</LocalCounter> - <LocalCounter worker="5">83918</LocalCounter> - <LocalCounter worker="6">167667</LocalCounter> - <LocalCounter worker="7">251032</LocalCounter> - <LocalCounter worker="8">201670</LocalCounter> - <LocalCounter worker="9">195227</LocalCounter> - <LocalCounter worker="10">167446</LocalCounter> - <LocalCounter worker="11">194880</LocalCounter> - <LocalCounter worker="12">194852</LocalCounter> - <LocalCounter worker="13">83768</LocalCounter> - <LocalCounter worker="14">160169</LocalCounter> - <LocalCounter worker="15">83658</LocalCounter> - <LocalCounter worker="16">141</LocalCounter> - <LocalCounter worker="17">133</LocalCounter> - <LocalCounter worker="18">122</LocalCounter> - <LocalCounter worker="19">117</LocalCounter> - <LocalCounter worker="20">136</LocalCounter> - <LocalCounter worker="21">115</LocalCounter> - <LocalCounter worker="22">104</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2781045</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTASLockWithLocalCounter activeWorker="24"> - <LocalCounter worker="0">132034</LocalCounter> - <LocalCounter worker="1">131676</LocalCounter> - <LocalCounter worker="2">132311</LocalCounter> - <LocalCounter worker="3">131443</LocalCounter> - <LocalCounter worker="4">132250</LocalCounter> - <LocalCounter worker="5">131733</LocalCounter> - <LocalCounter worker="6">131193</LocalCounter> - <LocalCounter worker="7">131281</LocalCounter> - <LocalCounter worker="8">122650</LocalCounter> - <LocalCounter worker="9">123113</LocalCounter> - <LocalCounter worker="10">123745</LocalCounter> - <LocalCounter worker="11">123264</LocalCounter> - <LocalCounter worker="12">123158</LocalCounter> - <LocalCounter worker="13">122764</LocalCounter> - <LocalCounter worker="14">123050</LocalCounter> - <LocalCounter worker="15">123616</LocalCounter> - <LocalCounter worker="16">122054</LocalCounter> - <LocalCounter worker="17">122876</LocalCounter> - <LocalCounter worker="18">122080</LocalCounter> - <LocalCounter worker="19">121904</LocalCounter> - <LocalCounter worker="20">122223</LocalCounter> - <LocalCounter worker="21">122088</LocalCounter> - <LocalCounter worker="22">121899</LocalCounter> - <LocalCounter worker="23">122670</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3017075</SumOfLocalCounter> - </GlobalTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="1"> - <LocalCounter worker="0">19645977</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>19645977</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="2"> - <LocalCounter worker="0">4310217</LocalCounter> - <LocalCounter worker="1">15293675</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>19603892</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="3"> - <LocalCounter worker="0">9402863</LocalCounter> - <LocalCounter worker="1">9226207</LocalCounter> - <LocalCounter worker="2">437594</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>19066664</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="4"> - <LocalCounter worker="0">3386951</LocalCounter> - <LocalCounter worker="1">3201931</LocalCounter> - <LocalCounter worker="2">6304744</LocalCounter> - <LocalCounter worker="3">6305238</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>19198864</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="5"> - <LocalCounter worker="0">4092852</LocalCounter> - <LocalCounter worker="1">3899527</LocalCounter> - <LocalCounter worker="2">2520768</LocalCounter> - <LocalCounter worker="3">2175848</LocalCounter> - <LocalCounter worker="4">5948549</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>18637544</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="6"> - <LocalCounter worker="0">2597841</LocalCounter> - <LocalCounter worker="1">2443137</LocalCounter> - <LocalCounter worker="2">3331024</LocalCounter> - <LocalCounter worker="3">2708000</LocalCounter> - <LocalCounter worker="4">4093981</LocalCounter> - <LocalCounter worker="5">3080494</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>18254477</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="7"> - <LocalCounter worker="0">1216614</LocalCounter> - <LocalCounter worker="1">2258952</LocalCounter> - <LocalCounter worker="2">1291063</LocalCounter> - <LocalCounter worker="3">1114575</LocalCounter> - <LocalCounter worker="4">5532606</LocalCounter> - <LocalCounter worker="5">5466345</LocalCounter> - <LocalCounter worker="6">1405693</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>18285848</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="8"> - <LocalCounter worker="0">2086492</LocalCounter> - <LocalCounter worker="1">2244683</LocalCounter> - <LocalCounter worker="2">2112130</LocalCounter> - <LocalCounter worker="3">2067114</LocalCounter> - <LocalCounter worker="4">2081711</LocalCounter> - <LocalCounter worker="5">2090180</LocalCounter> - <LocalCounter worker="6">2168032</LocalCounter> - <LocalCounter worker="7">2534478</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>17384820</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="9"> - <LocalCounter worker="0">634132</LocalCounter> - <LocalCounter worker="1">601192</LocalCounter> - <LocalCounter worker="2">480382</LocalCounter> - <LocalCounter worker="3">657643</LocalCounter> - <LocalCounter worker="4">592079</LocalCounter> - <LocalCounter worker="5">740174</LocalCounter> - <LocalCounter worker="6">465043</LocalCounter> - <LocalCounter worker="7">642726</LocalCounter> - <LocalCounter worker="8">3226</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>4816597</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="10"> - <LocalCounter worker="0">142972</LocalCounter> - <LocalCounter worker="1">387723</LocalCounter> - <LocalCounter worker="2">457567</LocalCounter> - <LocalCounter worker="3">302196</LocalCounter> - <LocalCounter worker="4">314638</LocalCounter> - <LocalCounter worker="5">457645</LocalCounter> - <LocalCounter worker="6">371900</LocalCounter> - <LocalCounter worker="7">428999</LocalCounter> - <LocalCounter worker="8">691</LocalCounter> - <LocalCounter worker="9">362</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2864693</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="11"> - <LocalCounter worker="0">355770</LocalCounter> - <LocalCounter worker="1">383778</LocalCounter> - <LocalCounter worker="2">369646</LocalCounter> - <LocalCounter worker="3">256341</LocalCounter> - <LocalCounter worker="4">327558</LocalCounter> - <LocalCounter worker="5">242178</LocalCounter> - <LocalCounter worker="6">398681</LocalCounter> - <LocalCounter worker="7">483955</LocalCounter> - <LocalCounter worker="8">176</LocalCounter> - <LocalCounter worker="9">201</LocalCounter> - <LocalCounter worker="10">67</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2818351</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="12"> - <LocalCounter worker="0">457238</LocalCounter> - <LocalCounter worker="1">142885</LocalCounter> - <LocalCounter worker="2">416308</LocalCounter> - <LocalCounter worker="3">318737</LocalCounter> - <LocalCounter worker="4">371610</LocalCounter> - <LocalCounter worker="5">228382</LocalCounter> - <LocalCounter worker="6">429095</LocalCounter> - <LocalCounter worker="7">502040</LocalCounter> - <LocalCounter worker="8">160</LocalCounter> - <LocalCounter worker="9">115</LocalCounter> - <LocalCounter worker="10">191</LocalCounter> - <LocalCounter worker="11">108</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2866869</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="13"> - <LocalCounter worker="0">155562</LocalCounter> - <LocalCounter worker="1">155271</LocalCounter> - <LocalCounter worker="2">154524</LocalCounter> - <LocalCounter worker="3">155620</LocalCounter> - <LocalCounter worker="4">155737</LocalCounter> - <LocalCounter worker="5">155945</LocalCounter> - <LocalCounter worker="6">156319</LocalCounter> - <LocalCounter worker="7">155596</LocalCounter> - <LocalCounter worker="8">526245</LocalCounter> - <LocalCounter worker="9">524881</LocalCounter> - <LocalCounter worker="10">495452</LocalCounter> - <LocalCounter worker="11">497374</LocalCounter> - <LocalCounter worker="12">586585</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3875111</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="14"> - <LocalCounter worker="0">862</LocalCounter> - <LocalCounter worker="1">739</LocalCounter> - <LocalCounter worker="2">902</LocalCounter> - <LocalCounter worker="3">876</LocalCounter> - <LocalCounter worker="4">922</LocalCounter> - <LocalCounter worker="5">881</LocalCounter> - <LocalCounter worker="6">877</LocalCounter> - <LocalCounter worker="7">945</LocalCounter> - <LocalCounter worker="8">798225</LocalCounter> - <LocalCounter worker="9">545250</LocalCounter> - <LocalCounter worker="10">758729</LocalCounter> - <LocalCounter worker="11">466001</LocalCounter> - <LocalCounter worker="12">638255</LocalCounter> - <LocalCounter worker="13">660193</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3873657</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="15"> - <LocalCounter worker="0">198289</LocalCounter> - <LocalCounter worker="1">203179</LocalCounter> - <LocalCounter worker="2">199945</LocalCounter> - <LocalCounter worker="3">199124</LocalCounter> - <LocalCounter worker="4">201799</LocalCounter> - <LocalCounter worker="5">199812</LocalCounter> - <LocalCounter worker="6">199839</LocalCounter> - <LocalCounter worker="7">199732</LocalCounter> - <LocalCounter worker="8">314842</LocalCounter> - <LocalCounter worker="9">291197</LocalCounter> - <LocalCounter worker="10">294608</LocalCounter> - <LocalCounter worker="11">286440</LocalCounter> - <LocalCounter worker="12">375388</LocalCounter> - <LocalCounter worker="13">316600</LocalCounter> - <LocalCounter worker="14">354856</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3835650</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="16"> - <LocalCounter worker="0">104577</LocalCounter> - <LocalCounter worker="1">489911</LocalCounter> - <LocalCounter worker="2">466186</LocalCounter> - <LocalCounter worker="3">366690</LocalCounter> - <LocalCounter worker="4">252721</LocalCounter> - <LocalCounter worker="5">460887</LocalCounter> - <LocalCounter worker="6">253823</LocalCounter> - <LocalCounter worker="7">113506</LocalCounter> - <LocalCounter worker="8">120249</LocalCounter> - <LocalCounter worker="9">46275</LocalCounter> - <LocalCounter worker="10">159071</LocalCounter> - <LocalCounter worker="11">83449</LocalCounter> - <LocalCounter worker="12">177618</LocalCounter> - <LocalCounter worker="13">120903</LocalCounter> - <LocalCounter worker="14">191314</LocalCounter> - <LocalCounter worker="15">263287</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>3670467</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="17"> - <LocalCounter worker="0">234559</LocalCounter> - <LocalCounter worker="1">118245</LocalCounter> - <LocalCounter worker="2">219127</LocalCounter> - <LocalCounter worker="3">295109</LocalCounter> - <LocalCounter worker="4">248960</LocalCounter> - <LocalCounter worker="5">181934</LocalCounter> - <LocalCounter worker="6">297815</LocalCounter> - <LocalCounter worker="7">322059</LocalCounter> - <LocalCounter worker="8">163004</LocalCounter> - <LocalCounter worker="9">174212</LocalCounter> - <LocalCounter worker="10">26569</LocalCounter> - <LocalCounter worker="11">77433</LocalCounter> - <LocalCounter worker="12">133062</LocalCounter> - <LocalCounter worker="13">232843</LocalCounter> - <LocalCounter worker="14">33886</LocalCounter> - <LocalCounter worker="15">82456</LocalCounter> - <LocalCounter worker="16">4914</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2846187</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="18"> - <LocalCounter worker="0">271262</LocalCounter> - <LocalCounter worker="1">355312</LocalCounter> - <LocalCounter worker="2">50921</LocalCounter> - <LocalCounter worker="3">148825</LocalCounter> - <LocalCounter worker="4">245230</LocalCounter> - <LocalCounter worker="5">182256</LocalCounter> - <LocalCounter worker="6">187273</LocalCounter> - <LocalCounter worker="7">255451</LocalCounter> - <LocalCounter worker="8">185514</LocalCounter> - <LocalCounter worker="9">44729</LocalCounter> - <LocalCounter worker="10">112757</LocalCounter> - <LocalCounter worker="11">98411</LocalCounter> - <LocalCounter worker="12">207969</LocalCounter> - <LocalCounter worker="13">185668</LocalCounter> - <LocalCounter worker="14">172032</LocalCounter> - <LocalCounter worker="15">109135</LocalCounter> - <LocalCounter worker="16">2423</LocalCounter> - <LocalCounter worker="17">2380</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2817548</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="19"> - <LocalCounter worker="0">261804</LocalCounter> - <LocalCounter worker="1">234937</LocalCounter> - <LocalCounter worker="2">211116</LocalCounter> - <LocalCounter worker="3">198275</LocalCounter> - <LocalCounter worker="4">153636</LocalCounter> - <LocalCounter worker="5">353607</LocalCounter> - <LocalCounter worker="6">368351</LocalCounter> - <LocalCounter worker="7">369817</LocalCounter> - <LocalCounter worker="8">117702</LocalCounter> - <LocalCounter worker="9">41853</LocalCounter> - <LocalCounter worker="10">75374</LocalCounter> - <LocalCounter worker="11">125194</LocalCounter> - <LocalCounter worker="12">87239</LocalCounter> - <LocalCounter worker="13">58610</LocalCounter> - <LocalCounter worker="14">63622</LocalCounter> - <LocalCounter worker="15">96700</LocalCounter> - <LocalCounter worker="16">1021</LocalCounter> - <LocalCounter worker="17">966</LocalCounter> - <LocalCounter worker="18">985</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2820809</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="20"> - <LocalCounter worker="0">251976</LocalCounter> - <LocalCounter worker="1">118001</LocalCounter> - <LocalCounter worker="2">84641</LocalCounter> - <LocalCounter worker="3">140476</LocalCounter> - <LocalCounter worker="4">77669</LocalCounter> - <LocalCounter worker="5">274047</LocalCounter> - <LocalCounter worker="6">318570</LocalCounter> - <LocalCounter worker="7">170363</LocalCounter> - <LocalCounter worker="8">252676</LocalCounter> - <LocalCounter worker="9">140874</LocalCounter> - <LocalCounter worker="10">189186</LocalCounter> - <LocalCounter worker="11">121034</LocalCounter> - <LocalCounter worker="12">161358</LocalCounter> - <LocalCounter worker="13">165381</LocalCounter> - <LocalCounter worker="14">141826</LocalCounter> - <LocalCounter worker="15">205937</LocalCounter> - <LocalCounter worker="16">118</LocalCounter> - <LocalCounter worker="17">77</LocalCounter> - <LocalCounter worker="18">70</LocalCounter> - <LocalCounter worker="19">94</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2814374</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="21"> - <LocalCounter worker="0">84213</LocalCounter> - <LocalCounter worker="1">196158</LocalCounter> - <LocalCounter worker="2">196680</LocalCounter> - <LocalCounter worker="3">112159</LocalCounter> - <LocalCounter worker="4">224637</LocalCounter> - <LocalCounter worker="5">252342</LocalCounter> - <LocalCounter worker="6">140314</LocalCounter> - <LocalCounter worker="7">84179</LocalCounter> - <LocalCounter worker="8">223626</LocalCounter> - <LocalCounter worker="9">196078</LocalCounter> - <LocalCounter worker="10">111882</LocalCounter> - <LocalCounter worker="11">238331</LocalCounter> - <LocalCounter worker="12">252259</LocalCounter> - <LocalCounter worker="13">195491</LocalCounter> - <LocalCounter worker="14">83883</LocalCounter> - <LocalCounter worker="15">195126</LocalCounter> - <LocalCounter worker="16">52</LocalCounter> - <LocalCounter worker="17">26</LocalCounter> - <LocalCounter worker="18">35</LocalCounter> - <LocalCounter worker="19">44</LocalCounter> - <LocalCounter worker="20">41</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2787556</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="22"> - <LocalCounter worker="0">31503</LocalCounter> - <LocalCounter worker="1">252623</LocalCounter> - <LocalCounter worker="2">196406</LocalCounter> - <LocalCounter worker="3">168591</LocalCounter> - <LocalCounter worker="4">140544</LocalCounter> - <LocalCounter worker="5">168154</LocalCounter> - <LocalCounter worker="6">280249</LocalCounter> - <LocalCounter worker="7">168483</LocalCounter> - <LocalCounter worker="8">195559</LocalCounter> - <LocalCounter worker="9">55718</LocalCounter> - <LocalCounter worker="10">139401</LocalCounter> - <LocalCounter worker="11">251481</LocalCounter> - <LocalCounter worker="12">222605</LocalCounter> - <LocalCounter worker="13">111214</LocalCounter> - <LocalCounter worker="14">139519</LocalCounter> - <LocalCounter worker="15">251258</LocalCounter> - <LocalCounter worker="16">46</LocalCounter> - <LocalCounter worker="17">26</LocalCounter> - <LocalCounter worker="18">31</LocalCounter> - <LocalCounter worker="19">39</LocalCounter> - <LocalCounter worker="20">39</LocalCounter> - <LocalCounter worker="21">41</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2773530</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="23"> - <LocalCounter worker="0">139311</LocalCounter> - <LocalCounter worker="1">167336</LocalCounter> - <LocalCounter worker="2">278426</LocalCounter> - <LocalCounter worker="3">55951</LocalCounter> - <LocalCounter worker="4">139626</LocalCounter> - <LocalCounter worker="5">250691</LocalCounter> - <LocalCounter worker="6">223121</LocalCounter> - <LocalCounter worker="7">83809</LocalCounter> - <LocalCounter worker="8">194537</LocalCounter> - <LocalCounter worker="9">278533</LocalCounter> - <LocalCounter worker="10">139061</LocalCounter> - <LocalCounter worker="11">223216</LocalCounter> - <LocalCounter worker="12">194994</LocalCounter> - <LocalCounter worker="13">111343</LocalCounter> - <LocalCounter worker="14">186244</LocalCounter> - <LocalCounter worker="15">111364</LocalCounter> - <LocalCounter worker="16">142</LocalCounter> - <LocalCounter worker="17">126</LocalCounter> - <LocalCounter worker="18">121</LocalCounter> - <LocalCounter worker="19">122</LocalCounter> - <LocalCounter worker="20">124</LocalCounter> - <LocalCounter worker="21">125</LocalCounter> - <LocalCounter worker="22">124</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2778447</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> - <GlobalTTASLockWithLocalCounter activeWorker="24"> - <LocalCounter worker="0">127539</LocalCounter> - <LocalCounter worker="1">128004</LocalCounter> - <LocalCounter worker="2">127243</LocalCounter> - <LocalCounter worker="3">128231</LocalCounter> - <LocalCounter worker="4">128122</LocalCounter> - <LocalCounter worker="5">127956</LocalCounter> - <LocalCounter worker="6">128394</LocalCounter> - <LocalCounter worker="7">128093</LocalCounter> - <LocalCounter worker="8">121225</LocalCounter> - <LocalCounter worker="9">120770</LocalCounter> - <LocalCounter worker="10">120549</LocalCounter> - <LocalCounter worker="11">120785</LocalCounter> - <LocalCounter worker="12">120461</LocalCounter> - <LocalCounter worker="13">120591</LocalCounter> - <LocalCounter worker="14">121214</LocalCounter> - <LocalCounter worker="15">120733</LocalCounter> - <LocalCounter worker="16">120387</LocalCounter> - <LocalCounter worker="17">121153</LocalCounter> - <LocalCounter worker="18">121255</LocalCounter> - <LocalCounter worker="19">120737</LocalCounter> - <LocalCounter worker="20">120859</LocalCounter> - <LocalCounter worker="21">121071</LocalCounter> - <LocalCounter worker="22">121031</LocalCounter> - <LocalCounter worker="23">121163</LocalCounter> - <GlobalCounter>0</GlobalCounter> - <SumOfLocalCounter>2957566</SumOfLocalCounter> - </GlobalTTASLockWithLocalCounter> -</SMPLock01> +*** TEST VERSION: 6.0.0.90c8934179f2ba4c042caa95b3473d37835bed80 +*** TEST STATE: EXPECTED_PASS +*** TEST BUILD: RTEMS_SMP +*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448) +*** BEGIN OF JSON DATA *** +[ + { + "lock-type": "Ticket Lock", + "lock-object": "global", + "section-type": "local counter", + "results": [ + { + "counter": [1385097], + "global-counter": 0, + "sum-of-local-counter": 1385097 + }, { + "counter": [997876, 997974], + "global-counter": 0, + "sum-of-local-counter": 1995850 + }, { + "counter": [998024, 998123, 998123], + "global-counter": 0, + "sum-of-local-counter": 2994270 + }, { + "counter": [997988, 998086, 998086, 998086], + "global-counter": 0, + "sum-of-local-counter": 3992246 + } + ] + }, { + "lock-type": "MCS Lock", + "lock-object": "global", + "section-type": "local counter", + "results": [ + { + "counter": [1512045], + "global-counter": 0, + "sum-of-local-counter": 1512045 + }, { + "counter": [997877, 997878], + "global-counter": 0, + "sum-of-local-counter": 1995755 + }, { + "counter": [998023, 998122, 998122], + "global-counter": 0, + "sum-of-local-counter": 2994267 + }, { + "counter": [997987, 998086, 998086, 998086], + "global-counter": 0, + "sum-of-local-counter": 3992245 + } + ] + }, { + "lock-type": "Ticket Lock", + "lock-object": "global", + "section-type": "global counter", + "results": [ + { + "counter": [997921, 997945, 997945, 997945], + "global-counter": 3991756, + "sum-of-local-counter": 3991756 + } + ] + }, { + "lock-type": "MCS Lock", + "lock-object": "global", + "section-type": "global counter", + "results": [ + { + "counter": [527090, 527096, 527096, 527096], + "global-counter": 2108378, + "sum-of-local-counter": 2108378 + } + ] + }, { + "lock-type": "Ticket Lock", + "lock-object": "local", + "section-type": "local counter", + "results": [ + { + "counter": [1385769], + "global-counter": 0, + "sum-of-local-counter": 1385769 + }, { + "counter": [1385995, 1387328], + "global-counter": 0, + "sum-of-local-counter": 2773323 + }, { + "counter": [1386191, 1387525, 1387526], + "global-counter": 0, + "sum-of-local-counter": 4161242 + }, { + "counter": [1386136, 1387468, 1387470, 1387407], + "global-counter": 0, + "sum-of-local-counter": 5548481 + } + ] + }, { + "lock-type": "MCS Lock", + "lock-object": "local", + "section-type": "local counter", + "results": [ + { + "counter": [1512021], + "global-counter": 0, + "sum-of-local-counter": 1512021 + }, { + "counter": [1511993, 1513445], + "global-counter": 0, + "sum-of-local-counter": 3025438 + }, { + "counter": [1512208, 1513656, 1513656], + "global-counter": 0, + "sum-of-local-counter": 4539520 + }, { + "counter": [1512149, 1513595, 1513595, 1513533], + "global-counter": 0, + "sum-of-local-counter": 6052872 + } + ] + }, { + "lock-type": "Ticket Lock", + "lock-object": "local", + "section-type": "global counter", + "results": [ + { + "counter": [1160403, 1161527, 1161527, 1161469], + "global-counter": 3727827, + "sum-of-local-counter": 4644926 + } + ] + }, { + "lock-type": "MCS Lock", + "lock-object": "local", + "section-type": "global counter", + "results": [ + { + "counter": [1247164, 1248373, 1248373, 1248313], + "global-counter": 3876384, + "sum-of-local-counter": 4992223 + } + ] + }, { + "lock-type": "Ticket Lock", + "lock-object": "global", + "section-type": "busy loop", + "results": [ + { + "counter": [39932, 39932, 39932, 39932], + "global-counter": 0, + "sum-of-local-counter": 159728 + } + ] + }, { + "lock-type": "MCS Lock", + "lock-object": "global", + "section-type": "busy loop", + "results": [ + { + "counter": [39934, 39935, 39934, 39934], + "global-counter": 0, + "sum-of-local-counter": 159737 + } + ] + }, { + "lock-type": "Sequence Lock", + "lock-object": "global", + "section-type": "two global counter", + "results": [ + { + "counter": [1847772, 666526, 666526, 666488], + "global-counter": 0, + "sum-of-local-counter": 3847312 + } + ] + }, { + "lock-type": "TAS Lock", + "lock-object": "global", + "section-type": "local counter", + "results": [ + { + "counter": [2934600], + "global-counter": 0, + "sum-of-local-counter": 2934600 + }, { + "counter": [2217444, 2219107], + "global-counter": 0, + "sum-of-local-counter": 4436551 + }, { + "counter": [1833240, 1836467, 1835261], + "global-counter": 0, + "sum-of-local-counter": 5504968 + }, { + "counter": [1652247, 1652937, 1653163, 1652725], + "global-counter": 0, + "sum-of-local-counter": 6611072 + } + ] + }, { + "lock-type": "TTAS Lock", + "lock-object": "global", + "section-type": "local counter", + "results": [ + { + "counter": [2935135], + "global-counter": 0, + "sum-of-local-counter": 2935135 + }, { + "counter": [1732426, 1758193], + "global-counter": 0, + "sum-of-local-counter": 3490619 + }, { + "counter": [1202763, 1204087, 1203894], + "global-counter": 0, + "sum-of-local-counter": 3610744 + }, { + "counter": [845721, 846759, 848543, 838946], + "global-counter": 0, + "sum-of-local-counter": 3379969 + } + ] + } +] +*** END OF JSON DATA *** + *** END OF TEST SMPLOCK 1 *** + +cpu 0 in error mode (tt = 0x80) + 1550147550 000091c0: 91d02000 ta 0x0 diff --git a/testsuites/smptests/smplock01/smplock01fair.py b/testsuites/smptests/smplock01/smplock01fair.py index c5d99c6cbe..a3851ad4c6 100755 --- a/testsuites/smptests/smplock01/smplock01fair.py +++ b/testsuites/smptests/smplock01/smplock01fair.py @@ -1,9 +1,6 @@ -#!/usr/bin/env python - # SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2016 embedded brains GmbH. All rights reserved. +# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,54 +22,50 @@ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -# -import re -import libxml2 +import json import math +import re import statistics -from libxml2 import xmlNode -import matplotlib.pyplot as plt -data = open('smplock01.scn').read() -data = re.sub(r'\*\*\*.*\*\*\*', '', data) -doc = libxml2.parseDoc(data) -ctx = doc.xpathNewContext() +import matplotlib.pyplot as plt # type: ignore +from matplotlib import ticker # type: ignore + + +def _normed_coefficient_of_variation(counter: list[int]) -> float: + return (statistics.stdev(counter) / statistics.mean(counter)) / math.sqrt( + len(counter)) -plt.title('SMP Lock Fairness') -plt.xlabel('Active Workers') -plt.ylabel('Normed Coefficient of Variation') -i = 1 -ticket = [] -mcs = [] -tas = [] -ttas = [] +def _plot(data: dict) -> None: + _, axes = plt.subplots() + axes.set_title("SMP Lock Fairness") + axes.set_xlabel("Active Workers") + axes.set_ylabel("Normed Coefficient of Variation") + axes.set_yscale("symlog", linthresh=1e-6) + x = list(range(2, len(data[0]["results"]) + 1)) + axes.xaxis.set_major_locator(ticker.FixedLocator(x)) + for samples in data: + if samples["lock-object"] != "global": + continue + if samples["section-type"] != "local counter": + continue + y = [ + _normed_coefficient_of_variation(results["counter"]) + for results in samples["results"][1:] + ] + axes.plot(x, y, label=samples["lock-type"], marker="o") + axes.legend(loc="best") + plt.savefig("smplock01fair.png") + plt.savefig("smplock01fair.pdf") + plt.close() -def m(n): - return int(xmlNode.getContent(n)) -def normedCoefficientOfVariation(name, i): - y = map(m, ctx.xpathEval('/SMPLock01/' + name + '[@activeWorker=' + str(i) + ']/LocalCounter')) - if len(y) == 0: - raise - return (statistics.stdev(y) / statistics.mean(y)) / math.sqrt(len(y)) +_JSON_DATA = re.compile( + r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)" + r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL) -try: - while True: - i = i + 1 - ticket.append(normedCoefficientOfVariation('GlobalTicketLockWithLocalCounter', i)) - mcs.append(normedCoefficientOfVariation('GlobalMCSLockWithLocalCounter', i)) - tas.append(normedCoefficientOfVariation('GlobalTASLockWithLocalCounter', i)) - ttas.append(normedCoefficientOfVariation('GlobalTTASLockWithLocalCounter', i)) -except: - pass +with open("smplock01.scn", "r", encoding="utf-8") as src: + match = _JSON_DATA.search(src.read()) + data = json.loads(match.group(1)) -x = range(2, len(ticket) + 2) -plt.xticks(x) -plt.yscale('symlog', linthreshy = 1e-6) -plt.plot(x, ticket, label = 'Ticket Lock', marker = 'o') -plt.plot(x, mcs, label = 'MCS Lock', marker = 'o') -plt.plot(x, tas, label = 'TAS Lock', marker = 'o') -plt.plot(x, ttas, label = 'TTAS Lock', marker = 'o') -plt.legend(loc = 'best') -plt.show() +_plot(data) diff --git a/testsuites/smptests/smplock01/smplock01perf.py b/testsuites/smptests/smplock01/smplock01perf.py index c50ef7047f..09c7fb10b4 100755 --- a/testsuites/smptests/smplock01/smplock01perf.py +++ b/testsuites/smptests/smplock01/smplock01perf.py @@ -1,9 +1,6 @@ -#!/usr/bin/env python - # SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2016 embedded brains GmbH. All rights reserved. +# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,34 +22,39 @@ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -# +import json import re -import libxml2 -from libxml2 import xmlNode -import matplotlib.pyplot as plt -data = open('smplock01.scn').read() -data = re.sub(r'\*\*\*.*\*\*\*', '', data) -doc = libxml2.parseDoc(data) -ctx = doc.xpathNewContext() - -plt.title('SMP Lock Performance') -plt.xlabel('Active Workers') -plt.ylabel('Operation Count') - -y = map(xmlNode.getContent, ctx.xpathEval('/SMPLock01/GlobalTicketLockWithLocalCounter/SumOfLocalCounter')) -x = range(1, len(y) + 1) -plt.xticks(x) -plt.plot(x, y, label = 'Ticket Lock', marker = 'o') - -y = map(xmlNode.getContent, ctx.xpathEval('/SMPLock01/GlobalMCSLockWithLocalCounter/SumOfLocalCounter')) -plt.plot(x, y, label = 'MCS Lock', marker = 'o') - -y = map(xmlNode.getContent, ctx.xpathEval('/SMPLock01/GlobalTASLockWithLocalCounter/SumOfLocalCounter')) -plt.plot(x, y, label = 'TAS Lock', marker = 'o') - -y = map(xmlNode.getContent, ctx.xpathEval('/SMPLock01/GlobalTTASLockWithLocalCounter/SumOfLocalCounter')) -plt.plot(x, y, label = 'TTAS Lock', marker = 'o') - -plt.legend(loc = 'best') -plt.show() +import matplotlib.pyplot as plt # type: ignore +from matplotlib import ticker # type: ignore + + +def _plot(data: dict) -> None: + _, axes = plt.subplots() + axes.set_title("SMP Lock Performance") + axes.set_xlabel("Active Workers") + axes.set_ylabel("Operation Count") + x = list(range(1, len(data[0]["results"]) + 1)) + axes.xaxis.set_major_locator(ticker.FixedLocator(x)) + for samples in data: + if samples["lock-object"] != "global": + continue + if samples["section-type"] != "local counter": + continue + y = [sum(results["counter"]) for results in samples["results"]] + axes.plot(x, y, label=samples["lock-type"], marker="o") + axes.legend(loc="best") + plt.savefig("smplock01perf.png") + plt.savefig("smplock01perf.pdf") + plt.close() + + +_JSON_DATA = re.compile( + r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)" + r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL) + +with open("smplock01.scn", "r", encoding="utf-8") as src: + match = _JSON_DATA.search(src.read()) + data = json.loads(match.group(1)) + +_plot(data) diff --git a/testsuites/smptests/smpmigration01/init.c b/testsuites/smptests/smpmigration01/init.c index e4c0457848..7829d658d9 100644 --- a/testsuites/smptests/smpmigration01/init.c +++ b/testsuites/smptests/smpmigration01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013-2015 embedded brains GmbH. All rights reserved. + * Copyright (C) 2013, 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpmigration02/init.c b/testsuites/smptests/smpmigration02/init.c index 90d2b97efd..a81d6b8fe2 100644 --- a/testsuites/smptests/smpmigration02/init.c +++ b/testsuites/smptests/smpmigration02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpmrsp01/init.c b/testsuites/smptests/smpmrsp01/init.c index e435f77b2a..481328cec7 100644 --- a/testsuites/smptests/smpmrsp01/init.c +++ b/testsuites/smptests/smpmrsp01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014-2015 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpmulticast01/init.c b/testsuites/smptests/smpmulticast01/init.c index ec4bab922d..51a4624ea1 100644 --- a/testsuites/smptests/smpmulticast01/init.c +++ b/testsuites/smptests/smpmulticast01/init.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (C) 2019 embedded brains GmbH + * Copyright (C) 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -563,14 +563,16 @@ static void fatal_extension( bool ok; if (source == RTEMS_FATAL_SOURCE_SMP) { - T_step_eq_int(1, source, RTEMS_FATAL_SOURCE_SMP); - T_step_false(2, always_set_to_false, "unexpected argument value"); - T_step_eq_int(3, code, SMP_FATAL_WRONG_CPU_STATE_TO_PERFORM_JOBS); - T_case_end(); - - ok = T_run_finalize(); - rtems_test_assert(ok); - TEST_END(); + if (code != SMP_FATAL_SHUTDOWN_RESPONSE) { + T_step_eq_int(1, source, RTEMS_FATAL_SOURCE_SMP); + T_step_false(2, always_set_to_false, "unexpected argument value"); + T_step_eq_int(3, code, SMP_FATAL_WRONG_CPU_STATE_TO_PERFORM_JOBS); + T_case_end(); + + ok = T_run_finalize(); + rtems_test_assert(ok); + TEST_END(); + } } else if (source == RTEMS_FATAL_SOURCE_APPLICATION) { ok = T_run_finalize(); rtems_test_assert(ok); diff --git a/testsuites/smptests/smpmutex01/init.c b/testsuites/smptests/smpmutex01/init.c index de4b21d0dc..ad887318ab 100644 --- a/testsuites/smptests/smpmutex01/init.c +++ b/testsuites/smptests/smpmutex01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpmutex02/init.c b/testsuites/smptests/smpmutex02/init.c index 20a98fa3ef..b219f9a2c7 100644 --- a/testsuites/smptests/smpmutex02/init.c +++ b/testsuites/smptests/smpmutex02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpopenmp01/init.c b/testsuites/smptests/smpopenmp01/init.c index aabb98c596..d37fe852cf 100644 --- a/testsuites/smptests/smpopenmp01/init.c +++ b/testsuites/smptests/smpopenmp01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2017, 2024 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -143,21 +143,31 @@ static void do_bench(const char *name, void (*bench)(void), int n) (*bench)(); } delta = omp_get_wtime() - start; - printf("\t\t<%sBench unit=\"s\">%f</%sBench>\n", name, delta, name); + printf(",\n \"%s-bench\": %f", name, delta); } +static const char *test_sep = ""; + static void microbench(int num_threads, int n) { - printf("\t<Microbench numThreads=\"%i\" majorLoopCount=\"%i\">\n", num_threads, n); omp_set_num_threads(num_threads); - do_bench("Barrier", barrier_bench, n); - do_bench("Parallel", parallel_bench, n); - do_bench("Static", static_bench, n); - do_bench("Dynamic", dynamic_bench, n); - do_bench("Guided", guided_bench, n); - do_bench("Runtime", runtime_bench, n); - do_bench("Single", single_bench, n); - printf("\t</Microbench>\n"); + printf( + "%s{\n" + " \"num-threads\": %i,\n" + " \"major-loop-count\": %i", + test_sep, + num_threads, + n + ); + test_sep = ", "; + do_bench("barrier", barrier_bench, n); + do_bench("parallel", parallel_bench, n); + do_bench("static", static_bench, n); + do_bench("dynamic", dynamic_bench, n); + do_bench("guided", guided_bench, n); + do_bench("runtime", runtime_bench, n); + do_bench("single", single_bench, n); + printf("\n }"); } static int estimate_3s_runtime_with_one_proc(void) @@ -186,7 +196,7 @@ static void test(void) int num_procs; int n; - printf("<SMPOpenMP01>\n"); + printf("*** BEGIN OF JSON DATA ***\n[\n "); n = estimate_3s_runtime_with_one_proc(); num_procs = omp_get_num_procs(); @@ -196,7 +206,7 @@ static void test(void) microbench(i, n); } - printf("</SMPOpenMP01>\n"); + printf("\n]\n*** END OF JSON DATA ***\n"); } #ifdef __rtems__ diff --git a/testsuites/smptests/smpopenmp01/smpopenmp01.py b/testsuites/smptests/smpopenmp01/smpopenmp01.py index 7a9b39973a..227b089926 100644 --- a/testsuites/smptests/smpopenmp01/smpopenmp01.py +++ b/testsuites/smptests/smpopenmp01/smpopenmp01.py @@ -1,9 +1,6 @@ -#!/usr/bin/env python - # SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2017 embedded brains GmbH. All rights reserved. +# Copyright (C) 2017, 2024 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,37 +22,39 @@ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -# +import json import re -import libxml2 -from libxml2 import xmlNode -import matplotlib.pyplot as plt -data = open('smpopenmp01.scn').read() -data = re.sub(r'\*\*\*.*', '', data) -doc = libxml2.parseDoc(data) -ctx = doc.xpathNewContext() - -plt.title('OpenMP Microbench') -plt.xlabel('Number of Threads') -plt.ylabel('Relative Duration') - -def m(n): - return float(n.getContent()) - -def p(bench): - d = map(m, ctx.xpathEval('/SMPOpenMP01/Microbench/' + bench)) - y = [x / d[0] for x in d] - x = range(1, len(y) + 1) - plt.xticks(x) - plt.plot(x, y, label = bench, marker = 'o') - -p('BarrierBench') -p('ParallelBench') -p('StaticBench') -p('DynamicBench') -p('GuidedBench') -p('RuntimeBench') -p('SingleBench') -plt.legend(loc = 'best') -plt.show() +import matplotlib.pyplot as plt # type: ignore +from matplotlib import ticker # type: ignore + + +def _plot(data: dict) -> None: + _, axes = plt.subplots() + axes.set_title("OpenMP Microbench") + axes.set_xlabel("Number of Threads") + axes.set_ylabel("Relative Duration") + x = list(range(1, len(data) + 1)) + axes.xaxis.set_major_locator(ticker.FixedLocator(x)) + for key in [ + "barrier-bench", "dynamic-bench", "guided-bench", "parallel-bench", + "runtime-bench", "single-bench", "static-bench" + ]: + d = [results[key] for results in data] + y = [x / d[0] for x in d] + axes.plot(x, y, label=key.replace("-bench", ""), marker="o") + axes.legend(loc="best") + plt.savefig("smpopenmp01.png") + plt.savefig("smpopenmp01.pdf") + plt.close() + + +_JSON_DATA = re.compile( + r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)" + r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL) + +with open("smpopenmp01.scn", "r", encoding="utf-8") as src: + match = _JSON_DATA.search(src.read()) + data = json.loads(match.group(1)) + +_plot(data) diff --git a/testsuites/smptests/smpopenmp01/smpopenmp01.scn b/testsuites/smptests/smpopenmp01/smpopenmp01.scn index 6f63ddca1d..2d6c944d3f 100644 --- a/testsuites/smptests/smpopenmp01/smpopenmp01.scn +++ b/testsuites/smptests/smpopenmp01/smpopenmp01.scn @@ -1,81 +1,64 @@ + + SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020 + Bug-reports to jiri@gaisler.se + + GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks + + Loaded build/sparc/gr740/testsuites/smptests/smpopenmp01.exe, entry 0x00000000 + + *** BEGIN OF TEST SMPOPENMP 1 *** -*** TEST VERSION: 5.0.0.4c8cffc19865eaa3b033ce2776bcce9992f24b18 +*** TEST VERSION: 6.0.0.43eecff0b1b2915b87d5324ae562888851cabdaf *** TEST STATE: EXPECTED_PASS -*** TEST BUILD: RTEMS_POSIX_API RTEMS_SMP -*** TEST TOOLS: 7.3.0 20180125 (RTEMS 5, RSB 6d9c77c77d271d1fc2dfe8493d6713930b52a6dd, Newlib 3.0.0) -<SMPOpenMP01> - <Microbench numThreads="1" majorLoopCount="20"> - <BarrierBench unit="s">0.720318</BarrierBench> - <ParallelBench unit="s">1.121403</ParallelBench> - <StaticBench unit="s">0.059288</StaticBench> - <DynamicBench unit="s">0.440113</DynamicBench> - <GuidedBench unit="s">0.003230</GuidedBench> - <RuntimeBench unit="s">0.440121</RuntimeBench> - <SingleBench unit="s">0.116486</SingleBench> - </Microbench> - <Microbench numThreads="2" majorLoopCount="20"> - <BarrierBench unit="s">0.416734</BarrierBench> - <ParallelBench unit="s">0.259013</ParallelBench> - <StaticBench unit="s">0.015311</StaticBench> - <DynamicBench unit="s">0.196751</DynamicBench> - <GuidedBench unit="s">0.002367</GuidedBench> - <RuntimeBench unit="s">0.199640</RuntimeBench> - <SingleBench unit="s">0.077629</SingleBench> - </Microbench> - <Microbench numThreads="3" majorLoopCount="20"> - <BarrierBench unit="s">0.748332</BarrierBench> - <ParallelBench unit="s">0.387318</ParallelBench> - <StaticBench unit="s">0.021244</StaticBench> - <DynamicBench unit="s">0.141558</DynamicBench> - <GuidedBench unit="s">0.001544</GuidedBench> - <RuntimeBench unit="s">0.142693</RuntimeBench> - <SingleBench unit="s">0.117683</SingleBench> - </Microbench> - <Microbench numThreads="4" majorLoopCount="20"> - <BarrierBench unit="s">0.552830</BarrierBench> - <ParallelBench unit="s">0.323241</ParallelBench> - <StaticBench unit="s">0.017796</StaticBench> - <DynamicBench unit="s">0.099475</DynamicBench> - <GuidedBench unit="s">0.001259</GuidedBench> - <RuntimeBench unit="s">0.100053</RuntimeBench> - <SingleBench unit="s">0.091069</SingleBench> - </Microbench> - <Microbench numThreads="5" majorLoopCount="20"> - <BarrierBench unit="s">0.882791</BarrierBench> - <ParallelBench unit="s">0.452561</ParallelBench> - <StaticBench unit="s">0.023620</StaticBench> - <DynamicBench unit="s">0.094107</DynamicBench> - <GuidedBench unit="s">0.000989</GuidedBench> - <RuntimeBench unit="s">0.093911</RuntimeBench> - <SingleBench unit="s">0.130070</SingleBench> - </Microbench> - <Microbench numThreads="6" majorLoopCount="20"> - <BarrierBench unit="s">0.670385</BarrierBench> - <ParallelBench unit="s">0.393587</ParallelBench> - <StaticBench unit="s">0.021141</StaticBench> - <DynamicBench unit="s">0.072322</DynamicBench> - <GuidedBench unit="s">0.000937</GuidedBench> - <RuntimeBench unit="s">0.069804</RuntimeBench> - <SingleBench unit="s">0.104107</SingleBench> - </Microbench> - <Microbench numThreads="7" majorLoopCount="20"> - <BarrierBench unit="s">1.031511</BarrierBench> - <ParallelBench unit="s">0.466571</ParallelBench> - <StaticBench unit="s">0.024944</StaticBench> - <DynamicBench unit="s">0.069194</DynamicBench> - <GuidedBench unit="s">0.000814</GuidedBench> - <RuntimeBench unit="s">0.069596</RuntimeBench> - <SingleBench unit="s">0.133137</SingleBench> - </Microbench> - <Microbench numThreads="8" majorLoopCount="20"> - <BarrierBench unit="s">0.761015</BarrierBench> - <ParallelBench unit="s">0.452577</ParallelBench> - <StaticBench unit="s">0.023979</StaticBench> - <DynamicBench unit="s">0.061193</DynamicBench> - <GuidedBench unit="s">0.000799</GuidedBench> - <RuntimeBench unit="s">0.061519</RuntimeBench> - <SingleBench unit="s">0.114285</SingleBench> - </Microbench> -</SMPOpenMP01> +*** TEST BUILD: RTEMS_SMP +*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448) +*** BEGIN OF JSON DATA *** +[ + { + "num-threads": 1, + "major-loop-count": 1, + "barrier-bench": 0.269517, + "parallel-bench": 1.277477, + "static-bench": 0.073541, + "dynamic-bench": 0.118271, + "guided-bench": 0.008089, + "runtime-bench": 0.142307, + "single-bench": 0.034294 + }, { + "num-threads": 2, + "major-loop-count": 1, + "barrier-bench": 0.269345, + "parallel-bench": 0.557423, + "static-bench": 0.033622, + "dynamic-bench": 0.059762, + "guided-bench": 0.004065, + "runtime-bench": 0.072107, + "single-bench": 0.033129 + }, { + "num-threads": 3, + "major-loop-count": 1, + "barrier-bench": 0.271522, + "parallel-bench": 0.631576, + "static-bench": 0.036074, + "dynamic-bench": 0.039981, + "guided-bench": 0.002757, + "runtime-bench": 0.049072, + "single-bench": 0.033129 + }, { + "num-threads": 4, + "major-loop-count": 1, + "barrier-bench": 0.272048, + "parallel-bench": 0.705746, + "static-bench": 0.039061, + "dynamic-bench": 0.030069, + "guided-bench": 0.002095, + "runtime-bench": 0.037570, + "single-bench": 0.033176 + } +] +*** END OF JSON DATA *** *** END OF TEST SMPOPENMP 1 *** + +cpu 0 in error mode (tt = 0x80) + 706370700 0000cac0: 91d02000 ta 0x0 diff --git a/testsuites/smptests/smppsxmutex01/init.c b/testsuites/smptests/smppsxmutex01/init.c index f5aacb42d8..6532f5868d 100644 --- a/testsuites/smptests/smppsxmutex01/init.c +++ b/testsuites/smptests/smppsxmutex01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,25 +55,11 @@ static test_context test_instance; static void *thread_b(void *arg) { test_context *ctx; - rtems_id scheduler_b_id; - rtems_status_code sc; - rtems_task_priority prio; int prio_ceiling; int eno; ctx = arg; - rtems_test_assert(rtems_scheduler_get_processor() == 0); - - sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id); - rtems_test_assert(sc == RTEMS_SUCCESSFUL); - - sc = rtems_task_set_priority(pthread_self(), RTEMS_CURRENT_PRIORITY, &prio); - rtems_test_assert(sc == RTEMS_SUCCESSFUL); - - sc = rtems_task_set_scheduler(pthread_self(), scheduler_b_id, prio); - rtems_test_assert(sc == RTEMS_SUCCESSFUL); - rtems_test_assert(rtems_scheduler_get_processor() == 1); eno = pthread_mutex_init(&ctx->mtx_b, &ctx->mtx_attr); @@ -132,8 +118,24 @@ static void test(test_context *ctx) rtems_test_assert(eno == 0); if (cpu_count > 1) { + rtems_id scheduler_a_id; + rtems_id scheduler_b_id; + rtems_status_code sc; + rtems_task_priority prio; void *exit_code; + sc = rtems_scheduler_ident(SCHED_A, &scheduler_a_id); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_task_set_priority(pthread_self(), RTEMS_CURRENT_PRIORITY, &prio); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_task_set_scheduler(pthread_self(), scheduler_b_id, prio); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + eno = pthread_create(&ctx->thread_b, NULL, thread_b, ctx); rtems_test_assert(eno == 0); @@ -141,6 +143,9 @@ static void test(test_context *ctx) eno = pthread_join(ctx->thread_b, &exit_code); rtems_test_assert(eno == 0); rtems_test_assert(exit_code == ctx); + + sc = rtems_task_set_scheduler(pthread_self(), scheduler_a_id, prio); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); } eno = pthread_mutex_destroy(&ctx->mtx_a); diff --git a/testsuites/smptests/smppsxsignal01/init.c b/testsuites/smptests/smppsxsignal01/init.c index 884b95535f..4b7109399a 100644 --- a/testsuites/smptests/smppsxsignal01/init.c +++ b/testsuites/smptests/smppsxsignal01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpschededf01/init.c b/testsuites/smptests/smpschededf01/init.c index fc7349b1a6..16af1b58e7 100644 --- a/testsuites/smptests/smpschededf01/init.c +++ b/testsuites/smptests/smpschededf01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2017, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpschededf02/init.c b/testsuites/smptests/smpschededf02/init.c index fe6312cd49..01b52cb056 100644 --- a/testsuites/smptests/smpschededf02/init.c +++ b/testsuites/smptests/smpschededf02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016, 2020 embedded brains GmbH. All rights reserved. + * Copyright (C) 2016, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpschededf03/init.c b/testsuites/smptests/smpschededf03/init.c index 18ea5cd939..ca205b758b 100644 --- a/testsuites/smptests/smpschededf03/init.c +++ b/testsuites/smptests/smpschededf03/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpschededf04/init.c b/testsuites/smptests/smpschededf04/init.c index 4889480084..11a477d9a0 100644 --- a/testsuites/smptests/smpschededf04/init.c +++ b/testsuites/smptests/smpschededf04/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2018 embedded brains GmbH. All rights reserved. + * Copyright (c) 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpscheduler01/init.c b/testsuites/smptests/smpscheduler01/init.c index 7d862a9586..30c5f44f80 100644 --- a/testsuites/smptests/smpscheduler01/init.c +++ b/testsuites/smptests/smpscheduler01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpscheduler02/init.c b/testsuites/smptests/smpscheduler02/init.c index 401ae7efd1..593dc80a5d 100644 --- a/testsuites/smptests/smpscheduler02/init.c +++ b/testsuites/smptests/smpscheduler02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpscheduler03/init.c b/testsuites/smptests/smpscheduler03/init.c index 87803a2c6b..39dea836e1 100644 --- a/testsuites/smptests/smpscheduler03/init.c +++ b/testsuites/smptests/smpscheduler03/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpscheduler03/test.c b/testsuites/smptests/smpscheduler03/test.c index 154941f9e6..a49fac72f8 100644 --- a/testsuites/smptests/smpscheduler03/test.c +++ b/testsuites/smptests/smpscheduler03/test.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpscheduler04/init.c b/testsuites/smptests/smpscheduler04/init.c index 3bab47d034..a3b4666c32 100644 --- a/testsuites/smptests/smpscheduler04/init.c +++ b/testsuites/smptests/smpscheduler04/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpscheduler05/init.c b/testsuites/smptests/smpscheduler05/init.c index a57e239acf..733e9924b0 100644 --- a/testsuites/smptests/smpscheduler05/init.c +++ b/testsuites/smptests/smpscheduler05/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpscheduler06/init.c b/testsuites/smptests/smpscheduler06/init.c index 7d482e0ed9..2650f37ffb 100644 --- a/testsuites/smptests/smpscheduler06/init.c +++ b/testsuites/smptests/smpscheduler06/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpscheduler07/init.c b/testsuites/smptests/smpscheduler07/init.c index c824d8ddfe..c97788eb0e 100644 --- a/testsuites/smptests/smpscheduler07/init.c +++ b/testsuites/smptests/smpscheduler07/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpsignal01/init.c b/testsuites/smptests/smpsignal01/init.c index eba5ee1593..1d22bce6da 100644 --- a/testsuites/smptests/smpsignal01/init.c +++ b/testsuites/smptests/smpsignal01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2013, 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpstart01/init.c b/testsuites/smptests/smpstart01/init.c index 8fd2cab70e..28f185eb2d 100644 --- a/testsuites/smptests/smpstart01/init.c +++ b/testsuites/smptests/smpstart01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpstrongapa01/init.c b/testsuites/smptests/smpstrongapa01/init.c index 80431086cb..26fc2e9c4c 100644 --- a/testsuites/smptests/smpstrongapa01/init.c +++ b/testsuites/smptests/smpstrongapa01/init.c @@ -2,7 +2,7 @@ /* * Copyright (c) 2020 Richi Dubey ( richidubey@gmail.com ) - * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2016, 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpswitchextension01/init.c b/testsuites/smptests/smpswitchextension01/init.c index 3101ebca60..5f8d834305 100644 --- a/testsuites/smptests/smpswitchextension01/init.c +++ b/testsuites/smptests/smpswitchextension01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpthreadlife01/init.c b/testsuites/smptests/smpthreadlife01/init.c index d88c7d9716..baec637dac 100644 --- a/testsuites/smptests/smpthreadlife01/init.c +++ b/testsuites/smptests/smpthreadlife01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpthreadpin01/init.c b/testsuites/smptests/smpthreadpin01/init.c index 5e5f178aa4..2eae74c961 100644 --- a/testsuites/smptests/smpthreadpin01/init.c +++ b/testsuites/smptests/smpthreadpin01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2018 embedded brains GmbH. All rights reserved. + * Copyright (c) 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpunsupported01/init.c b/testsuites/smptests/smpunsupported01/init.c index f03e1d3c86..4a6a088148 100644 --- a/testsuites/smptests/smpunsupported01/init.c +++ b/testsuites/smptests/smpunsupported01/init.c @@ -2,7 +2,7 @@ /* * Copyright (c) 2014 On-Line Applications Research Corporation (OAR). - * Copyright (c) 2013, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2013, 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/smptests/smpwakeafter01/init.c b/testsuites/smptests/smpwakeafter01/init.c index 5403a489d5..88953d4b34 100644 --- a/testsuites/smptests/smpwakeafter01/init.c +++ b/testsuites/smptests/smpwakeafter01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sp01/init.c b/testsuites/sptests/sp01/init.c index 2384430824..26d715b0ba 100644 --- a/testsuites/sptests/sp01/init.c +++ b/testsuites/sptests/sp01/init.c @@ -35,7 +35,8 @@ const char rtems_test_name[] = "SP 1"; -RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char Task_1_storage[ +static RTEMS_NOINIT RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) char +Task_1_storage[ RTEMS_TASK_STORAGE_SIZE( 2 * RTEMS_MINIMUM_STACK_SIZE, RTEMS_FLOATING_POINT ) ]; diff --git a/testsuites/sptests/sp01/system.h b/testsuites/sptests/sp01/system.h index 46fa76f1e4..782fd929a7 100644 --- a/testsuites/sptests/sp01/system.h +++ b/testsuites/sptests/sp01/system.h @@ -48,6 +48,13 @@ rtems_task Task_1_through_3( */ #define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM +/* + * This test requires full control over the present thread-local objects. In + * certain Newlib configurations, the Newlib reentrancy support may add + * thread-local objects. + */ +#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY + #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/sptests/sp07/system.h b/testsuites/sptests/sp07/system.h index cc5f4eb6e7..bcd7b50d1c 100644 --- a/testsuites/sptests/sp07/system.h +++ b/testsuites/sptests/sp07/system.h @@ -111,7 +111,7 @@ TEST_EXTERN int Task_restarted[ RTEMS_ARRAY_SIZE( Task_id ) ]; TEST_EXTERN int Task_deleted[ RTEMS_ARRAY_SIZE( Task_id ) ]; -RTEMS_INLINE_ROUTINE void assert_extension_counts( const int *table, int tasks ) +static inline void assert_extension_counts( const int *table, int tasks ) { size_t i; diff --git a/testsuites/sptests/sp2038/init.c b/testsuites/sptests/sp2038/init.c index c280e79b7c..89462beb84 100644 --- a/testsuites/sptests/sp2038/init.c +++ b/testsuites/sptests/sp2038/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2011, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2011, 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sp2038/sp2038.doc b/testsuites/sptests/sp2038/sp2038.doc index 7f5d3ff7ae..056814a58e 100644 --- a/testsuites/sptests/sp2038/sp2038.doc +++ b/testsuites/sptests/sp2038/sp2038.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2011 embedded brains GmbH. All rights reserved. +# Copyright (c) 2011 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sp21/sp21.scn b/testsuites/sptests/sp21/sp21.scn index 6c099dfc13..87c798d5bd 100644 --- a/testsuites/sptests/sp21/sp21.scn +++ b/testsuites/sptests/sp21/sp21.scn @@ -25,8 +25,5 @@ rtems_io_register_driver - RTEMS_SUCCESSFUL - overwrite NULL rtems_io_register_driver - RTEMS_TOO_MANY - no slots rtems_io_register_driver - RTEMS_RESOURCE_IN_USE - major in use rtems_io_unregister_driver - RTEMS_SUCCESSFUL -rtems_io_lookup_name( "", &info ) - RTEMS_UNSATISFIED -rtems_io_lookup_name( "/dev", &info ) - RTEMS_UNSATISFIED -rtems_io_lookup_name( "/dev/null", &info ) - RTEMS_SUCCESSFUL ----- TESTING THE ZERO DRIVER CHECKS ----- *** END OF TEST 21 *** diff --git a/testsuites/sptests/sp31/task1.c b/testsuites/sptests/sp31/task1.c index 3bb56cd99d..09580ee457 100644 --- a/testsuites/sptests/sp31/task1.c +++ b/testsuites/sptests/sp31/task1.c @@ -4,7 +4,7 @@ * COPYRIGHT (c) 1989-2011. * On-Line Applications Research Corporation (OAR). * - * Copyright (c) 2009 embedded brains GmbH. + * Copyright (c) 2009 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sp37/init.c b/testsuites/sptests/sp37/init.c index 2ee21b592e..e8af725a75 100644 --- a/testsuites/sptests/sp37/init.c +++ b/testsuites/sptests/sp37/init.c @@ -40,6 +40,8 @@ #define CONFIGURE_INIT #include "system.h" +#include <rtems/sysinit.h> + const char rtems_test_name[] = "SP 37"; /* prototypes */ @@ -67,6 +69,19 @@ rtems_timer_service_routine test_isr_in_progress( #define TEST_ISR_EVENT RTEMS_EVENT_0 +static uint32_t boot_isr_level; + +static void set_boot_isr_level( void ) +{ + boot_isr_level = _ISR_Get_level(); +} + +RTEMS_SYSINIT_ITEM( + set_boot_isr_level, + RTEMS_SYSINIT_DEVICE_DRIVERS, + RTEMS_SYSINIT_ORDER_MIDDLE +); + typedef struct { ISR_Level actual_level; rtems_id master_task_id; @@ -154,6 +169,9 @@ static void test_isr_level( void ) ISR_Level current = 0; ISR_Level last_proper_level; + /* Interrupts shall be disabled during system initialization */ + rtems_test_assert( boot_isr_level != 0 ); + _ISR_Set_level( current ); rtems_test_assert( _ISR_Get_level() == current ); diff --git a/testsuites/sptests/sp40/init.c b/testsuites/sptests/sp40/init.c index ae7aba0a63..523e074cc6 100644 --- a/testsuites/sptests/sp40/init.c +++ b/testsuites/sptests/sp40/init.c @@ -6,7 +6,7 @@ * COPYRIGHT (c) 1989-2012. * On-Line Applications Research Corporation (OAR). * - * Copyright (c) 2009 embedded brains GmbH. + * Copyright (c) 2009 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sp54/init.c b/testsuites/sptests/sp54/init.c index 712a4ae8db..172eb2b1b0 100644 --- a/testsuites/sptests/sp54/init.c +++ b/testsuites/sptests/sp54/init.c @@ -37,6 +37,10 @@ #include "config.h" #endif +#include <rtems/sysinit.h> +#include <rtems/score/memory.h> +#include <rtems/score/thread.h> + #include <tmacros.h> const char rtems_test_name[] = "SP 54"; @@ -48,12 +52,6 @@ static void *Init( uintptr_t ignored ) rtems_id id; const rtems_api_configuration_table *config; - /* - * It is possible that since this thread prints and there is no idle - * task, that the system could fail miserably. :( - */ - TEST_BEGIN(); - puts( "Init - use valid id of API class with no objects" ); status = rtems_task_set_priority( rtems_build_id(0x2,0x1,0x01,0x0001) /* 0xa010001 */, @@ -80,6 +78,44 @@ static void *Init( uintptr_t ignored ) rtems_test_exit(0); } +static void check_dirty_memory( void ) +{ + unsigned char *p; + + TEST_BEGIN(); + + p = _Memory_Allocate( _Memory_Get(), sizeof( *p ), RTEMS_ALIGNOF( *p ) ); + rtems_test_assert( p != NULL ); + rtems_test_assert( *p == 0xcf ); + + p = (unsigned char *) _Thread_Information.Objects.initial_objects; + rtems_test_assert( *p == 0xcf ); +} + +RTEMS_SYSINIT_ITEM( + check_dirty_memory, + RTEMS_SYSINIT_DIRTY_MEMORY, + RTEMS_SYSINIT_ORDER_LAST +); + +static void check_zero_workspace_automatically( void ) +{ + unsigned char *p; + + p = _Memory_Allocate( _Memory_Get(), sizeof( *p ), RTEMS_ALIGNOF( *p ) ); + rtems_test_assert( p != NULL ); + rtems_test_assert( *p == 0 ); + + p = (unsigned char *) _Thread_Information.Objects.initial_objects; + rtems_test_assert( *p == 0 ); +} + +RTEMS_SYSINIT_ITEM( + check_zero_workspace_automatically, + RTEMS_SYSINIT_ZERO_MEMORY, + RTEMS_SYSINIT_ORDER_LAST +); + /* configuration information */ #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER diff --git a/testsuites/sptests/sp68/init.c b/testsuites/sptests/sp68/init.c index 8e0bd1c8c8..6f8d02e945 100644 --- a/testsuites/sptests/sp68/init.c +++ b/testsuites/sptests/sp68/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2009-2015 embedded brains GmbH. + * Copyright (C) 2009, 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sp68/sp68.doc b/testsuites/sptests/sp68/sp68.doc index 5402d5d3ea..91e385ef2f 100644 --- a/testsuites/sptests/sp68/sp68.doc +++ b/testsuites/sptests/sp68/sp68.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2009 embedded brains GmbH. +# Copyright (c) 2009 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spatomic01/init.c b/testsuites/sptests/spatomic01/init.c index 5c9599205a..58414b042a 100644 --- a/testsuites/sptests/spatomic01/init.c +++ b/testsuites/sptests/spatomic01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2015 embedded brains GmbH. All rights reserved. + * Copyright (C) 2013, 2015 embedded brains GmbH & Co. KG * * Copyright (c) 2013 Deng Hengyi. * diff --git a/testsuites/sptests/spcache01/init.c b/testsuites/sptests/spcache01/init.c index 4b64a1da75..89fe6794fe 100644 --- a/testsuites/sptests/spcache01/init.c +++ b/testsuites/sptests/spcache01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spclock_err01/init.c b/testsuites/sptests/spclock_err01/init.c index 889f03e8ae..b6d5f196af 100644 --- a/testsuites/sptests/spclock_err01/init.c +++ b/testsuites/sptests/spclock_err01/init.c @@ -226,4 +226,5 @@ rtems_task Init( print_time( "TA1 - current time - ", &time, "\n" ); TEST_END(); + rtems_test_exit( 0 ); } diff --git a/testsuites/sptests/spclock_err02/init.c b/testsuites/sptests/spclock_err02/init.c index 11061ccc58..91519fbf43 100644 --- a/testsuites/sptests/spclock_err02/init.c +++ b/testsuites/sptests/spclock_err02/init.c @@ -136,6 +136,7 @@ rtems_task Init( print_time( "TA1 - rtems_clock_get_tod - ", &time, " - RTEMS_SUCCESSFUL\n" ); TEST_END(); + rtems_test_exit( 0 ); } #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER diff --git a/testsuites/sptests/spconfig01/init.c b/testsuites/sptests/spconfig01/init.c index 8aa2b26857..90157028a9 100644 --- a/testsuites/sptests/spconfig01/init.c +++ b/testsuites/sptests/spconfig01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 embedded brains GmbH. All rights reserved. + * Copyright (c) 2018 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/spconfig02/init.c b/testsuites/sptests/spconfig02/init.c index 91f687c8fb..f25ff5efe7 100644 --- a/testsuites/sptests/spconfig02/init.c +++ b/testsuites/sptests/spconfig02/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 embedded brains GmbH. All rights reserved. + * Copyright (c) 2018 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/spconsole01/init.c b/testsuites/sptests/spconsole01/init.c index 36ab3c5d38..87924a35dc 100644 --- a/testsuites/sptests/spconsole01/init.c +++ b/testsuites/sptests/spconsole01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/spcontext01/init.c b/testsuites/sptests/spcontext01/init.c index 5382e035b8..d8d0a2d3aa 100644 --- a/testsuites/sptests/spcontext01/init.c +++ b/testsuites/sptests/spcontext01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2013-2015 embedded brains GmbH. All rights reserved. + * Copyright (C) 2013, 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spcpucounter01/init.c b/testsuites/sptests/spcpucounter01/init.c index fca5cda6ce..0022806ec6 100644 --- a/testsuites/sptests/spcpucounter01/init.c +++ b/testsuites/sptests/spcpucounter01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spcxx01/init.cc b/testsuites/sptests/spcxx01/init.cc index b7be220092..0f1412f292 100644 --- a/testsuites/sptests/spcxx01/init.cc +++ b/testsuites/sptests/spcxx01/init.cc @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (C) 2018 embedded brains GmbH + * Copyright (C) 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/speventsystem01/init.c b/testsuites/sptests/speventsystem01/init.c index 5ea56de474..063e161a71 100644 --- a/testsuites/sptests/speventsystem01/init.c +++ b/testsuites/sptests/speventsystem01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/speventtransient01/init.c b/testsuites/sptests/speventtransient01/init.c index 3c4d60098d..c07a77d710 100644 --- a/testsuites/sptests/speventtransient01/init.c +++ b/testsuites/sptests/speventtransient01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spextensions01/init.c b/testsuites/sptests/spextensions01/init.c index 66e8fac260..59a22293c1 100644 --- a/testsuites/sptests/spextensions01/init.c +++ b/testsuites/sptests/spextensions01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2016, 2017 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -30,6 +30,11 @@ static int active_extensions = 2; static rtems_id master_task; +static bool before_initialization(void) +{ + return _System_state_Is_before_initialization(_System_state_Get()); +} + static bool before_multitasking(void) { return _System_state_Is_before_multitasking(_System_state_Get()); @@ -61,9 +66,13 @@ static void assert_life_protected_thread_context(void) static void assert_allocator_protected_thread_context(void) { - assert(_Thread_Dispatch_is_enabled() || before_multitasking()); + assert( + _Thread_Dispatch_is_enabled() || + before_initialization() || + before_multitasking() + ); assert(_RTEMS_Allocator_is_owner()); - assert(life_protected() || before_multitasking()); + assert(life_protected()); } static void assert_thread_dispatch_disabled_context(void) diff --git a/testsuites/sptests/spfatal26/init.c b/testsuites/sptests/spfatal26/init.c index a23ff7dbce..892d4b941d 100644 --- a/testsuites/sptests/spfatal26/init.c +++ b/testsuites/sptests/spfatal26/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2012, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spfatal28/init.c b/testsuites/sptests/spfatal28/init.c index 77ff9a7606..17da04ff7f 100644 --- a/testsuites/sptests/spfatal28/init.c +++ b/testsuites/sptests/spfatal28/init.c @@ -7,7 +7,7 @@ #include "../spfatal_support/spfatal.h" /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spfatal29/init.c b/testsuites/sptests/spfatal29/init.c index 74a06488a7..6da87fdaab 100644 --- a/testsuites/sptests/spfatal29/init.c +++ b/testsuites/sptests/spfatal29/init.c @@ -7,7 +7,7 @@ #include "../spfatal_support/spfatal.h" /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spfatal30/init.c b/testsuites/sptests/spfatal30/init.c index eecfacd4ab..e6656e1694 100644 --- a/testsuites/sptests/spfatal30/init.c +++ b/testsuites/sptests/spfatal30/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spfatal31/init.c b/testsuites/sptests/spfatal31/init.c index 6dfdbbb386..9d93988628 100644 --- a/testsuites/sptests/spfatal31/init.c +++ b/testsuites/sptests/spfatal31/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spfatal32/init.c b/testsuites/sptests/spfatal32/init.c index 1a1e0bee79..48979cebd8 100644 --- a/testsuites/sptests/spfatal32/init.c +++ b/testsuites/sptests/spfatal32/init.c @@ -7,7 +7,7 @@ #include "../spfatal_support/spfatal.h" /* - * Copyright (c) 2018 embedded brains GmbH. All rights reserved. + * Copyright (c) 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spfatal33/init.c b/testsuites/sptests/spfatal33/init.c index a7218c596f..f60e3d38d9 100644 --- a/testsuites/sptests/spfatal33/init.c +++ b/testsuites/sptests/spfatal33/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spfatal34/init.c b/testsuites/sptests/spfatal34/init.c index 5c2ab0e735..608a50fcdb 100644 --- a/testsuites/sptests/spfatal34/init.c +++ b/testsuites/sptests/spfatal34/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spfatal36/init.c b/testsuites/sptests/spfatal36/init.c new file mode 100644 index 0000000000..b5e0fbdeed --- /dev/null +++ b/testsuites/sptests/spfatal36/init.c @@ -0,0 +1,63 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "../spfatal_support/spfatal.h" + +#include <rtems/sysinit.h> +#include <rtems/score/heapimpl.h> +#include <rtems/score/wkspace.h> + +#define FATAL_ERROR_TEST_NAME "36" + +#define FATAL_ERROR_DESCRIPTION "failure in idle task storage allocation" + +#define FATAL_ERROR_EXPECTED_SOURCE INTERNAL_ERROR_CORE + +#define FATAL_ERROR_EXPECTED_ERROR \ + INTERNAL_ERROR_NO_MEMORY_FOR_IDLE_TASK_STORAGE + +static void force_error( void ) +{ + RTEMS_UNREACHABLE(); +} + +static void empty_workspace( void ) +{ + (void) _Heap_Greedy_allocate( &_Workspace_Area, NULL, 0 ); +} + +RTEMS_SYSINIT_ITEM( + empty_workspace, + RTEMS_SYSINIT_IDLE_THREADS, + RTEMS_SYSINIT_ORDER_FIRST +); + +#include "../spfatal_support/spfatalimpl.h" diff --git a/testsuites/sptests/spfatal36/spfatal36.doc b/testsuites/sptests/spfatal36/spfatal36.doc new file mode 100644 index 0000000000..0719e8e01c --- /dev/null +++ b/testsuites/sptests/spfatal36/spfatal36.doc @@ -0,0 +1,11 @@ +This file describes the concepts tested by this test set. + +test set name: spfatal36 + +directives: + + - _Stack_Allocator_allocate_for_idle_workspace() + +concepts: + + - Provoke a memory allocation failure in the directive. diff --git a/testsuites/sptests/spglobalcon01/init.cc b/testsuites/sptests/spglobalcon01/init.cc index 661b828ddc..e81ae9b88b 100644 --- a/testsuites/sptests/spglobalcon01/init.cc +++ b/testsuites/sptests/spglobalcon01/init.cc @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spglobalcon02/init.c b/testsuites/sptests/spglobalcon02/init.c index 62d719cea3..bf7bcc080b 100644 --- a/testsuites/sptests/spglobalcon02/init.c +++ b/testsuites/sptests/spglobalcon02/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 embedded brains GmbH. All rights reserved. + * Copyright (c) 2018 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/spheapprot/init.c b/testsuites/sptests/spheapprot/init.c index e448b91590..8cda04ba95 100644 --- a/testsuites/sptests/spheapprot/init.c +++ b/testsuites/sptests/spheapprot/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2010 embedded brains GmbH. All rights reserved. + * Copyright (c) 2010 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spheapprot/spheapprot.doc b/testsuites/sptests/spheapprot/spheapprot.doc index 0ac3545ece..24660789ca 100644 --- a/testsuites/sptests/spheapprot/spheapprot.doc +++ b/testsuites/sptests/spheapprot/spheapprot.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2010 embedded brains GmbH. All rights reserved. +# Copyright (c) 2010 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spinternalerror01/init.c b/testsuites/sptests/spinternalerror01/init.c index 092443fbf2..78d59b832d 100644 --- a/testsuites/sptests/spinternalerror01/init.c +++ b/testsuites/sptests/spinternalerror01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * Copyright (c) 2012 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spinternalerror02/init.c b/testsuites/sptests/spinternalerror02/init.c index 08aeabd3a7..961321cb23 100644 --- a/testsuites/sptests/spinternalerror02/init.c +++ b/testsuites/sptests/spinternalerror02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2012, 2020 embedded brains GmbH. All rights reserved. + * Copyright (C) 2012, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -49,7 +49,7 @@ static void test_internal_error_text(void) } while ( text != text_last ); rtems_test_assert( - error - 3 == INTERNAL_ERROR_RTEMS_INIT_TASK_CONSTRUCT_FAILED + error - 3 == INTERNAL_ERROR_IDLE_THREAD_STACK_TOO_SMALL ); } diff --git a/testsuites/sptests/spintrcritical01/spintrcritical01impl.h b/testsuites/sptests/spintrcritical01/spintrcritical01impl.h index f963204647..8f18e08d0c 100644 --- a/testsuites/sptests/spintrcritical01/spintrcritical01impl.h +++ b/testsuites/sptests/spintrcritical01/spintrcritical01impl.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * COPYRIGHT (c) 1989-2012. * On-Line Applications Research Corporation (OAR). diff --git a/testsuites/sptests/spintrcritical08/init.c b/testsuites/sptests/spintrcritical08/init.c index fe9d696d01..d8cf13740b 100644 --- a/testsuites/sptests/spintrcritical08/init.c +++ b/testsuites/sptests/spintrcritical08/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * COPYRIGHT (c) 1989-2012. * On-Line Applications Research Corporation (OAR). diff --git a/testsuites/sptests/spintrcritical09/init.c b/testsuites/sptests/spintrcritical09/init.c index 206d336ecb..f63d19ac63 100644 --- a/testsuites/sptests/spintrcritical09/init.c +++ b/testsuites/sptests/spintrcritical09/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * COPYRIGHT (c) 1989-2012. * On-Line Applications Research Corporation (OAR). diff --git a/testsuites/sptests/spintrcritical10/init.c b/testsuites/sptests/spintrcritical10/init.c index b0f8f23075..d69af9cabd 100644 --- a/testsuites/sptests/spintrcritical10/init.c +++ b/testsuites/sptests/spintrcritical10/init.c @@ -4,7 +4,7 @@ * COPYRIGHT (c) 1989-2012. * On-Line Applications Research Corporation (OAR). * - * Copyright (c) 2013, 2020 embedded brains GmbH. + * Copyright (C) 2013, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spintrcritical11/spintrcritical11impl.h b/testsuites/sptests/spintrcritical11/spintrcritical11impl.h index e3a029f086..73f0dd66ba 100644 --- a/testsuites/sptests/spintrcritical11/spintrcritical11impl.h +++ b/testsuites/sptests/spintrcritical11/spintrcritical11impl.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * COPYRIGHT (c) 1989-2012. * On-Line Applications Research Corporation (OAR). diff --git a/testsuites/sptests/spintrcritical13/spintrcritical13impl.h b/testsuites/sptests/spintrcritical13/spintrcritical13impl.h index 7d95551526..3b7604ac92 100644 --- a/testsuites/sptests/spintrcritical13/spintrcritical13impl.h +++ b/testsuites/sptests/spintrcritical13/spintrcritical13impl.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). diff --git a/testsuites/sptests/spintrcritical15/init.c b/testsuites/sptests/spintrcritical15/init.c index 46c0805580..3295b6214b 100644 --- a/testsuites/sptests/spintrcritical15/init.c +++ b/testsuites/sptests/spintrcritical15/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). diff --git a/testsuites/sptests/spintrcritical16/init.c b/testsuites/sptests/spintrcritical16/init.c index 80763391ea..612f92f4e1 100644 --- a/testsuites/sptests/spintrcritical16/init.c +++ b/testsuites/sptests/spintrcritical16/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). diff --git a/testsuites/sptests/spintrcritical18/init.c b/testsuites/sptests/spintrcritical18/init.c index 0a8aadda35..61ff82df55 100644 --- a/testsuites/sptests/spintrcritical18/init.c +++ b/testsuites/sptests/spintrcritical18/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2012, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spintrcritical20/init.c b/testsuites/sptests/spintrcritical20/init.c index 81fc8cb34f..c1521c8969 100644 --- a/testsuites/sptests/spintrcritical20/init.c +++ b/testsuites/sptests/spintrcritical20/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2013, 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2013, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spintrcritical21/init.c b/testsuites/sptests/spintrcritical21/init.c index 14b4d3f0d9..6c675e1669 100644 --- a/testsuites/sptests/spintrcritical21/init.c +++ b/testsuites/sptests/spintrcritical21/init.c @@ -3,7 +3,7 @@ /* * Classic API Signal to Task from ISR * - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * COPYRIGHT (c) 1989-2011. * On-Line Applications Research Corporation (OAR). diff --git a/testsuites/sptests/spintrcritical22/init.c b/testsuites/sptests/spintrcritical22/init.c index d38bbbf0b2..73c9c6226c 100644 --- a/testsuites/sptests/spintrcritical22/init.c +++ b/testsuites/sptests/spintrcritical22/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2014, 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2014, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spintrcritical23/init.c b/testsuites/sptests/spintrcritical23/init.c index 1d52b8f9a1..ebc50fdb2d 100644 --- a/testsuites/sptests/spintrcritical23/init.c +++ b/testsuites/sptests/spintrcritical23/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2015, 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2015, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spintrcritical24/init.c b/testsuites/sptests/spintrcritical24/init.c index 7392ee04e2..6f686b1564 100644 --- a/testsuites/sptests/spintrcritical24/init.c +++ b/testsuites/sptests/spintrcritical24/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2017, 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2017, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/splinkersets01/content.c b/testsuites/sptests/splinkersets01/content.c index 2179342a50..5dedcb9060 100644 --- a/testsuites/sptests/splinkersets01/content.c +++ b/testsuites/sptests/splinkersets01/content.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/splinkersets01/init.c b/testsuites/sptests/splinkersets01/init.c index 87d9558a87..059b4e230c 100644 --- a/testsuites/sptests/splinkersets01/init.c +++ b/testsuites/sptests/splinkersets01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/splinkersets01/item-a.c b/testsuites/sptests/splinkersets01/item-a.c index d0f615a97d..305c952d83 100644 --- a/testsuites/sptests/splinkersets01/item-a.c +++ b/testsuites/sptests/splinkersets01/item-a.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/splinkersets01/item-ca.c b/testsuites/sptests/splinkersets01/item-ca.c index 9e09f68b33..e85c0c0855 100644 --- a/testsuites/sptests/splinkersets01/item-ca.c +++ b/testsuites/sptests/splinkersets01/item-ca.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/splinkersets01/sets.c b/testsuites/sptests/splinkersets01/sets.c index f7e1d222d4..a7b930dbf5 100644 --- a/testsuites/sptests/splinkersets01/sets.c +++ b/testsuites/sptests/splinkersets01/sets.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/splinkersets01/splinkersets01.h b/testsuites/sptests/splinkersets01/splinkersets01.h index 82d1b188e0..0581204765 100644 --- a/testsuites/sptests/splinkersets01/splinkersets01.h +++ b/testsuites/sptests/splinkersets01/splinkersets01.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/spmisc01/init.c b/testsuites/sptests/spmisc01/init.c index d7658fc9b7..8c46245af9 100644 --- a/testsuites/sptests/spmisc01/init.c +++ b/testsuites/sptests/spmisc01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2018, 2019 embedded brains GmbH + * Copyright (C) 2018, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -122,9 +122,14 @@ static int obfuscate_variable(int i) return i; } +static int global_symbol_base; + RTEMS_DECLARE_GLOBAL_SYMBOL(a_global_symbol); -RTEMS_DEFINE_GLOBAL_SYMBOL(a_global_symbol, 0xabc); +RTEMS_DEFINE_GLOBAL_SYMBOL( + a_global_symbol, + RTEMS_SYMBOL_NAME(global_symbol_base) + 0xabc +); RTEMS_STATIC_ASSERT(0 != 1, zero_neq_one); @@ -243,7 +248,9 @@ static void Init(rtems_task_argument arg) unreachable(); rtems_test_assert(printflike_func("%i", 0) == 56); rtems_test_assert(obfuscate_variable(63) == 63); - rtems_test_assert((uintptr_t)a_global_symbol == 0xabc); + rtems_test_assert( + (uintptr_t) a_global_symbol - (uintptr_t) &global_symbol_base == 0xabc + ); rtems_test_assert(RTEMS_ARRAY_SIZE(array) == 3); rtems_test_assert(sizeof(zero_length_array_struct) == 4); container_of(); diff --git a/testsuites/sptests/spmisc01/spmisc01.h b/testsuites/sptests/spmisc01/spmisc01.h index 6dbf9ca23c..ee04e36cde 100644 --- a/testsuites/sptests/spmisc01/spmisc01.h +++ b/testsuites/sptests/spmisc01/spmisc01.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spmisc01/strong.c b/testsuites/sptests/spmisc01/strong.c index 6a3d9c8561..d330e5ed44 100644 --- a/testsuites/sptests/spmisc01/strong.c +++ b/testsuites/sptests/spmisc01/strong.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spmkdir/init.c b/testsuites/sptests/spmkdir/init.c index dd9b3aab7d..7eea58d86d 100644 --- a/testsuites/sptests/spmkdir/init.c +++ b/testsuites/sptests/spmkdir/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2010 embedded brains GmbH. All rights reserved. + * Copyright (c) 2010 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spmrsp01/init.c b/testsuites/sptests/spmrsp01/init.c index 40111dc806..a5c130e1c2 100644 --- a/testsuites/sptests/spmrsp01/init.c +++ b/testsuites/sptests/spmrsp01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spmutex01/init.c b/testsuites/sptests/spmutex01/init.c index f6e3a987f2..12590317c5 100644 --- a/testsuites/sptests/spmutex01/init.c +++ b/testsuites/sptests/spmutex01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spnsext01/init.c b/testsuites/sptests/spnsext01/init.c index a786574032..b45da45a49 100644 --- a/testsuites/sptests/spnsext01/init.c +++ b/testsuites/sptests/spnsext01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2011 embedded brains GmbH. All rights reserved. + * Copyright (c) 2011 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spnsext01/spnsext01.doc b/testsuites/sptests/spnsext01/spnsext01.doc index 7e926c6899..27c9f0c32e 100644 --- a/testsuites/sptests/spnsext01/spnsext01.doc +++ b/testsuites/sptests/spnsext01/spnsext01.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2011 embedded brains GmbH. All rights reserved. +# Copyright (c) 2011 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spntp01/init.c b/testsuites/sptests/spntp01/init.c index eb5b1ca56c..f6f6252bcf 100644 --- a/testsuites/sptests/spntp01/init.c +++ b/testsuites/sptests/spntp01/init.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: BSD-2-Clause * - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sppercpudata01/init.c b/testsuites/sptests/sppercpudata01/init.c index d76ba94d28..24ad75b607 100644 --- a/testsuites/sptests/sppercpudata01/init.c +++ b/testsuites/sptests/sppercpudata01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2018 embedded brains GmbH. All rights reserved. + * Copyright (c) 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sppercpudata01/item.c b/testsuites/sptests/sppercpudata01/item.c index 4a6ee46c8b..295e2855ee 100644 --- a/testsuites/sptests/sppercpudata01/item.c +++ b/testsuites/sptests/sppercpudata01/item.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2018 embedded brains GmbH. All rights reserved. + * Copyright (c) 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sppercpudata01/sppercpudata01.h b/testsuites/sptests/sppercpudata01/sppercpudata01.h index 1dde0071c8..2913d3456f 100644 --- a/testsuites/sptests/sppercpudata01/sppercpudata01.h +++ b/testsuites/sptests/sppercpudata01/sppercpudata01.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2018 embedded brains GmbH. All rights reserved. + * Copyright (c) 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sppps01/init.c b/testsuites/sptests/sppps01/init.c index 996a3a1e16..8dcce17769 100644 --- a/testsuites/sptests/sppps01/init.c +++ b/testsuites/sptests/sppps01/init.c @@ -46,6 +46,7 @@ const char rtems_test_name[] = "SPPPS 1"; struct test_pps_device { struct pps_state pps; rtems_id task_waiting; + int wokenup; }; typedef struct { @@ -59,9 +60,9 @@ T_TEST_CASE( WaitPPSEventDefaultHandler ) struct test_pps_device pps_dev; struct pps_fetch_args fetch; + memset( &pps_dev, 0, sizeof( pps_dev ) ); pps_dev.task_waiting = RTEMS_INVALID_ID; - memset( &pps_dev.pps, 0, sizeof( pps_dev.pps ) ); pps_dev.pps.ppscap = PPS_CAPTUREBOTH; pps_init_abi( &pps_dev.pps ); pps_dev.pps.ppsparam.mode = PPS_CAPTUREASSERT; @@ -76,6 +77,48 @@ T_TEST_CASE( WaitPPSEventDefaultHandler ) T_eq_int( status, ETIMEDOUT ); } +static void fake_wakeup(struct pps_state *pps) +{ + struct test_pps_device *pps_dev; + + pps_dev = RTEMS_CONTAINER_OF( pps, struct test_pps_device, pps ); + pps_dev->wokenup++; +} + +T_TEST_CASE( PPSEventEarlyReturns ) +{ + struct test_pps_device pps_dev; + + memset( &pps_dev, 0, sizeof( pps_dev ) ); + pps_dev.task_waiting = RTEMS_INVALID_ID; + + pps_dev.pps.ppscap = PPS_CAPTUREBOTH; + pps_init_abi( &pps_dev.pps ); + pps_dev.pps.wakeup = fake_wakeup; + pps_dev.pps.ppsparam.mode = PPS_CAPTUREASSERT; + + pps_capture( &pps_dev.pps ); + /* Trigger event with a different event than the one previously selected */ + pps_event( &pps_dev.pps, PPS_CAPTURECLEAR ); + T_eq_int( pps_dev.wokenup, 0 ); + + pps_dev.pps.ppsparam.mode = PPS_CAPTURECLEAR; + + /* Wait th_generation to be updated */ + rtems_task_wake_after( 2 ); + pps_event( &pps_dev.pps, PPS_CAPTURECLEAR ); + T_eq_int( pps_dev.wokenup, 0 ); + + /* Save current timecounter in pps_state object */ + pps_capture( &pps_dev.pps ); + pps_event( &pps_dev.pps, PPS_CAPTURECLEAR ); + T_eq_int( pps_dev.wokenup, 0 ); + + pps_capture( &pps_dev.pps ); + pps_event( &pps_dev.pps, PPS_CAPTURECLEAR ); + T_eq_int( pps_dev.wokenup, 1 ); +} + static void wakeup(struct pps_state *pps) { struct test_pps_device *pps_dev; @@ -120,7 +163,7 @@ static void pps_task(rtems_task_argument arg) sc = rtems_event_send( ctx->main_task, PPS_EVENT_RECEIVED ); T_rsc_success( sc ); - rtems_task_delete(rtems_task_self()); + rtems_task_exit(); } T_TEST_CASE( WakeupTaskWithPPSEvent ) @@ -134,11 +177,11 @@ T_TEST_CASE( WakeupTaskWithPPSEvent ) rtems_task_priority pps_task_prio = 1; rtems_event_set out; + memset( &pps_dev, 0, sizeof( pps_dev ) ); pps_dev.task_waiting = RTEMS_INVALID_ID; ctx.pps_dev = &pps_dev; ctx.main_task = rtems_task_self(); - memset( &pps_dev.pps, 0, sizeof( pps_dev.pps ) ); pps_dev.pps.ppscap = PPS_CAPTUREBOTH; pps_init_abi( &pps_dev.pps ); pps_dev.pps.wait = wait; diff --git a/testsuites/sptests/spprintk/init.c b/testsuites/sptests/spprintk/init.c index f8fe224086..4fc1c0cc97 100644 --- a/testsuites/sptests/spprintk/init.c +++ b/testsuites/sptests/spprintk/init.c @@ -32,7 +32,8 @@ #include "config.h" #endif -#include <rtems/score/io.h> +#include <rtems/base64.h> +#include <rtems/dev/io.h> /* * Undefined the RTEMS_PRINTFLIKE and make it nothing. The test code @@ -212,52 +213,52 @@ static void test_io_base64( test_context *ctx ) int n; clear( ctx ); - n = _IO_Base64( put_char, ctx, buf, 9, "\n", 0 ); + n = _Base64_Encode( put_char, ctx, buf, 9, "\n", 0 ); rtems_test_assert( n == 14 ); rtems_test_assert( strcmp( ctx->buf, "YWJj\nZGVm\nZ2hp" ) == 0 ); clear( ctx ); - n = _IO_Base64( put_char, ctx, buf, 8, "\n", 4 ); + n = _Base64_Encode( put_char, ctx, buf, 8, "\n", 4 ); rtems_test_assert( n == 14 ); rtems_test_assert( strcmp( ctx->buf, "YWJj\nZGVm\nZ2g=" ) == 0 ); clear( ctx ); - n = _IO_Base64( put_char, ctx, buf, 7, "\n", 4 ); + n = _Base64_Encode( put_char, ctx, buf, 7, "\n", 4 ); rtems_test_assert( n == 14 ); rtems_test_assert( strcmp( ctx->buf, "YWJj\nZGVm\nZw==" ) == 0 ); clear( ctx ); - n = _IO_Base64( put_char, ctx, buf, 6, "\n", 4 ); + n = _Base64_Encode( put_char, ctx, buf, 6, "\n", 4 ); rtems_test_assert( n == 9 ); rtems_test_assert( strcmp( ctx->buf, "YWJj\nZGVm" ) == 0 ); clear( ctx ); - n = _IO_Base64( put_char, ctx, buf, 5, "\n", 4 ); + n = _Base64_Encode( put_char, ctx, buf, 5, "\n", 4 ); rtems_test_assert( n == 9 ); rtems_test_assert( strcmp( ctx->buf, "YWJj\nZGU=" ) == 0 ); clear( ctx ); - n = _IO_Base64( put_char, ctx, buf, 4, "\n", 4 ); + n = _Base64_Encode( put_char, ctx, buf, 4, "\n", 4 ); rtems_test_assert( n == 9 ); rtems_test_assert( strcmp( ctx->buf, "YWJj\nZA==" ) == 0 ); clear( ctx ); - n = _IO_Base64( put_char, ctx, buf, 3, "\n", 4 ); + n = _Base64_Encode( put_char, ctx, buf, 3, "\n", 4 ); rtems_test_assert( n == 4 ); rtems_test_assert( strcmp( ctx->buf, "YWJj" ) == 0 ); clear( ctx ); - n = _IO_Base64( put_char, ctx, buf, 2, "\n", 4 ); + n = _Base64_Encode( put_char, ctx, buf, 2, "\n", 4 ); rtems_test_assert( n == 4 ); rtems_test_assert( strcmp( ctx->buf, "YWI=" ) == 0 ); clear( ctx ); - n = _IO_Base64( put_char, ctx, buf, 1, "\n", 4 ); + n = _Base64_Encode( put_char, ctx, buf, 1, "\n", 4 ); rtems_test_assert( n == 4 ); rtems_test_assert( strcmp( ctx->buf, "YQ==" ) == 0 ); clear( ctx ); - n = _IO_Base64( put_char, ctx, buf, 0, "\n", 4 ); + n = _Base64_Encode( put_char, ctx, buf, 0, "\n", 4 ); rtems_test_assert( n == 0 ); } @@ -267,7 +268,7 @@ static void test_io_base64url( test_context *ctx ) int n; clear( ctx ); - n = _IO_Base64url( put_char, ctx, buf, sizeof( buf ), "\n", 0 ); + n = _Base64url_Encode( put_char, ctx, buf, sizeof( buf ), "\n", 0 ); rtems_test_assert( n == 9 ); rtems_test_assert( strcmp( ctx->buf, "AAA-\nAAA_" ) == 0 ); } diff --git a/testsuites/sptests/spprofiling01/init.c b/testsuites/sptests/spprofiling01/init.c index 8750f18a06..aa8a7b7098 100644 --- a/testsuites/sptests/spprofiling01/init.c +++ b/testsuites/sptests/spprofiling01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spscheduler01/init.c b/testsuites/sptests/spscheduler01/init.c index 577d294cf6..c2dfc954fc 100644 --- a/testsuites/sptests/spscheduler01/init.c +++ b/testsuites/sptests/spscheduler01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2014, 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2014, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spsem03/init.c b/testsuites/sptests/spsem03/init.c index aef3f8cf7d..11e6cb6827 100644 --- a/testsuites/sptests/spsem03/init.c +++ b/testsuites/sptests/spsem03/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spstdc17/init.c b/testsuites/sptests/spstdc17/init.c new file mode 100644 index 0000000000..0a1a5571ac --- /dev/null +++ b/testsuites/sptests/spstdc17/init.c @@ -0,0 +1,57 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2022 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> + +#include <tmacros.h> + +const char rtems_test_name[] = "SPSTDC17"; + +static rtems_task Init( rtems_task_argument arg ) +{ + (void) arg; + + TEST_BEGIN(); + TEST_END(); +} + +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/sptests/spstdc17/spstdc17.doc b/testsuites/sptests/spstdc17/spstdc17.doc new file mode 100644 index 0000000000..7f83fd9ad3 --- /dev/null +++ b/testsuites/sptests/spstdc17/spstdc17.doc @@ -0,0 +1,12 @@ +This file describes the directives and concepts tested by this test set. + +test set name: spstdc17 + +directives: + + - Header file <rtems.h> + - Header file <rtems/confdefs.h> + +concepts: + + - Ensure that the API header files are compatible with the C17 standard. diff --git a/testsuites/sptests/spstdthreads01/init.c b/testsuites/sptests/spstdthreads01/init.c index 01dcc8e312..d1cacc1705 100644 --- a/testsuites/sptests/spstdthreads01/init.c +++ b/testsuites/sptests/spstdthreads01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spstkalloc02/init.c b/testsuites/sptests/spstkalloc02/init.c index 5e5db20f0f..30803bfc8e 100644 --- a/testsuites/sptests/spstkalloc02/init.c +++ b/testsuites/sptests/spstkalloc02/init.c @@ -9,7 +9,7 @@ */ /* - * Copyright (c) 2011 embedded brains GmbH. All rights reserved. + * Copyright (c) 2011 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -44,6 +44,7 @@ const char rtems_test_name[] = "SPSTKALLOC 2"; #include <stdio.h> #include <inttypes.h> +#include <rtems/malloc.h> #include <rtems/score/heapimpl.h> #define TASK_COUNT 5 @@ -56,6 +57,8 @@ static void task_stack_init(size_t stack_space_size); static void *task_stack_allocate(size_t stack_size); +static void *task_stack_allocate_for_idle(uint32_t unused, size_t *stack_size); + static void task_stack_free(void *addr); static void print_info(void) @@ -138,10 +141,18 @@ static rtems_task Init(rtems_task_argument argument) */ #define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM +/* + * This test requires full control over the present thread-local objects. This + * is necessary for the custom stack allocator below. In certain Newlib + * configurations, the Newlib reentrancy support may add thread-local objects. + */ +#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY + #define CONFIGURE_MAXIMUM_TASKS TASK_COUNT #define CONFIGURE_TASK_STACK_ALLOCATOR_INIT task_stack_init #define CONFIGURE_TASK_STACK_ALLOCATOR task_stack_allocate +#define CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE task_stack_allocate_for_idle #define CONFIGURE_TASK_STACK_DEALLOCATOR task_stack_free #define CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE #define CONFIGURE_TASK_STACK_FROM_ALLOCATOR(stack_size) \ @@ -176,6 +187,15 @@ static void *task_stack_allocate(size_t stack_size) return _Heap_Allocate(&task_stack_heap, stack_size); } +static void *task_stack_allocate_for_idle(uint32_t unused, size_t *stack_size) +{ + return rtems_heap_allocate_aligned_with_boundary( + *stack_size, + CPU_STACK_ALIGNMENT, + 0 + ); +} + static void task_stack_free(void *addr) { _Heap_Free(&task_stack_heap, addr); diff --git a/testsuites/sptests/spstkalloc02/spstkalloc02.doc b/testsuites/sptests/spstkalloc02/spstkalloc02.doc index a2dd0357ba..96cdfb52c2 100644 --- a/testsuites/sptests/spstkalloc02/spstkalloc02.doc +++ b/testsuites/sptests/spstkalloc02/spstkalloc02.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2011 embedded brains GmbH. +# Copyright (c) 2011 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -26,7 +26,7 @@ This file describes the directives and concepts tested by this test set. -test set name: spstkalloc01 +test set name: spstkalloc02 The test expects that no thread-local object is present. diff --git a/testsuites/sptests/spstkalloc03/init.c b/testsuites/sptests/spstkalloc03/init.c index 6d6817bccb..5ee7de26ec 100644 --- a/testsuites/sptests/spstkalloc03/init.c +++ b/testsuites/sptests/spstkalloc03/init.c @@ -87,12 +87,12 @@ static void thread_stacks_free(void *addr) static void *thread_stacks_allocate_for_idle( uint32_t cpu, - size_t stack_size + size_t *stack_size ) { rtems_test_assert(thread_stacks_count == 0); thread_stacks_count++; - return allocate_helper(stack_size); + return allocate_helper(*stack_size); } /* diff --git a/testsuites/sptests/spstkalloc04/init.c b/testsuites/sptests/spstkalloc04/init.c index c5d2614f64..9678f6e00c 100644 --- a/testsuites/sptests/spstkalloc04/init.c +++ b/testsuites/sptests/spstkalloc04/init.c @@ -69,12 +69,12 @@ static void *allocate_helper(size_t size) static void *thread_stacks_allocate_for_idle( uint32_t cpu, - size_t stack_size + size_t *stack_size ) { rtems_test_assert(thread_stacks_count == 0); thread_stacks_count++; - return allocate_helper(stack_size); + return allocate_helper(*stack_size); } /* diff --git a/testsuites/sptests/spsysinit01/init.c b/testsuites/sptests/spsysinit01/init.c index 0d5a1f0020..f756dc7a23 100644 --- a/testsuites/sptests/spsysinit01/init.c +++ b/testsuites/sptests/spsysinit01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2020 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2020 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -341,13 +341,13 @@ LAST(RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE) FIRST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE) { - assert(_Semaphore_Information.initial_objects[0].id == 0); + assert(info_not_init(&_Semaphore_Information)); next_step(CLASSIC_SEMAPHORE_PRE); } LAST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE) { - assert(_Semaphore_Information.initial_objects[0].id != 0); + assert(info_is_init(&_Semaphore_Information, 1)); next_step(CLASSIC_SEMAPHORE_POST); } @@ -908,7 +908,7 @@ static void do_posix_sem_open(void) sem_t *sem; int rv; - sem = sem_open("sem", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO); + sem = sem_open("sem", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO, 0); rtems_test_assert(sem != SEM_FAILED); rv = sem_close(sem); diff --git a/testsuites/sptests/spsyslock01/init.c b/testsuites/sptests/spsyslock01/init.c index 01f5ee3fba..74e3d67530 100644 --- a/testsuites/sptests/spsyslock01/init.c +++ b/testsuites/sptests/spsyslock01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sptasknopreempt01/init.c b/testsuites/sptests/sptasknopreempt01/init.c index 617a44ade1..5828d602de 100644 --- a/testsuites/sptests/sptasknopreempt01/init.c +++ b/testsuites/sptests/sptasknopreempt01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -37,12 +37,7 @@ static bool did_run; static void do_not_run(rtems_task_argument arg) { -#if 0 rtems_test_assert(0); -#else - did_run = true; - rtems_task_suspend(RTEMS_SELF); -#endif } static void test(void) @@ -64,9 +59,9 @@ static void test(void) rtems_test_assert(sc == RTEMS_SUCCESSFUL); /* - * This will start a pseudo interrupt task pre-empting the non-preemtive - * executing task. Later the high priority do_not_run() task is scheduled. - * See also https://devel.rtems.org/ticket/2365. + * This will start a task with a priority of PRIORITY_MINIMUM. Check that + * this task and the test task did not preempt the current task. See also + * https://devel.rtems.org/ticket/2365. */ sc = rtems_timer_initiate_server( RTEMS_TIMER_SERVER_DEFAULT_PRIORITY, @@ -75,8 +70,7 @@ static void test(void) ); rtems_test_assert(sc == RTEMS_SUCCESSFUL); - /* This is probably a bug and not a feature */ - rtems_test_assert(did_run); + rtems_test_assert(!did_run); sc = rtems_task_delete(task); rtems_test_assert(sc == RTEMS_SUCCESSFUL); @@ -99,6 +93,8 @@ static void Init(rtems_task_argument arg) #define CONFIGURE_INIT_TASK_PRIORITY 2 +#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT + #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/sptests/spthread01/init.c b/testsuites/sptests/spthread01/init.c index 7cb7d08428..4baf0dba2f 100644 --- a/testsuites/sptests/spthread01/init.c +++ b/testsuites/sptests/spthread01/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at diff --git a/testsuites/sptests/spthreadlife01/init.c b/testsuites/sptests/spthreadlife01/init.c index b2c6634820..c33e8fef35 100644 --- a/testsuites/sptests/spthreadlife01/init.c +++ b/testsuites/sptests/spthreadlife01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/spthreadq01/init.c b/testsuites/sptests/spthreadq01/init.c index 01977fe00d..bb6423ec4f 100644 --- a/testsuites/sptests/spthreadq01/init.c +++ b/testsuites/sptests/spthreadq01/init.c @@ -4,7 +4,7 @@ * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). * - * Copyright (c) 2016 embedded brains GmbH. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sptimecounter01/init.c b/testsuites/sptests/sptimecounter01/init.c index 20a40b4072..ff5fe25a2d 100644 --- a/testsuites/sptests/sptimecounter01/init.c +++ b/testsuites/sptests/sptimecounter01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015, 2019 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sptimecounter01/sptimecounter01.doc b/testsuites/sptests/sptimecounter01/sptimecounter01.doc index 3271e45c88..85a236e68f 100644 --- a/testsuites/sptests/sptimecounter01/sptimecounter01.doc +++ b/testsuites/sptests/sptimecounter01/sptimecounter01.doc @@ -1,6 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2015 embedded brains GmbH. All rights reserved. +# Copyright (c) 2015 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sptimecounter02/init.c b/testsuites/sptests/sptimecounter02/init.c index e13f9713a7..ff05f147de 100644 --- a/testsuites/sptests/sptimecounter02/init.c +++ b/testsuites/sptests/sptimecounter02/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2024 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,6 +61,8 @@ const char rtems_test_name[] = "SPTIMECOUNTER 2"; typedef struct { rtems_test_parallel_context base; + const char *test_sep; + const char *counter_sep; struct timecounter tc_null; uint32_t binuptime_per_job[CPU_COUNT]; sbintime_t duration_per_job[CPU_COUNT]; @@ -90,6 +92,45 @@ static void install_tc_null(timecounter_context *ctx) rtems_timecounter_install(tc_cpu); } +static void test_print_results( + const char *driver, + timecounter_context *ctx, + size_t active_workers +) +{ + const char *value_sep; + size_t i; + + if (active_workers == 1) { + printf( + "%s{\n" + " \"timecounter\": \"%s\",\n" + " \"counter\": [", + ctx->test_sep, + driver + ); + ctx->test_sep = ", "; + ctx->counter_sep = "\n "; + } + + printf("%s[", ctx->counter_sep); + ctx->counter_sep = "],\n "; + value_sep = ""; + + for (i = 0; i < active_workers; ++i) { + printf( + "%s%" PRIu32, + value_sep, + ctx->binuptime_per_job[i] + ); + value_sep = ", "; + } + + if (active_workers == rtems_scheduler_get_processor_maximum()) { + printf("]\n ]\n }"); + } +} + static rtems_interval test_bintime_init( rtems_test_parallel_context *base, void *arg, @@ -133,25 +174,14 @@ static void test_bintime_fini( timecounter_context *ctx = (timecounter_context *) base; size_t i; - printf(" <BinuptimeTest activeWorker=\"%zu\">\n", active_workers); - for (i = 0; i < active_workers; ++i) { sbintime_t error; - printf( - " <Counter worker=\"%zu\">%" PRIu32 "</Counter>\n" - " <Duration worker=\"%zu\" unit=\"sbintime\">%" PRId64 "</Duration>\n", - i + 1, - ctx->binuptime_per_job[i], - i + 1, - ctx->duration_per_job[i] - ); - error = DURATION_IN_SECONDS * SBT_1S - ctx->duration_per_job[i]; rtems_test_assert(error * error < SBT_1MS * SBT_1MS); } - printf(" </BinuptimeTest>\n"); + test_print_results("Clock Driver", ctx, active_workers); } static rtems_interval test_bintime_null_init( @@ -192,20 +222,7 @@ static void test_bintime_null_fini( size_t active_workers ) { - timecounter_context *ctx = (timecounter_context *) base; - size_t i; - - printf(" <BinuptimeNullTest activeWorker=\"%zu\">\n", active_workers); - - for (i = 0; i < active_workers; ++i) { - printf( - " <Counter worker=\"%zu\">%" PRIu32 "</Counter>\n", - i + 1, - ctx->binuptime_per_job[i] - ); - } - - printf(" </BinuptimeNullTest>\n"); + test_print_results("Null", (timecounter_context *) base, active_workers); } static const rtems_test_parallel_job timecounter_jobs[] = { @@ -231,8 +248,9 @@ static void Init(rtems_task_argument arg) TEST_BEGIN(); - printf("<SPTimecounter01>\n"); + printf("*** BEGIN OF JSON DATA ***\n[\n "); + ctx->test_sep = ""; rtems_test_parallel( &ctx->base, NULL, @@ -240,6 +258,8 @@ static void Init(rtems_task_argument arg) RTEMS_ARRAY_SIZE(timecounter_jobs) ); + printf("\n]\n*** END OF JSON DATA ***\n"); + /* Check for all functions available in the bsd.h user space */ rtems_bsd_bintime(&bt); @@ -255,8 +275,6 @@ static void Init(rtems_task_argument arg) rtems_bsd_getmicrouptime(&tv); rtems_bsd_getnanouptime(&ts); - printf("</SPTimecounter01>\n"); - TEST_END(); rtems_test_exit(0); } diff --git a/testsuites/sptests/sptimecounter02/sptimecounter02.py b/testsuites/sptests/sptimecounter02/sptimecounter02.py index c0cf42bfa0..198255c140 100755 --- a/testsuites/sptests/sptimecounter02/sptimecounter02.py +++ b/testsuites/sptests/sptimecounter02/sptimecounter02.py @@ -1,9 +1,6 @@ -#!/usr/bin/env python - # SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2016 embedded brains GmbH. All rights reserved. +# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,37 +22,38 @@ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -# +import json import re -import libxml2 -from libxml2 import xmlNode -import matplotlib.pyplot as plt -data = open('sptimecounter02.scn').read() -data = re.sub(r'\*\*\*.*\*\*\*', '', data) -doc = libxml2.parseDoc(data) -ctx = doc.xpathNewContext() - -plt.title('Timestamp Performance') -plt.xlabel('Active Workers') -plt.ylabel('Operation Count') - -def m(n): - return int(n.getContent()) - -def getCounterSums(variant): - w = 1 - y = [] - while True: - c = map(m, ctx.xpathEval('/SPTimecounter01/' + variant + '[@activeWorker="' + str(w) + '"]/Counter')) - if not c: - break - y.append(sum(c)) - w = w + 1 - return y - -y = getCounterSums('BinuptimeTest') -x = range(1, len(y) + 1) -plt.xticks(x) -plt.plot(x, y, marker = 'o') -plt.show() +import matplotlib.pyplot as plt # type: ignore +from matplotlib import ticker # type: ignore + + +def _plot(data: dict) -> None: + _, axes = plt.subplots() + axes.set_title("Timestamp Performance") + axes.set_xlabel("Active Workers") + axes.set_ylabel("Operation Count") + x = list(range(1, len(data[0]["counter"]) + 1)) + axes.xaxis.set_major_locator(ticker.FixedLocator(x)) + for samples in data: + y = [sum(values) for values in samples["counter"]] + axes.plot(x, + y, + label=samples["timecounter"], + marker="o") + axes.legend(loc="best") + plt.savefig("sptimecounter02.png") + plt.savefig("sptimecounter02.pdf") + plt.close() + + +_JSON_DATA = re.compile( + r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)" + r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL) + +with open("sptimecounter02.scn", "r", encoding="utf-8") as src: + match = _JSON_DATA.search(src.read()) + data = json.loads(match.group(1)) + +_plot(data) diff --git a/testsuites/sptests/sptimecounter02/sptimecounter02.scn b/testsuites/sptests/sptimecounter02/sptimecounter02.scn index 0ad38c6f4a..6acc521873 100644 --- a/testsuites/sptests/sptimecounter02/sptimecounter02.scn +++ b/testsuites/sptests/sptimecounter02/sptimecounter02.scn @@ -1,1000 +1,40 @@ + + SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020 + Bug-reports to jiri@gaisler.se + + GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks + + Loaded build/sparc/gr740/testsuites/sptests/sptimecounter02.exe, entry 0x00000000 + + *** BEGIN OF TEST SPTIMECOUNTER 2 *** -<SPTimecounter01> - <BinuptimeTest activeWorker="1"> - <Counter worker="1">5433429</Counter> - <Duration worker="1" unit="sbintime">4291225979</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="2"> - <Counter worker="1">3832225</Counter> - <Duration worker="1" unit="sbintime">4290792130</Duration> - <Counter worker="2">3834316</Counter> - <Duration worker="2" unit="sbintime">4290790869</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="3"> - <Counter worker="1">2557440</Counter> - <Duration worker="1" unit="sbintime">4294943244</Duration> - <Counter worker="2">2559261</Counter> - <Duration worker="2" unit="sbintime">4294946681</Duration> - <Counter worker="3">2559529</Counter> - <Duration worker="3" unit="sbintime">4294943817</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="4"> - <Counter worker="1">1916358</Counter> - <Duration worker="1" unit="sbintime">4291303174</Duration> - <Counter worker="2">1918101</Counter> - <Duration worker="2" unit="sbintime">4291303746</Duration> - <Counter worker="3">1918236</Counter> - <Duration worker="3" unit="sbintime">4291301112</Duration> - <Counter worker="4">1918182</Counter> - <Duration worker="4" unit="sbintime">4291303861</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="5"> - <Counter worker="1">1437861</Counter> - <Duration worker="1" unit="sbintime">4292771136</Duration> - <Counter worker="2">1439416</Counter> - <Duration worker="2" unit="sbintime">4292769991</Duration> - <Counter worker="3">1439361</Counter> - <Duration worker="3" unit="sbintime">4292774000</Duration> - <Counter worker="4">1439373</Counter> - <Duration worker="4" unit="sbintime">4292773427</Duration> - <Counter worker="5">1919046</Counter> - <Duration worker="5" unit="sbintime">4292771480</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="6"> - <Counter worker="1">1278255</Counter> - <Duration worker="1" unit="sbintime">4292980616</Duration> - <Counter worker="2">1279690</Counter> - <Duration worker="2" unit="sbintime">4292981762</Duration> - <Counter worker="3">1279546</Counter> - <Duration worker="3" unit="sbintime">4292978440</Duration> - <Counter worker="4">1279558</Counter> - <Duration worker="4" unit="sbintime">4292978096</Duration> - <Counter worker="5">1279611</Counter> - <Duration worker="5" unit="sbintime">4292980043</Duration> - <Counter worker="6">1279619</Counter> - <Duration worker="6" unit="sbintime">4292976150</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="7"> - <Counter worker="1">1022765</Counter> - <Duration worker="1" unit="sbintime">4294000413</Duration> - <Counter worker="2">1024240</Counter> - <Duration worker="2" unit="sbintime">4294002246</Duration> - <Counter worker="3">1024022</Counter> - <Duration worker="3" unit="sbintime">4293998007</Duration> - <Counter worker="4">1024036</Counter> - <Duration worker="4" unit="sbintime">4293998924</Duration> - <Counter worker="5">1024020</Counter> - <Duration worker="5" unit="sbintime">4293998809</Duration> - <Counter worker="6">1024010</Counter> - <Duration worker="6" unit="sbintime">4293999382</Duration> - <Counter worker="7">1535866</Counter> - <Duration worker="7" unit="sbintime">4293999955</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="8"> - <Counter worker="1">958721</Counter> - <Duration worker="1" unit="sbintime">4293767683</Duration> - <Counter worker="2">960000</Counter> - <Duration worker="2" unit="sbintime">4293768599</Duration> - <Counter worker="3">960007</Counter> - <Duration worker="3" unit="sbintime">4293764018</Duration> - <Counter worker="4">960007</Counter> - <Duration worker="4" unit="sbintime">4293764132</Duration> - <Counter worker="5">960030</Counter> - <Duration worker="5" unit="sbintime">4293764705</Duration> - <Counter worker="6">960042</Counter> - <Duration worker="6" unit="sbintime">4293764590</Duration> - <Counter worker="7">960019</Counter> - <Duration worker="7" unit="sbintime">4293768026</Duration> - <Counter worker="8">959998</Counter> - <Duration worker="8" unit="sbintime">4293763446</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="9"> - <Counter worker="1">942346</Counter> - <Duration worker="1" unit="sbintime">4292128953</Duration> - <Counter worker="2">943991</Counter> - <Duration worker="2" unit="sbintime">4292136282</Duration> - <Counter worker="3">940622</Counter> - <Duration worker="3" unit="sbintime">4292123913</Duration> - <Counter worker="4">940597</Counter> - <Duration worker="4" unit="sbintime">4292128494</Duration> - <Counter worker="5">941505</Counter> - <Duration worker="5" unit="sbintime">4292126203</Duration> - <Counter worker="6">941481</Counter> - <Duration worker="6" unit="sbintime">4292126204</Duration> - <Counter worker="7">944352</Counter> - <Duration worker="7" unit="sbintime">4292126089</Duration> - <Counter worker="8">944344</Counter> - <Duration worker="8" unit="sbintime">4292126204</Duration> - <Counter worker="9">5373049</Counter> - <Duration worker="9" unit="sbintime">4292132044</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="10"> - <Counter worker="1">958924</Counter> - <Duration worker="1" unit="sbintime">4292784422</Duration> - <Counter worker="2">960306</Counter> - <Duration worker="2" unit="sbintime">4292785452</Duration> - <Counter worker="3">958656</Counter> - <Duration worker="3" unit="sbintime">4292782704</Duration> - <Counter worker="4">958632</Counter> - <Duration worker="4" unit="sbintime">4292782704</Duration> - <Counter worker="5">960299</Counter> - <Duration worker="5" unit="sbintime">4292781444</Duration> - <Counter worker="6">960321</Counter> - <Duration worker="6" unit="sbintime">4292786026</Duration> - <Counter worker="7">959742</Counter> - <Duration worker="7" unit="sbintime">4292778810</Duration> - <Counter worker="8">959726</Counter> - <Duration worker="8" unit="sbintime">4292783162</Duration> - <Counter worker="9">3835189</Counter> - <Duration worker="9" unit="sbintime">4292783734</Duration> - <Counter worker="10">3835159</Counter> - <Duration worker="10" unit="sbintime">4292782475</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="11"> - <Counter worker="1">958317</Counter> - <Duration worker="1" unit="sbintime">4292020376</Duration> - <Counter worker="2">959720</Counter> - <Duration worker="2" unit="sbintime">4292020490</Duration> - <Counter worker="3">959141</Counter> - <Duration worker="3" unit="sbintime">4292016024</Duration> - <Counter worker="4">959171</Counter> - <Duration worker="4" unit="sbintime">4292020376</Duration> - <Counter worker="5">959183</Counter> - <Duration worker="5" unit="sbintime">4292018199</Duration> - <Counter worker="6">959176</Counter> - <Duration worker="6" unit="sbintime">4292022666</Duration> - <Counter worker="7">960245</Counter> - <Duration worker="7" unit="sbintime">4292020376</Duration> - <Counter worker="8">960256</Counter> - <Duration worker="8" unit="sbintime">4292024041</Duration> - <Counter worker="9">2556834</Counter> - <Duration worker="9" unit="sbintime">4292019460</Duration> - <Counter worker="10">2556892</Counter> - <Duration worker="10" unit="sbintime">4292018314</Duration> - <Counter worker="11">2556777</Counter> - <Duration worker="11" unit="sbintime">4292018543</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="12"> - <Counter worker="1">958527</Counter> - <Duration worker="1" unit="sbintime">4291119807</Duration> - <Counter worker="2">959937</Counter> - <Duration worker="2" unit="sbintime">4291119807</Duration> - <Counter worker="3">959932</Counter> - <Duration worker="3" unit="sbintime">4291120379</Duration> - <Counter worker="4">959924</Counter> - <Duration worker="4" unit="sbintime">4291120380</Duration> - <Counter worker="5">959389</Counter> - <Duration worker="5" unit="sbintime">4291120838</Duration> - <Counter worker="6">959393</Counter> - <Duration worker="6" unit="sbintime">4291123701</Duration> - <Counter worker="7">958279</Counter> - <Duration worker="7" unit="sbintime">4291118204</Duration> - <Counter worker="8">958288</Counter> - <Duration worker="8" unit="sbintime">4291118089</Duration> - <Counter worker="9">1917514</Counter> - <Duration worker="9" unit="sbintime">4291120609</Duration> - <Counter worker="10">1917516</Counter> - <Duration worker="10" unit="sbintime">4291118318</Duration> - <Counter worker="11">1917496</Counter> - <Duration worker="11" unit="sbintime">4291119463</Duration> - <Counter worker="12">1917477</Counter> - <Duration worker="12" unit="sbintime">4291116829</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="13"> - <Counter worker="1">957469</Counter> - <Duration worker="1" unit="sbintime">4291772986</Duration> - <Counter worker="2">958901</Counter> - <Duration worker="2" unit="sbintime">4291772184</Duration> - <Counter worker="3">959855</Counter> - <Duration worker="3" unit="sbintime">4291766114</Duration> - <Counter worker="4">959906</Counter> - <Duration worker="4" unit="sbintime">4291770695</Duration> - <Counter worker="5">959953</Counter> - <Duration worker="5" unit="sbintime">4291779743</Duration> - <Counter worker="6">959977</Counter> - <Duration worker="6" unit="sbintime">4291769092</Duration> - <Counter worker="7">959389</Counter> - <Duration worker="7" unit="sbintime">4291770810</Duration> - <Counter worker="8">959385</Counter> - <Duration worker="8" unit="sbintime">4291766228</Duration> - <Counter worker="9">1438521</Counter> - <Duration worker="9" unit="sbintime">4291768748</Duration> - <Counter worker="10">1438502</Counter> - <Duration worker="10" unit="sbintime">4291768977</Duration> - <Counter worker="11">1438548</Counter> - <Duration worker="11" unit="sbintime">4291766687</Duration> - <Counter worker="12">1438497</Counter> - <Duration worker="12" unit="sbintime">4291770237</Duration> - <Counter worker="13">1917953</Counter> - <Duration worker="13" unit="sbintime">4291765999</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="14"> - <Counter worker="1">958554</Counter> - <Duration worker="1" unit="sbintime">4293977506</Duration> - <Counter worker="2">959986</Counter> - <Duration worker="2" unit="sbintime">4293974643</Duration> - <Counter worker="3">959942</Counter> - <Duration worker="3" unit="sbintime">4293976246</Duration> - <Counter worker="4">959946</Counter> - <Duration worker="4" unit="sbintime">4293971894</Duration> - <Counter worker="5">959422</Counter> - <Duration worker="5" unit="sbintime">4293972467</Duration> - <Counter worker="6">959466</Counter> - <Duration worker="6" unit="sbintime">4293976819</Duration> - <Counter worker="7">960436</Counter> - <Duration worker="7" unit="sbintime">4293975216</Duration> - <Counter worker="8">960437</Counter> - <Duration worker="8" unit="sbintime">4293975216</Duration> - <Counter worker="9">1280753</Counter> - <Duration worker="9" unit="sbintime">4293970749</Duration> - <Counter worker="10">1280760</Counter> - <Duration worker="10" unit="sbintime">4293974529</Duration> - <Counter worker="11">1278618</Counter> - <Duration worker="11" unit="sbintime">4293975445</Duration> - <Counter worker="12">1278603</Counter> - <Duration worker="12" unit="sbintime">4293971665</Duration> - <Counter worker="13">1278806</Counter> - <Duration worker="13" unit="sbintime">4293971894</Duration> - <Counter worker="14">1278798</Counter> - <Duration worker="14" unit="sbintime">4293975673</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="15"> - <Counter worker="1">958175</Counter> - <Duration worker="1" unit="sbintime">4291365823</Duration> - <Counter worker="2">959788</Counter> - <Duration worker="2" unit="sbintime">4291366969</Duration> - <Counter worker="3">959270</Counter> - <Duration worker="3" unit="sbintime">4291360783</Duration> - <Counter worker="4">959251</Counter> - <Duration worker="4" unit="sbintime">4291365250</Duration> - <Counter worker="5">958544</Counter> - <Duration worker="5" unit="sbintime">4291366854</Duration> - <Counter worker="6">958536</Counter> - <Duration worker="6" unit="sbintime">4291362502</Duration> - <Counter worker="7">959264</Counter> - <Duration worker="7" unit="sbintime">4291364105</Duration> - <Counter worker="8">959249</Counter> - <Duration worker="8" unit="sbintime">4291368571</Duration> - <Counter worker="9">1021329</Counter> - <Duration worker="9" unit="sbintime">4291362960</Duration> - <Counter worker="10">1021315</Counter> - <Duration worker="10" unit="sbintime">4291366854</Duration> - <Counter worker="11">1022881</Counter> - <Duration worker="11" unit="sbintime">4291367426</Duration> - <Counter worker="12">1022857</Counter> - <Duration worker="12" unit="sbintime">4291365135</Duration> - <Counter worker="13">1022969</Counter> - <Duration worker="13" unit="sbintime">4291365135</Duration> - <Counter worker="14">1022963</Counter> - <Duration worker="14" unit="sbintime">4291364677</Duration> - <Counter worker="15">1536939</Counter> - <Duration worker="15" unit="sbintime">4291362960</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="16"> - <Counter worker="1">958710</Counter> - <Duration worker="1" unit="sbintime">4294622324</Duration> - <Counter worker="2">960272</Counter> - <Duration worker="2" unit="sbintime">4294611444</Duration> - <Counter worker="3">960318</Counter> - <Duration worker="3" unit="sbintime">4294610413</Duration> - <Counter worker="4">960325</Counter> - <Duration worker="4" unit="sbintime">4294610298</Duration> - <Counter worker="5">957982</Counter> - <Duration worker="5" unit="sbintime">4294606977</Duration> - <Counter worker="6">958010</Counter> - <Duration worker="6" unit="sbintime">4294611558</Duration> - <Counter worker="7">960811</Counter> - <Duration worker="7" unit="sbintime">4294608122</Duration> - <Counter worker="8">960866</Counter> - <Duration worker="8" unit="sbintime">4294608123</Duration> - <Counter worker="9">956789</Counter> - <Duration worker="9" unit="sbintime">4294606175</Duration> - <Counter worker="10">956816</Counter> - <Duration worker="10" unit="sbintime">4294610757</Duration> - <Counter worker="11">961812</Counter> - <Duration worker="11" unit="sbintime">4294611787</Duration> - <Counter worker="12">961815</Counter> - <Duration worker="12" unit="sbintime">4294610069</Duration> - <Counter worker="13">959509</Counter> - <Duration worker="13" unit="sbintime">4294610183</Duration> - <Counter worker="14">959511</Counter> - <Duration worker="14" unit="sbintime">4294610070</Duration> - <Counter worker="15">960164</Counter> - <Duration worker="15" unit="sbintime">4294612474</Duration> - <Counter worker="16">960191</Counter> - <Duration worker="16" unit="sbintime">4294607893</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="17"> - <Counter worker="1">944571</Counter> - <Duration worker="1" unit="sbintime">4290823168</Duration> - <Counter worker="2">946274</Counter> - <Duration worker="2" unit="sbintime">4290823855</Duration> - <Counter worker="3">945546</Counter> - <Duration worker="3" unit="sbintime">4290821565</Duration> - <Counter worker="4">945535</Counter> - <Duration worker="4" unit="sbintime">4290821564</Duration> - <Counter worker="5">943940</Counter> - <Duration worker="5" unit="sbintime">4290819274</Duration> - <Counter worker="6">943961</Counter> - <Duration worker="6" unit="sbintime">4290823741</Duration> - <Counter worker="7">945996</Counter> - <Duration worker="7" unit="sbintime">4290821565</Duration> - <Counter worker="8">945999</Counter> - <Duration worker="8" unit="sbintime">4290821564</Duration> - <Counter worker="9">944038</Counter> - <Duration worker="9" unit="sbintime">4290823969</Duration> - <Counter worker="10">944031</Counter> - <Duration worker="10" unit="sbintime">4290819503</Duration> - <Counter worker="11">944055</Counter> - <Duration worker="11" unit="sbintime">4290824543</Duration> - <Counter worker="12">944036</Counter> - <Duration worker="12" unit="sbintime">4290820076</Duration> - <Counter worker="13">945985</Counter> - <Duration worker="13" unit="sbintime">4290821221</Duration> - <Counter worker="14">945985</Counter> - <Duration worker="14" unit="sbintime">4290821221</Duration> - <Counter worker="15">946541</Counter> - <Duration worker="15" unit="sbintime">4290819503</Duration> - <Counter worker="16">946539</Counter> - <Duration worker="16" unit="sbintime">4290819388</Duration> - <Counter worker="17">5319165</Counter> - <Duration worker="17" unit="sbintime">4290821221</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="18"> - <Counter worker="1">957435</Counter> - <Duration worker="1" unit="sbintime">4292140979</Duration> - <Counter worker="2">959052</Counter> - <Duration worker="2" unit="sbintime">4292138230</Duration> - <Counter worker="3">959020</Counter> - <Duration worker="3" unit="sbintime">4292138115</Duration> - <Counter worker="4">959034</Counter> - <Duration worker="4" unit="sbintime">4292138230</Duration> - <Counter worker="5">959057</Counter> - <Duration worker="5" unit="sbintime">4292137199</Duration> - <Counter worker="6">959078</Counter> - <Duration worker="6" unit="sbintime">4292136969</Duration> - <Counter worker="7">959758</Counter> - <Duration worker="7" unit="sbintime">4292139375</Duration> - <Counter worker="8">959770</Counter> - <Duration worker="8" unit="sbintime">4292139261</Duration> - <Counter worker="9">959102</Counter> - <Duration worker="9" unit="sbintime">4292136855</Duration> - <Counter worker="10">959101</Counter> - <Duration worker="10" unit="sbintime">4292141322</Duration> - <Counter worker="11">957493</Counter> - <Duration worker="11" unit="sbintime">4292141322</Duration> - <Counter worker="12">957490</Counter> - <Duration worker="12" unit="sbintime">4292136741</Duration> - <Counter worker="13">960923</Counter> - <Duration worker="13" unit="sbintime">4292141895</Duration> - <Counter worker="14">960933</Counter> - <Duration worker="14" unit="sbintime">4292139146</Duration> - <Counter worker="15">958227</Counter> - <Duration worker="15" unit="sbintime">4292139032</Duration> - <Counter worker="16">958201</Counter> - <Duration worker="16" unit="sbintime">4292134565</Duration> - <Counter worker="17">3833107</Counter> - <Duration worker="17" unit="sbintime">4292138229</Duration> - <Counter worker="18">3833100</Counter> - <Duration worker="18" unit="sbintime">4292137085</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="19"> - <Counter worker="1">959131</Counter> - <Duration worker="1" unit="sbintime">4295003603</Duration> - <Counter worker="2">960752</Counter> - <Duration worker="2" unit="sbintime">4295005321</Duration> - <Counter worker="3">958958</Counter> - <Duration worker="3" unit="sbintime">4295009444</Duration> - <Counter worker="4">958960</Counter> - <Duration worker="4" unit="sbintime">4295001312</Duration> - <Counter worker="5">960052</Counter> - <Duration worker="5" unit="sbintime">4295001771</Duration> - <Counter worker="6">960086</Counter> - <Duration worker="6" unit="sbintime">4295001885</Duration> - <Counter worker="7">960031</Counter> - <Duration worker="7" unit="sbintime">4295003603</Duration> - <Counter worker="8">960043</Counter> - <Duration worker="8" unit="sbintime">4294999021</Duration> - <Counter worker="9">961650</Counter> - <Duration worker="9" unit="sbintime">4295005435</Duration> - <Counter worker="10">961687</Counter> - <Duration worker="10" unit="sbintime">4295001885</Duration> - <Counter worker="11">960613</Counter> - <Duration worker="11" unit="sbintime">4295011276</Duration> - <Counter worker="12">960593</Counter> - <Duration worker="12" unit="sbintime">4295000854</Duration> - <Counter worker="13">959538</Counter> - <Duration worker="13" unit="sbintime">4295001427</Duration> - <Counter worker="14">959574</Counter> - <Duration worker="14" unit="sbintime">4295001427</Duration> - <Counter worker="15">956810</Counter> - <Duration worker="15" unit="sbintime">4295003717</Duration> - <Counter worker="16">956818</Counter> - <Duration worker="16" unit="sbintime">4295003603</Duration> - <Counter worker="17">2557866</Counter> - <Duration worker="17" unit="sbintime">4295002687</Duration> - <Counter worker="18">2557901</Counter> - <Duration worker="18" unit="sbintime">4295000969</Duration> - <Counter worker="19">2557791</Counter> - <Duration worker="19" unit="sbintime">4295000968</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="20"> - <Counter worker="1">956818</Counter> - <Duration worker="1" unit="sbintime">4290849167</Duration> - <Counter worker="2">958477</Counter> - <Duration worker="2" unit="sbintime">4290849052</Duration> - <Counter worker="3">959502</Counter> - <Duration worker="3" unit="sbintime">4290848594</Duration> - <Counter worker="4">959493</Counter> - <Duration worker="4" unit="sbintime">4290848594</Duration> - <Counter worker="5">959067</Counter> - <Duration worker="5" unit="sbintime">4290848021</Duration> - <Counter worker="6">959118</Counter> - <Duration worker="6" unit="sbintime">4290848021</Duration> - <Counter worker="7">958349</Counter> - <Duration worker="7" unit="sbintime">4290853175</Duration> - <Counter worker="8">958323</Counter> - <Duration worker="8" unit="sbintime">4290846303</Duration> - <Counter worker="9">957048</Counter> - <Duration worker="9" unit="sbintime">4290847563</Duration> - <Counter worker="10">957074</Counter> - <Duration worker="10" unit="sbintime">4290847678</Duration> - <Counter worker="11">960084</Counter> - <Duration worker="11" unit="sbintime">4290846418</Duration> - <Counter worker="12">960074</Counter> - <Duration worker="12" unit="sbintime">4290846418</Duration> - <Counter worker="13">959020</Counter> - <Duration worker="13" unit="sbintime">4290845846</Duration> - <Counter worker="14">959039</Counter> - <Duration worker="14" unit="sbintime">4290850426</Duration> - <Counter worker="15">958126</Counter> - <Duration worker="15" unit="sbintime">4290845960</Duration> - <Counter worker="16">958095</Counter> - <Duration worker="16" unit="sbintime">4290845845</Duration> - <Counter worker="17">1916573</Counter> - <Duration worker="17" unit="sbintime">4290848136</Duration> - <Counter worker="18">1916534</Counter> - <Duration worker="18" unit="sbintime">4290845845</Duration> - <Counter worker="19">1916572</Counter> - <Duration worker="19" unit="sbintime">4290848136</Duration> - <Counter worker="20">1916533</Counter> - <Duration worker="20" unit="sbintime">4290845845</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="21"> - <Counter worker="1">958421</Counter> - <Duration worker="1" unit="sbintime">4294761939</Duration> - <Counter worker="2">960077</Counter> - <Duration worker="2" unit="sbintime">4294760221</Duration> - <Counter worker="3">959148</Counter> - <Duration worker="3" unit="sbintime">4294754953</Duration> - <Counter worker="4">959141</Counter> - <Duration worker="4" unit="sbintime">4294759649</Duration> - <Counter worker="5">959688</Counter> - <Duration worker="5" unit="sbintime">4294754494</Duration> - <Counter worker="6">959736</Counter> - <Duration worker="6" unit="sbintime">4294759076</Duration> - <Counter worker="7">960425</Counter> - <Duration worker="7" unit="sbintime">4294760221</Duration> - <Counter worker="8">960396</Counter> - <Duration worker="8" unit="sbintime">4294755755</Duration> - <Counter worker="9">958447</Counter> - <Duration worker="9" unit="sbintime">4294756213</Duration> - <Counter worker="10">958469</Counter> - <Duration worker="10" unit="sbintime">4294756327</Duration> - <Counter worker="11">960168</Counter> - <Duration worker="11" unit="sbintime">4294759076</Duration> - <Counter worker="12">960140</Counter> - <Duration worker="12" unit="sbintime">4294754495</Duration> - <Counter worker="13">961301</Counter> - <Duration worker="13" unit="sbintime">4294767323</Duration> - <Counter worker="14">961331</Counter> - <Duration worker="14" unit="sbintime">4294756785</Duration> - <Counter worker="15">958210</Counter> - <Duration worker="15" unit="sbintime">4294757358</Duration> - <Counter worker="16">958203</Counter> - <Duration worker="16" unit="sbintime">4294757358</Duration> - <Counter worker="17">1439060</Counter> - <Duration worker="17" unit="sbintime">4294757931</Duration> - <Counter worker="18">1439023</Counter> - <Duration worker="18" unit="sbintime">4294758159</Duration> - <Counter worker="19">1439103</Counter> - <Duration worker="19" unit="sbintime">4294758045</Duration> - <Counter worker="20">1439064</Counter> - <Duration worker="20" unit="sbintime">4294757930</Duration> - <Counter worker="21">1918367</Counter> - <Duration worker="21" unit="sbintime">4294758045</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="22"> - <Counter worker="1">958582</Counter> - <Duration worker="1" unit="sbintime">4291633485</Duration> - <Counter worker="2">960264</Counter> - <Duration worker="2" unit="sbintime">4291633599</Duration> - <Counter worker="3">958919</Counter> - <Duration worker="3" unit="sbintime">4291636921</Duration> - <Counter worker="4">958961</Counter> - <Duration worker="4" unit="sbintime">4291632912</Duration> - <Counter worker="5">958913</Counter> - <Duration worker="5" unit="sbintime">4291634631</Duration> - <Counter worker="6">958982</Counter> - <Duration worker="6" unit="sbintime">4291634630</Duration> - <Counter worker="7">957838</Counter> - <Duration worker="7" unit="sbintime">4291633027</Duration> - <Counter worker="8">957849</Counter> - <Duration worker="8" unit="sbintime">4291632912</Duration> - <Counter worker="9">958935</Counter> - <Duration worker="9" unit="sbintime">4291632340</Duration> - <Counter worker="10">958978</Counter> - <Duration worker="10" unit="sbintime">4291632455</Duration> - <Counter worker="11">958040</Counter> - <Duration worker="11" unit="sbintime">4291631194</Duration> - <Counter worker="12">958060</Counter> - <Duration worker="12" unit="sbintime">4291635203</Duration> - <Counter worker="13">958031</Counter> - <Duration worker="13" unit="sbintime">4291634745</Duration> - <Counter worker="14">958035</Counter> - <Duration worker="14" unit="sbintime">4291630163</Duration> - <Counter worker="15">959809</Counter> - <Duration worker="15" unit="sbintime">4291635776</Duration> - <Counter worker="16">959833</Counter> - <Duration worker="16" unit="sbintime">4291631309</Duration> - <Counter worker="17">1278240</Counter> - <Duration worker="17" unit="sbintime">4291631194</Duration> - <Counter worker="18">1278239</Counter> - <Duration worker="18" unit="sbintime">4291634745</Duration> - <Counter worker="19">1278855</Counter> - <Duration worker="19" unit="sbintime">4291629591</Duration> - <Counter worker="20">1278855</Counter> - <Duration worker="20" unit="sbintime">4291632913</Duration> - <Counter worker="21">1277332</Counter> - <Duration worker="21" unit="sbintime">4291632912</Duration> - <Counter worker="22">1277327</Counter> - <Duration worker="22" unit="sbintime">4291635891</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="23"> - <Counter worker="1">958870</Counter> - <Duration worker="1" unit="sbintime">4294362908</Duration> - <Counter worker="2">960652</Counter> - <Duration worker="2" unit="sbintime">4294358327</Duration> - <Counter worker="3">957192</Counter> - <Duration worker="3" unit="sbintime">4294358327</Duration> - <Counter worker="4">957194</Counter> - <Duration worker="4" unit="sbintime">4294362793</Duration> - <Counter worker="5">960437</Counter> - <Duration worker="5" unit="sbintime">4294358900</Duration> - <Counter worker="6">960480</Counter> - <Duration worker="6" unit="sbintime">4294359014</Duration> - <Counter worker="7">958820</Counter> - <Duration worker="7" unit="sbintime">4294362908</Duration> - <Counter worker="8">958835</Counter> - <Duration worker="8" unit="sbintime">4294360045</Duration> - <Counter worker="9">956488</Counter> - <Duration worker="9" unit="sbintime">4294360617</Duration> - <Counter worker="10">956549</Counter> - <Duration worker="10" unit="sbintime">4294356151</Duration> - <Counter worker="11">961870</Counter> - <Duration worker="11" unit="sbintime">4294356151</Duration> - <Counter worker="12">961835</Counter> - <Duration worker="12" unit="sbintime">4294360732</Duration> - <Counter worker="13">961302</Counter> - <Duration worker="13" unit="sbintime">4294361191</Duration> - <Counter worker="14">961345</Counter> - <Duration worker="14" unit="sbintime">4294356724</Duration> - <Counter worker="15">956489</Counter> - <Duration worker="15" unit="sbintime">4294360045</Duration> - <Counter worker="16">956506</Counter> - <Duration worker="16" unit="sbintime">4294360160</Duration> - <Counter worker="17">1021387</Counter> - <Duration worker="17" unit="sbintime">4294356952</Duration> - <Counter worker="18">1021417</Counter> - <Duration worker="18" unit="sbintime">4294360961</Duration> - <Counter worker="19">1021929</Counter> - <Duration worker="19" unit="sbintime">4294359243</Duration> - <Counter worker="20">1021926</Counter> - <Duration worker="20" unit="sbintime">4294359930</Duration> - <Counter worker="21">1024098</Counter> - <Duration worker="21" unit="sbintime">4294358327</Duration> - <Counter worker="22">1024083</Counter> - <Duration worker="22" unit="sbintime">4294358098</Duration> - <Counter worker="23">1537525</Counter> - <Duration worker="23" unit="sbintime">4294361076</Duration> - </BinuptimeTest> - <BinuptimeTest activeWorker="24"> - <Counter worker="1">958462</Counter> - <Duration worker="1" unit="sbintime">4294344239</Duration> - <Counter worker="2">960113</Counter> - <Duration worker="2" unit="sbintime">4294339773</Duration> - <Counter worker="3">959461</Counter> - <Duration worker="3" unit="sbintime">4294341949</Duration> - <Counter worker="4">959473</Counter> - <Duration worker="4" unit="sbintime">4294344812</Duration> - <Counter worker="5">958912</Counter> - <Duration worker="5" unit="sbintime">4294341490</Duration> - <Counter worker="6">958938</Counter> - <Duration worker="6" unit="sbintime">4294341376</Duration> - <Counter worker="7">958935</Counter> - <Duration worker="7" unit="sbintime">4294340230</Duration> - <Counter worker="8">958921</Counter> - <Duration worker="8" unit="sbintime">4294340345</Duration> - <Counter worker="9">959876</Counter> - <Duration worker="9" unit="sbintime">4294341491</Duration> - <Counter worker="10">959892</Counter> - <Duration worker="10" unit="sbintime">4294337138</Duration> - <Counter worker="11">959045</Counter> - <Duration worker="11" unit="sbintime">4294338284</Duration> - <Counter worker="12">959020</Counter> - <Duration worker="12" unit="sbintime">4294342636</Duration> - <Counter worker="13">961635</Counter> - <Duration worker="13" unit="sbintime">4294341033</Duration> - <Counter worker="14">961646</Counter> - <Duration worker="14" unit="sbintime">4294343782</Duration> - <Counter worker="15">956010</Counter> - <Duration worker="15" unit="sbintime">4294338856</Duration> - <Counter worker="16">956016</Counter> - <Duration worker="16" unit="sbintime">4294343208</Duration> - <Counter worker="17">960207</Counter> - <Duration worker="17" unit="sbintime">4294339887</Duration> - <Counter worker="18">960171</Counter> - <Duration worker="18" unit="sbintime">4294339772</Duration> - <Counter worker="19">960089</Counter> - <Duration worker="19" unit="sbintime">4294340346</Duration> - <Counter worker="20">960077</Counter> - <Duration worker="20" unit="sbintime">4294340346</Duration> - <Counter worker="21">957194</Counter> - <Duration worker="21" unit="sbintime">4294339315</Duration> - <Counter worker="22">957184</Counter> - <Duration worker="22" unit="sbintime">4294339200</Duration> - <Counter worker="23">959119</Counter> - <Duration worker="23" unit="sbintime">4294344812</Duration> - <Counter worker="24">959094</Counter> - <Duration worker="24" unit="sbintime">4294341948</Duration> - </BinuptimeTest> - <BinuptimeNullTest activeWorker="1"> - <Counter worker="1">19386783</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="2"> - <Counter worker="1">18966996</Counter> - <Counter worker="2">18976413</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="3"> - <Counter worker="1">18974430</Counter> - <Counter worker="2">18983328</Counter> - <Counter worker="3">19416623</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="4"> - <Counter worker="1">19008674</Counter> - <Counter worker="2">19018198</Counter> - <Counter worker="3">19008964</Counter> - <Counter worker="4">19008692</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="5"> - <Counter worker="1">19020812</Counter> - <Counter worker="2">19030365</Counter> - <Counter worker="3">19005570</Counter> - <Counter worker="4">19005064</Counter> - <Counter worker="5">19403356</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="6"> - <Counter worker="1">19022252</Counter> - <Counter worker="2">19032184</Counter> - <Counter worker="3">18989113</Counter> - <Counter worker="4">18988868</Counter> - <Counter worker="5">19032006</Counter> - <Counter worker="6">19033563</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="7"> - <Counter worker="1">19030040</Counter> - <Counter worker="2">19040103</Counter> - <Counter worker="3">19027768</Counter> - <Counter worker="4">19027395</Counter> - <Counter worker="5">19032442</Counter> - <Counter worker="6">19034065</Counter> - <Counter worker="7">19412449</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="8"> - <Counter worker="1">19025699</Counter> - <Counter worker="2">19035838</Counter> - <Counter worker="3">19004615</Counter> - <Counter worker="4">19004706</Counter> - <Counter worker="5">19030244</Counter> - <Counter worker="6">19032199</Counter> - <Counter worker="7">19024756</Counter> - <Counter worker="8">19023713</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="9"> - <Counter worker="1">19013669</Counter> - <Counter worker="2">19023620</Counter> - <Counter worker="3">19002201</Counter> - <Counter worker="4">19002347</Counter> - <Counter worker="5">19045897</Counter> - <Counter worker="6">19048005</Counter> - <Counter worker="7">19008510</Counter> - <Counter worker="8">19007710</Counter> - <Counter worker="9">19395234</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="10"> - <Counter worker="1">19027122</Counter> - <Counter worker="2">19037161</Counter> - <Counter worker="3">19009823</Counter> - <Counter worker="4">19010172</Counter> - <Counter worker="5">19038718</Counter> - <Counter worker="6">19040747</Counter> - <Counter worker="7">19031970</Counter> - <Counter worker="8">19031243</Counter> - <Counter worker="9">19073032</Counter> - <Counter worker="10">19074455</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="11"> - <Counter worker="1">19028856</Counter> - <Counter worker="2">19038950</Counter> - <Counter worker="3">19011087</Counter> - <Counter worker="4">19010918</Counter> - <Counter worker="5">19042804</Counter> - <Counter worker="6">19044814</Counter> - <Counter worker="7">19009000</Counter> - <Counter worker="8">19008045</Counter> - <Counter worker="9">19062056</Counter> - <Counter worker="10">19063324</Counter> - <Counter worker="11">19425237</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="12"> - <Counter worker="1">19000686</Counter> - <Counter worker="2">19010524</Counter> - <Counter worker="3">19011200</Counter> - <Counter worker="4">19011161</Counter> - <Counter worker="5">19040651</Counter> - <Counter worker="6">19042336</Counter> - <Counter worker="7">19008991</Counter> - <Counter worker="8">19008322</Counter> - <Counter worker="9">19057966</Counter> - <Counter worker="10">19059942</Counter> - <Counter worker="11">19025294</Counter> - <Counter worker="12">19024237</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="13"> - <Counter worker="1">19035788</Counter> - <Counter worker="2">19045670</Counter> - <Counter worker="3">19019672</Counter> - <Counter worker="4">19019535</Counter> - <Counter worker="5">19057435</Counter> - <Counter worker="6">19059507</Counter> - <Counter worker="7">19015462</Counter> - <Counter worker="8">19015005</Counter> - <Counter worker="9">19075133</Counter> - <Counter worker="10">19076837</Counter> - <Counter worker="11">19015711</Counter> - <Counter worker="12">19014041</Counter> - <Counter worker="13">19397278</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="14"> - <Counter worker="1">19042430</Counter> - <Counter worker="2">19052163</Counter> - <Counter worker="3">18991353</Counter> - <Counter worker="4">18991104</Counter> - <Counter worker="5">19055723</Counter> - <Counter worker="6">19057975</Counter> - <Counter worker="7">19037925</Counter> - <Counter worker="8">19037320</Counter> - <Counter worker="9">19093382</Counter> - <Counter worker="10">19095573</Counter> - <Counter worker="11">19013959</Counter> - <Counter worker="12">19012664</Counter> - <Counter worker="13">19047902</Counter> - <Counter worker="14">19049501</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="15"> - <Counter worker="1">19031341</Counter> - <Counter worker="2">19041295</Counter> - <Counter worker="3">19021603</Counter> - <Counter worker="4">19021349</Counter> - <Counter worker="5">19070154</Counter> - <Counter worker="6">19072132</Counter> - <Counter worker="7">19012455</Counter> - <Counter worker="8">19011763</Counter> - <Counter worker="9">19078313</Counter> - <Counter worker="10">19081070</Counter> - <Counter worker="11">19007359</Counter> - <Counter worker="12">19006010</Counter> - <Counter worker="13">19079061</Counter> - <Counter worker="14">19080701</Counter> - <Counter worker="15">19419748</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="16"> - <Counter worker="1">19026392</Counter> - <Counter worker="2">19036011</Counter> - <Counter worker="3">19020535</Counter> - <Counter worker="4">19020505</Counter> - <Counter worker="5">19027761</Counter> - <Counter worker="6">19029769</Counter> - <Counter worker="7">19007387</Counter> - <Counter worker="8">19006701</Counter> - <Counter worker="9">19079449</Counter> - <Counter worker="10">19081866</Counter> - <Counter worker="11">19016942</Counter> - <Counter worker="12">19015669</Counter> - <Counter worker="13">19053837</Counter> - <Counter worker="14">19056122</Counter> - <Counter worker="15">19017232</Counter> - <Counter worker="16">19015864</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="17"> - <Counter worker="1">19024720</Counter> - <Counter worker="2">19034397</Counter> - <Counter worker="3">19010358</Counter> - <Counter worker="4">19009952</Counter> - <Counter worker="5">19045360</Counter> - <Counter worker="6">19047250</Counter> - <Counter worker="7">19015505</Counter> - <Counter worker="8">19014894</Counter> - <Counter worker="9">19067467</Counter> - <Counter worker="10">19069766</Counter> - <Counter worker="11">19001455</Counter> - <Counter worker="12">19000148</Counter> - <Counter worker="13">19062397</Counter> - <Counter worker="14">19064161</Counter> - <Counter worker="15">18988213</Counter> - <Counter worker="16">18986839</Counter> - <Counter worker="17">19392710</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="18"> - <Counter worker="1">19014459</Counter> - <Counter worker="2">19024385</Counter> - <Counter worker="3">19004536</Counter> - <Counter worker="4">19004360</Counter> - <Counter worker="5">19059651</Counter> - <Counter worker="6">19061446</Counter> - <Counter worker="7">18995175</Counter> - <Counter worker="8">18994526</Counter> - <Counter worker="9">19069645</Counter> - <Counter worker="10">19072049</Counter> - <Counter worker="11">19020094</Counter> - <Counter worker="12">19018465</Counter> - <Counter worker="13">19084049</Counter> - <Counter worker="14">19085700</Counter> - <Counter worker="15">19010799</Counter> - <Counter worker="16">19009469</Counter> - <Counter worker="17">19062621</Counter> - <Counter worker="18">19062665</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="19"> - <Counter worker="1">19027369</Counter> - <Counter worker="2">19037193</Counter> - <Counter worker="3">19017667</Counter> - <Counter worker="4">19017624</Counter> - <Counter worker="5">19025425</Counter> - <Counter worker="6">19027799</Counter> - <Counter worker="7">19017922</Counter> - <Counter worker="8">19017381</Counter> - <Counter worker="9">19029266</Counter> - <Counter worker="10">19031825</Counter> - <Counter worker="11">19025025</Counter> - <Counter worker="12">19023564</Counter> - <Counter worker="13">19057381</Counter> - <Counter worker="14">19059412</Counter> - <Counter worker="15">19025461</Counter> - <Counter worker="16">19023734</Counter> - <Counter worker="17">19049991</Counter> - <Counter worker="18">19051542</Counter> - <Counter worker="19">19418712</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="20"> - <Counter worker="1">19042934</Counter> - <Counter worker="2">19052696</Counter> - <Counter worker="3">19038771</Counter> - <Counter worker="4">19038516</Counter> - <Counter worker="5">19033526</Counter> - <Counter worker="6">19035338</Counter> - <Counter worker="7">19043236</Counter> - <Counter worker="8">19042713</Counter> - <Counter worker="9">19086859</Counter> - <Counter worker="10">19089153</Counter> - <Counter worker="11">19022766</Counter> - <Counter worker="12">19021740</Counter> - <Counter worker="13">19061402</Counter> - <Counter worker="14">19063648</Counter> - <Counter worker="15">19019723</Counter> - <Counter worker="16">19018344</Counter> - <Counter worker="17">19049944</Counter> - <Counter worker="18">19051860</Counter> - <Counter worker="19">19024515</Counter> - <Counter worker="20">19024160</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="21"> - <Counter worker="1">19024204</Counter> - <Counter worker="2">19034080</Counter> - <Counter worker="3">19000776</Counter> - <Counter worker="4">19000755</Counter> - <Counter worker="5">19051386</Counter> - <Counter worker="6">19053223</Counter> - <Counter worker="7">18986331</Counter> - <Counter worker="8">18985787</Counter> - <Counter worker="9">19090476</Counter> - <Counter worker="10">19093070</Counter> - <Counter worker="11">19014901</Counter> - <Counter worker="12">19013812</Counter> - <Counter worker="13">19076062</Counter> - <Counter worker="14">19077825</Counter> - <Counter worker="15">19009098</Counter> - <Counter worker="16">19007749</Counter> - <Counter worker="17">19068241</Counter> - <Counter worker="18">19070586</Counter> - <Counter worker="19">18985454</Counter> - <Counter worker="20">18984893</Counter> - <Counter worker="21">19400999</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="22"> - <Counter worker="1">19031656</Counter> - <Counter worker="2">19041556</Counter> - <Counter worker="3">19002695</Counter> - <Counter worker="4">19002754</Counter> - <Counter worker="5">19077008</Counter> - <Counter worker="6">19078695</Counter> - <Counter worker="7">18989542</Counter> - <Counter worker="8">18988653</Counter> - <Counter worker="9">19044533</Counter> - <Counter worker="10">19046959</Counter> - <Counter worker="11">19004288</Counter> - <Counter worker="12">19003156</Counter> - <Counter worker="13">19062162</Counter> - <Counter worker="14">19064009</Counter> - <Counter worker="15">19034105</Counter> - <Counter worker="16">19032889</Counter> - <Counter worker="17">19067368</Counter> - <Counter worker="18">19070169</Counter> - <Counter worker="19">19008530</Counter> - <Counter worker="20">19008397</Counter> - <Counter worker="21">19037841</Counter> - <Counter worker="22">19040158</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="23"> - <Counter worker="1">19019317</Counter> - <Counter worker="2">19029201</Counter> - <Counter worker="3">19010298</Counter> - <Counter worker="4">19010487</Counter> - <Counter worker="5">19030794</Counter> - <Counter worker="6">19032697</Counter> - <Counter worker="7">19001815</Counter> - <Counter worker="8">19001431</Counter> - <Counter worker="9">19067361</Counter> - <Counter worker="10">19069729</Counter> - <Counter worker="11">19001399</Counter> - <Counter worker="12">19000051</Counter> - <Counter worker="13">19070247</Counter> - <Counter worker="14">19072221</Counter> - <Counter worker="15">19020770</Counter> - <Counter worker="16">19019396</Counter> - <Counter worker="17">19085756</Counter> - <Counter worker="18">19088597</Counter> - <Counter worker="19">19014748</Counter> - <Counter worker="20">19014660</Counter> - <Counter worker="21">19044229</Counter> - <Counter worker="22">19046314</Counter> - <Counter worker="23">19421247</Counter> - </BinuptimeNullTest> - <BinuptimeNullTest activeWorker="24"> - <Counter worker="1">19016838</Counter> - <Counter worker="2">19026664</Counter> - <Counter worker="3">18978854</Counter> - <Counter worker="4">18978559</Counter> - <Counter worker="5">19034822</Counter> - <Counter worker="6">19036646</Counter> - <Counter worker="7">19006174</Counter> - <Counter worker="8">19005608</Counter> - <Counter worker="9">19042579</Counter> - <Counter worker="10">19044966</Counter> - <Counter worker="11">19007697</Counter> - <Counter worker="12">19006331</Counter> - <Counter worker="13">19053232</Counter> - <Counter worker="14">19054892</Counter> - <Counter worker="15">18999211</Counter> - <Counter worker="16">18997906</Counter> - <Counter worker="17">19065292</Counter> - <Counter worker="18">19067828</Counter> - <Counter worker="19">19014259</Counter> - <Counter worker="20">19013886</Counter> - <Counter worker="21">19047296</Counter> - <Counter worker="22">19048410</Counter> - <Counter worker="23">19017171</Counter> - <Counter worker="24">19016766</Counter> - </BinuptimeNullTest> -</SPTimecounter01> +*** TEST VERSION: 6.0.0.105c3e541c26113503080c65006ad775d31fca3d +*** TEST STATE: EXPECTED_PASS +*** TEST BUILD: RTEMS_SMP +*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448) +*** BEGIN OF JSON DATA *** +[ + { + "timecounter": "Clock Driver", + "counter": [ + [523086], + [523088, 528231], + [523088, 528232, 528231], + [523088, 528215, 528215, 527992] + ] + }, { + "timecounter": "Null", + "counter": [ + [528630], + [528662, 533818], + [528684, 533839, 533840], + [528664, 533821, 533821, 533582] + ] + } +] +*** END OF JSON DATA *** + *** END OF TEST SPTIMECOUNTER 2 *** + +cpu 0 in error mode (tt = 0x80) + 400337050 00009120: 91d02000 ta 0x0 diff --git a/testsuites/sptests/sptimecounter03/init.c b/testsuites/sptests/sptimecounter03/init.c index dfcd9a0219..d1a9d58886 100644 --- a/testsuites/sptests/sptimecounter03/init.c +++ b/testsuites/sptests/sptimecounter03/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -41,7 +41,7 @@ const char rtems_test_name[] = "SPTIMECOUNTER 3"; #define CPU_COUNT 32 -static rtems_test_parallel_context ctx;; +static rtems_test_parallel_context ctx; static rtems_interval test_binuptime_init( rtems_test_parallel_context *ctx, diff --git a/testsuites/sptests/sptimecounter04/init.c b/testsuites/sptests/sptimecounter04/init.c index 4d903e75f8..2a8910b980 100644 --- a/testsuites/sptests/sptimecounter04/init.c +++ b/testsuites/sptests/sptimecounter04/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sptimerserver01/init.c b/testsuites/sptests/sptimerserver01/init.c index 1121886bc7..b921806424 100644 --- a/testsuites/sptests/sptimerserver01/init.c +++ b/testsuites/sptests/sptimerserver01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (c) 2016 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sptls01/init.c b/testsuites/sptests/sptls01/init.c index 5b5d274d3c..d6beeedf90 100644 --- a/testsuites/sptests/sptls01/init.c +++ b/testsuites/sptests/sptls01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -29,7 +29,12 @@ #include "config.h" #endif -#include <stdio.h> +#include <rtems/bspIo.h> +#include <rtems/stackchk.h> +#include <rtems/sysinit.h> +#include <rtems/score/cpuimpl.h> +#include <rtems/score/threadimpl.h> +#include <rtems/score/tls.h> #include "tmacros.h" @@ -45,7 +50,7 @@ static const volatile uint32_t read_only_small = 0x601dc0feUL; static void check_tls_item(uint32_t expected) { - printf("TLS item = %i\n", tls_item); + printk("TLS item = %i\n", tls_item); rtems_test_assert(tls_item == expected); } @@ -54,6 +59,7 @@ static void task(rtems_task_argument arg) rtems_status_code sc; check_tls_item(123); + tls_item = 42; sc = rtems_event_transient_send(master_task); rtems_test_assert(sc == RTEMS_SUCCESSFUL); @@ -62,10 +68,47 @@ static void task(rtems_task_argument arg) rtems_test_assert(sc == RTEMS_SUCCESSFUL); } +static void check_tls_size(void) +{ + const volatile TLS_Configuration *config; + uintptr_t tls_size; + + config = &_TLS_Configuration; + tls_size = (uintptr_t) config->size; + + if (tls_size != 1) { + printk( + "WARNING: The thread-local storage size is %" PRIuPTR ". It should be\n" + "exactly one for this test. Check the BSP implementation. The BSP\n" + "should not pull in thread-local storage objects such as errno for\n" + "this test.\n", + tls_size + ); + rtems_test_assert(tls_size == 1); + } +} + +static Thread_Control *get_thread(rtems_id id) +{ + Thread_Control *the_thread; + ISR_lock_Context lock_context; + + the_thread = _Thread_Get(id, &lock_context); + _ISR_lock_ISR_enable(&lock_context); + return the_thread; +} + static void test(void) { rtems_id id; rtems_status_code sc; + Thread_Control *self; + Thread_Control *other; + char *self_tp; + char *other_tp; + uintptr_t tls_item_offset; + char *self_tls_item; + char *other_tls_item; master_task = rtems_task_self(); @@ -88,28 +131,69 @@ static void test(void) sc = rtems_task_start(id, task, 0); rtems_test_assert(sc == RTEMS_SUCCESSFUL); + self = get_thread(master_task); + other = get_thread(id); + self_tp = _CPU_Get_TLS_thread_pointer(&self->Registers); + other_tp = _CPU_Get_TLS_thread_pointer(&other->Registers); + tls_item_offset = (uintptr_t) (&tls_item - self_tp); + self_tls_item = self_tp + tls_item_offset; + other_tls_item = other_tp + tls_item_offset; + rtems_test_assert(*self_tls_item == 5); + rtems_test_assert(*other_tls_item == 123); + sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT); rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(*self_tls_item == 5); + rtems_test_assert(*other_tls_item == 42); + sc = rtems_task_delete(id); rtems_test_assert(sc == RTEMS_SUCCESSFUL); check_tls_item(5); } -static void Init(rtems_task_argument arg) +static void test_idle_during_system_init(void) { + rtems_print_printer_printk(&rtems_test_printer); TEST_BEGIN(); + check_tls_item(123); +} + +static void Init(rtems_task_argument arg) +{ test(); + rtems_test_assert(!rtems_stack_checker_is_blown()); + check_tls_size(); TEST_END(); rtems_test_exit(0); } +RTEMS_SYSINIT_ITEM( + test_idle_during_system_init, + RTEMS_SYSINIT_IDLE_THREADS, + RTEMS_SYSINIT_ORDER_LAST +); + #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER -#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER + +/* + * Avoid a dependency on errno which might be a thread-local object. This test + * assumes that no thread-local storage object other than tls_item is present. + */ +#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM + +/* + * This test requires full control over the present thread-local objects. In + * certain Newlib configurations, the Newlib reentrancy support may add + * thread-local objects. + */ +#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY + +#define CONFIGURE_STACK_CHECKER_ENABLED #define CONFIGURE_MAXIMUM_TASKS 2 diff --git a/testsuites/sptests/sptls02/init.cc b/testsuites/sptests/sptls02/init.cc index 712358f978..28ce872d76 100644 --- a/testsuites/sptests/sptls02/init.cc +++ b/testsuites/sptests/sptls02/init.cc @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2014, 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2014, 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -36,6 +36,7 @@ #include <rtems.h> #include <rtems/libcsupport.h> +#include <rtems/stackchk.h> #include <tmacros.h> @@ -47,7 +48,7 @@ alignas(256) static thread_local long a256 = 256; static thread_local long i0; -alignas(512) static thread_local long a512; +alignas(RTEMS_MINIMUM_STACK_SIZE) static thread_local long a; int seven() { @@ -60,7 +61,7 @@ static void clobber() i123 = 0xdead0001; a256 = 0xdead0002; i0 = 0xdead0003; - a512 = 0xdead0004; + a = 0xdead0004; } static long f456(bool clobber) @@ -168,10 +169,14 @@ static void checkTLSValues() rtems_test_assert(extern_int == 7); rtems_test_assert(i123 == 123); rtems_test_assert(a256 == 256); - rtems_test_assert((a256 & 255) == 0); + uintptr_t addr = reinterpret_cast<uintptr_t>(&a256); + RTEMS_OBFUSCATE_VARIABLE(addr); + rtems_test_assert((addr % 256) == 0); rtems_test_assert(i0 == 0); - rtems_test_assert(a512 == 0); - rtems_test_assert((a512 & 511) == 0); + rtems_test_assert(a == 0); + addr = reinterpret_cast<uintptr_t>(&a); + RTEMS_OBFUSCATE_VARIABLE(addr); + rtems_test_assert((addr % 512) == 0); rtems_test_assert(f456(false) == 456); rtems_test_assert(f0(false) == 0); rtems_test_assert(C::c789() == 789); @@ -288,6 +293,7 @@ extern "C" void Init(rtems_task_argument arg) testWorkerTask(); rtems_test_assert(rtems_resource_snapshot_check(&snapshot)); + rtems_test_assert(!rtems_stack_checker_is_blown()); TEST_END(); @@ -297,6 +303,8 @@ extern "C" void Init(rtems_task_argument arg) #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER +#define CONFIGURE_STACK_CHECKER_ENABLED + #define CONFIGURE_MAXIMUM_TASKS 2 #define CONFIGURE_MAXIMUM_SEMAPHORES 3 diff --git a/testsuites/sptests/sptls02/sptls02.h b/testsuites/sptests/sptls02/sptls02.h index b89750915d..4d9dfd5489 100644 --- a/testsuites/sptests/sptls02/sptls02.h +++ b/testsuites/sptests/sptls02/sptls02.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sptls02/var.cc b/testsuites/sptests/sptls02/var.cc index ca885deb62..5f927d043b 100644 --- a/testsuites/sptests/sptls02/var.cc +++ b/testsuites/sptests/sptls02/var.cc @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/sptests/sptls03/init.c b/testsuites/sptests/sptls03/init.c index 2b60828808..4d564c0f85 100644 --- a/testsuites/sptests/sptls03/init.c +++ b/testsuites/sptests/sptls03/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -29,6 +29,7 @@ #include "config.h" #endif +#include <rtems/stackchk.h> #include <rtems/score/thread.h> #include "tmacros.h" @@ -55,6 +56,7 @@ static void Init(rtems_task_argument arg) test(); + rtems_test_assert(!rtems_stack_checker_is_blown()); TEST_END(); rtems_test_exit(0); @@ -68,6 +70,15 @@ static void Init(rtems_task_argument arg) */ #define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM +/* + * This test requires full control over the present thread-local objects. In + * certain Newlib configurations, the Newlib reentrancy support may add + * thread-local objects. + */ +#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY + +#define CONFIGURE_STACK_CHECKER_ENABLED + #define CONFIGURE_MAXIMUM_TASKS 1 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION diff --git a/testsuites/sptests/sptls04/init.c b/testsuites/sptests/sptls04/init.c index fad919f8ac..bbbe81b9d1 100644 --- a/testsuites/sptests/sptls04/init.c +++ b/testsuites/sptests/sptls04/init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * Copyright (c) 2017 embedded brains GmbH & Co. KG * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -9,7 +9,7 @@ /* * This test program runs also on GNU/Linux and FreeBSD. Use * - * cc init.c && ./a.out + * cc init.c tls.c && ./a.out * * to run it. */ @@ -18,6 +18,8 @@ #include "config.h" #endif +#include "sptls04.h" + #ifdef __rtems__ #include <tmacros.h> @@ -30,9 +32,9 @@ #endif /* __rtems__ */ -static __thread int i; +static _Thread_local int i; -static __thread int j; +static _Thread_local int j; static __attribute__((__constructor__)) void con(void) { @@ -43,6 +45,7 @@ static void test(void) { rtems_test_assert(i == 1); rtems_test_assert(j == 0); + rtems_test_assert(k == 2); } #ifdef __rtems__ diff --git a/testsuites/sptests/sptls04/sptls04.h b/testsuites/sptests/sptls04/sptls04.h new file mode 100644 index 0000000000..70e7f2a923 --- /dev/null +++ b/testsuites/sptests/sptls04/sptls04.h @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _SPTLS01_H +#define _SPTLS01_H + +#ifdef __cplusplus +extern "C" { +#endif + +extern _Thread_local int k; + +#ifdef __cplusplus +} +#endif + +#endif /* _SPTLS01_H */ diff --git a/testsuites/sptests/sptls04/tls.c b/testsuites/sptests/sptls04/tls.c new file mode 100644 index 0000000000..ee473bca25 --- /dev/null +++ b/testsuites/sptests/sptls04/tls.c @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "sptls04.h" + +_Thread_local int k = 2; diff --git a/testsuites/sptests/spunlimited01/init.c b/testsuites/sptests/spunlimited01/init.c new file mode 100644 index 0000000000..dc0496d441 --- /dev/null +++ b/testsuites/sptests/spunlimited01/init.c @@ -0,0 +1,125 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> +#include <rtems/score/heapimpl.h> + +#include <string.h> + +#include <rtems/test.h> +#include <rtems/test-info.h> + +const char rtems_test_name[] = "SPUNLIMITED 1"; + +void __real__Workspace_Free( void * ); +void __wrap__Workspace_Free( void * ); + +void __wrap__Workspace_Free( void *ptr ) +{ + uintptr_t alloc_begin; + uintptr_t block_size; + uintptr_t block_end; + Heap_Block *block; + + if ( ptr == NULL ) { + return; + } + + alloc_begin = (uintptr_t) ptr; + block = _Heap_Block_of_alloc_area( alloc_begin, CPU_HEAP_ALIGNMENT ); + block_size = _Heap_Block_size( block ); + block_end = (uintptr_t) block + block_size; + memset( ptr, 0, block_end - alloc_begin ); + + __real__Workspace_Free( ptr ); +} + +static void delete_mutex( rtems_id id ) +{ + rtems_status_code sc; + + sc = rtems_semaphore_delete( id ); + T_rsc_success( sc ); +} + +T_TEST_CASE( UnlimitedShrink ) +{ + rtems_id ids[ 6 ]; + size_t i; + rtems_status_code sc; + + for ( i = 0; i < RTEMS_ARRAY_SIZE( ids ); ++i ) { + sc = rtems_semaphore_create( + rtems_build_name( 'M', 'U', 'T', 'X' ), + 1, + RTEMS_BINARY_SEMAPHORE, + 0, + &ids[ i ] + ); + T_assert_rsc_success( sc ); + } + + sc = rtems_semaphore_obtain( ids[ 2 ], RTEMS_WAIT, RTEMS_NO_TIMEOUT ); + T_rsc_success( sc ); + + delete_mutex( ids[ 5 ] ); + delete_mutex( ids[ 4 ] ); + delete_mutex( ids[ 3 ] ); + + sc = rtems_semaphore_release( ids[ 2 ] ); + T_rsc_success( sc ); + + delete_mutex( ids[ 2 ] ); + delete_mutex( ids[ 1 ] ); + delete_mutex( ids[ 0 ] ); +} + +static rtems_task Init( rtems_task_argument argument ) +{ + rtems_test_run( argument, TEST_STATE ); +} + +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_MAXIMUM_SEMAPHORES rtems_resource_unlimited( 2 ) + +#define CONFIGURE_UNIFIED_WORK_AREAS + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/sptests/spunlimited01/spunlimited01.doc b/testsuites/sptests/spunlimited01/spunlimited01.doc new file mode 100644 index 0000000000..43d3ec1646 --- /dev/null +++ b/testsuites/sptests/spunlimited01/spunlimited01.doc @@ -0,0 +1,14 @@ +This file describes the directives and concepts tested by this test set. + +test set name: spunlimited01 + +directives: + + - _Objects_Activate_unlimited() + - _Objects_Free_unlimited() + +concepts: + + - Create and delete objects with the unlimited objects support in a certain + order. Ensure that only blocks with free objects are reclaimed during a + shrink operation. diff --git a/testsuites/support/include/tmacros.h b/testsuites/support/include/tmacros.h index 0dc35ea21d..aa20411623 100644 --- a/testsuites/support/include/tmacros.h +++ b/testsuites/support/include/tmacros.h @@ -46,6 +46,7 @@ #include <string.h> #include <rtems/error.h> #include <rtems/test-info.h> +#include <rtems/test-printer.h> #include <rtems/score/threaddispatch.h> #include <buffer_test_io.h> diff --git a/testsuites/tmtests/tm01/system.h b/testsuites/tmtests/tm01/system.h index 10f694482f..d5f60d3c83 100644 --- a/testsuites/tmtests/tm01/system.h +++ b/testsuites/tmtests/tm01/system.h @@ -50,7 +50,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */ #define CONFIGURE_MAXIMUM_TASKS 2 #define CONFIGURE_MAXIMUM_SEMAPHORES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm02/system.h b/testsuites/tmtests/tm02/system.h index 0b2e4fb59a..66d3912f5a 100644 --- a/testsuites/tmtests/tm02/system.h +++ b/testsuites/tmtests/tm02/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_SEMAPHORES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm03/system.h b/testsuites/tmtests/tm03/system.h index 0b2e4fb59a..66d3912f5a 100644 --- a/testsuites/tmtests/tm03/system.h +++ b/testsuites/tmtests/tm03/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_SEMAPHORES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm04/system.h b/testsuites/tmtests/tm04/system.h index ecad2b492f..a330fde825 100644 --- a/testsuites/tmtests/tm04/system.h +++ b/testsuites/tmtests/tm04/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (4 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_SEMAPHORES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm05/system.h b/testsuites/tmtests/tm05/system.h index f00b626c36..28263f3051 100644 --- a/testsuites/tmtests/tm05/system.h +++ b/testsuites/tmtests/tm05/system.h @@ -46,7 +46,6 @@ rtems_task Init( #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT) -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm06/system.h b/testsuites/tmtests/tm06/system.h index f00b626c36..28263f3051 100644 --- a/testsuites/tmtests/tm06/system.h +++ b/testsuites/tmtests/tm06/system.h @@ -46,7 +46,6 @@ rtems_task Init( #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT) -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm07/system.h b/testsuites/tmtests/tm07/system.h index f00b626c36..28263f3051 100644 --- a/testsuites/tmtests/tm07/system.h +++ b/testsuites/tmtests/tm07/system.h @@ -46,7 +46,6 @@ rtems_task Init( #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT) -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm08/system.h b/testsuites/tmtests/tm08/system.h index 253cdaba54..7d642bd0a8 100644 --- a/testsuites/tmtests/tm08/system.h +++ b/testsuites/tmtests/tm08/system.h @@ -46,7 +46,6 @@ rtems_task Init( #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS 3 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm09/system.h b/testsuites/tmtests/tm09/system.h index 3d12c68d07..da2da0b2ec 100644 --- a/testsuites/tmtests/tm09/system.h +++ b/testsuites/tmtests/tm09/system.h @@ -51,7 +51,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */ #define CONFIGURE_MAXIMUM_TASKS 2 #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_MESSAGE_BUFFER_MEMORY \ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(OPERATION_COUNT, MESSAGE_SIZE) diff --git a/testsuites/tmtests/tm10/system.h b/testsuites/tmtests/tm10/system.h index ed5e9a12bb..e4c296f625 100644 --- a/testsuites/tmtests/tm10/system.h +++ b/testsuites/tmtests/tm10/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_MESSAGE_BUFFER_MEMORY \ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(OPERATION_COUNT, 16) diff --git a/testsuites/tmtests/tm11/system.h b/testsuites/tmtests/tm11/system.h index d4fa9fd404..9a2fc14aab 100644 --- a/testsuites/tmtests/tm11/system.h +++ b/testsuites/tmtests/tm11/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm12/system.h b/testsuites/tmtests/tm12/system.h index d4fa9fd404..9a2fc14aab 100644 --- a/testsuites/tmtests/tm12/system.h +++ b/testsuites/tmtests/tm12/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm13/system.h b/testsuites/tmtests/tm13/system.h index d4fa9fd404..9a2fc14aab 100644 --- a/testsuites/tmtests/tm13/system.h +++ b/testsuites/tmtests/tm13/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm14/system.h b/testsuites/tmtests/tm14/system.h index d4fa9fd404..9a2fc14aab 100644 --- a/testsuites/tmtests/tm14/system.h +++ b/testsuites/tmtests/tm14/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm15/system.h b/testsuites/tmtests/tm15/system.h index 9586199d27..fffabdf844 100644 --- a/testsuites/tmtests/tm15/system.h +++ b/testsuites/tmtests/tm15/system.h @@ -48,7 +48,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */ #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT) -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm16/system.h b/testsuites/tmtests/tm16/system.h index b495e374b2..9eb6d69e85 100644 --- a/testsuites/tmtests/tm16/system.h +++ b/testsuites/tmtests/tm16/system.h @@ -48,7 +48,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */ #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS (3 + OPERATION_COUNT) -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm17/system.h b/testsuites/tmtests/tm17/system.h index 9586199d27..fffabdf844 100644 --- a/testsuites/tmtests/tm17/system.h +++ b/testsuites/tmtests/tm17/system.h @@ -48,7 +48,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */ #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT) -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm18/system.h b/testsuites/tmtests/tm18/system.h index f00b626c36..28263f3051 100644 --- a/testsuites/tmtests/tm18/system.h +++ b/testsuites/tmtests/tm18/system.h @@ -46,7 +46,6 @@ rtems_task Init( #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT) -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm19/system.h b/testsuites/tmtests/tm19/system.h index 3051d62961..bbae1e537f 100644 --- a/testsuites/tmtests/tm19/system.h +++ b/testsuites/tmtests/tm19/system.h @@ -48,7 +48,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */ #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS 4 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm20/system.h b/testsuites/tmtests/tm20/system.h index 3128bad743..145477232d 100644 --- a/testsuites/tmtests/tm20/system.h +++ b/testsuites/tmtests/tm20/system.h @@ -51,7 +51,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */ #define CONFIGURE_MAXIMUM_TASKS 3 #define CONFIGURE_MAXIMUM_PARTITIONS 1 #define CONFIGURE_MAXIMUM_REGIONS 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm21/system.h b/testsuites/tmtests/tm21/system.h index 53f3c01353..ef4e35fc7d 100644 --- a/testsuites/tmtests/tm21/system.h +++ b/testsuites/tmtests/tm21/system.h @@ -58,7 +58,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_PORTS OPERATION_COUNT #define CONFIGURE_MAXIMUM_PERIODS OPERATION_COUNT -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm22/system.h b/testsuites/tmtests/tm22/system.h index d256595fe7..621043dc7c 100644 --- a/testsuites/tmtests/tm22/system.h +++ b/testsuites/tmtests/tm22/system.h @@ -49,7 +49,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS 4 #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_MESSAGE_BUFFER_MEMORY \ diff --git a/testsuites/tmtests/tm23/system.h b/testsuites/tmtests/tm23/system.h index edee889a9e..41722a2c39 100644 --- a/testsuites/tmtests/tm23/system.h +++ b/testsuites/tmtests/tm23/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (1 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_TIMERS OPERATION_COUNT -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm24/system.h b/testsuites/tmtests/tm24/system.h index f00b626c36..28263f3051 100644 --- a/testsuites/tmtests/tm24/system.h +++ b/testsuites/tmtests/tm24/system.h @@ -46,7 +46,6 @@ rtems_task Init( #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT) -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm25/system.h b/testsuites/tmtests/tm25/system.h index 112881f52a..423a30eba8 100644 --- a/testsuites/tmtests/tm25/system.h +++ b/testsuites/tmtests/tm25/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_SEMAPHORES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm26/system.h b/testsuites/tmtests/tm26/system.h index 762a7051b0..d66dfa81dd 100644 --- a/testsuites/tmtests/tm26/system.h +++ b/testsuites/tmtests/tm26/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (6 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_SEMAPHORES 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_FLOATING_POINT diff --git a/testsuites/tmtests/tm27/system.h b/testsuites/tmtests/tm27/system.h index b3f40c9d8c..4a2723bcd4 100644 --- a/testsuites/tmtests/tm27/system.h +++ b/testsuites/tmtests/tm27/system.h @@ -48,7 +48,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */ #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS 3 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm27/task1.c b/testsuites/tmtests/tm27/task1.c index 54aca545b8..7f2ce6663c 100644 --- a/testsuites/tmtests/tm27/task1.c +++ b/testsuites/tmtests/tm27/task1.c @@ -62,10 +62,6 @@ volatile uint32_t Interrupt_return_time, Interrupt_return_nested_time; uint32_t Interrupt_nest; uint32_t timer_overhead; -rtems_isr Isr_handler( - rtems_vector_number vector -); - static void set_thread_executing( Thread_Control *thread ) { _Per_CPU_Get_snapshot()->executing = thread; @@ -126,6 +122,55 @@ rtems_task Init( rtems_task_exit(); } +/* The Isr_handler() and Isr_handler_inner() routines are structured + * so that there will be as little entry overhead as possible included + * in the interrupt entry time. + */ + +static void Isr_handler_inner( void ) +{ + + /*enable_tracing();*/ + Clear_tm27_intr(); + switch ( Interrupt_nest ) { + case 0: + Interrupt_enter_time = end_time; + break; + case 1: + Interrupt_enter_time = end_time; + Interrupt_nest = 2; + Interrupt_occurred = 0; + Lower_tm27_intr(); + benchmark_timer_initialize(); + Cause_tm27_intr(); + /* goes to a nested copy of Isr_handler */ +#if (MUST_WAIT_FOR_INTERRUPT == 1) + while ( Interrupt_occurred == 0 ); +#endif + Interrupt_return_nested_time = benchmark_timer_read(); + break; + case 2: + Interrupt_enter_nested_time = end_time; + break; + } + + benchmark_timer_initialize(); +} + +#ifdef TM27_USE_VECTOR_HANDLER +static rtems_isr Isr_handler( rtems_vector_number arg ) +#else +static void Isr_handler( void *arg ) +#endif +{ + (void) arg; + + end_time = benchmark_timer_read(); + + Interrupt_occurred = 1; + Isr_handler_inner(); +} + rtems_task Task_1( rtems_task_argument argument ) @@ -302,50 +347,3 @@ rtems_task Task_2( _Thread_Dispatch(); } - -/* The Isr_handler() and Isr_handler_inner() routines are structured - * so that there will be as little entry overhead as possible included - * in the interrupt entry time. - */ - -void Isr_handler_inner( void ); - -rtems_isr Isr_handler( - rtems_vector_number vector -) -{ - end_time = benchmark_timer_read(); - - Interrupt_occurred = 1; - Isr_handler_inner(); -} - -void Isr_handler_inner( void ) -{ - - /*enable_tracing();*/ - Clear_tm27_intr(); - switch ( Interrupt_nest ) { - case 0: - Interrupt_enter_time = end_time; - break; - case 1: - Interrupt_enter_time = end_time; - Interrupt_nest = 2; - Interrupt_occurred = 0; - Lower_tm27_intr(); - benchmark_timer_initialize(); - Cause_tm27_intr(); - /* goes to a nested copy of Isr_handler */ -#if (MUST_WAIT_FOR_INTERRUPT == 1) - while ( Interrupt_occurred == 0 ); -#endif - Interrupt_return_nested_time = benchmark_timer_read(); - break; - case 2: - Interrupt_enter_nested_time = end_time; - break; - } - - benchmark_timer_initialize(); -} diff --git a/testsuites/tmtests/tm28/system.h b/testsuites/tmtests/tm28/system.h index f570f52849..bec8393510 100644 --- a/testsuites/tmtests/tm28/system.h +++ b/testsuites/tmtests/tm28/system.h @@ -49,7 +49,6 @@ rtems_id Task_id[ OPERATION_COUNT+1 ]; /* array of task ids */ #define CONFIGURE_MAXIMUM_TASKS 2 #define CONFIGURE_MAXIMUM_PORTS 1 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tm29/system.h b/testsuites/tmtests/tm29/system.h index 0c8e6e48cf..380878abb0 100644 --- a/testsuites/tmtests/tm29/system.h +++ b/testsuites/tmtests/tm29/system.h @@ -47,7 +47,6 @@ rtems_task Init( #define CONFIGURE_MAXIMUM_TASKS (2 + OPERATION_COUNT) #define CONFIGURE_MAXIMUM_PERIODS OPERATION_COUNT -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_INIT_TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2) diff --git a/testsuites/tmtests/tmck/system.h b/testsuites/tmtests/tmck/system.h index 6a33ed4374..6fad74389e 100644 --- a/testsuites/tmtests/tmck/system.h +++ b/testsuites/tmtests/tmck/system.h @@ -48,7 +48,6 @@ rtems_name Task_name[ OPERATION_COUNT+1 ]; /* array of task names */ #define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER #define CONFIGURE_MAXIMUM_TASKS 2 -#define CONFIGURE_TICKS_PER_TIMESLICE 0 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/tmtests/tmcontext01/init.c b/testsuites/tmtests/tmcontext01/init.c index 3e667cff4e..dc1da718c7 100644 --- a/testsuites/tmtests/tmcontext01/init.c +++ b/testsuites/tmtests/tmcontext01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2014, 2017 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -49,8 +49,6 @@ const char rtems_test_name[] = "TMCONTEXT 1"; static rtems_counter_ticks t[SAMPLES]; -static volatile int prevent_optimization; - static size_t cache_line_size; static size_t data_size; @@ -72,43 +70,31 @@ static int dirty_data_cache(volatile int *data, size_t n, size_t clsz, int j) return i + j; } -static int call_at_level( +static __attribute__((__noipa__)) void call_at_level( int start, int fl, - int s, - bool dirty + int s ) { - int prevent_optimization;; - - prevent_optimization = start + fl; - +#if defined(__sparc__) if (fl == start) { - /* - * Some architectures like the SPARC have register windows. A side-effect - * of this context switch is that we start with a fresh window set. On - * architectures like ARM or PowerPC this context switch has no effect. - */ - _Context_Switch(&ctx, &ctx); + /* Flush register windows */ + __asm__ volatile ("ta 3" : : : "memory"); } +#endif if (fl > 0) { call_at_level( start, fl - 1, - s, - dirty + s ); + __asm__ volatile ("" : : : "memory"); } else { char *volatile space; rtems_counter_ticks a; rtems_counter_ticks b; - if (dirty) { - dirty_data_cache(main_data, data_size, cache_line_size, fl); - rtems_cache_invalidate_entire_instruction(); - } - a = rtems_counter_read(); /* Ensure that we use an untouched stack area */ @@ -120,8 +106,6 @@ static int call_at_level( b = rtems_counter_read(); t[s] = rtems_counter_difference(b, a); } - - return prevent_optimization; } static void load_task(rtems_task_argument arg) @@ -149,7 +133,7 @@ static void sort_t(void) qsort(&t[0], SAMPLES, sizeof(t[0]), cmp); } -static void test_by_function_level(int fl, bool dirty) +static __attribute__((__noipa__)) void test_by_function_level(int fl, bool dirty) { RTEMS_INTERRUPT_LOCK_DECLARE(, lock) rtems_interrupt_lock_context lock_context; @@ -160,13 +144,16 @@ static void test_by_function_level(int fl, bool dirty) uint64_t q3; uint64_t max; - fl += prevent_optimization; - rtems_interrupt_lock_initialize(&lock, "test"); rtems_interrupt_lock_acquire(&lock, &lock_context); for (s = 0; s < SAMPLES; ++s) { - call_at_level(fl, fl, s, dirty); + if (dirty) { + dirty_data_cache(main_data, data_size, cache_line_size, fl); + rtems_cache_invalidate_entire_instruction(); + } + + call_at_level(fl, fl, s); } rtems_interrupt_lock_release(&lock, &lock_context); @@ -181,14 +168,8 @@ static void test_by_function_level(int fl, bool dirty) max = t[SAMPLES - 1]; printf( - " <Sample functionNestLevel=\"%i\">\n" - " <Min unit=\"ns\">%" PRIu64 "</Min>" - "<Q1 unit=\"ns\">%" PRIu64 "</Q1>" - "<Q2 unit=\"ns\">%" PRIu64 "</Q2>" - "<Q3 unit=\"ns\">%" PRIu64 "</Q3>" - "<Max unit=\"ns\">%" PRIu64 "</Max>\n" - " </Sample>\n", - fl, + "%s\n [%" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 "]", + fl == 0 ? "" : ",", rtems_counter_ticks_to_nanoseconds(min), rtems_counter_ticks_to_nanoseconds(q1), rtems_counter_ticks_to_nanoseconds(q2), @@ -197,26 +178,38 @@ static void test_by_function_level(int fl, bool dirty) ); } -static void test(bool dirty, uint32_t load) +static void test(bool first, bool dirty, uint32_t load) { int fl; printf( - " <ContextSwitchTest environment=\"%s\"", - dirty ? "dirty" : "normal" + "\n %s{\n" + " \"environment\": \"", + first ? "" : "}, " ); - if (load > 0) { - printf(" load=\"%" PRIu32 "\"", load); + if (dirty) { + if (load > 0) { + printf("Load/%" PRIu32 "", load); + } else { + printf("DirtyCache"); + } + } else { + printf("HotCache"); } - printf(">\n"); + printf( + "\",\n" + " \"stats-by-function-nest-level\": [" + ); for (fl = 0; fl < FUNCTION_LEVELS; ++fl) { test_by_function_level(fl, dirty); } - printf(" </ContextSwitchTest>\n"); + printf( + "\n ]" + ); } static void Init(rtems_task_argument arg) @@ -225,7 +218,7 @@ static void Init(rtems_task_argument arg) TEST_BEGIN(); - printf("<Test>\n"); + printf("*** BEGIN OF JSON DATA ***\n["); cache_line_size = rtems_cache_get_data_line_size(); if (cache_line_size == 0) { @@ -240,8 +233,8 @@ static void Init(rtems_task_argument arg) main_data = malloc(data_size); rtems_test_assert(main_data != NULL); - test(false, load); - test(true, load); + test(true, false, load); + test(false, true, load); for (load = 1; load < rtems_scheduler_get_processor_maximum(); ++load) { rtems_status_code sc; @@ -266,10 +259,10 @@ static void Init(rtems_task_argument arg) sc = rtems_task_start(id, load_task, (rtems_task_argument) load_data); rtems_test_assert(sc == RTEMS_SUCCESSFUL); - test(true, load); + test(false, true, load); } - printf("</Test>\n"); + printf("\n }\n]\n*** END OF JSON DATA ***\n"); TEST_END(); rtems_test_exit(0); diff --git a/testsuites/tmtests/tmcontext01/plot.py b/testsuites/tmtests/tmcontext01/plot.py index 56d46c654d..944a5962c2 100644 --- a/testsuites/tmtests/tmcontext01/plot.py +++ b/testsuites/tmtests/tmcontext01/plot.py @@ -1,7 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2014 embedded brains GmbH. All rights reserved. +# Copyright (C) 2014, 2024 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -23,48 +22,38 @@ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -# -import libxml2 -from libxml2 import xmlNode -import matplotlib.pyplot as plt -doc = libxml2.parseFile("tmcontext01.scn") -ctx = doc.xpathNewContext() +import json +import re +import matplotlib.pyplot as plt # type: ignore +from matplotlib import ticker # type: ignore + + +def _plot(data: dict) -> None: + _, axes = plt.subplots() + axes.set_title("Context Switch Timing Test") + axes.set_xlabel("Function Nest Level") + axes.set_ylabel("Context Switch Time [μs]") + x = list(range(0, len(data[0]["stats-by-function-nest-level"]))) + axes.xaxis.set_major_locator(ticker.FixedLocator(x)) + for samples in data: + y = [ + values[2] / 1000.0 + for values in samples["stats-by-function-nest-level"] + ] + axes.plot(x, y, label=samples["environment"], marker='o') + axes.legend(loc='best') + plt.savefig("tmcontext01.png") + plt.savefig("tmcontext01.pdf") + plt.close() -colors = ['k', 'r', 'b', 'g', 'y', 'm'] -def plot(y, color, label, first): - n=len(y) - x=range(0, n) - if first: - plt.plot(x, y, color=color, label=label) - else: - plt.plot(x, y, color=color) +_JSON_DATA = re.compile( + r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)" + r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL) -plt.title("context switch timing test") -plt.xlabel('function nest level') -plt.ylabel('context switch time [ns]') +with open("tmcontext01.scn", "r", encoding="utf-8") as src: + match = _JSON_DATA.search(src.read()) + data = json.loads(match.group(1)) -c = 0 -for e in ["normal", "dirty"]: - first = True - for i in ["Min", "Q1", "Q2", "Q3", "Max"]: - y=map(xmlNode.getContent, ctx.xpathEval("/Test/ContextSwitchTest[@environment='" + e + "' and not(@load)]/Sample/" + i)) - plot(y, colors[c], e, first) - first = False - c = c + 1 -load = 1 -while load > 0: - first = True - for i in ["Min", "Q1", "Q2", "Q3", "Max"]: - y=map(xmlNode.getContent, ctx.xpathEval("/Test/ContextSwitchTest[@environment='dirty' and @load='" + str(load) + "']/Sample/" + i)) - if len(y) > 0: - plot(y, colors[c], "load " + str(load), first) - first = False - else: - load = 0 - if load > 0: - load = load + 1 - c = c + 1 -plt.legend() -plt.show() +_plot(data) diff --git a/testsuites/tmtests/tmcontext01/tmcontext01.scn b/testsuites/tmtests/tmcontext01/tmcontext01.scn index 9044619319..8347d8b3fb 100644 --- a/testsuites/tmtests/tmcontext01/tmcontext01.scn +++ b/testsuites/tmtests/tmcontext01/tmcontext01.scn @@ -1,255 +1,124 @@ -<?xml version="1.0"?> -<!-- *** TEST TMCONTEXT 1 *** --> -<Test> - <ContextSwitchTest environment="normal"> - <Sample functionNestLevel="0"> - <Min unit="ns">2440</Min><Q1 unit="ns">2440</Q1><Q2 unit="ns">2480</Q2><Q3 unit="ns">2480</Q3><Max unit="ns">2800</Max> - </Sample> - <Sample functionNestLevel="1"> - <Min unit="ns">3520</Min><Q1 unit="ns">3760</Q1><Q2 unit="ns">3800</Q2><Q3 unit="ns">3800</Q3><Max unit="ns">4120</Max> - </Sample> - <Sample functionNestLevel="2"> - <Min unit="ns">4280</Min><Q1 unit="ns">4720</Q1><Q2 unit="ns">4720</Q2><Q3 unit="ns">5040</Q3><Max unit="ns">5080</Max> - </Sample> - <Sample functionNestLevel="3"> - <Min unit="ns">5320</Min><Q1 unit="ns">5640</Q1><Q2 unit="ns">5680</Q2><Q3 unit="ns">5960</Q3><Max unit="ns">6000</Max> - </Sample> - <Sample functionNestLevel="4"> - <Min unit="ns">6360</Min><Q1 unit="ns">6600</Q1><Q2 unit="ns">6600</Q2><Q3 unit="ns">6920</Q3><Max unit="ns">6920</Max> - </Sample> - <Sample functionNestLevel="5"> - <Min unit="ns">7480</Min><Q1 unit="ns">7520</Q1><Q2 unit="ns">7840</Q2><Q3 unit="ns">7840</Q3><Max unit="ns">7880</Max> - </Sample> - <Sample functionNestLevel="6"> - <Min unit="ns">8480</Min><Q1 unit="ns">8480</Q1><Q2 unit="ns">8800</Q2><Q3 unit="ns">8800</Q3><Max unit="ns">8840</Max> - </Sample> - <Sample functionNestLevel="7"> - <Min unit="ns">8840</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max> - </Sample> - <Sample functionNestLevel="8"> - <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max> - </Sample> - <Sample functionNestLevel="9"> - <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">8960</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> - </Sample> - <Sample functionNestLevel="10"> - <Min unit="ns">8800</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> - </Sample> - <Sample functionNestLevel="11"> - <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> - </Sample> - <Sample functionNestLevel="12"> - <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max> - </Sample> - <Sample functionNestLevel="13"> - <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> - </Sample> - <Sample functionNestLevel="14"> - <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> - </Sample> - <Sample functionNestLevel="15"> - <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">8960</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> - </Sample> - </ContextSwitchTest> - <ContextSwitchTest environment="dirty"> - <Sample functionNestLevel="0"> - <Min unit="ns">9720</Min><Q1 unit="ns">10560</Q1><Q2 unit="ns">10600</Q2><Q3 unit="ns">10680</Q3><Max unit="ns">11160</Max> - </Sample> - <Sample functionNestLevel="1"> - <Min unit="ns">11840</Min><Q1 unit="ns">12280</Q1><Q2 unit="ns">12560</Q2><Q3 unit="ns">12600</Q3><Max unit="ns">12640</Max> - </Sample> - <Sample functionNestLevel="2"> - <Min unit="ns">12880</Min><Q1 unit="ns">13560</Q1><Q2 unit="ns">13600</Q2><Q3 unit="ns">13640</Q3><Max unit="ns">13680</Max> - </Sample> - <Sample functionNestLevel="3"> - <Min unit="ns">13960</Min><Q1 unit="ns">14640</Q1><Q2 unit="ns">14680</Q2><Q3 unit="ns">14720</Q3><Max unit="ns">14720</Max> - </Sample> - <Sample functionNestLevel="4"> - <Min unit="ns">15000</Min><Q1 unit="ns">15680</Q1><Q2 unit="ns">15760</Q2><Q3 unit="ns">15760</Q3><Max unit="ns">15800</Max> - </Sample> - <Sample functionNestLevel="5"> - <Min unit="ns">16320</Min><Q1 unit="ns">16720</Q1><Q2 unit="ns">16800</Q2><Q3 unit="ns">16800</Q3><Max unit="ns">17040</Max> - </Sample> - <Sample functionNestLevel="6"> - <Min unit="ns">17320</Min><Q1 unit="ns">17560</Q1><Q2 unit="ns">17800</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max> - </Sample> - <Sample functionNestLevel="7"> - <Min unit="ns">17440</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max> - </Sample> - <Sample functionNestLevel="8"> - <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max> - </Sample> - <Sample functionNestLevel="9"> - <Min unit="ns">17400</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18120</Max> - </Sample> - <Sample functionNestLevel="10"> - <Min unit="ns">17320</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max> - </Sample> - <Sample functionNestLevel="11"> - <Min unit="ns">17360</Min><Q1 unit="ns">17840</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max> - </Sample> - <Sample functionNestLevel="12"> - <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max> - </Sample> - <Sample functionNestLevel="13"> - <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max> - </Sample> - <Sample functionNestLevel="14"> - <Min unit="ns">17760</Min><Q1 unit="ns">17840</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max> - </Sample> - <Sample functionNestLevel="15"> - <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max> - </Sample> - </ContextSwitchTest> - <ContextSwitchTest environment="dirty" load="1"> - <Sample functionNestLevel="0"> - <Min unit="ns">23800</Min><Q1 unit="ns">24440</Q1><Q2 unit="ns">24640</Q2><Q3 unit="ns">24720</Q3><Max unit="ns">25080</Max> - </Sample> - <Sample functionNestLevel="1"> - <Min unit="ns">28040</Min><Q1 unit="ns">28560</Q1><Q2 unit="ns">28640</Q2><Q3 unit="ns">28680</Q3><Max unit="ns">28720</Max> - </Sample> - <Sample functionNestLevel="2"> - <Min unit="ns">31600</Min><Q1 unit="ns">32160</Q1><Q2 unit="ns">32160</Q2><Q3 unit="ns">32200</Q3><Max unit="ns">32280</Max> - </Sample> - <Sample functionNestLevel="3"> - <Min unit="ns">35400</Min><Q1 unit="ns">35720</Q1><Q2 unit="ns">35760</Q2><Q3 unit="ns">35920</Q3><Max unit="ns">36080</Max> - </Sample> - <Sample functionNestLevel="4"> - <Min unit="ns">38960</Min><Q1 unit="ns">39280</Q1><Q2 unit="ns">39320</Q2><Q3 unit="ns">39560</Q3><Max unit="ns">39640</Max> - </Sample> - <Sample functionNestLevel="5"> - <Min unit="ns">42480</Min><Q1 unit="ns">42840</Q1><Q2 unit="ns">43080</Q2><Q3 unit="ns">43120</Q3><Max unit="ns">43200</Max> - </Sample> - <Sample functionNestLevel="6"> - <Min unit="ns">46120</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46880</Max> - </Sample> - <Sample functionNestLevel="7"> - <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46760</Max> - </Sample> - <Sample functionNestLevel="8"> - <Min unit="ns">46320</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">47040</Max> - </Sample> - <Sample functionNestLevel="9"> - <Min unit="ns">46040</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46960</Max> - </Sample> - <Sample functionNestLevel="10"> - <Min unit="ns">45960</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46960</Max> - </Sample> - <Sample functionNestLevel="11"> - <Min unit="ns">46040</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46720</Max> - </Sample> - <Sample functionNestLevel="12"> - <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46920</Max> - </Sample> - <Sample functionNestLevel="13"> - <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46720</Max> - </Sample> - <Sample functionNestLevel="14"> - <Min unit="ns">46280</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46760</Max> - </Sample> - <Sample functionNestLevel="15"> - <Min unit="ns">46360</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">47040</Max> - </Sample> - </ContextSwitchTest> - <ContextSwitchTest environment="dirty" load="2"> - <Sample functionNestLevel="0"> - <Min unit="ns">37560</Min><Q1 unit="ns">38200</Q1><Q2 unit="ns">38240</Q2><Q3 unit="ns">38480</Q3><Max unit="ns">38600</Max> - </Sample> - <Sample functionNestLevel="1"> - <Min unit="ns">44880</Min><Q1 unit="ns">45480</Q1><Q2 unit="ns">45560</Q2><Q3 unit="ns">45600</Q3><Max unit="ns">45640</Max> - </Sample> - <Sample functionNestLevel="2"> - <Min unit="ns">50920</Min><Q1 unit="ns">51560</Q1><Q2 unit="ns">51600</Q2><Q3 unit="ns">51800</Q3><Max unit="ns">51960</Max> - </Sample> - <Sample functionNestLevel="3"> - <Min unit="ns">57320</Min><Q1 unit="ns">57640</Q1><Q2 unit="ns">57880</Q2><Q3 unit="ns">57920</Q3><Max unit="ns">58240</Max> - </Sample> - <Sample functionNestLevel="4"> - <Min unit="ns">63320</Min><Q1 unit="ns">63920</Q1><Q2 unit="ns">63960</Q2><Q3 unit="ns">64000</Q3><Max unit="ns">64600</Max> - </Sample> - <Sample functionNestLevel="5"> - <Min unit="ns">69840</Min><Q1 unit="ns">69960</Q1><Q2 unit="ns">70040</Q2><Q3 unit="ns">70240</Q3><Max unit="ns">70400</Max> - </Sample> - <Sample functionNestLevel="6"> - <Min unit="ns">75600</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76880</Max> - </Sample> - <Sample functionNestLevel="7"> - <Min unit="ns">75440</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76840</Max> - </Sample> - <Sample functionNestLevel="8"> - <Min unit="ns">75640</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max> - </Sample> - <Sample functionNestLevel="9"> - <Min unit="ns">75640</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76440</Max> - </Sample> - <Sample functionNestLevel="10"> - <Min unit="ns">75920</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76400</Max> - </Sample> - <Sample functionNestLevel="11"> - <Min unit="ns">75600</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76920</Max> - </Sample> - <Sample functionNestLevel="12"> - <Min unit="ns">75360</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76440</Max> - </Sample> - <Sample functionNestLevel="13"> - <Min unit="ns">75360</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max> - </Sample> - <Sample functionNestLevel="14"> - <Min unit="ns">75640</Min><Q1 unit="ns">76160</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max> - </Sample> - <Sample functionNestLevel="15"> - <Min unit="ns">75960</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76400</Max> - </Sample> - </ContextSwitchTest> - <ContextSwitchTest environment="dirty" load="3"> - <Sample functionNestLevel="0"> - <Min unit="ns">52400</Min><Q1 unit="ns">52480</Q1><Q2 unit="ns">52520</Q2><Q3 unit="ns">52800</Q3><Max unit="ns">53720</Max> - </Sample> - <Sample functionNestLevel="1"> - <Min unit="ns">61680</Min><Q1 unit="ns">62600</Q1><Q2 unit="ns">62640</Q2><Q3 unit="ns">62680</Q3><Max unit="ns">62800</Max> - </Sample> - <Sample functionNestLevel="2"> - <Min unit="ns">70160</Min><Q1 unit="ns">71160</Q1><Q2 unit="ns">71360</Q2><Q3 unit="ns">71480</Q3><Max unit="ns">72160</Max> - </Sample> - <Sample functionNestLevel="3"> - <Min unit="ns">79000</Min><Q1 unit="ns">79960</Q1><Q2 unit="ns">80000</Q2><Q3 unit="ns">80000</Q3><Max unit="ns">80920</Max> - </Sample> - <Sample functionNestLevel="4"> - <Min unit="ns">87600</Min><Q1 unit="ns">88480</Q1><Q2 unit="ns">88760</Q2><Q3 unit="ns">88800</Q3><Max unit="ns">88880</Max> - </Sample> - <Sample functionNestLevel="5"> - <Min unit="ns">96320</Min><Q1 unit="ns">97280</Q1><Q2 unit="ns">97320</Q2><Q3 unit="ns">97360</Q3><Max unit="ns">98600</Max> - </Sample> - <Sample functionNestLevel="6"> - <Min unit="ns">105160</Min><Q1 unit="ns">105840</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107120</Max> - </Sample> - <Sample functionNestLevel="7"> - <Min unit="ns">105200</Min><Q1 unit="ns">106040</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107080</Max> - </Sample> - <Sample functionNestLevel="8"> - <Min unit="ns">104880</Min><Q1 unit="ns">105920</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max> - </Sample> - <Sample functionNestLevel="9"> - <Min unit="ns">105760</Min><Q1 unit="ns">106000</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max> - </Sample> - <Sample functionNestLevel="10"> - <Min unit="ns">104880</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107080</Max> - </Sample> - <Sample functionNestLevel="11"> - <Min unit="ns">105720</Min><Q1 unit="ns">105960</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106240</Max> - </Sample> - <Sample functionNestLevel="12"> - <Min unit="ns">104960</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max> - </Sample> - <Sample functionNestLevel="13"> - <Min unit="ns">104880</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max> - </Sample> - <Sample functionNestLevel="14"> - <Min unit="ns">105720</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106240</Max> - </Sample> - <Sample functionNestLevel="15"> - <Min unit="ns">104920</Min><Q1 unit="ns">105840</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max> - </Sample> - </ContextSwitchTest> -</Test> -<!-- *** END OF TEST TMCONTEXT 1 *** --> + + SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020 + Bug-reports to jiri@gaisler.se + + GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks + + Loaded build/sparc/gr740/testsuites/tmtests/tmcontext01.exe, entry 0x00000000 + + +*** BEGIN OF TEST TMCONTEXT 1 *** +*** TEST VERSION: 6.0.0.aa07dc10645c3dc855c3df2b53520aebc2751b06 +*** TEST STATE: EXPECTED_PASS +*** TEST BUILD: RTEMS_SMP +*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448) +*** BEGIN OF JSON DATA *** +[ + { + "environment": "HotCache", + "stats-by-function-nest-level": [ + [2820, 2820, 2820, 2820, 2820], + [3640, 3640, 3640, 3640, 3640], + [4460, 4460, 4460, 4460, 4460], + [5280, 5280, 5280, 5280, 5280], + [6100, 6100, 6100, 6100, 6100], + [6920, 6920, 6920, 6920, 6920], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740] + ] + }, { + "environment": "DirtyCache", + "stats-by-function-nest-level": [ + [2820, 2820, 2820, 2820, 2820], + [3640, 3640, 3640, 3640, 3640], + [4460, 4460, 4460, 4460, 4460], + [5280, 5280, 5280, 5280, 5280], + [6100, 6100, 6100, 6100, 6100], + [6920, 6920, 6920, 6920, 6920], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740] + ] + }, { + "environment": "Load/1", + "stats-by-function-nest-level": [ + [2820, 2820, 2820, 2820, 2820], + [3640, 3640, 3640, 3640, 3640], + [4460, 4460, 4460, 4460, 4460], + [5280, 5280, 5280, 5280, 5280], + [6100, 6100, 6100, 6100, 6100], + [6920, 6920, 6920, 6920, 6920], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740] + ] + }, { + "environment": "Load/2", + "stats-by-function-nest-level": [ + [2820, 2820, 2820, 2820, 2820], + [3640, 3640, 3640, 3640, 3640], + [4460, 4460, 4460, 4460, 4460], + [5280, 5280, 5280, 5280, 5280], + [6100, 6100, 6100, 6100, 6100], + [6920, 6920, 6920, 6920, 6920], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740] + ] + }, { + "environment": "Load/3", + "stats-by-function-nest-level": [ + [2820, 2820, 2820, 2820, 2820], + [3640, 3640, 3640, 3640, 3640], + [4460, 4460, 4460, 4460, 4460], + [5280, 5280, 5280, 5280, 5280], + [6100, 6100, 6100, 6100, 6100], + [6920, 6920, 6920, 6920, 6920], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740], + [7740, 7740, 7740, 7740, 7740] + ] + } +] +*** END OF JSON DATA *** + +*** END OF TEST TMCONTEXT 1 *** + +cpu 3 in error mode (tt = 0x80) + 2081487650 00009060: 91d02000 ta 0x0 diff --git a/testsuites/tmtests/tmfine01/init.c b/testsuites/tmtests/tmfine01/init.c index a93e2d3470..c05894f6da 100644 --- a/testsuites/tmtests/tmfine01/init.c +++ b/testsuites/tmtests/tmfine01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2015, 2017 embedded brains GmbH. All rights reserved. + * Copyright (C) 2015, 2024 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,6 +55,8 @@ typedef struct { typedef struct { rtems_test_parallel_context base; + const char *test_sep; + const char *counter_sep; rtems_id master; rtems_id sema; rtems_id mq[CPU_COUNT]; @@ -89,24 +91,46 @@ static rtems_interval test_init( } static void test_fini( - const char *name, + test_context *ctx, + const char *type, + const char *description, uint32_t *counters, size_t active_workers ) { + const char *value_sep; size_t i; - printf(" <%s activeWorker=\"%zu\">\n", name, active_workers); + if (active_workers == 1) { + printf( + "%s{\n" + " \"type\": \"%s\",\n" + " \"description\": \"%s\",\n" + " \"counter\": [", + ctx->test_sep, + type, + description + ); + ctx->test_sep = ", "; + ctx->counter_sep = "\n "; + } + + printf("%s[", ctx->counter_sep); + ctx->counter_sep = "],\n "; + value_sep = ""; for (i = 0; i < active_workers; ++i) { printf( - " <Counter worker=\"%zu\">%" PRIu32 "</Counter>\n", - i, + "%s%" PRIu32, + value_sep, counters[i] ); + value_sep = ", "; } - printf(" </%s>\n", name); + if (active_workers == rtems_scheduler_get_processor_maximum()) { + printf("]\n ]\n }"); + } } static void test_self_event_body( @@ -150,7 +174,9 @@ static void test_self_event_fini( test_context *ctx = (test_context *) base; test_fini( - "SelfEvent", + ctx, + "event", + "Send Event to Self", &ctx->self_event_ops[active_workers - 1][0], active_workers ); @@ -201,7 +227,9 @@ static void test_all_to_one_event_fini( test_context *ctx = (test_context *) base; test_fini( - "AllToOneEvent", + ctx, + "event", + "Send Event to One", &ctx->all_to_one_event_ops[active_workers - 1][0], active_workers ); @@ -242,7 +270,9 @@ static void test_one_mutex_fini( test_context *ctx = (test_context *) base; test_fini( - "OneMutex", + ctx, + "contested-mutex", + "Obtain/Release Contested Classic Inheritance Mutex", &ctx->one_mutex_ops[active_workers - 1][0], active_workers ); @@ -296,7 +326,9 @@ static void test_many_mutex_fini( test_context *ctx = (test_context *) base; test_fini( - "ManyMutex", + ctx, + "private-mutex", + "Obtain/Release Private Classic Inheritance Mutex", &ctx->many_mutex_ops[active_workers - 1][0], active_workers ); @@ -347,7 +379,9 @@ static void test_self_msg_fini( test_context *ctx = (test_context *) base; test_fini( - "SelfMsg", + ctx, + "message", + "Send Message to Self", &ctx->self_msg_ops[active_workers - 1][0], active_workers ); @@ -401,7 +435,9 @@ static void test_many_to_one_msg_fini( test_context *ctx = (test_context *) base; test_fini( - "ManyToOneMsg", + ctx, + "message", + "Send Message to One Receiver", &ctx->many_to_one_msg_ops[active_workers - 1][0], active_workers ); @@ -439,7 +475,9 @@ static void test_many_sys_lock_mutex_fini( test_context *ctx = (test_context *) base; test_fini( - "ManySysLockMutex", + ctx, + "private-mutex", + "Obtain/Release Private <sys/lock.h> Mutex", &ctx->many_sys_lock_mutex_ops[active_workers - 1][0], active_workers ); @@ -493,7 +531,9 @@ static void test_many_classic_ceiling_fini( test_context *ctx = (test_context *) base; test_fini( - "ManyClassicCeilingMutex", + ctx, + "private-mutex", + "Obtain/Release Private Classic Ceiling Mutex", &ctx->many_classic_ceiling_ops[active_workers - 1][0], active_workers ); @@ -548,7 +588,9 @@ static void test_many_classic_mrsp_fini( test_context *ctx = (test_context *) base; test_fini( - "ManyClassicMrsPMutex", + ctx, + "private-mutex", + "Obtain/Release Private Classic MrsP Mutex", &ctx->many_classic_mrsp_ops[active_workers - 1][0], active_workers ); @@ -591,7 +633,9 @@ static void test_many_pthread_spinlock_fini( test_context *ctx = (test_context *) base; test_fini( - "ManyPthreadSpinlock", + ctx, + "private-mutex", + "Obtain/Release Private Pthread Spinlock", &ctx->many_pthread_spinlock_ops[active_workers - 1][0], active_workers ); @@ -645,7 +689,9 @@ static void test_many_pthread_mutex_inherit_fini( test_context *ctx = (test_context *) base; test_fini( - "ManyPthreadMutexInherit", + ctx, + "private-mutex", + "Obtain/Release Private Pthread Inheritance Mutex", &ctx->many_pthread_mutex_inherit_ops[active_workers - 1][0], active_workers ); @@ -705,7 +751,9 @@ static void test_many_pthread_mutex_protect_fini( test_context *ctx = (test_context *) base; test_fini( - "ManyPthreadMutexProtect", + ctx, + "private-mutex", + "Obtain/Release Private Pthread Ceiling Mutex", &ctx->many_pthread_mutex_protect_ops[active_workers - 1][0], active_workers ); @@ -729,11 +777,6 @@ static const rtems_test_parallel_job test_jobs[] = { .cascade = true }, { .init = test_init, - .body = test_many_mutex_body, - .fini = test_many_mutex_fini, - .cascade = true - }, { - .init = test_init, .body = test_self_msg_body, .fini = test_self_msg_fini, .cascade = true @@ -744,33 +787,38 @@ static const rtems_test_parallel_job test_jobs[] = { .cascade = true }, { .init = test_init, + .body = test_many_pthread_spinlock_body, + .fini = test_many_pthread_spinlock_fini, + .cascade = true + }, { + .init = test_init, .body = test_many_sys_lock_mutex_body, .fini = test_many_sys_lock_mutex_fini, .cascade = true }, { .init = test_init, - .body = test_many_classic_ceiling_body, - .fini = test_many_classic_ceiling_fini, + .body = test_many_pthread_mutex_inherit_body, + .fini = test_many_pthread_mutex_inherit_fini, .cascade = true }, { .init = test_init, - .body = test_many_classic_mrsp_body, - .fini = test_many_classic_mrsp_fini, + .body = test_many_mutex_body, + .fini = test_many_mutex_fini, .cascade = true }, { .init = test_init, - .body = test_many_pthread_spinlock_body, - .fini = test_many_pthread_spinlock_fini, + .body = test_many_pthread_mutex_protect_body, + .fini = test_many_pthread_mutex_protect_fini, .cascade = true }, { .init = test_init, - .body = test_many_pthread_mutex_inherit_body, - .fini = test_many_pthread_mutex_inherit_fini, + .body = test_many_classic_ceiling_body, + .fini = test_many_classic_ceiling_fini, .cascade = true }, { .init = test_init, - .body = test_many_pthread_mutex_protect_body, - .fini = test_many_pthread_mutex_protect_fini, + .body = test_many_classic_mrsp_body, + .fini = test_many_classic_mrsp_fini, .cascade = true } }; @@ -778,7 +826,6 @@ static const rtems_test_parallel_job test_jobs[] = { static void Init(rtems_task_argument arg) { test_context *ctx = &test_instance; - const char *test = "TestTimeFine01"; rtems_status_code sc; size_t i; @@ -806,8 +853,9 @@ static void Init(rtems_task_argument arg) rtems_test_assert(sc == RTEMS_SUCCESSFUL); } - printf("<%s>\n", test); + printf("*** BEGIN OF JSON DATA ***\n[\n "); + ctx->test_sep = ""; rtems_test_parallel( &ctx->base, NULL, @@ -815,7 +863,7 @@ static void Init(rtems_task_argument arg) RTEMS_ARRAY_SIZE(test_jobs) ); - printf("</%s>\n", test); + printf("\n]\n*** END OF JSON DATA ***\n"); TEST_END(); rtems_test_exit(0); diff --git a/testsuites/tmtests/tmfine01/tmfine01.py b/testsuites/tmtests/tmfine01/tmfine01.py index 9345e245c5..54363bee34 100644 --- a/testsuites/tmtests/tmfine01/tmfine01.py +++ b/testsuites/tmtests/tmfine01/tmfine01.py @@ -1,9 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -#!/usr/bin/env python - -# -# Copyright (c) 2016 embedded brains GmbH. All rights reserved. +# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -25,57 +22,41 @@ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -# +import json import re -import libxml2 -from libxml2 import xmlNode -import matplotlib.pyplot as plt -data = open('tmfine01.scn').read() -data = re.sub(r'\*\*\*.*\*\*\*', '', data) -doc = libxml2.parseDoc(data) -ctx = doc.xpathNewContext() - -plt.yscale('log') -plt.title('Uncontested Mutex Performance') -plt.xlabel('Active Workers') -plt.ylabel('Operation Count') - -def m(n): - return int(n.getContent()) - -def getCounterSums(variant): - w = 1 - y = [] - while True: - c = map(m, ctx.xpathEval('/TestTimeFine01/' + variant + '[@activeWorker="' + str(w) + '"]/Counter')) - if not c: - break - y.append(sum(c)) - w = w + 1 - return y - -y = getCounterSums('ManySysLockMutex') -x = range(1, len(y) + 1) -plt.plot(x, y, label = 'Sys Lock Mutex', marker = 'o') - -y = getCounterSums('ManyMutex') -plt.plot(x, y, label = 'Classic Inheritance Mutex', marker = 'o') - -y = getCounterSums('ManyClassicCeilingMutex') -plt.plot(x, y, label = 'Classic Ceiling Mutex', marker = 'o') - -y = getCounterSums('ManyClassicMrsPMutex') -plt.plot(x, y, label = 'Classic MrsP Mutex', marker = 'o') - -y = getCounterSums('ManyPthreadSpinlock') -plt.plot(x, y, label = 'Pthread Spinlock', marker = 'o') - -y = getCounterSums('ManyPthreadMutexInherit') -plt.plot(x, y, label = 'Pthread Mutex Inherit', marker = 'o') - -y = getCounterSums('ManyPthreadMutexProtect') -plt.plot(x, y, label = 'Pthread Mutex Protect', marker = 'o') - -plt.legend(loc = 'best') -plt.show() +import matplotlib.pyplot as plt # type: ignore +from matplotlib import ticker # type: ignore + + +def _plot(data: dict) -> None: + _, axes = plt.subplots() + axes.set_title("Uncontested Mutex Performance") + axes.set_xlabel("Active Workers") + axes.set_ylabel("Operation Count") + x = list(range(1, len(data[0]["counter"]) + 1)) + axes.xaxis.set_major_locator(ticker.FixedLocator(x)) + for samples in data: + if samples["type"] != "private-mutex": + continue + y = [sum(values) for values in samples["counter"]] + axes.plot(x, + y, + label=samples["description"].replace( + "Obtain/Release Private ", ""), + marker="o") + axes.legend(loc="best") + plt.savefig("tmfine01.png") + plt.savefig("tmfine01.pdf") + plt.close() + + +_JSON_DATA = re.compile( + r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)" + r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL) + +with open("tmfine01.scn", "r", encoding="utf-8") as src: + match = _JSON_DATA.search(src.read()) + data = json.loads(match.group(1)) + +_plot(data) diff --git a/testsuites/tmtests/tmfine01/tmfine01.scn b/testsuites/tmtests/tmfine01/tmfine01.scn index e3dfd7757f..cf356f0806 100644 --- a/testsuites/tmtests/tmfine01/tmfine01.scn +++ b/testsuites/tmtests/tmfine01/tmfine01.scn @@ -1,4180 +1,132 @@ + + SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020 + Bug-reports to jiri@gaisler.se + + GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks + + Loaded build/sparc/gr740/testsuites/tmtests/tmfine01.exe, entry 0x00000000 + + *** BEGIN OF TEST TMFINE 1 *** -<TestTimeFine01> - <SelfEvent activeWorker="1"> - <Counter worker="0">4676131</Counter> - </SelfEvent> - <SelfEvent activeWorker="2"> - <Counter worker="0">4641176</Counter> - <Counter worker="1">4641467</Counter> - </SelfEvent> - <SelfEvent activeWorker="3"> - <Counter worker="0">4588420</Counter> - <Counter worker="1">4588713</Counter> - <Counter worker="2">4588730</Counter> - </SelfEvent> - <SelfEvent activeWorker="4"> - <Counter worker="0">4552423</Counter> - <Counter worker="1">4552717</Counter> - <Counter worker="2">4552773</Counter> - <Counter worker="3">4552785</Counter> - </SelfEvent> - <SelfEvent activeWorker="5"> - <Counter worker="0">4503050</Counter> - <Counter worker="1">4503310</Counter> - <Counter worker="2">4503408</Counter> - <Counter worker="3">4503447</Counter> - <Counter worker="4">4503380</Counter> - </SelfEvent> - <SelfEvent activeWorker="6"> - <Counter worker="0">4506318</Counter> - <Counter worker="1">4506592</Counter> - <Counter worker="2">4506673</Counter> - <Counter worker="3">4506688</Counter> - <Counter worker="4">4506663</Counter> - <Counter worker="5">4506666</Counter> - </SelfEvent> - <SelfEvent activeWorker="7"> - <Counter worker="0">4479255</Counter> - <Counter worker="1">4479516</Counter> - <Counter worker="2">4479651</Counter> - <Counter worker="3">4479614</Counter> - <Counter worker="4">4479578</Counter> - <Counter worker="5">4479616</Counter> - <Counter worker="6">4479670</Counter> - </SelfEvent> - <SelfEvent activeWorker="8"> - <Counter worker="0">4430941</Counter> - <Counter worker="1">4431230</Counter> - <Counter worker="2">4431182</Counter> - <Counter worker="3">4431299</Counter> - <Counter worker="4">4430884</Counter> - <Counter worker="5">4430883</Counter> - <Counter worker="6">4431032</Counter> - <Counter worker="7">4431022</Counter> - </SelfEvent> - <SelfEvent activeWorker="9"> - <Counter worker="0">4448824</Counter> - <Counter worker="1">4449100</Counter> - <Counter worker="2">4448994</Counter> - <Counter worker="3">4449146</Counter> - <Counter worker="4">4448725</Counter> - <Counter worker="5">4448726</Counter> - <Counter worker="6">4448812</Counter> - <Counter worker="7">4448856</Counter> - <Counter worker="8">4683748</Counter> - </SelfEvent> - <SelfEvent activeWorker="10"> - <Counter worker="0">4434217</Counter> - <Counter worker="1">4434522</Counter> - <Counter worker="2">4434464</Counter> - <Counter worker="3">4434566</Counter> - <Counter worker="4">4434201</Counter> - <Counter worker="5">4434183</Counter> - <Counter worker="6">4434380</Counter> - <Counter worker="7">4434377</Counter> - <Counter worker="8">4645492</Counter> - <Counter worker="9">4645490</Counter> - </SelfEvent> - <SelfEvent activeWorker="11"> - <Counter worker="0">4462864</Counter> - <Counter worker="1">4463155</Counter> - <Counter worker="2">4463110</Counter> - <Counter worker="3">4463229</Counter> - <Counter worker="4">4462874</Counter> - <Counter worker="5">4462844</Counter> - <Counter worker="6">4462957</Counter> - <Counter worker="7">4462977</Counter> - <Counter worker="8">4590235</Counter> - <Counter worker="9">4590243</Counter> - <Counter worker="10">4590208</Counter> - </SelfEvent> - <SelfEvent activeWorker="12"> - <Counter worker="0">4448372</Counter> - <Counter worker="1">4448670</Counter> - <Counter worker="2">4448618</Counter> - <Counter worker="3">4448756</Counter> - <Counter worker="4">4448391</Counter> - <Counter worker="5">4448389</Counter> - <Counter worker="6">4448491</Counter> - <Counter worker="7">4448501</Counter> - <Counter worker="8">4552401</Counter> - <Counter worker="9">4552390</Counter> - <Counter worker="10">4552353</Counter> - <Counter worker="11">4552386</Counter> - </SelfEvent> - <SelfEvent activeWorker="13"> - <Counter worker="0">4427993</Counter> - <Counter worker="1">4428270</Counter> - <Counter worker="2">4428290</Counter> - <Counter worker="3">4428406</Counter> - <Counter worker="4">4428081</Counter> - <Counter worker="5">4428077</Counter> - <Counter worker="6">4428183</Counter> - <Counter worker="7">4428187</Counter> - <Counter worker="8">4507321</Counter> - <Counter worker="9">4507322</Counter> - <Counter worker="10">4507311</Counter> - <Counter worker="11">4507332</Counter> - <Counter worker="12">4507311</Counter> - </SelfEvent> - <SelfEvent activeWorker="14"> - <Counter worker="0">4456343</Counter> - <Counter worker="1">4456632</Counter> - <Counter worker="2">4456672</Counter> - <Counter worker="3">4456758</Counter> - <Counter worker="4">4456495</Counter> - <Counter worker="5">4456482</Counter> - <Counter worker="6">4456584</Counter> - <Counter worker="7">4456575</Counter> - <Counter worker="8">4507973</Counter> - <Counter worker="9">4507951</Counter> - <Counter worker="10">4507951</Counter> - <Counter worker="11">4507937</Counter> - <Counter worker="12">4507952</Counter> - <Counter worker="13">4507971</Counter> - </SelfEvent> - <SelfEvent activeWorker="15"> - <Counter worker="0">4441428</Counter> - <Counter worker="1">4441718</Counter> - <Counter worker="2">4441692</Counter> - <Counter worker="3">4441802</Counter> - <Counter worker="4">4441407</Counter> - <Counter worker="5">4441408</Counter> - <Counter worker="6">4441556</Counter> - <Counter worker="7">4441569</Counter> - <Counter worker="8">4478368</Counter> - <Counter worker="9">4478360</Counter> - <Counter worker="10">4478594</Counter> - <Counter worker="11">4478573</Counter> - <Counter worker="12">4478347</Counter> - <Counter worker="13">4478367</Counter> - <Counter worker="14">4478443</Counter> - </SelfEvent> - <SelfEvent activeWorker="16"> - <Counter worker="0">4470668</Counter> - <Counter worker="1">4470970</Counter> - <Counter worker="2">4470950</Counter> - <Counter worker="3">4471049</Counter> - <Counter worker="4">4470638</Counter> - <Counter worker="5">4470599</Counter> - <Counter worker="6">4470866</Counter> - <Counter worker="7">4470888</Counter> - <Counter worker="8">4462941</Counter> - <Counter worker="9">4462934</Counter> - <Counter worker="10">4462925</Counter> - <Counter worker="11">4463059</Counter> - <Counter worker="12">4462612</Counter> - <Counter worker="13">4462636</Counter> - <Counter worker="14">4462669</Counter> - <Counter worker="15">4462676</Counter> - </SelfEvent> - <SelfEvent activeWorker="17"> - <Counter worker="0">4451094</Counter> - <Counter worker="1">4451396</Counter> - <Counter worker="2">4451343</Counter> - <Counter worker="3">4451471</Counter> - <Counter worker="4">4451083</Counter> - <Counter worker="5">4451099</Counter> - <Counter worker="6">4451193</Counter> - <Counter worker="7">4451191</Counter> - <Counter worker="8">4450420</Counter> - <Counter worker="9">4450424</Counter> - <Counter worker="10">4450398</Counter> - <Counter worker="11">4450533</Counter> - <Counter worker="12">4450111</Counter> - <Counter worker="13">4450105</Counter> - <Counter worker="14">4450218</Counter> - <Counter worker="15">4450237</Counter> - <Counter worker="16">4682169</Counter> - </SelfEvent> - <SelfEvent activeWorker="18"> - <Counter worker="0">4435091</Counter> - <Counter worker="1">4435372</Counter> - <Counter worker="2">4435353</Counter> - <Counter worker="3">4435493</Counter> - <Counter worker="4">4435073</Counter> - <Counter worker="5">4435101</Counter> - <Counter worker="6">4435297</Counter> - <Counter worker="7">4435279</Counter> - <Counter worker="8">4435219</Counter> - <Counter worker="9">4435244</Counter> - <Counter worker="10">4435166</Counter> - <Counter worker="11">4435291</Counter> - <Counter worker="12">4434894</Counter> - <Counter worker="13">4434866</Counter> - <Counter worker="14">4435038</Counter> - <Counter worker="15">4435019</Counter> - <Counter worker="16">4644910</Counter> - <Counter worker="17">4644922</Counter> - </SelfEvent> - <SelfEvent activeWorker="19"> - <Counter worker="0">4467049</Counter> - <Counter worker="1">4467345</Counter> - <Counter worker="2">4467193</Counter> - <Counter worker="3">4467343</Counter> - <Counter worker="4">4466881</Counter> - <Counter worker="5">4466868</Counter> - <Counter worker="6">4466971</Counter> - <Counter worker="7">4466993</Counter> - <Counter worker="8">4457734</Counter> - <Counter worker="9">4457707</Counter> - <Counter worker="10">4457717</Counter> - <Counter worker="11">4457828</Counter> - <Counter worker="12">4457399</Counter> - <Counter worker="13">4457360</Counter> - <Counter worker="14">4457515</Counter> - <Counter worker="15">4457488</Counter> - <Counter worker="16">4585770</Counter> - <Counter worker="17">4585760</Counter> - <Counter worker="18">4585688</Counter> - </SelfEvent> - <SelfEvent activeWorker="20"> - <Counter worker="0">4446007</Counter> - <Counter worker="1">4446279</Counter> - <Counter worker="2">4446256</Counter> - <Counter worker="3">4446376</Counter> - <Counter worker="4">4445955</Counter> - <Counter worker="5">4445940</Counter> - <Counter worker="6">4446119</Counter> - <Counter worker="7">4446087</Counter> - <Counter worker="8">4445074</Counter> - <Counter worker="9">4445042</Counter> - <Counter worker="10">4444971</Counter> - <Counter worker="11">4445114</Counter> - <Counter worker="12">4444692</Counter> - <Counter worker="13">4444706</Counter> - <Counter worker="14">4444765</Counter> - <Counter worker="15">4444747</Counter> - <Counter worker="16">4548340</Counter> - <Counter worker="17">4548325</Counter> - <Counter worker="18">4548353</Counter> - <Counter worker="19">4548347</Counter> - </SelfEvent> - <SelfEvent activeWorker="21"> - <Counter worker="0">4427980</Counter> - <Counter worker="1">4428254</Counter> - <Counter worker="2">4428184</Counter> - <Counter worker="3">4428372</Counter> - <Counter worker="4">4427834</Counter> - <Counter worker="5">4427816</Counter> - <Counter worker="6">4427990</Counter> - <Counter worker="7">4428014</Counter> - <Counter worker="8">4427634</Counter> - <Counter worker="9">4427642</Counter> - <Counter worker="10">4427639</Counter> - <Counter worker="11">4427737</Counter> - <Counter worker="12">4427339</Counter> - <Counter worker="13">4427323</Counter> - <Counter worker="14">4427446</Counter> - <Counter worker="15">4427427</Counter> - <Counter worker="16">4504730</Counter> - <Counter worker="17">4504744</Counter> - <Counter worker="18">4504739</Counter> - <Counter worker="19">4504744</Counter> - <Counter worker="20">4504678</Counter> - </SelfEvent> - <SelfEvent activeWorker="22"> - <Counter worker="0">4452075</Counter> - <Counter worker="1">4452381</Counter> - <Counter worker="2">4452154</Counter> - <Counter worker="3">4452302</Counter> - <Counter worker="4">4451944</Counter> - <Counter worker="5">4451919</Counter> - <Counter worker="6">4451965</Counter> - <Counter worker="7">4452004</Counter> - <Counter worker="8">4451917</Counter> - <Counter worker="9">4451934</Counter> - <Counter worker="10">4451935</Counter> - <Counter worker="11">4452019</Counter> - <Counter worker="12">4451627</Counter> - <Counter worker="13">4451630</Counter> - <Counter worker="14">4451689</Counter> - <Counter worker="15">4451672</Counter> - <Counter worker="16">4506836</Counter> - <Counter worker="17">4506837</Counter> - <Counter worker="18">4506830</Counter> - <Counter worker="19">4506828</Counter> - <Counter worker="20">4506811</Counter> - <Counter worker="21">4506822</Counter> - </SelfEvent> - <SelfEvent activeWorker="23"> - <Counter worker="0">4435063</Counter> - <Counter worker="1">4435355</Counter> - <Counter worker="2">4435353</Counter> - <Counter worker="3">4435496</Counter> - <Counter worker="4">4435090</Counter> - <Counter worker="5">4435092</Counter> - <Counter worker="6">4435188</Counter> - <Counter worker="7">4435200</Counter> - <Counter worker="8">4432230</Counter> - <Counter worker="9">4432253</Counter> - <Counter worker="10">4432620</Counter> - <Counter worker="11">4432748</Counter> - <Counter worker="12">4431935</Counter> - <Counter worker="13">4431916</Counter> - <Counter worker="14">4432042</Counter> - <Counter worker="15">4432055</Counter> - <Counter worker="16">4476758</Counter> - <Counter worker="17">4476739</Counter> - <Counter worker="18">4476783</Counter> - <Counter worker="19">4476776</Counter> - <Counter worker="20">4476730</Counter> - <Counter worker="21">4476742</Counter> - <Counter worker="22">4476861</Counter> - </SelfEvent> - <SelfEvent activeWorker="24"> - <Counter worker="0">4462678</Counter> - <Counter worker="1">4462968</Counter> - <Counter worker="2">4462933</Counter> - <Counter worker="3">4463030</Counter> - <Counter worker="4">4462726</Counter> - <Counter worker="5">4462724</Counter> - <Counter worker="6">4462873</Counter> - <Counter worker="7">4462866</Counter> - <Counter worker="8">4464841</Counter> - <Counter worker="9">4464847</Counter> - <Counter worker="10">4464793</Counter> - <Counter worker="11">4464948</Counter> - <Counter worker="12">4464503</Counter> - <Counter worker="13">4464493</Counter> - <Counter worker="14">4464580</Counter> - <Counter worker="15">4464597</Counter> - <Counter worker="16">4475030</Counter> - <Counter worker="17">4475042</Counter> - <Counter worker="18">4474978</Counter> - <Counter worker="19">4475018</Counter> - <Counter worker="20">4474858</Counter> - <Counter worker="21">4474851</Counter> - <Counter worker="22">4475125</Counter> - <Counter worker="23">4475172</Counter> - </SelfEvent> - <AllToOneEvent activeWorker="1"> - <Counter worker="0">4512749</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="2"> - <Counter worker="0">4478766</Counter> - <Counter worker="1">8957974</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="3"> - <Counter worker="0">4507485</Counter> - <Counter worker="1">9015419</Counter> - <Counter worker="2">9015694</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="4"> - <Counter worker="0">4404320</Counter> - <Counter worker="1">8809091</Counter> - <Counter worker="2">8809371</Counter> - <Counter worker="3">8809388</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="5"> - <Counter worker="0">4380598</Counter> - <Counter worker="1">8788711</Counter> - <Counter worker="2">8768400</Counter> - <Counter worker="3">8768539</Counter> - <Counter worker="4">8947075</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="6"> - <Counter worker="0">4384177</Counter> - <Counter worker="1">8775468</Counter> - <Counter worker="2">8770900</Counter> - <Counter worker="3">8771021</Counter> - <Counter worker="4">8778460</Counter> - <Counter worker="5">8778497</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="7"> - <Counter worker="0">4375929</Counter> - <Counter worker="1">8753666</Counter> - <Counter worker="2">8752767</Counter> - <Counter worker="3">8752874</Counter> - <Counter worker="4">8753367</Counter> - <Counter worker="5">8753374</Counter> - <Counter worker="6">8840563</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="8"> - <Counter worker="0">4347550</Counter> - <Counter worker="1">8697434</Counter> - <Counter worker="2">8696453</Counter> - <Counter worker="3">8696601</Counter> - <Counter worker="4">8697025</Counter> - <Counter worker="5">8696969</Counter> - <Counter worker="6">8696444</Counter> - <Counter worker="7">8696417</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="9"> - <Counter worker="0">4328236</Counter> - <Counter worker="1">8682051</Counter> - <Counter worker="2">8671656</Counter> - <Counter worker="3">8671719</Counter> - <Counter worker="4">8674666</Counter> - <Counter worker="5">8674727</Counter> - <Counter worker="6">8670649</Counter> - <Counter worker="7">8667287</Counter> - <Counter worker="8">9254597</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="10"> - <Counter worker="0">4311205</Counter> - <Counter worker="1">8653563</Counter> - <Counter worker="2">8640229</Counter> - <Counter worker="3">8640342</Counter> - <Counter worker="4">8643904</Counter> - <Counter worker="5">8643865</Counter> - <Counter worker="6">8639106</Counter> - <Counter worker="7">8634769</Counter> - <Counter worker="8">9212001</Counter> - <Counter worker="9">9212064</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="11"> - <Counter worker="0">4338650</Counter> - <Counter worker="1">8703013</Counter> - <Counter worker="2">8692866</Counter> - <Counter worker="3">8692981</Counter> - <Counter worker="4">8695787</Counter> - <Counter worker="5">8695808</Counter> - <Counter worker="6">8691894</Counter> - <Counter worker="7">8687943</Counter> - <Counter worker="8">9103496</Counter> - <Counter worker="9">9103489</Counter> - <Counter worker="10">9103538</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="12"> - <Counter worker="0">4326588</Counter> - <Counter worker="1">8680078</Counter> - <Counter worker="2">8669077</Counter> - <Counter worker="3">8669207</Counter> - <Counter worker="4">8672685</Counter> - <Counter worker="5">8672667</Counter> - <Counter worker="6">8667903</Counter> - <Counter worker="7">8664528</Counter> - <Counter worker="8">8907170</Counter> - <Counter worker="9">8907137</Counter> - <Counter worker="10">8907177</Counter> - <Counter worker="11">8907256</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="13"> - <Counter worker="0">4309927</Counter> - <Counter worker="1">8643768</Counter> - <Counter worker="2">8634342</Counter> - <Counter worker="3">8634451</Counter> - <Counter worker="4">8636838</Counter> - <Counter worker="5">8636892</Counter> - <Counter worker="6">8633550</Counter> - <Counter worker="7">8629506</Counter> - <Counter worker="8">8899997</Counter> - <Counter worker="9">8900014</Counter> - <Counter worker="10">8900104</Counter> - <Counter worker="11">8900144</Counter> - <Counter worker="12">8900125</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="14"> - <Counter worker="0">4335662</Counter> - <Counter worker="1">8700274</Counter> - <Counter worker="2">8688657</Counter> - <Counter worker="3">8688789</Counter> - <Counter worker="4">8692110</Counter> - <Counter worker="5">8692102</Counter> - <Counter worker="6">8687544</Counter> - <Counter worker="7">8683259</Counter> - <Counter worker="8">8808142</Counter> - <Counter worker="9">8808143</Counter> - <Counter worker="10">8808118</Counter> - <Counter worker="11">8808151</Counter> - <Counter worker="12">8808088</Counter> - <Counter worker="13">8808120</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="15"> - <Counter worker="0">4314045</Counter> - <Counter worker="1">8661973</Counter> - <Counter worker="2">8648592</Counter> - <Counter worker="3">8648764</Counter> - <Counter worker="4">8652271</Counter> - <Counter worker="5">8652318</Counter> - <Counter worker="6">8647390</Counter> - <Counter worker="7">8641916</Counter> - <Counter worker="8">8797415</Counter> - <Counter worker="9">8797422</Counter> - <Counter worker="10">8797305</Counter> - <Counter worker="11">8797328</Counter> - <Counter worker="12">8797322</Counter> - <Counter worker="13">8797357</Counter> - <Counter worker="14">8802341</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="16"> - <Counter worker="0">4346816</Counter> - <Counter worker="1">8715982</Counter> - <Counter worker="2">8706981</Counter> - <Counter worker="3">8707143</Counter> - <Counter worker="4">8708920</Counter> - <Counter worker="5">8708960</Counter> - <Counter worker="6">8706447</Counter> - <Counter worker="7">8703043</Counter> - <Counter worker="8">8712344</Counter> - <Counter worker="9">8712289</Counter> - <Counter worker="10">8712131</Counter> - <Counter worker="11">8712215</Counter> - <Counter worker="12">8712289</Counter> - <Counter worker="13">8712244</Counter> - <Counter worker="14">8712147</Counter> - <Counter worker="15">8712227</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="17"> - <Counter worker="0">4325645</Counter> - <Counter worker="1">8685016</Counter> - <Counter worker="2">8671607</Counter> - <Counter worker="3">8671728</Counter> - <Counter worker="4">8675196</Counter> - <Counter worker="5">8675203</Counter> - <Counter worker="6">8670269</Counter> - <Counter worker="7">8665153</Counter> - <Counter worker="8">8673438</Counter> - <Counter worker="9">8673444</Counter> - <Counter worker="10">8673183</Counter> - <Counter worker="11">8673276</Counter> - <Counter worker="12">8673321</Counter> - <Counter worker="13">8673304</Counter> - <Counter worker="14">8673230</Counter> - <Counter worker="15">8673240</Counter> - <Counter worker="16">9251521</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="18"> - <Counter worker="0">4309289</Counter> - <Counter worker="1">8647898</Counter> - <Counter worker="2">8636314</Counter> - <Counter worker="3">8636411</Counter> - <Counter worker="4">8639557</Counter> - <Counter worker="5">8639645</Counter> - <Counter worker="6">8635149</Counter> - <Counter worker="7">8630636</Counter> - <Counter worker="8">8641335</Counter> - <Counter worker="9">8641320</Counter> - <Counter worker="10">8641131</Counter> - <Counter worker="11">8641178</Counter> - <Counter worker="12">8641173</Counter> - <Counter worker="13">8641229</Counter> - <Counter worker="14">8641116</Counter> - <Counter worker="15">8641130</Counter> - <Counter worker="16">9208457</Counter> - <Counter worker="17">9208447</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="19"> - <Counter worker="0">4339177</Counter> - <Counter worker="1">8712486</Counter> - <Counter worker="2">8698865</Counter> - <Counter worker="3">8699011</Counter> - <Counter worker="4">8702321</Counter> - <Counter worker="5">8702299</Counter> - <Counter worker="6">8697706</Counter> - <Counter worker="7">8692411</Counter> - <Counter worker="8">8691700</Counter> - <Counter worker="9">8691718</Counter> - <Counter worker="10">8691530</Counter> - <Counter worker="11">8691574</Counter> - <Counter worker="12">8691598</Counter> - <Counter worker="13">8691595</Counter> - <Counter worker="14">8691515</Counter> - <Counter worker="15">8691555</Counter> - <Counter worker="16">9098995</Counter> - <Counter worker="17">9098975</Counter> - <Counter worker="18">9098976</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="20"> - <Counter worker="0">4323231</Counter> - <Counter worker="1">8670659</Counter> - <Counter worker="2">8660830</Counter> - <Counter worker="3">8660891</Counter> - <Counter worker="4">8663710</Counter> - <Counter worker="5">8663717</Counter> - <Counter worker="6">8659875</Counter> - <Counter worker="7">8656639</Counter> - <Counter worker="8">8654156</Counter> - <Counter worker="9">8654183</Counter> - <Counter worker="10">8654050</Counter> - <Counter worker="11">8654092</Counter> - <Counter worker="12">8654106</Counter> - <Counter worker="13">8654141</Counter> - <Counter worker="14">8654084</Counter> - <Counter worker="15">8654064</Counter> - <Counter worker="16">8891464</Counter> - <Counter worker="17">8891387</Counter> - <Counter worker="18">8891423</Counter> - <Counter worker="19">8891522</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="21"> - <Counter worker="0">4306028</Counter> - <Counter worker="1">8633314</Counter> - <Counter worker="2">8624564</Counter> - <Counter worker="3">8624678</Counter> - <Counter worker="4">8627581</Counter> - <Counter worker="5">8627623</Counter> - <Counter worker="6">8623580</Counter> - <Counter worker="7">8621273</Counter> - <Counter worker="8">8630481</Counter> - <Counter worker="9">8630453</Counter> - <Counter worker="10">8630282</Counter> - <Counter worker="11">8630331</Counter> - <Counter worker="12">8630383</Counter> - <Counter worker="13">8630377</Counter> - <Counter worker="14">8630254</Counter> - <Counter worker="15">8630302</Counter> - <Counter worker="16">8882786</Counter> - <Counter worker="17">8882786</Counter> - <Counter worker="18">8882842</Counter> - <Counter worker="19">8882888</Counter> - <Counter worker="20">8901459</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="22"> - <Counter worker="0">4332214</Counter> - <Counter worker="1">8694309</Counter> - <Counter worker="2">8682276</Counter> - <Counter worker="3">8682411</Counter> - <Counter worker="4">8685904</Counter> - <Counter worker="5">8685918</Counter> - <Counter worker="6">8681134</Counter> - <Counter worker="7">8676778</Counter> - <Counter worker="8">8690139</Counter> - <Counter worker="9">8690092</Counter> - <Counter worker="10">8689940</Counter> - <Counter worker="11">8689995</Counter> - <Counter worker="12">8690031</Counter> - <Counter worker="13">8690036</Counter> - <Counter worker="14">8689958</Counter> - <Counter worker="15">8689930</Counter> - <Counter worker="16">8792896</Counter> - <Counter worker="17">8792916</Counter> - <Counter worker="18">8792896</Counter> - <Counter worker="19">8792966</Counter> - <Counter worker="20">8792943</Counter> - <Counter worker="21">8792939</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="23"> - <Counter worker="0">4316784</Counter> - <Counter worker="1">8662468</Counter> - <Counter worker="2">8650651</Counter> - <Counter worker="3">8650782</Counter> - <Counter worker="4">8654092</Counter> - <Counter worker="5">8654022</Counter> - <Counter worker="6">8649506</Counter> - <Counter worker="7">8645904</Counter> - <Counter worker="8">8639667</Counter> - <Counter worker="9">8639654</Counter> - <Counter worker="10">8639505</Counter> - <Counter worker="11">8639593</Counter> - <Counter worker="12">8639683</Counter> - <Counter worker="13">8639686</Counter> - <Counter worker="14">8639487</Counter> - <Counter worker="15">8639547</Counter> - <Counter worker="16">8786893</Counter> - <Counter worker="17">8786917</Counter> - <Counter worker="18">8786678</Counter> - <Counter worker="19">8786756</Counter> - <Counter worker="20">8786878</Counter> - <Counter worker="21">8786879</Counter> - <Counter worker="22">8794112</Counter> - </AllToOneEvent> - <AllToOneEvent activeWorker="24"> - <Counter worker="0">4340462</Counter> - <Counter worker="1">8708543</Counter> - <Counter worker="2">8696739</Counter> - <Counter worker="3">8696800</Counter> - <Counter worker="4">8699717</Counter> - <Counter worker="5">8699709</Counter> - <Counter worker="6">8695657</Counter> - <Counter worker="7">8691968</Counter> - <Counter worker="8">8714142</Counter> - <Counter worker="9">8714066</Counter> - <Counter worker="10">8714016</Counter> - <Counter worker="11">8714062</Counter> - <Counter worker="12">8714040</Counter> - <Counter worker="13">8714116</Counter> - <Counter worker="14">8714041</Counter> - <Counter worker="15">8714021</Counter> - <Counter worker="16">8722288</Counter> - <Counter worker="17">8722251</Counter> - <Counter worker="18">8722033</Counter> - <Counter worker="19">8722156</Counter> - <Counter worker="20">8722336</Counter> - <Counter worker="21">8722308</Counter> - <Counter worker="22">8722297</Counter> - <Counter worker="23">8722331</Counter> - </AllToOneEvent> - <OneMutex activeWorker="1"> - <Counter worker="0">4931822</Counter> - </OneMutex> - <OneMutex activeWorker="2"> - <Counter worker="0">245503</Counter> - <Counter worker="1">245503</Counter> - </OneMutex> - <OneMutex activeWorker="3"> - <Counter worker="0">68887</Counter> - <Counter worker="1">68887</Counter> - <Counter worker="2">68886</Counter> - </OneMutex> - <OneMutex activeWorker="4"> - <Counter worker="0">65075</Counter> - <Counter worker="1">65075</Counter> - <Counter worker="2">65075</Counter> - <Counter worker="3">65075</Counter> - </OneMutex> - <OneMutex activeWorker="5"> - <Counter worker="0">39944</Counter> - <Counter worker="1">39944</Counter> - <Counter worker="2">39944</Counter> - <Counter worker="3">39945</Counter> - <Counter worker="4">39944</Counter> - </OneMutex> - <OneMutex activeWorker="6"> - <Counter worker="0">49925</Counter> - <Counter worker="1">49925</Counter> - <Counter worker="2">49924</Counter> - <Counter worker="3">49925</Counter> - <Counter worker="4">49924</Counter> - <Counter worker="5">49925</Counter> - </OneMutex> - <OneMutex activeWorker="7"> - <Counter worker="0">27616</Counter> - <Counter worker="1">27615</Counter> - <Counter worker="2">27616</Counter> - <Counter worker="3">27616</Counter> - <Counter worker="4">27616</Counter> - <Counter worker="5">27615</Counter> - <Counter worker="6">27615</Counter> - </OneMutex> - <OneMutex activeWorker="8"> - <Counter worker="0">22376</Counter> - <Counter worker="1">22377</Counter> - <Counter worker="2">22377</Counter> - <Counter worker="3">22376</Counter> - <Counter worker="4">22377</Counter> - <Counter worker="5">22376</Counter> - <Counter worker="6">22377</Counter> - <Counter worker="7">22377</Counter> - </OneMutex> - <OneMutex activeWorker="9"> - <Counter worker="0">19838</Counter> - <Counter worker="1">19838</Counter> - <Counter worker="2">19838</Counter> - <Counter worker="3">19838</Counter> - <Counter worker="4">19838</Counter> - <Counter worker="5">19838</Counter> - <Counter worker="6">19838</Counter> - <Counter worker="7">19838</Counter> - <Counter worker="8">19838</Counter> - </OneMutex> - <OneMutex activeWorker="10"> - <Counter worker="0">12036</Counter> - <Counter worker="1">12036</Counter> - <Counter worker="2">12036</Counter> - <Counter worker="3">12036</Counter> - <Counter worker="4">12037</Counter> - <Counter worker="5">12037</Counter> - <Counter worker="6">12036</Counter> - <Counter worker="7">12037</Counter> - <Counter worker="8">12036</Counter> - <Counter worker="9">12036</Counter> - </OneMutex> - <OneMutex activeWorker="11"> - <Counter worker="0">14679</Counter> - <Counter worker="1">14679</Counter> - <Counter worker="2">14679</Counter> - <Counter worker="3">14679</Counter> - <Counter worker="4">14679</Counter> - <Counter worker="5">14679</Counter> - <Counter worker="6">14679</Counter> - <Counter worker="7">14679</Counter> - <Counter worker="8">14679</Counter> - <Counter worker="9">14678</Counter> - <Counter worker="10">14679</Counter> - </OneMutex> - <OneMutex activeWorker="12"> - <Counter worker="0">9715</Counter> - <Counter worker="1">9715</Counter> - <Counter worker="2">9715</Counter> - <Counter worker="3">9714</Counter> - <Counter worker="4">9714</Counter> - <Counter worker="5">9714</Counter> - <Counter worker="6">9714</Counter> - <Counter worker="7">9715</Counter> - <Counter worker="8">9714</Counter> - <Counter worker="9">9714</Counter> - <Counter worker="10">9715</Counter> - <Counter worker="11">9714</Counter> - </OneMutex> - <OneMutex activeWorker="13"> - <Counter worker="0">8614</Counter> - <Counter worker="1">8614</Counter> - <Counter worker="2">8614</Counter> - <Counter worker="3">8614</Counter> - <Counter worker="4">8613</Counter> - <Counter worker="5">8613</Counter> - <Counter worker="6">8615</Counter> - <Counter worker="7">8613</Counter> - <Counter worker="8">8613</Counter> - <Counter worker="9">8613</Counter> - <Counter worker="10">8613</Counter> - <Counter worker="11">8613</Counter> - <Counter worker="12">8614</Counter> - </OneMutex> - <OneMutex activeWorker="14"> - <Counter worker="0">8930</Counter> - <Counter worker="1">8929</Counter> - <Counter worker="2">8929</Counter> - <Counter worker="3">8930</Counter> - <Counter worker="4">8930</Counter> - <Counter worker="5">8930</Counter> - <Counter worker="6">8929</Counter> - <Counter worker="7">8929</Counter> - <Counter worker="8">8929</Counter> - <Counter worker="9">8930</Counter> - <Counter worker="10">8929</Counter> - <Counter worker="11">8929</Counter> - <Counter worker="12">8930</Counter> - <Counter worker="13">8929</Counter> - </OneMutex> - <OneMutex activeWorker="15"> - <Counter worker="0">6001</Counter> - <Counter worker="1">6002</Counter> - <Counter worker="2">6002</Counter> - <Counter worker="3">6002</Counter> - <Counter worker="4">6003</Counter> - <Counter worker="5">6001</Counter> - <Counter worker="6">6002</Counter> - <Counter worker="7">6002</Counter> - <Counter worker="8">6002</Counter> - <Counter worker="9">6002</Counter> - <Counter worker="10">6002</Counter> - <Counter worker="11">6002</Counter> - <Counter worker="12">6001</Counter> - <Counter worker="13">6002</Counter> - <Counter worker="14">6002</Counter> - </OneMutex> - <OneMutex activeWorker="16"> - <Counter worker="0">7934</Counter> - <Counter worker="1">7934</Counter> - <Counter worker="2">7936</Counter> - <Counter worker="3">7935</Counter> - <Counter worker="4">7935</Counter> - <Counter worker="5">7934</Counter> - <Counter worker="6">7935</Counter> - <Counter worker="7">7935</Counter> - <Counter worker="8">7934</Counter> - <Counter worker="9">7934</Counter> - <Counter worker="10">7934</Counter> - <Counter worker="11">7934</Counter> - <Counter worker="12">7935</Counter> - <Counter worker="13">7935</Counter> - <Counter worker="14">7935</Counter> - <Counter worker="15">7934</Counter> - </OneMutex> - <OneMutex activeWorker="17"> - <Counter worker="0">4099</Counter> - <Counter worker="1">4099</Counter> - <Counter worker="2">4098</Counter> - <Counter worker="3">4098</Counter> - <Counter worker="4">4098</Counter> - <Counter worker="5">4098</Counter> - <Counter worker="6">4098</Counter> - <Counter worker="7">4098</Counter> - <Counter worker="8">4098</Counter> - <Counter worker="9">4098</Counter> - <Counter worker="10">4098</Counter> - <Counter worker="11">4098</Counter> - <Counter worker="12">4098</Counter> - <Counter worker="13">4098</Counter> - <Counter worker="14">4098</Counter> - <Counter worker="15">4099</Counter> - <Counter worker="16">4098</Counter> - </OneMutex> - <OneMutex activeWorker="18"> - <Counter worker="0">6990</Counter> - <Counter worker="1">6989</Counter> - <Counter worker="2">6989</Counter> - <Counter worker="3">6989</Counter> - <Counter worker="4">6989</Counter> - <Counter worker="5">6990</Counter> - <Counter worker="6">6989</Counter> - <Counter worker="7">6989</Counter> - <Counter worker="8">6989</Counter> - <Counter worker="9">6990</Counter> - <Counter worker="10">6989</Counter> - <Counter worker="11">6989</Counter> - <Counter worker="12">6989</Counter> - <Counter worker="13">6990</Counter> - <Counter worker="14">6990</Counter> - <Counter worker="15">6990</Counter> - <Counter worker="16">6990</Counter> - <Counter worker="17">6989</Counter> - </OneMutex> - <OneMutex activeWorker="19"> - <Counter worker="0">3939</Counter> - <Counter worker="1">3938</Counter> - <Counter worker="2">3938</Counter> - <Counter worker="3">3938</Counter> - <Counter worker="4">3939</Counter> - <Counter worker="5">3938</Counter> - <Counter worker="6">3939</Counter> - <Counter worker="7">3938</Counter> - <Counter worker="8">3939</Counter> - <Counter worker="9">3938</Counter> - <Counter worker="10">3939</Counter> - <Counter worker="11">3938</Counter> - <Counter worker="12">3939</Counter> - <Counter worker="13">3939</Counter> - <Counter worker="14">3939</Counter> - <Counter worker="15">3938</Counter> - <Counter worker="16">3938</Counter> - <Counter worker="17">3938</Counter> - <Counter worker="18">3939</Counter> - </OneMutex> - <OneMutex activeWorker="20"> - <Counter worker="0">3096</Counter> - <Counter worker="1">3096</Counter> - <Counter worker="2">3097</Counter> - <Counter worker="3">3097</Counter> - <Counter worker="4">3097</Counter> - <Counter worker="5">3096</Counter> - <Counter worker="6">3096</Counter> - <Counter worker="7">3097</Counter> - <Counter worker="8">3097</Counter> - <Counter worker="9">3097</Counter> - <Counter worker="10">3097</Counter> - <Counter worker="11">3097</Counter> - <Counter worker="12">3097</Counter> - <Counter worker="13">3098</Counter> - <Counter worker="14">3097</Counter> - <Counter worker="15">3097</Counter> - <Counter worker="16">3097</Counter> - <Counter worker="17">3097</Counter> - <Counter worker="18">3097</Counter> - <Counter worker="19">3097</Counter> - </OneMutex> - <OneMutex activeWorker="21"> - <Counter worker="0">2721</Counter> - <Counter worker="1">2722</Counter> - <Counter worker="2">2721</Counter> - <Counter worker="3">2721</Counter> - <Counter worker="4">2722</Counter> - <Counter worker="5">2721</Counter> - <Counter worker="6">2721</Counter> - <Counter worker="7">2721</Counter> - <Counter worker="8">2721</Counter> - <Counter worker="9">2721</Counter> - <Counter worker="10">2722</Counter> - <Counter worker="11">2721</Counter> - <Counter worker="12">2722</Counter> - <Counter worker="13">2722</Counter> - <Counter worker="14">2721</Counter> - <Counter worker="15">2721</Counter> - <Counter worker="16">2721</Counter> - <Counter worker="17">2721</Counter> - <Counter worker="18">2722</Counter> - <Counter worker="19">2722</Counter> - <Counter worker="20">2721</Counter> - </OneMutex> - <OneMutex activeWorker="22"> - <Counter worker="0">5060</Counter> - <Counter worker="1">5060</Counter> - <Counter worker="2">5060</Counter> - <Counter worker="3">5060</Counter> - <Counter worker="4">5060</Counter> - <Counter worker="5">5060</Counter> - <Counter worker="6">5060</Counter> - <Counter worker="7">5060</Counter> - <Counter worker="8">5060</Counter> - <Counter worker="9">5060</Counter> - <Counter worker="10">5060</Counter> - <Counter worker="11">5060</Counter> - <Counter worker="12">5060</Counter> - <Counter worker="13">5060</Counter> - <Counter worker="14">5060</Counter> - <Counter worker="15">5060</Counter> - <Counter worker="16">5060</Counter> - <Counter worker="17">5060</Counter> - <Counter worker="18">5060</Counter> - <Counter worker="19">5060</Counter> - <Counter worker="20">5060</Counter> - <Counter worker="21">5060</Counter> - </OneMutex> - <OneMutex activeWorker="23"> - <Counter worker="0">4582</Counter> - <Counter worker="1">4582</Counter> - <Counter worker="2">4582</Counter> - <Counter worker="3">4582</Counter> - <Counter worker="4">4581</Counter> - <Counter worker="5">4581</Counter> - <Counter worker="6">4582</Counter> - <Counter worker="7">4581</Counter> - <Counter worker="8">4582</Counter> - <Counter worker="9">4582</Counter> - <Counter worker="10">4581</Counter> - <Counter worker="11">4581</Counter> - <Counter worker="12">4582</Counter> - <Counter worker="13">4581</Counter> - <Counter worker="14">4581</Counter> - <Counter worker="15">4582</Counter> - <Counter worker="16">4582</Counter> - <Counter worker="17">4582</Counter> - <Counter worker="18">4582</Counter> - <Counter worker="19">4582</Counter> - <Counter worker="20">4582</Counter> - <Counter worker="21">4582</Counter> - <Counter worker="22">4581</Counter> - </OneMutex> - <OneMutex activeWorker="24"> - <Counter worker="0">2433</Counter> - <Counter worker="1">2433</Counter> - <Counter worker="2">2432</Counter> - <Counter worker="3">2433</Counter> - <Counter worker="4">2432</Counter> - <Counter worker="5">2432</Counter> - <Counter worker="6">2433</Counter> - <Counter worker="7">2433</Counter> - <Counter worker="8">2433</Counter> - <Counter worker="9">2432</Counter> - <Counter worker="10">2433</Counter> - <Counter worker="11">2433</Counter> - <Counter worker="12">2433</Counter> - <Counter worker="13">2433</Counter> - <Counter worker="14">2433</Counter> - <Counter worker="15">2432</Counter> - <Counter worker="16">2433</Counter> - <Counter worker="17">2432</Counter> - <Counter worker="18">2433</Counter> - <Counter worker="19">2432</Counter> - <Counter worker="20">2433</Counter> - <Counter worker="21">2433</Counter> - <Counter worker="22">2434</Counter> - <Counter worker="23">2432</Counter> - </OneMutex> - <ManyMutex activeWorker="1"> - <Counter worker="0">5001647</Counter> - </ManyMutex> - <ManyMutex activeWorker="2"> - <Counter worker="0">4932033</Counter> - <Counter worker="1">4932309</Counter> - </ManyMutex> - <ManyMutex activeWorker="3"> - <Counter worker="0">4355923</Counter> - <Counter worker="1">4925539</Counter> - <Counter worker="2">4356158</Counter> - </ManyMutex> - <ManyMutex activeWorker="4"> - <Counter worker="0">4276198</Counter> - <Counter worker="1">4793125</Counter> - <Counter worker="2">4792773</Counter> - <Counter worker="3">4276295</Counter> - </ManyMutex> - <ManyMutex activeWorker="5"> - <Counter worker="0">4735869</Counter> - <Counter worker="1">4177346</Counter> - <Counter worker="2">4736094</Counter> - <Counter worker="3">4235871</Counter> - <Counter worker="4">4731095</Counter> - </ManyMutex> - <ManyMutex activeWorker="6"> - <Counter worker="0">4716270</Counter> - <Counter worker="1">4258387</Counter> - <Counter worker="2">4268838</Counter> - <Counter worker="3">4698974</Counter> - <Counter worker="4">4172075</Counter> - <Counter worker="5">4719026</Counter> - </ManyMutex> - <ManyMutex activeWorker="7"> - <Counter worker="0">4205327</Counter> - <Counter worker="1">4202415</Counter> - <Counter worker="2">4728528</Counter> - <Counter worker="3">4741751</Counter> - <Counter worker="4">4661144</Counter> - <Counter worker="5">4728823</Counter> - <Counter worker="6">4741645</Counter> - </ManyMutex> - <ManyMutex activeWorker="8"> - <Counter worker="0">4700906</Counter> - <Counter worker="1">4085992</Counter> - <Counter worker="2">4700875</Counter> - <Counter worker="3">4672269</Counter> - <Counter worker="4">4641742</Counter> - <Counter worker="5">4113941</Counter> - <Counter worker="6">4634133</Counter> - <Counter worker="7">4069049</Counter> - </ManyMutex> - <ManyMutex activeWorker="9"> - <Counter worker="0">4706705</Counter> - <Counter worker="1">2830546</Counter> - <Counter worker="2">3640848</Counter> - <Counter worker="3">4638947</Counter> - <Counter worker="4">4106355</Counter> - <Counter worker="5">4634726</Counter> - <Counter worker="6">4199317</Counter> - <Counter worker="7">4215455</Counter> - <Counter worker="8">4706736</Counter> - </ManyMutex> - <ManyMutex activeWorker="10"> - <Counter worker="0">4591261</Counter> - <Counter worker="1">4967739</Counter> - <Counter worker="2">4618369</Counter> - <Counter worker="3">4063482</Counter> - <Counter worker="4">4967727</Counter> - <Counter worker="5">4162082</Counter> - <Counter worker="6">4048161</Counter> - <Counter worker="7">4649148</Counter> - <Counter worker="8">4649140</Counter> - <Counter worker="9">4631859</Counter> - </ManyMutex> - <ManyMutex activeWorker="11"> - <Counter worker="0">4370677</Counter> - <Counter worker="1">3026309</Counter> - <Counter worker="2">2913790</Counter> - <Counter worker="3">4677581</Counter> - <Counter worker="4">4692968</Counter> - <Counter worker="5">4780273</Counter> - <Counter worker="6">4693509</Counter> - <Counter worker="7">4495802</Counter> - <Counter worker="8">4704240</Counter> - <Counter worker="9">4703550</Counter> - <Counter worker="10">4677478</Counter> - </ManyMutex> - <ManyMutex activeWorker="12"> - <Counter worker="0">4107344</Counter> - <Counter worker="1">4649662</Counter> - <Counter worker="2">4676522</Counter> - <Counter worker="3">3156738</Counter> - <Counter worker="4">4671133</Counter> - <Counter worker="5">4154985</Counter> - <Counter worker="6">4785186</Counter> - <Counter worker="7">4670956</Counter> - <Counter worker="8">4126203</Counter> - <Counter worker="9">4785157</Counter> - <Counter worker="10">2842002</Counter> - <Counter worker="11">4704576</Counter> - </ManyMutex> - <ManyMutex activeWorker="13"> - <Counter worker="0">4658248</Counter> - <Counter worker="1">3050246</Counter> - <Counter worker="2">4822861</Counter> - <Counter worker="3">2829258</Counter> - <Counter worker="4">4804042</Counter> - <Counter worker="5">4658270</Counter> - <Counter worker="6">4651897</Counter> - <Counter worker="7">4803978</Counter> - <Counter worker="8">4618739</Counter> - <Counter worker="9">4080735</Counter> - <Counter worker="10">4641078</Counter> - <Counter worker="11">4104333</Counter> - <Counter worker="12">4085914</Counter> - </ManyMutex> - <ManyMutex activeWorker="14"> - <Counter worker="0">2833004</Counter> - <Counter worker="1">4774206</Counter> - <Counter worker="2">4681710</Counter> - <Counter worker="3">4191970</Counter> - <Counter worker="4">2835639</Counter> - <Counter worker="5">2832535</Counter> - <Counter worker="6">4208974</Counter> - <Counter worker="7">4500175</Counter> - <Counter worker="8">4634735</Counter> - <Counter worker="9">4534048</Counter> - <Counter worker="10">4774225</Counter> - <Counter worker="11">4367224</Counter> - <Counter worker="12">2119256</Counter> - <Counter worker="13">3685038</Counter> - </ManyMutex> - <ManyMutex activeWorker="15"> - <Counter worker="0">4679948</Counter> - <Counter worker="1">4679956</Counter> - <Counter worker="2">4689624</Counter> - <Counter worker="3">4095475</Counter> - <Counter worker="4">4633249</Counter> - <Counter worker="5">4694233</Counter> - <Counter worker="6">4691234</Counter> - <Counter worker="7">4633249</Counter> - <Counter worker="8">4689597</Counter> - <Counter worker="9">4689904</Counter> - <Counter worker="10">4636792</Counter> - <Counter worker="11">2890683</Counter> - <Counter worker="12">4334695</Counter> - <Counter worker="13">2890353</Counter> - <Counter worker="14">4691398</Counter> - </ManyMutex> - <ManyMutex activeWorker="16"> - <Counter worker="0">4721449</Counter> - <Counter worker="1">4641755</Counter> - <Counter worker="2">3147235</Counter> - <Counter worker="3">4677026</Counter> - <Counter worker="4">2858837</Counter> - <Counter worker="5">4699482</Counter> - <Counter worker="6">4721331</Counter> - <Counter worker="7">3994802</Counter> - <Counter worker="8">4699317</Counter> - <Counter worker="9">4696404</Counter> - <Counter worker="10">4589085</Counter> - <Counter worker="11">4108168</Counter> - <Counter worker="12">4720500</Counter> - <Counter worker="13">4676953</Counter> - <Counter worker="14">4643243</Counter> - <Counter worker="15">4720497</Counter> - </ManyMutex> - <ManyMutex activeWorker="17"> - <Counter worker="0">4645420</Counter> - <Counter worker="1">4680196</Counter> - <Counter worker="2">4686848</Counter> - <Counter worker="3">4647270</Counter> - <Counter worker="4">4681748</Counter> - <Counter worker="5">4634369</Counter> - <Counter worker="6">4682734</Counter> - <Counter worker="7">2856905</Counter> - <Counter worker="8">3516034</Counter> - <Counter worker="9">4636223</Counter> - <Counter worker="10">4684119</Counter> - <Counter worker="11">4684619</Counter> - <Counter worker="12">4633361</Counter> - <Counter worker="13">4633572</Counter> - <Counter worker="14">4644454</Counter> - <Counter worker="15">4642238</Counter> - <Counter worker="16">4680224</Counter> - </ManyMutex> - <ManyMutex activeWorker="18"> - <Counter worker="0">3968745</Counter> - <Counter worker="1">4692720</Counter> - <Counter worker="2">4691924</Counter> - <Counter worker="3">4927117</Counter> - <Counter worker="4">4684103</Counter> - <Counter worker="5">4686784</Counter> - <Counter worker="6">4552054</Counter> - <Counter worker="7">4687372</Counter> - <Counter worker="8">2814828</Counter> - <Counter worker="9">4678196</Counter> - <Counter worker="10">3019413</Counter> - <Counter worker="11">4702658</Counter> - <Counter worker="12">2799802</Counter> - <Counter worker="13">3006627</Counter> - <Counter worker="14">4683463</Counter> - <Counter worker="15">4677772</Counter> - <Counter worker="16">4645772</Counter> - <Counter worker="17">4927146</Counter> - </ManyMutex> - <ManyMutex activeWorker="19"> - <Counter worker="0">4601592</Counter> - <Counter worker="1">4714461</Counter> - <Counter worker="2">4883685</Counter> - <Counter worker="3">3028508</Counter> - <Counter worker="4">4654222</Counter> - <Counter worker="5">2933007</Counter> - <Counter worker="6">4724241</Counter> - <Counter worker="7">4718472</Counter> - <Counter worker="8">4570831</Counter> - <Counter worker="9">4718483</Counter> - <Counter worker="10">4724097</Counter> - <Counter worker="11">4713870</Counter> - <Counter worker="12">4703195</Counter> - <Counter worker="13">4165705</Counter> - <Counter worker="14">4711178</Counter> - <Counter worker="15">4883702</Counter> - <Counter worker="16">4711294</Counter> - <Counter worker="17">4703238</Counter> - <Counter worker="18">4654312</Counter> - </ManyMutex> - <ManyMutex activeWorker="20"> - <Counter worker="0">4651301</Counter> - <Counter worker="1">3690905</Counter> - <Counter worker="2">3105263</Counter> - <Counter worker="3">4697287</Counter> - <Counter worker="4">4638522</Counter> - <Counter worker="5">4650722</Counter> - <Counter worker="6">2962962</Counter> - <Counter worker="7">4112623</Counter> - <Counter worker="8">4638656</Counter> - <Counter worker="9">2033536</Counter> - <Counter worker="10">4675666</Counter> - <Counter worker="11">4467698</Counter> - <Counter worker="12">4389797</Counter> - <Counter worker="13">4468602</Counter> - <Counter worker="14">2818900</Counter> - <Counter worker="15">4536994</Counter> - <Counter worker="16">3093343</Counter> - <Counter worker="17">2819049</Counter> - <Counter worker="18">3060340</Counter> - <Counter worker="19">2902497</Counter> - </ManyMutex> - <ManyMutex activeWorker="21"> - <Counter worker="0">2812125</Counter> - <Counter worker="1">2976769</Counter> - <Counter worker="2">4554538</Counter> - <Counter worker="3">4606816</Counter> - <Counter worker="4">4479562</Counter> - <Counter worker="5">2992810</Counter> - <Counter worker="6">4661692</Counter> - <Counter worker="7">4709972</Counter> - <Counter worker="8">4597719</Counter> - <Counter worker="9">4608597</Counter> - <Counter worker="10">4609552</Counter> - <Counter worker="11">4709758</Counter> - <Counter worker="12">4661224</Counter> - <Counter worker="13">4519832</Counter> - <Counter worker="14">4746960</Counter> - <Counter worker="15">4609189</Counter> - <Counter worker="16">4752379</Counter> - <Counter worker="17">4596670</Counter> - <Counter worker="18">4810470</Counter> - <Counter worker="19">2858016</Counter> - <Counter worker="20">4752412</Counter> - </ManyMutex> - <ManyMutex activeWorker="22"> - <Counter worker="0">4702947</Counter> - <Counter worker="1">4443206</Counter> - <Counter worker="2">4727685</Counter> - <Counter worker="3">4540248</Counter> - <Counter worker="4">4658159</Counter> - <Counter worker="5">4126514</Counter> - <Counter worker="6">4791039</Counter> - <Counter worker="7">2894757</Counter> - <Counter worker="8">1955087</Counter> - <Counter worker="9">4702969</Counter> - <Counter worker="10">2817541</Counter> - <Counter worker="11">4420635</Counter> - <Counter worker="12">2921923</Counter> - <Counter worker="13">2650900</Counter> - <Counter worker="14">2862766</Counter> - <Counter worker="15">3687545</Counter> - <Counter worker="16">2874883</Counter> - <Counter worker="17">2940336</Counter> - <Counter worker="18">2776021</Counter> - <Counter worker="19">3127586</Counter> - <Counter worker="20">4090728</Counter> - <Counter worker="21">2337871</Counter> - </ManyMutex> - <ManyMutex activeWorker="23"> - <Counter worker="0">4529255</Counter> - <Counter worker="1">4718656</Counter> - <Counter worker="2">1922439</Counter> - <Counter worker="3">4693004</Counter> - <Counter worker="4">4684958</Counter> - <Counter worker="5">2886050</Counter> - <Counter worker="6">3066101</Counter> - <Counter worker="7">3610129</Counter> - <Counter worker="8">2810938</Counter> - <Counter worker="9">4633095</Counter> - <Counter worker="10">2900751</Counter> - <Counter worker="11">4632884</Counter> - <Counter worker="12">4692840</Counter> - <Counter worker="13">4420163</Counter> - <Counter worker="14">1996345</Counter> - <Counter worker="15">3643801</Counter> - <Counter worker="16">2826674</Counter> - <Counter worker="17">2883468</Counter> - <Counter worker="18">4558270</Counter> - <Counter worker="19">4416614</Counter> - <Counter worker="20">2860484</Counter> - <Counter worker="21">2892545</Counter> - <Counter worker="22">4488266</Counter> - </ManyMutex> - <ManyMutex activeWorker="24"> - <Counter worker="0">4578849</Counter> - <Counter worker="1">4636230</Counter> - <Counter worker="2">3022974</Counter> - <Counter worker="3">2822574</Counter> - <Counter worker="4">4731087</Counter> - <Counter worker="5">4731131</Counter> - <Counter worker="6">4689840</Counter> - <Counter worker="7">4070922</Counter> - <Counter worker="8">4689653</Counter> - <Counter worker="9">4477380</Counter> - <Counter worker="10">4642053</Counter> - <Counter worker="11">4731990</Counter> - <Counter worker="12">2819820</Counter> - <Counter worker="13">4097315</Counter> - <Counter worker="14">2839488</Counter> - <Counter worker="15">2107643</Counter> - <Counter worker="16">4682013</Counter> - <Counter worker="17">4682337</Counter> - <Counter worker="18">4583332</Counter> - <Counter worker="19">3013463</Counter> - <Counter worker="20">4532706</Counter> - <Counter worker="21">4653764</Counter> - <Counter worker="22">3720162</Counter> - <Counter worker="23">4120464</Counter> - </ManyMutex> - <SelfMsg activeWorker="1"> - <Counter worker="0">3484359</Counter> - </SelfMsg> - <SelfMsg activeWorker="2"> - <Counter worker="0">3291417</Counter> - <Counter worker="1">3291652</Counter> - </SelfMsg> - <SelfMsg activeWorker="3"> - <Counter worker="0">3243274</Counter> - <Counter worker="1">2918376</Counter> - <Counter worker="2">2983608</Counter> - </SelfMsg> - <SelfMsg activeWorker="4"> - <Counter worker="0">3203853</Counter> - <Counter worker="1">2895866</Counter> - <Counter worker="2">2917648</Counter> - <Counter worker="3">3306218</Counter> - </SelfMsg> - <SelfMsg activeWorker="5"> - <Counter worker="0">3172566</Counter> - <Counter worker="1">2850649</Counter> - <Counter worker="2">2876474</Counter> - <Counter worker="3">2993084</Counter> - <Counter worker="4">3037697</Counter> - </SelfMsg> - <SelfMsg activeWorker="6"> - <Counter worker="0">3176969</Counter> - <Counter worker="1">2852043</Counter> - <Counter worker="2">2878751</Counter> - <Counter worker="3">2996638</Counter> - <Counter worker="4">2798362</Counter> - <Counter worker="5">3098269</Counter> - </SelfMsg> - <SelfMsg activeWorker="7"> - <Counter worker="0">3143837</Counter> - <Counter worker="1">2820072</Counter> - <Counter worker="2">2849545</Counter> - <Counter worker="3">2965415</Counter> - <Counter worker="4">2791805</Counter> - <Counter worker="5">2995583</Counter> - <Counter worker="6">3223833</Counter> - </SelfMsg> - <SelfMsg activeWorker="8"> - <Counter worker="0">3106671</Counter> - <Counter worker="1">2774975</Counter> - <Counter worker="2">2810843</Counter> - <Counter worker="3">2934576</Counter> - <Counter worker="4">2743550</Counter> - <Counter worker="5">2961241</Counter> - <Counter worker="6">2801048</Counter> - <Counter worker="7">2981597</Counter> - </SelfMsg> - <SelfMsg activeWorker="9"> - <Counter worker="0">3126404</Counter> - <Counter worker="1">2792565</Counter> - <Counter worker="2">2828797</Counter> - <Counter worker="3">2953257</Counter> - <Counter worker="4">2761418</Counter> - <Counter worker="5">2980177</Counter> - <Counter worker="6">2818788</Counter> - <Counter worker="7">3000161</Counter> - <Counter worker="8">3522606</Counter> - </SelfMsg> - <SelfMsg activeWorker="10"> - <Counter worker="0">3114675</Counter> - <Counter worker="1">2782305</Counter> - <Counter worker="2">2818067</Counter> - <Counter worker="3">2942325</Counter> - <Counter worker="4">2750895</Counter> - <Counter worker="5">2969190</Counter> - <Counter worker="6">2808330</Counter> - <Counter worker="7">2988513</Counter> - <Counter worker="8">3277977</Counter> - <Counter worker="9">3277992</Counter> - </SelfMsg> - <SelfMsg activeWorker="11"> - <Counter worker="0">3134167</Counter> - <Counter worker="1">2799405</Counter> - <Counter worker="2">2835531</Counter> - <Counter worker="3">2960559</Counter> - <Counter worker="4">2768383</Counter> - <Counter worker="5">2987172</Counter> - <Counter worker="6">2825869</Counter> - <Counter worker="7">3008169</Counter> - <Counter worker="8">3229937</Counter> - <Counter worker="9">2865157</Counter> - <Counter worker="10">2924109</Counter> - </SelfMsg> - <SelfMsg activeWorker="12"> - <Counter worker="0">3122298</Counter> - <Counter worker="1">2788834</Counter> - <Counter worker="2">2824886</Counter> - <Counter worker="3">2949367</Counter> - <Counter worker="4">2757481</Counter> - <Counter worker="5">2976034</Counter> - <Counter worker="6">2814952</Counter> - <Counter worker="7">2996594</Counter> - <Counter worker="8">3196270</Counter> - <Counter worker="9">2832912</Counter> - <Counter worker="10">2868202</Counter> - <Counter worker="11">3287941</Counter> - </SelfMsg> - <SelfMsg activeWorker="13"> - <Counter worker="0">3110296</Counter> - <Counter worker="1">2778328</Counter> - <Counter worker="2">2814097</Counter> - <Counter worker="3">2938082</Counter> - <Counter worker="4">2747046</Counter> - <Counter worker="5">2964597</Counter> - <Counter worker="6">2804214</Counter> - <Counter worker="7">2985167</Counter> - <Counter worker="8">3162003</Counter> - <Counter worker="9">2798958</Counter> - <Counter worker="10">2828824</Counter> - <Counter worker="11">2981162</Counter> - <Counter worker="12">3033576</Counter> - </SelfMsg> - <SelfMsg activeWorker="14"> - <Counter worker="0">3129719</Counter> - <Counter worker="1">2795774</Counter> - <Counter worker="2">2831742</Counter> - <Counter worker="3">2956427</Counter> - <Counter worker="4">2764251</Counter> - <Counter worker="5">2983507</Counter> - <Counter worker="6">2821804</Counter> - <Counter worker="7">3003302</Counter> - <Counter worker="8">3168182</Counter> - <Counter worker="9">2795213</Counter> - <Counter worker="10">2824824</Counter> - <Counter worker="11">2985326</Counter> - <Counter worker="12">2788203</Counter> - <Counter worker="13">3060880</Counter> - </SelfMsg> - <SelfMsg activeWorker="15"> - <Counter worker="0">3117749</Counter> - <Counter worker="1">2785075</Counter> - <Counter worker="2">2821028</Counter> - <Counter worker="3">2945205</Counter> - <Counter worker="4">2753587</Counter> - <Counter worker="5">2971692</Counter> - <Counter worker="6">2811184</Counter> - <Counter worker="7">2991870</Counter> - <Counter worker="8">3136894</Counter> - <Counter worker="9">2769370</Counter> - <Counter worker="10">2799325</Counter> - <Counter worker="11">2955115</Counter> - <Counter worker="12">2791275</Counter> - <Counter worker="13">2965355</Counter> - <Counter worker="14">3235028</Counter> - </SelfMsg> - <SelfMsg activeWorker="16"> - <Counter worker="0">3105837</Counter> - <Counter worker="1">2774385</Counter> - <Counter worker="2">2809948</Counter> - <Counter worker="3">2933935</Counter> - <Counter worker="4">2743165</Counter> - <Counter worker="5">2960594</Counter> - <Counter worker="6">2800417</Counter> - <Counter worker="7">2980234</Counter> - <Counter worker="8">3107685</Counter> - <Counter worker="9">2740597</Counter> - <Counter worker="10">2772059</Counter> - <Counter worker="11">2927128</Counter> - <Counter worker="12">2757027</Counter> - <Counter worker="13">2938382</Counter> - <Counter worker="14">2823137</Counter> - <Counter worker="15">2965765</Counter> - </SelfMsg> - <SelfMsg activeWorker="17"> - <Counter worker="0">3125383</Counter> - <Counter worker="1">2791802</Counter> - <Counter worker="2">2827715</Counter> - <Counter worker="3">2952217</Counter> - <Counter worker="4">2760266</Counter> - <Counter worker="5">2978746</Counter> - <Counter worker="6">2817802</Counter> - <Counter worker="7">2999395</Counter> - <Counter worker="8">3127170</Counter> - <Counter worker="9">2757456</Counter> - <Counter worker="10">2789249</Counter> - <Counter worker="11">2945471</Counter> - <Counter worker="12">2774281</Counter> - <Counter worker="13">2956715</Counter> - <Counter worker="14">2840683</Counter> - <Counter worker="15">2984166</Counter> - <Counter worker="16">3488200</Counter> - </SelfMsg> - <SelfMsg activeWorker="18"> - <Counter worker="0">3113425</Counter> - <Counter worker="1">2781071</Counter> - <Counter worker="2">2816875</Counter> - <Counter worker="3">2940987</Counter> - <Counter worker="4">2749614</Counter> - <Counter worker="5">2967301</Counter> - <Counter worker="6">2806975</Counter> - <Counter worker="7">2987963</Counter> - <Counter worker="8">3115249</Counter> - <Counter worker="9">2746969</Counter> - <Counter worker="10">2778738</Counter> - <Counter worker="11">2934226</Counter> - <Counter worker="12">2763956</Counter> - <Counter worker="13">2945765</Counter> - <Counter worker="14">2829840</Counter> - <Counter worker="15">2973224</Counter> - <Counter worker="16">3271018</Counter> - <Counter worker="17">3271054</Counter> - </SelfMsg> - <SelfMsg activeWorker="19"> - <Counter worker="0">3132890</Counter> - <Counter worker="1">2798349</Counter> - <Counter worker="2">2834203</Counter> - <Counter worker="3">2959395</Counter> - <Counter worker="4">2766985</Counter> - <Counter worker="5">2986288</Counter> - <Counter worker="6">2824544</Counter> - <Counter worker="7">3006439</Counter> - <Counter worker="8">3134700</Counter> - <Counter worker="9">2764127</Counter> - <Counter worker="10">2795782</Counter> - <Counter worker="11">2952538</Counter> - <Counter worker="12">2780908</Counter> - <Counter worker="13">2963890</Counter> - <Counter worker="14">2847586</Counter> - <Counter worker="15">2991552</Counter> - <Counter worker="16">3245981</Counter> - <Counter worker="17">2954280</Counter> - <Counter worker="18">2960399</Counter> - </SelfMsg> - <SelfMsg activeWorker="20"> - <Counter worker="0">3120930</Counter> - <Counter worker="1">2787696</Counter> - <Counter worker="2">2823649</Counter> - <Counter worker="3">2948070</Counter> - <Counter worker="4">2756563</Counter> - <Counter worker="5">2974809</Counter> - <Counter worker="6">2813905</Counter> - <Counter worker="7">2995333</Counter> - <Counter worker="8">3122781</Counter> - <Counter worker="9">2753746</Counter> - <Counter worker="10">2785385</Counter> - <Counter worker="11">2941360</Counter> - <Counter worker="12">2770370</Counter> - <Counter worker="13">2952557</Counter> - <Counter worker="14">2836606</Counter> - <Counter worker="15">2981020</Counter> - <Counter worker="16">3210075</Counter> - <Counter worker="17">2900766</Counter> - <Counter worker="18">2922137</Counter> - <Counter worker="19">3306794</Counter> - </SelfMsg> - <SelfMsg activeWorker="21"> - <Counter worker="0">3108909</Counter> - <Counter worker="1">2777145</Counter> - <Counter worker="2">2812866</Counter> - <Counter worker="3">2936889</Counter> - <Counter worker="4">2745714</Counter> - <Counter worker="5">2963451</Counter> - <Counter worker="6">2803246</Counter> - <Counter worker="7">2983352</Counter> - <Counter worker="8">3110869</Counter> - <Counter worker="9">2743126</Counter> - <Counter worker="10">2774923</Counter> - <Counter worker="11">2930071</Counter> - <Counter worker="12">2759954</Counter> - <Counter worker="13">2941606</Counter> - <Counter worker="14">2825771</Counter> - <Counter worker="15">2969489</Counter> - <Counter worker="16">3177890</Counter> - <Counter worker="17">2868416</Counter> - <Counter worker="18">2886398</Counter> - <Counter worker="19">3000295</Counter> - <Counter worker="20">3041648</Counter> - </SelfMsg> - <SelfMsg activeWorker="22"> - <Counter worker="0">3128424</Counter> - <Counter worker="1">2794396</Counter> - <Counter worker="2">2830500</Counter> - <Counter worker="3">2955267</Counter> - <Counter worker="4">2763218</Counter> - <Counter worker="5">2982154</Counter> - <Counter worker="6">2820802</Counter> - <Counter worker="7">3001915</Counter> - <Counter worker="8">3130343</Counter> - <Counter worker="9">2760287</Counter> - <Counter worker="10">2792228</Counter> - <Counter worker="11">2948428</Counter> - <Counter worker="12">2777381</Counter> - <Counter worker="13">2960097</Counter> - <Counter worker="14">2843445</Counter> - <Counter worker="15">2987356</Counter> - <Counter worker="16">3179030</Counter> - <Counter worker="17">2869858</Counter> - <Counter worker="18">2888921</Counter> - <Counter worker="19">3003560</Counter> - <Counter worker="20">2800382</Counter> - <Counter worker="21">3080561</Counter> - </SelfMsg> - <SelfMsg activeWorker="23"> - <Counter worker="0">3116426</Counter> - <Counter worker="1">2783664</Counter> - <Counter worker="2">2819691</Counter> - <Counter worker="3">2943818</Counter> - <Counter worker="4">2752563</Counter> - <Counter worker="5">2970563</Counter> - <Counter worker="6">2810085</Counter> - <Counter worker="7">2990572</Counter> - <Counter worker="8">3118382</Counter> - <Counter worker="9">2749721</Counter> - <Counter worker="10">2781546</Counter> - <Counter worker="11">2937163</Counter> - <Counter worker="12">2766431</Counter> - <Counter worker="13">2948572</Counter> - <Counter worker="14">2832634</Counter> - <Counter worker="15">2975988</Counter> - <Counter worker="16">3149076</Counter> - <Counter worker="17">2832666</Counter> - <Counter worker="18">2854858</Counter> - <Counter worker="19">2972102</Counter> - <Counter worker="20">2793073</Counter> - <Counter worker="21">2986039</Counter> - <Counter worker="22">3225121</Counter> - </SelfMsg> - <SelfMsg activeWorker="24"> - <Counter worker="0">3135941</Counter> - <Counter worker="1">2801108</Counter> - <Counter worker="2">2837415</Counter> - <Counter worker="3">2962374</Counter> - <Counter worker="4">2769627</Counter> - <Counter worker="5">2989102</Counter> - <Counter worker="6">2827394</Counter> - <Counter worker="7">3009512</Counter> - <Counter worker="8">3137796</Counter> - <Counter worker="9">2766961</Counter> - <Counter worker="10">2798946</Counter> - <Counter worker="11">2955433</Counter> - <Counter worker="12">2783657</Counter> - <Counter worker="13">2966727</Counter> - <Counter worker="14">2850374</Counter> - <Counter worker="15">2995580</Counter> - <Counter worker="16">3148697</Counter> - <Counter worker="17">2826014</Counter> - <Counter worker="18">2851067</Counter> - <Counter worker="19">2971518</Counter> - <Counter worker="20">2793285</Counter> - <Counter worker="21">2985399</Counter> - <Counter worker="22">2839863</Counter> - <Counter worker="23">3046065</Counter> - </SelfMsg> - <ManyToOneMsg activeWorker="1"> - <Counter worker="0">3513959</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="2"> - <Counter worker="0">2148757</Counter> - <Counter worker="1">4297993</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="3"> - <Counter worker="0">1452258</Counter> - <Counter worker="1">2904799</Counter> - <Counter worker="2">2905020</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="4"> - <Counter worker="0">1251019</Counter> - <Counter worker="1">2502307</Counter> - <Counter worker="2">2502360</Counter> - <Counter worker="3">2502336</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="5"> - <Counter worker="0">969243</Counter> - <Counter worker="1">1938692</Counter> - <Counter worker="2">1938759</Counter> - <Counter worker="3">1938750</Counter> - <Counter worker="4">1938748</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="6"> - <Counter worker="0">888969</Counter> - <Counter worker="1">1778150</Counter> - <Counter worker="2">1778176</Counter> - <Counter worker="3">1778186</Counter> - <Counter worker="4">1778185</Counter> - <Counter worker="5">1778201</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="7"> - <Counter worker="0">736930</Counter> - <Counter worker="1">1474061</Counter> - <Counter worker="2">1474091</Counter> - <Counter worker="3">1474088</Counter> - <Counter worker="4">1474098</Counter> - <Counter worker="5">1474102</Counter> - <Counter worker="6">1474091</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="8"> - <Counter worker="0">690772</Counter> - <Counter worker="1">1381767</Counter> - <Counter worker="2">1381778</Counter> - <Counter worker="3">1381787</Counter> - <Counter worker="4">1381767</Counter> - <Counter worker="5">1381780</Counter> - <Counter worker="6">1381774</Counter> - <Counter worker="7">1381762</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="9"> - <Counter worker="0">220518</Counter> - <Counter worker="1">441123</Counter> - <Counter worker="2">441112</Counter> - <Counter worker="3">441154</Counter> - <Counter worker="4">441164</Counter> - <Counter worker="5">441164</Counter> - <Counter worker="6">441156</Counter> - <Counter worker="7">441176</Counter> - <Counter worker="8">441129</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="10"> - <Counter worker="0">195773</Counter> - <Counter worker="1">391623</Counter> - <Counter worker="2">391629</Counter> - <Counter worker="3">391634</Counter> - <Counter worker="4">391637</Counter> - <Counter worker="5">391622</Counter> - <Counter worker="6">391626</Counter> - <Counter worker="7">391634</Counter> - <Counter worker="8">391666</Counter> - <Counter worker="9">391680</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="11"> - <Counter worker="0">176797</Counter> - <Counter worker="1">353626</Counter> - <Counter worker="2">353641</Counter> - <Counter worker="3">353633</Counter> - <Counter worker="4">353640</Counter> - <Counter worker="5">353639</Counter> - <Counter worker="6">353633</Counter> - <Counter worker="7">353638</Counter> - <Counter worker="8">353682</Counter> - <Counter worker="9">353691</Counter> - <Counter worker="10">353692</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="12"> - <Counter worker="0">162870</Counter> - <Counter worker="1">325764</Counter> - <Counter worker="2">325774</Counter> - <Counter worker="3">325776</Counter> - <Counter worker="4">325780</Counter> - <Counter worker="5">325777</Counter> - <Counter worker="6">325782</Counter> - <Counter worker="7">325773</Counter> - <Counter worker="8">325785</Counter> - <Counter worker="9">325795</Counter> - <Counter worker="10">325790</Counter> - <Counter worker="11">325791</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="13"> - <Counter worker="0">148531</Counter> - <Counter worker="1">297092</Counter> - <Counter worker="2">297094</Counter> - <Counter worker="3">297096</Counter> - <Counter worker="4">297090</Counter> - <Counter worker="5">297097</Counter> - <Counter worker="6">297088</Counter> - <Counter worker="7">297094</Counter> - <Counter worker="8">297102</Counter> - <Counter worker="9">297104</Counter> - <Counter worker="10">297105</Counter> - <Counter worker="11">297101</Counter> - <Counter worker="12">297106</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="14"> - <Counter worker="0">139216</Counter> - <Counter worker="1">278451</Counter> - <Counter worker="2">278457</Counter> - <Counter worker="3">278454</Counter> - <Counter worker="4">278460</Counter> - <Counter worker="5">278454</Counter> - <Counter worker="6">278456</Counter> - <Counter worker="7">278455</Counter> - <Counter worker="8">278462</Counter> - <Counter worker="9">278466</Counter> - <Counter worker="10">278460</Counter> - <Counter worker="11">278465</Counter> - <Counter worker="12">278461</Counter> - <Counter worker="13">278461</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="15"> - <Counter worker="0">128494</Counter> - <Counter worker="1">257011</Counter> - <Counter worker="2">257013</Counter> - <Counter worker="3">257014</Counter> - <Counter worker="4">257011</Counter> - <Counter worker="5">257014</Counter> - <Counter worker="6">257010</Counter> - <Counter worker="7">257007</Counter> - <Counter worker="8">257012</Counter> - <Counter worker="9">257015</Counter> - <Counter worker="10">257014</Counter> - <Counter worker="11">257011</Counter> - <Counter worker="12">257014</Counter> - <Counter worker="13">257014</Counter> - <Counter worker="14">257018</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="16"> - <Counter worker="0">118432</Counter> - <Counter worker="1">236882</Counter> - <Counter worker="2">236885</Counter> - <Counter worker="3">236883</Counter> - <Counter worker="4">236886</Counter> - <Counter worker="5">236886</Counter> - <Counter worker="6">236886</Counter> - <Counter worker="7">236887</Counter> - <Counter worker="8">236890</Counter> - <Counter worker="9">236885</Counter> - <Counter worker="10">236888</Counter> - <Counter worker="11">236886</Counter> - <Counter worker="12">236888</Counter> - <Counter worker="13">236889</Counter> - <Counter worker="14">236881</Counter> - <Counter worker="15">236882</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="17"> - <Counter worker="0">112260</Counter> - <Counter worker="1">224532</Counter> - <Counter worker="2">224536</Counter> - <Counter worker="3">224536</Counter> - <Counter worker="4">224535</Counter> - <Counter worker="5">224536</Counter> - <Counter worker="6">224535</Counter> - <Counter worker="7">224535</Counter> - <Counter worker="8">224534</Counter> - <Counter worker="9">224536</Counter> - <Counter worker="10">224534</Counter> - <Counter worker="11">224532</Counter> - <Counter worker="12">224535</Counter> - <Counter worker="13">224537</Counter> - <Counter worker="14">224533</Counter> - <Counter worker="15">224536</Counter> - <Counter worker="16">224539</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="18"> - <Counter worker="0">104670</Counter> - <Counter worker="1">209354</Counter> - <Counter worker="2">209355</Counter> - <Counter worker="3">209354</Counter> - <Counter worker="4">209359</Counter> - <Counter worker="5">209361</Counter> - <Counter worker="6">209356</Counter> - <Counter worker="7">209358</Counter> - <Counter worker="8">209356</Counter> - <Counter worker="9">209354</Counter> - <Counter worker="10">209353</Counter> - <Counter worker="11">209354</Counter> - <Counter worker="12">209357</Counter> - <Counter worker="13">209356</Counter> - <Counter worker="14">209355</Counter> - <Counter worker="15">209353</Counter> - <Counter worker="16">209360</Counter> - <Counter worker="17">209362</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="19"> - <Counter worker="0">98829</Counter> - <Counter worker="1">197675</Counter> - <Counter worker="2">197673</Counter> - <Counter worker="3">197672</Counter> - <Counter worker="4">197674</Counter> - <Counter worker="5">197674</Counter> - <Counter worker="6">197672</Counter> - <Counter worker="7">197672</Counter> - <Counter worker="8">197672</Counter> - <Counter worker="9">197671</Counter> - <Counter worker="10">197671</Counter> - <Counter worker="11">197669</Counter> - <Counter worker="12">197672</Counter> - <Counter worker="13">197674</Counter> - <Counter worker="14">197675</Counter> - <Counter worker="15">197669</Counter> - <Counter worker="16">197676</Counter> - <Counter worker="17">197678</Counter> - <Counter worker="18">197676</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="20"> - <Counter worker="0">92505</Counter> - <Counter worker="1">185021</Counter> - <Counter worker="2">185021</Counter> - <Counter worker="3">185025</Counter> - <Counter worker="4">185025</Counter> - <Counter worker="5">185021</Counter> - <Counter worker="6">185022</Counter> - <Counter worker="7">185022</Counter> - <Counter worker="8">185023</Counter> - <Counter worker="9">185023</Counter> - <Counter worker="10">185020</Counter> - <Counter worker="11">185021</Counter> - <Counter worker="12">185022</Counter> - <Counter worker="13">185025</Counter> - <Counter worker="14">185022</Counter> - <Counter worker="15">185024</Counter> - <Counter worker="16">185027</Counter> - <Counter worker="17">185029</Counter> - <Counter worker="18">185025</Counter> - <Counter worker="19">185027</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="21"> - <Counter worker="0">88095</Counter> - <Counter worker="1">176199</Counter> - <Counter worker="2">176202</Counter> - <Counter worker="3">176199</Counter> - <Counter worker="4">176201</Counter> - <Counter worker="5">176201</Counter> - <Counter worker="6">176201</Counter> - <Counter worker="7">176202</Counter> - <Counter worker="8">176198</Counter> - <Counter worker="9">176200</Counter> - <Counter worker="10">176197</Counter> - <Counter worker="11">176199</Counter> - <Counter worker="12">176197</Counter> - <Counter worker="13">176202</Counter> - <Counter worker="14">176198</Counter> - <Counter worker="15">176199</Counter> - <Counter worker="16">176204</Counter> - <Counter worker="17">176203</Counter> - <Counter worker="18">176203</Counter> - <Counter worker="19">176206</Counter> - <Counter worker="20">176204</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="22"> - <Counter worker="0">84520</Counter> - <Counter worker="1">169052</Counter> - <Counter worker="2">169051</Counter> - <Counter worker="3">169053</Counter> - <Counter worker="4">169051</Counter> - <Counter worker="5">169056</Counter> - <Counter worker="6">169050</Counter> - <Counter worker="7">169052</Counter> - <Counter worker="8">169052</Counter> - <Counter worker="9">169053</Counter> - <Counter worker="10">169050</Counter> - <Counter worker="11">169051</Counter> - <Counter worker="12">169052</Counter> - <Counter worker="13">169053</Counter> - <Counter worker="14">169051</Counter> - <Counter worker="15">169051</Counter> - <Counter worker="16">169054</Counter> - <Counter worker="17">169056</Counter> - <Counter worker="18">169053</Counter> - <Counter worker="19">169055</Counter> - <Counter worker="20">169055</Counter> - <Counter worker="21">169054</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="23"> - <Counter worker="0">79421</Counter> - <Counter worker="1">158852</Counter> - <Counter worker="2">158852</Counter> - <Counter worker="3">158854</Counter> - <Counter worker="4">158852</Counter> - <Counter worker="5">158853</Counter> - <Counter worker="6">158853</Counter> - <Counter worker="7">158853</Counter> - <Counter worker="8">158852</Counter> - <Counter worker="9">158854</Counter> - <Counter worker="10">158852</Counter> - <Counter worker="11">158851</Counter> - <Counter worker="12">158853</Counter> - <Counter worker="13">158854</Counter> - <Counter worker="14">158850</Counter> - <Counter worker="15">158852</Counter> - <Counter worker="16">158855</Counter> - <Counter worker="17">158855</Counter> - <Counter worker="18">158851</Counter> - <Counter worker="19">158854</Counter> - <Counter worker="20">158853</Counter> - <Counter worker="21">158854</Counter> - <Counter worker="22">158854</Counter> - </ManyToOneMsg> - <ManyToOneMsg activeWorker="24"> - <Counter worker="0">75524</Counter> - <Counter worker="1">151058</Counter> - <Counter worker="2">151058</Counter> - <Counter worker="3">151057</Counter> - <Counter worker="4">151060</Counter> - <Counter worker="5">151057</Counter> - <Counter worker="6">151056</Counter> - <Counter worker="7">151056</Counter> - <Counter worker="8">151057</Counter> - <Counter worker="9">151057</Counter> - <Counter worker="10">151058</Counter> - <Counter worker="11">151058</Counter> - <Counter worker="12">151056</Counter> - <Counter worker="13">151057</Counter> - <Counter worker="14">151055</Counter> - <Counter worker="15">151056</Counter> - <Counter worker="16">151057</Counter> - <Counter worker="17">151056</Counter> - <Counter worker="18">151055</Counter> - <Counter worker="19">151057</Counter> - <Counter worker="20">151057</Counter> - <Counter worker="21">151057</Counter> - <Counter worker="22">151056</Counter> - <Counter worker="23">151056</Counter> - </ManyToOneMsg> - <ManySysLockMutex activeWorker="1"> - <Counter worker="0">7748082</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="2"> - <Counter worker="0">7647592</Counter> - <Counter worker="1">7648024</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="3"> - <Counter worker="0">7462713</Counter> - <Counter worker="1">7463150</Counter> - <Counter worker="2">7463302</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="4"> - <Counter worker="0">7227558</Counter> - <Counter worker="1">7228059</Counter> - <Counter worker="2">7228161</Counter> - <Counter worker="3">7228157</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="5"> - <Counter worker="0">7271144</Counter> - <Counter worker="1">7271595</Counter> - <Counter worker="2">7271690</Counter> - <Counter worker="3">7271685</Counter> - <Counter worker="4">7278972</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="6"> - <Counter worker="0">7115560</Counter> - <Counter worker="1">7115973</Counter> - <Counter worker="2">7116081</Counter> - <Counter worker="3">7116116</Counter> - <Counter worker="4">7116156</Counter> - <Counter worker="5">7116139</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="7"> - <Counter worker="0">7032158</Counter> - <Counter worker="1">7032584</Counter> - <Counter worker="2">7032605</Counter> - <Counter worker="3">7032700</Counter> - <Counter worker="4">7032840</Counter> - <Counter worker="5">7032751</Counter> - <Counter worker="6">7033457</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="8"> - <Counter worker="0">6943403</Counter> - <Counter worker="1">6943907</Counter> - <Counter worker="2">6944388</Counter> - <Counter worker="3">6944535</Counter> - <Counter worker="4">6945558</Counter> - <Counter worker="5">6945385</Counter> - <Counter worker="6">6944965</Counter> - <Counter worker="7">6945056</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="9"> - <Counter worker="0">6904189</Counter> - <Counter worker="1">6904648</Counter> - <Counter worker="2">6904665</Counter> - <Counter worker="3">6904794</Counter> - <Counter worker="4">6906704</Counter> - <Counter worker="5">6906596</Counter> - <Counter worker="6">6905038</Counter> - <Counter worker="7">6905171</Counter> - <Counter worker="8">7732157</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="10"> - <Counter worker="0">6890600</Counter> - <Counter worker="1">6891096</Counter> - <Counter worker="2">6889623</Counter> - <Counter worker="3">6889754</Counter> - <Counter worker="4">6895076</Counter> - <Counter worker="5">6895009</Counter> - <Counter worker="6">6891303</Counter> - <Counter worker="7">6891441</Counter> - <Counter worker="8">7561832</Counter> - <Counter worker="9">7561812</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="11"> - <Counter worker="0">6936032</Counter> - <Counter worker="1">6936473</Counter> - <Counter worker="2">6936855</Counter> - <Counter worker="3">6936996</Counter> - <Counter worker="4">6937867</Counter> - <Counter worker="5">6937801</Counter> - <Counter worker="6">6937155</Counter> - <Counter worker="7">6937284</Counter> - <Counter worker="8">7426273</Counter> - <Counter worker="9">7426282</Counter> - <Counter worker="10">7426249</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="12"> - <Counter worker="0">6886873</Counter> - <Counter worker="1">6888027</Counter> - <Counter worker="2">6888211</Counter> - <Counter worker="3">6888343</Counter> - <Counter worker="4">6892413</Counter> - <Counter worker="5">6892299</Counter> - <Counter worker="6">6888993</Counter> - <Counter worker="7">6889126</Counter> - <Counter worker="8">7246586</Counter> - <Counter worker="9">7246631</Counter> - <Counter worker="10">7246645</Counter> - <Counter worker="11">7246622</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="13"> - <Counter worker="0">6959061</Counter> - <Counter worker="1">6959491</Counter> - <Counter worker="2">6959651</Counter> - <Counter worker="3">6959746</Counter> - <Counter worker="4">6960533</Counter> - <Counter worker="5">6960423</Counter> - <Counter worker="6">6960346</Counter> - <Counter worker="7">6960483</Counter> - <Counter worker="8">7275133</Counter> - <Counter worker="9">7275113</Counter> - <Counter worker="10">7275196</Counter> - <Counter worker="11">7275136</Counter> - <Counter worker="12">7279912</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="14"> - <Counter worker="0">6923135</Counter> - <Counter worker="1">6923561</Counter> - <Counter worker="2">6923846</Counter> - <Counter worker="3">6923929</Counter> - <Counter worker="4">6926308</Counter> - <Counter worker="5">6926220</Counter> - <Counter worker="6">6924046</Counter> - <Counter worker="7">6924171</Counter> - <Counter worker="8">7098844</Counter> - <Counter worker="9">7098788</Counter> - <Counter worker="10">7098814</Counter> - <Counter worker="11">7098753</Counter> - <Counter worker="12">7098782</Counter> - <Counter worker="13">7098724</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="15"> - <Counter worker="0">6897278</Counter> - <Counter worker="1">6897722</Counter> - <Counter worker="2">6897985</Counter> - <Counter worker="3">6898091</Counter> - <Counter worker="4">6900152</Counter> - <Counter worker="5">6900044</Counter> - <Counter worker="6">6899295</Counter> - <Counter worker="7">6899389</Counter> - <Counter worker="8">7029806</Counter> - <Counter worker="9">7029783</Counter> - <Counter worker="10">7029530</Counter> - <Counter worker="11">7029484</Counter> - <Counter worker="12">7029691</Counter> - <Counter worker="13">7029614</Counter> - <Counter worker="14">7036890</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="16"> - <Counter worker="0">6937172</Counter> - <Counter worker="1">6937594</Counter> - <Counter worker="2">6937636</Counter> - <Counter worker="3">6937737</Counter> - <Counter worker="4">6938639</Counter> - <Counter worker="5">6938539</Counter> - <Counter worker="6">6938146</Counter> - <Counter worker="7">6938285</Counter> - <Counter worker="8">6845765</Counter> - <Counter worker="9">6845811</Counter> - <Counter worker="10">6844591</Counter> - <Counter worker="11">6844579</Counter> - <Counter worker="12">6847898</Counter> - <Counter worker="13">6847925</Counter> - <Counter worker="14">6854383</Counter> - <Counter worker="15">6854413</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="17"> - <Counter worker="0">6899164</Counter> - <Counter worker="1">6899621</Counter> - <Counter worker="2">6899868</Counter> - <Counter worker="3">6899979</Counter> - <Counter worker="4">6903162</Counter> - <Counter worker="5">6903081</Counter> - <Counter worker="6">6901182</Counter> - <Counter worker="7">6901304</Counter> - <Counter worker="8">6786503</Counter> - <Counter worker="9">6786566</Counter> - <Counter worker="10">6785567</Counter> - <Counter worker="11">6785489</Counter> - <Counter worker="12">6786492</Counter> - <Counter worker="13">6786497</Counter> - <Counter worker="14">6788266</Counter> - <Counter worker="15">6788323</Counter> - <Counter worker="16">7729409</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="18"> - <Counter worker="0">6879345</Counter> - <Counter worker="1">6879777</Counter> - <Counter worker="2">6879643</Counter> - <Counter worker="3">6879775</Counter> - <Counter worker="4">6882068</Counter> - <Counter worker="5">6881973</Counter> - <Counter worker="6">6880439</Counter> - <Counter worker="7">6880578</Counter> - <Counter worker="8">6777968</Counter> - <Counter worker="9">6778044</Counter> - <Counter worker="10">6777204</Counter> - <Counter worker="11">6777188</Counter> - <Counter worker="12">6777851</Counter> - <Counter worker="13">6777905</Counter> - <Counter worker="14">6779627</Counter> - <Counter worker="15">6779691</Counter> - <Counter worker="16">7557727</Counter> - <Counter worker="17">7557705</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="19"> - <Counter worker="0">6937193</Counter> - <Counter worker="1">6937631</Counter> - <Counter worker="2">6937312</Counter> - <Counter worker="3">6937409</Counter> - <Counter worker="4">6940007</Counter> - <Counter worker="5">6939931</Counter> - <Counter worker="6">6938301</Counter> - <Counter worker="7">6938409</Counter> - <Counter worker="8">6827232</Counter> - <Counter worker="9">6827251</Counter> - <Counter worker="10">6826171</Counter> - <Counter worker="11">6826057</Counter> - <Counter worker="12">6827889</Counter> - <Counter worker="13">6827896</Counter> - <Counter worker="14">6830967</Counter> - <Counter worker="15">6830958</Counter> - <Counter worker="16">7441511</Counter> - <Counter worker="17">7441523</Counter> - <Counter worker="18">7441610</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="20"> - <Counter worker="0">6900511</Counter> - <Counter worker="1">6900940</Counter> - <Counter worker="2">6901585</Counter> - <Counter worker="3">6901715</Counter> - <Counter worker="4">6902897</Counter> - <Counter worker="5">6902770</Counter> - <Counter worker="6">6902123</Counter> - <Counter worker="7">6902302</Counter> - <Counter worker="8">6781385</Counter> - <Counter worker="9">6781384</Counter> - <Counter worker="10">6779534</Counter> - <Counter worker="11">6779472</Counter> - <Counter worker="12">6781940</Counter> - <Counter worker="13">6781974</Counter> - <Counter worker="14">6784544</Counter> - <Counter worker="15">6784535</Counter> - <Counter worker="16">7224882</Counter> - <Counter worker="17">7224913</Counter> - <Counter worker="18">7224905</Counter> - <Counter worker="19">7224953</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="21"> - <Counter worker="0">6943617</Counter> - <Counter worker="1">6944082</Counter> - <Counter worker="2">6943750</Counter> - <Counter worker="3">6943857</Counter> - <Counter worker="4">6945186</Counter> - <Counter worker="5">6945096</Counter> - <Counter worker="6">6944668</Counter> - <Counter worker="7">6944790</Counter> - <Counter worker="8">6781824</Counter> - <Counter worker="9">6781819</Counter> - <Counter worker="10">6780449</Counter> - <Counter worker="11">6780372</Counter> - <Counter worker="12">6782024</Counter> - <Counter worker="13">6782050</Counter> - <Counter worker="14">6784510</Counter> - <Counter worker="15">6784514</Counter> - <Counter worker="16">7257452</Counter> - <Counter worker="17">7257495</Counter> - <Counter worker="18">7257487</Counter> - <Counter worker="19">7257508</Counter> - <Counter worker="20">7257524</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="22"> - <Counter worker="0">6917953</Counter> - <Counter worker="1">6918400</Counter> - <Counter worker="2">6919356</Counter> - <Counter worker="3">6919471</Counter> - <Counter worker="4">6920305</Counter> - <Counter worker="5">6920183</Counter> - <Counter worker="6">6919649</Counter> - <Counter worker="7">6919751</Counter> - <Counter worker="8">6791371</Counter> - <Counter worker="9">6791413</Counter> - <Counter worker="10">6788420</Counter> - <Counter worker="11">6788340</Counter> - <Counter worker="12">6792848</Counter> - <Counter worker="13">6792844</Counter> - <Counter worker="14">6797629</Counter> - <Counter worker="15">6797728</Counter> - <Counter worker="16">7113691</Counter> - <Counter worker="17">7113715</Counter> - <Counter worker="18">7112292</Counter> - <Counter worker="19">7112305</Counter> - <Counter worker="20">7113609</Counter> - <Counter worker="21">7113680</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="23"> - <Counter worker="0">6891252</Counter> - <Counter worker="1">6891663</Counter> - <Counter worker="2">6891546</Counter> - <Counter worker="3">6891706</Counter> - <Counter worker="4">6893277</Counter> - <Counter worker="5">6893152</Counter> - <Counter worker="6">6892566</Counter> - <Counter worker="7">6892657</Counter> - <Counter worker="8">6759690</Counter> - <Counter worker="9">6759744</Counter> - <Counter worker="10">6757928</Counter> - <Counter worker="11">6757837</Counter> - <Counter worker="12">6760968</Counter> - <Counter worker="13">6760984</Counter> - <Counter worker="14">6764597</Counter> - <Counter worker="15">6764671</Counter> - <Counter worker="16">7031553</Counter> - <Counter worker="17">7031562</Counter> - <Counter worker="18">7031468</Counter> - <Counter worker="19">7031438</Counter> - <Counter worker="20">7031584</Counter> - <Counter worker="21">7031649</Counter> - <Counter worker="22">7034463</Counter> - </ManySysLockMutex> - <ManySysLockMutex activeWorker="24"> - <Counter worker="0">6936624</Counter> - <Counter worker="1">6937095</Counter> - <Counter worker="2">6937990</Counter> - <Counter worker="3">6938116</Counter> - <Counter worker="4">6938974</Counter> - <Counter worker="5">6938848</Counter> - <Counter worker="6">6938729</Counter> - <Counter worker="7">6938855</Counter> - <Counter worker="8">6802487</Counter> - <Counter worker="9">6802507</Counter> - <Counter worker="10">6802119</Counter> - <Counter worker="11">6802052</Counter> - <Counter worker="12">6804132</Counter> - <Counter worker="13">6804142</Counter> - <Counter worker="14">6807402</Counter> - <Counter worker="15">6807440</Counter> - <Counter worker="16">6895101</Counter> - <Counter worker="17">6895091</Counter> - <Counter worker="18">6896248</Counter> - <Counter worker="19">6896161</Counter> - <Counter worker="20">6894890</Counter> - <Counter worker="21">6894820</Counter> - <Counter worker="22">6893800</Counter> - <Counter worker="23">6893757</Counter> - </ManySysLockMutex> - <ManyClassicCeilingMutex activeWorker="1"> - <Counter worker="0">783933</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="2"> - <Counter worker="0">715842</Counter> - <Counter worker="1">715877</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="3"> - <Counter worker="0">673594</Counter> - <Counter worker="1">673548</Counter> - <Counter worker="2">673597</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="4"> - <Counter worker="0">507004</Counter> - <Counter worker="1">506998</Counter> - <Counter worker="2">506958</Counter> - <Counter worker="3">507007</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="5"> - <Counter worker="0">399544</Counter> - <Counter worker="1">399546</Counter> - <Counter worker="2">399537</Counter> - <Counter worker="3">399496</Counter> - <Counter worker="4">399551</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="6"> - <Counter worker="0">326511</Counter> - <Counter worker="1">326516</Counter> - <Counter worker="2">326514</Counter> - <Counter worker="3">326477</Counter> - <Counter worker="4">326516</Counter> - <Counter worker="5">326515</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="7"> - <Counter worker="0">262720</Counter> - <Counter worker="1">262759</Counter> - <Counter worker="2">262752</Counter> - <Counter worker="3">262761</Counter> - <Counter worker="4">262765</Counter> - <Counter worker="5">262760</Counter> - <Counter worker="6">262754</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="8"> - <Counter worker="0">234094</Counter> - <Counter worker="1">234134</Counter> - <Counter worker="2">234129</Counter> - <Counter worker="3">234127</Counter> - <Counter worker="4">234131</Counter> - <Counter worker="5">234121</Counter> - <Counter worker="6">234124</Counter> - <Counter worker="7">234127</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="9"> - <Counter worker="0">108770</Counter> - <Counter worker="1">108767</Counter> - <Counter worker="2">108774</Counter> - <Counter worker="3">108774</Counter> - <Counter worker="4">108762</Counter> - <Counter worker="5">108772</Counter> - <Counter worker="6">108769</Counter> - <Counter worker="7">108772</Counter> - <Counter worker="8">108769</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="10"> - <Counter worker="0">88888</Counter> - <Counter worker="1">88883</Counter> - <Counter worker="2">88889</Counter> - <Counter worker="3">88885</Counter> - <Counter worker="4">88885</Counter> - <Counter worker="5">88885</Counter> - <Counter worker="6">88883</Counter> - <Counter worker="7">88882</Counter> - <Counter worker="8">88877</Counter> - <Counter worker="9">88883</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="11"> - <Counter worker="0">77874</Counter> - <Counter worker="1">77873</Counter> - <Counter worker="2">77879</Counter> - <Counter worker="3">77872</Counter> - <Counter worker="4">77873</Counter> - <Counter worker="5">77877</Counter> - <Counter worker="6">77880</Counter> - <Counter worker="7">77876</Counter> - <Counter worker="8">77874</Counter> - <Counter worker="9">77870</Counter> - <Counter worker="10">77872</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="12"> - <Counter worker="0">70256</Counter> - <Counter worker="1">70259</Counter> - <Counter worker="2">70264</Counter> - <Counter worker="3">70258</Counter> - <Counter worker="4">70262</Counter> - <Counter worker="5">70266</Counter> - <Counter worker="6">70260</Counter> - <Counter worker="7">70256</Counter> - <Counter worker="8">70257</Counter> - <Counter worker="9">70258</Counter> - <Counter worker="10">70259</Counter> - <Counter worker="11">70258</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="13"> - <Counter worker="0">62735</Counter> - <Counter worker="1">62740</Counter> - <Counter worker="2">62741</Counter> - <Counter worker="3">62737</Counter> - <Counter worker="4">62733</Counter> - <Counter worker="5">62735</Counter> - <Counter worker="6">62736</Counter> - <Counter worker="7">62734</Counter> - <Counter worker="8">62732</Counter> - <Counter worker="9">62731</Counter> - <Counter worker="10">62731</Counter> - <Counter worker="11">62730</Counter> - <Counter worker="12">62730</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="14"> - <Counter worker="0">59093</Counter> - <Counter worker="1">59091</Counter> - <Counter worker="2">59093</Counter> - <Counter worker="3">59094</Counter> - <Counter worker="4">59088</Counter> - <Counter worker="5">59092</Counter> - <Counter worker="6">59099</Counter> - <Counter worker="7">59097</Counter> - <Counter worker="8">59091</Counter> - <Counter worker="9">59089</Counter> - <Counter worker="10">59088</Counter> - <Counter worker="11">59102</Counter> - <Counter worker="12">59088</Counter> - <Counter worker="13">59087</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="15"> - <Counter worker="0">51130</Counter> - <Counter worker="1">51127</Counter> - <Counter worker="2">51121</Counter> - <Counter worker="3">51131</Counter> - <Counter worker="4">51123</Counter> - <Counter worker="5">51125</Counter> - <Counter worker="6">51129</Counter> - <Counter worker="7">51121</Counter> - <Counter worker="8">51125</Counter> - <Counter worker="9">51120</Counter> - <Counter worker="10">51126</Counter> - <Counter worker="11">51122</Counter> - <Counter worker="12">51124</Counter> - <Counter worker="13">51122</Counter> - <Counter worker="14">51124</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="16"> - <Counter worker="0">48586</Counter> - <Counter worker="1">48591</Counter> - <Counter worker="2">48592</Counter> - <Counter worker="3">48586</Counter> - <Counter worker="4">48586</Counter> - <Counter worker="5">48590</Counter> - <Counter worker="6">48588</Counter> - <Counter worker="7">48587</Counter> - <Counter worker="8">48594</Counter> - <Counter worker="9">48596</Counter> - <Counter worker="10">48588</Counter> - <Counter worker="11">48589</Counter> - <Counter worker="12">48596</Counter> - <Counter worker="13">48593</Counter> - <Counter worker="14">48591</Counter> - <Counter worker="15">48589</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="17"> - <Counter worker="0">43007</Counter> - <Counter worker="1">42998</Counter> - <Counter worker="2">43002</Counter> - <Counter worker="3">43006</Counter> - <Counter worker="4">43008</Counter> - <Counter worker="5">43010</Counter> - <Counter worker="6">43000</Counter> - <Counter worker="7">43002</Counter> - <Counter worker="8">42999</Counter> - <Counter worker="9">43000</Counter> - <Counter worker="10">43003</Counter> - <Counter worker="11">42999</Counter> - <Counter worker="12">42998</Counter> - <Counter worker="13">43001</Counter> - <Counter worker="14">43004</Counter> - <Counter worker="15">43005</Counter> - <Counter worker="16">43005</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="18"> - <Counter worker="0">38958</Counter> - <Counter worker="1">38953</Counter> - <Counter worker="2">38958</Counter> - <Counter worker="3">38951</Counter> - <Counter worker="4">38950</Counter> - <Counter worker="5">38972</Counter> - <Counter worker="6">38950</Counter> - <Counter worker="7">38953</Counter> - <Counter worker="8">38957</Counter> - <Counter worker="9">38956</Counter> - <Counter worker="10">38955</Counter> - <Counter worker="11">38967</Counter> - <Counter worker="12">38952</Counter> - <Counter worker="13">38952</Counter> - <Counter worker="14">38963</Counter> - <Counter worker="15">38951</Counter> - <Counter worker="16">38960</Counter> - <Counter worker="17">38954</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="19"> - <Counter worker="0">37040</Counter> - <Counter worker="1">37042</Counter> - <Counter worker="2">37050</Counter> - <Counter worker="3">37051</Counter> - <Counter worker="4">37049</Counter> - <Counter worker="5">37047</Counter> - <Counter worker="6">37044</Counter> - <Counter worker="7">37042</Counter> - <Counter worker="8">37048</Counter> - <Counter worker="9">37039</Counter> - <Counter worker="10">37045</Counter> - <Counter worker="11">37041</Counter> - <Counter worker="12">37041</Counter> - <Counter worker="13">37038</Counter> - <Counter worker="14">37038</Counter> - <Counter worker="15">37040</Counter> - <Counter worker="16">37043</Counter> - <Counter worker="17">37044</Counter> - <Counter worker="18">37045</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="20"> - <Counter worker="0">33977</Counter> - <Counter worker="1">33977</Counter> - <Counter worker="2">33969</Counter> - <Counter worker="3">33975</Counter> - <Counter worker="4">33965</Counter> - <Counter worker="5">33968</Counter> - <Counter worker="6">33967</Counter> - <Counter worker="7">33974</Counter> - <Counter worker="8">33968</Counter> - <Counter worker="9">33972</Counter> - <Counter worker="10">33964</Counter> - <Counter worker="11">33973</Counter> - <Counter worker="12">33970</Counter> - <Counter worker="13">33967</Counter> - <Counter worker="14">33965</Counter> - <Counter worker="15">33966</Counter> - <Counter worker="16">33966</Counter> - <Counter worker="17">33972</Counter> - <Counter worker="18">33971</Counter> - <Counter worker="19">33970</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="21"> - <Counter worker="0">34845</Counter> - <Counter worker="1">34846</Counter> - <Counter worker="2">34849</Counter> - <Counter worker="3">34851</Counter> - <Counter worker="4">34850</Counter> - <Counter worker="5">34842</Counter> - <Counter worker="6">34845</Counter> - <Counter worker="7">34856</Counter> - <Counter worker="8">34842</Counter> - <Counter worker="9">34842</Counter> - <Counter worker="10">34844</Counter> - <Counter worker="11">34848</Counter> - <Counter worker="12">34856</Counter> - <Counter worker="13">34857</Counter> - <Counter worker="14">34843</Counter> - <Counter worker="15">34856</Counter> - <Counter worker="16">34849</Counter> - <Counter worker="17">34847</Counter> - <Counter worker="18">34847</Counter> - <Counter worker="19">34843</Counter> - <Counter worker="20">34844</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="22"> - <Counter worker="0">29938</Counter> - <Counter worker="1">29946</Counter> - <Counter worker="2">29949</Counter> - <Counter worker="3">29944</Counter> - <Counter worker="4">29940</Counter> - <Counter worker="5">29945</Counter> - <Counter worker="6">29938</Counter> - <Counter worker="7">29943</Counter> - <Counter worker="8">29942</Counter> - <Counter worker="9">29945</Counter> - <Counter worker="10">29940</Counter> - <Counter worker="11">29946</Counter> - <Counter worker="12">29939</Counter> - <Counter worker="13">29938</Counter> - <Counter worker="14">29948</Counter> - <Counter worker="15">29939</Counter> - <Counter worker="16">29941</Counter> - <Counter worker="17">29948</Counter> - <Counter worker="18">29943</Counter> - <Counter worker="19">29941</Counter> - <Counter worker="20">29951</Counter> - <Counter worker="21">29952</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="23"> - <Counter worker="0">29210</Counter> - <Counter worker="1">29214</Counter> - <Counter worker="2">29224</Counter> - <Counter worker="3">29225</Counter> - <Counter worker="4">29212</Counter> - <Counter worker="5">29218</Counter> - <Counter worker="6">29218</Counter> - <Counter worker="7">29210</Counter> - <Counter worker="8">29219</Counter> - <Counter worker="9">29220</Counter> - <Counter worker="10">29222</Counter> - <Counter worker="11">29217</Counter> - <Counter worker="12">29215</Counter> - <Counter worker="13">29212</Counter> - <Counter worker="14">29210</Counter> - <Counter worker="15">29214</Counter> - <Counter worker="16">29213</Counter> - <Counter worker="17">29216</Counter> - <Counter worker="18">29217</Counter> - <Counter worker="19">29221</Counter> - <Counter worker="20">29211</Counter> - <Counter worker="21">29213</Counter> - <Counter worker="22">29216</Counter> - </ManyClassicCeilingMutex> - <ManyClassicCeilingMutex activeWorker="24"> - <Counter worker="0">25904</Counter> - <Counter worker="1">25912</Counter> - <Counter worker="2">25906</Counter> - <Counter worker="3">25914</Counter> - <Counter worker="4">25909</Counter> - <Counter worker="5">25909</Counter> - <Counter worker="6">25911</Counter> - <Counter worker="7">25907</Counter> - <Counter worker="8">25906</Counter> - <Counter worker="9">25903</Counter> - <Counter worker="10">25905</Counter> - <Counter worker="11">25905</Counter> - <Counter worker="12">25913</Counter> - <Counter worker="13">25910</Counter> - <Counter worker="14">25913</Counter> - <Counter worker="15">25915</Counter> - <Counter worker="16">25911</Counter> - <Counter worker="17">25903</Counter> - <Counter worker="18">25908</Counter> - <Counter worker="19">25916</Counter> - <Counter worker="20">25918</Counter> - <Counter worker="21">25919</Counter> - <Counter worker="22">25904</Counter> - <Counter worker="23">25907</Counter> - </ManyClassicCeilingMutex> - <ManyClassicMrsPMutex activeWorker="1"> - <Counter worker="0">784201</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="2"> - <Counter worker="0">712340</Counter> - <Counter worker="1">712386</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="3"> - <Counter worker="0">674000</Counter> - <Counter worker="1">674051</Counter> - <Counter worker="2">674040</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="4"> - <Counter worker="0">508157</Counter> - <Counter worker="1">508153</Counter> - <Counter worker="2">508159</Counter> - <Counter worker="3">508110</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="5"> - <Counter worker="0">404003</Counter> - <Counter worker="1">403999</Counter> - <Counter worker="2">404000</Counter> - <Counter worker="3">403956</Counter> - <Counter worker="4">404001</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="6"> - <Counter worker="0">327904</Counter> - <Counter worker="1">327939</Counter> - <Counter worker="2">327942</Counter> - <Counter worker="3">327939</Counter> - <Counter worker="4">327939</Counter> - <Counter worker="5">327943</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="7"> - <Counter worker="0">272616</Counter> - <Counter worker="1">272614</Counter> - <Counter worker="2">272610</Counter> - <Counter worker="3">272613</Counter> - <Counter worker="4">272618</Counter> - <Counter worker="5">272620</Counter> - <Counter worker="6">272575</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="8"> - <Counter worker="0">234547</Counter> - <Counter worker="1">234543</Counter> - <Counter worker="2">234550</Counter> - <Counter worker="3">234547</Counter> - <Counter worker="4">234513</Counter> - <Counter worker="5">234546</Counter> - <Counter worker="6">234543</Counter> - <Counter worker="7">234543</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="9"> - <Counter worker="0">107383</Counter> - <Counter worker="1">107392</Counter> - <Counter worker="2">107386</Counter> - <Counter worker="3">107386</Counter> - <Counter worker="4">107389</Counter> - <Counter worker="5">107392</Counter> - <Counter worker="6">107385</Counter> - <Counter worker="7">107394</Counter> - <Counter worker="8">107377</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="10"> - <Counter worker="0">89997</Counter> - <Counter worker="1">89997</Counter> - <Counter worker="2">89997</Counter> - <Counter worker="3">90000</Counter> - <Counter worker="4">90001</Counter> - <Counter worker="5">89993</Counter> - <Counter worker="6">89995</Counter> - <Counter worker="7">89995</Counter> - <Counter worker="8">90001</Counter> - <Counter worker="9">90001</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="11"> - <Counter worker="0">76542</Counter> - <Counter worker="1">76545</Counter> - <Counter worker="2">76542</Counter> - <Counter worker="3">76541</Counter> - <Counter worker="4">76540</Counter> - <Counter worker="5">76549</Counter> - <Counter worker="6">76548</Counter> - <Counter worker="7">76545</Counter> - <Counter worker="8">76540</Counter> - <Counter worker="9">76540</Counter> - <Counter worker="10">76545</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="12"> - <Counter worker="0">65159</Counter> - <Counter worker="1">65161</Counter> - <Counter worker="2">65155</Counter> - <Counter worker="3">65158</Counter> - <Counter worker="4">65156</Counter> - <Counter worker="5">65154</Counter> - <Counter worker="6">65157</Counter> - <Counter worker="7">65156</Counter> - <Counter worker="8">65150</Counter> - <Counter worker="9">65153</Counter> - <Counter worker="10">65154</Counter> - <Counter worker="11">65152</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="13"> - <Counter worker="0">61089</Counter> - <Counter worker="1">61093</Counter> - <Counter worker="2">61092</Counter> - <Counter worker="3">61093</Counter> - <Counter worker="4">61094</Counter> - <Counter worker="5">61089</Counter> - <Counter worker="6">61090</Counter> - <Counter worker="7">61092</Counter> - <Counter worker="8">61098</Counter> - <Counter worker="9">61098</Counter> - <Counter worker="10">61091</Counter> - <Counter worker="11">61090</Counter> - <Counter worker="12">61095</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="14"> - <Counter worker="0">58163</Counter> - <Counter worker="1">58164</Counter> - <Counter worker="2">58160</Counter> - <Counter worker="3">58158</Counter> - <Counter worker="4">58156</Counter> - <Counter worker="5">58159</Counter> - <Counter worker="6">58157</Counter> - <Counter worker="7">58156</Counter> - <Counter worker="8">58153</Counter> - <Counter worker="9">58155</Counter> - <Counter worker="10">58154</Counter> - <Counter worker="11">58150</Counter> - <Counter worker="12">58153</Counter> - <Counter worker="13">58152</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="15"> - <Counter worker="0">49108</Counter> - <Counter worker="1">49110</Counter> - <Counter worker="2">49107</Counter> - <Counter worker="3">49106</Counter> - <Counter worker="4">49114</Counter> - <Counter worker="5">49112</Counter> - <Counter worker="6">49113</Counter> - <Counter worker="7">49107</Counter> - <Counter worker="8">49109</Counter> - <Counter worker="9">49110</Counter> - <Counter worker="10">49112</Counter> - <Counter worker="11">49117</Counter> - <Counter worker="12">49115</Counter> - <Counter worker="13">49111</Counter> - <Counter worker="14">49106</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="16"> - <Counter worker="0">45403</Counter> - <Counter worker="1">45406</Counter> - <Counter worker="2">45405</Counter> - <Counter worker="3">45404</Counter> - <Counter worker="4">45407</Counter> - <Counter worker="5">45402</Counter> - <Counter worker="6">45401</Counter> - <Counter worker="7">45403</Counter> - <Counter worker="8">45407</Counter> - <Counter worker="9">45410</Counter> - <Counter worker="10">45411</Counter> - <Counter worker="11">45404</Counter> - <Counter worker="12">45413</Counter> - <Counter worker="13">45410</Counter> - <Counter worker="14">45401</Counter> - <Counter worker="15">45401</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="17"> - <Counter worker="0">40546</Counter> - <Counter worker="1">40547</Counter> - <Counter worker="2">40552</Counter> - <Counter worker="3">40546</Counter> - <Counter worker="4">40554</Counter> - <Counter worker="5">40553</Counter> - <Counter worker="6">40550</Counter> - <Counter worker="7">40552</Counter> - <Counter worker="8">40559</Counter> - <Counter worker="9">40559</Counter> - <Counter worker="10">40555</Counter> - <Counter worker="11">40556</Counter> - <Counter worker="12">40550</Counter> - <Counter worker="13">40548</Counter> - <Counter worker="14">40548</Counter> - <Counter worker="15">40549</Counter> - <Counter worker="16">40551</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="18"> - <Counter worker="0">39609</Counter> - <Counter worker="1">39614</Counter> - <Counter worker="2">39610</Counter> - <Counter worker="3">39616</Counter> - <Counter worker="4">39618</Counter> - <Counter worker="5">39615</Counter> - <Counter worker="6">39613</Counter> - <Counter worker="7">39613</Counter> - <Counter worker="8">39615</Counter> - <Counter worker="9">39617</Counter> - <Counter worker="10">39610</Counter> - <Counter worker="11">39618</Counter> - <Counter worker="12">39615</Counter> - <Counter worker="13">39611</Counter> - <Counter worker="14">39612</Counter> - <Counter worker="15">39611</Counter> - <Counter worker="16">39621</Counter> - <Counter worker="17">39620</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="19"> - <Counter worker="0">35744</Counter> - <Counter worker="1">35742</Counter> - <Counter worker="2">35744</Counter> - <Counter worker="3">35747</Counter> - <Counter worker="4">35752</Counter> - <Counter worker="5">35755</Counter> - <Counter worker="6">35745</Counter> - <Counter worker="7">35753</Counter> - <Counter worker="8">35745</Counter> - <Counter worker="9">35747</Counter> - <Counter worker="10">35742</Counter> - <Counter worker="11">35751</Counter> - <Counter worker="12">35749</Counter> - <Counter worker="13">35746</Counter> - <Counter worker="14">35743</Counter> - <Counter worker="15">35746</Counter> - <Counter worker="16">35749</Counter> - <Counter worker="17">35743</Counter> - <Counter worker="18">35748</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="20"> - <Counter worker="0">33654</Counter> - <Counter worker="1">33664</Counter> - <Counter worker="2">33659</Counter> - <Counter worker="3">33661</Counter> - <Counter worker="4">33654</Counter> - <Counter worker="5">33658</Counter> - <Counter worker="6">33663</Counter> - <Counter worker="7">33654</Counter> - <Counter worker="8">33668</Counter> - <Counter worker="9">33660</Counter> - <Counter worker="10">33660</Counter> - <Counter worker="11">33655</Counter> - <Counter worker="12">33667</Counter> - <Counter worker="13">33657</Counter> - <Counter worker="14">33655</Counter> - <Counter worker="15">33664</Counter> - <Counter worker="16">33657</Counter> - <Counter worker="17">33656</Counter> - <Counter worker="18">33662</Counter> - <Counter worker="19">33659</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="21"> - <Counter worker="0">32410</Counter> - <Counter worker="1">32414</Counter> - <Counter worker="2">32407</Counter> - <Counter worker="3">32409</Counter> - <Counter worker="4">32420</Counter> - <Counter worker="5">32413</Counter> - <Counter worker="6">32422</Counter> - <Counter worker="7">32421</Counter> - <Counter worker="8">32408</Counter> - <Counter worker="9">32414</Counter> - <Counter worker="10">32407</Counter> - <Counter worker="11">32411</Counter> - <Counter worker="12">32413</Counter> - <Counter worker="13">32416</Counter> - <Counter worker="14">32408</Counter> - <Counter worker="15">32418</Counter> - <Counter worker="16">32412</Counter> - <Counter worker="17">32416</Counter> - <Counter worker="18">32411</Counter> - <Counter worker="19">32410</Counter> - <Counter worker="20">32417</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="22"> - <Counter worker="0">29188</Counter> - <Counter worker="1">29192</Counter> - <Counter worker="2">29201</Counter> - <Counter worker="3">29198</Counter> - <Counter worker="4">29187</Counter> - <Counter worker="5">29195</Counter> - <Counter worker="6">29192</Counter> - <Counter worker="7">29195</Counter> - <Counter worker="8">29200</Counter> - <Counter worker="9">29193</Counter> - <Counter worker="10">29197</Counter> - <Counter worker="11">29189</Counter> - <Counter worker="12">29189</Counter> - <Counter worker="13">29190</Counter> - <Counter worker="14">29188</Counter> - <Counter worker="15">29196</Counter> - <Counter worker="16">29194</Counter> - <Counter worker="17">29191</Counter> - <Counter worker="18">29199</Counter> - <Counter worker="19">29194</Counter> - <Counter worker="20">29191</Counter> - <Counter worker="21">29190</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="23"> - <Counter worker="0">27206</Counter> - <Counter worker="1">27216</Counter> - <Counter worker="2">27222</Counter> - <Counter worker="3">27211</Counter> - <Counter worker="4">27211</Counter> - <Counter worker="5">27210</Counter> - <Counter worker="6">27212</Counter> - <Counter worker="7">27208</Counter> - <Counter worker="8">27214</Counter> - <Counter worker="9">27207</Counter> - <Counter worker="10">27208</Counter> - <Counter worker="11">27214</Counter> - <Counter worker="12">27210</Counter> - <Counter worker="13">27209</Counter> - <Counter worker="14">27218</Counter> - <Counter worker="15">27217</Counter> - <Counter worker="16">27219</Counter> - <Counter worker="17">27206</Counter> - <Counter worker="18">27215</Counter> - <Counter worker="19">27213</Counter> - <Counter worker="20">27207</Counter> - <Counter worker="21">27212</Counter> - <Counter worker="22">27232</Counter> - </ManyClassicMrsPMutex> - <ManyClassicMrsPMutex activeWorker="24"> - <Counter worker="0">24666</Counter> - <Counter worker="1">24670</Counter> - <Counter worker="2">24664</Counter> - <Counter worker="3">24672</Counter> - <Counter worker="4">24671</Counter> - <Counter worker="5">24668</Counter> - <Counter worker="6">24668</Counter> - <Counter worker="7">24667</Counter> - <Counter worker="8">24671</Counter> - <Counter worker="9">24664</Counter> - <Counter worker="10">24667</Counter> - <Counter worker="11">24666</Counter> - <Counter worker="12">24675</Counter> - <Counter worker="13">24670</Counter> - <Counter worker="14">24664</Counter> - <Counter worker="15">24673</Counter> - <Counter worker="16">24673</Counter> - <Counter worker="17">24669</Counter> - <Counter worker="18">24665</Counter> - <Counter worker="19">24675</Counter> - <Counter worker="20">24681</Counter> - <Counter worker="21">24674</Counter> - <Counter worker="22">24677</Counter> - <Counter worker="23">24681</Counter> - </ManyClassicMrsPMutex> - <ManyPthreadSpinlock activeWorker="1"> - <Counter worker="0">14718834</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="2"> - <Counter worker="0">14545804</Counter> - <Counter worker="1">14546744</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="3"> - <Counter worker="0">14202896</Counter> - <Counter worker="1">14203740</Counter> - <Counter worker="2">14204031</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="4"> - <Counter worker="0">13936060</Counter> - <Counter worker="1">13936903</Counter> - <Counter worker="2">13937157</Counter> - <Counter worker="3">13937175</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="5"> - <Counter worker="0">13882002</Counter> - <Counter worker="1">13882875</Counter> - <Counter worker="2">13883036</Counter> - <Counter worker="3">13883032</Counter> - <Counter worker="4">13883129</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="6"> - <Counter worker="0">13678756</Counter> - <Counter worker="1">13679620</Counter> - <Counter worker="2">13679743</Counter> - <Counter worker="3">13679940</Counter> - <Counter worker="4">13679849</Counter> - <Counter worker="5">13679778</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="7"> - <Counter worker="0">13536294</Counter> - <Counter worker="1">13537073</Counter> - <Counter worker="2">13537313</Counter> - <Counter worker="3">13537271</Counter> - <Counter worker="4">13537347</Counter> - <Counter worker="5">13537331</Counter> - <Counter worker="6">13537366</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="8"> - <Counter worker="0">13416795</Counter> - <Counter worker="1">13417680</Counter> - <Counter worker="2">13417750</Counter> - <Counter worker="3">13417879</Counter> - <Counter worker="4">13417890</Counter> - <Counter worker="5">13417884</Counter> - <Counter worker="6">13417887</Counter> - <Counter worker="7">13417860</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="9"> - <Counter worker="0">13344563</Counter> - <Counter worker="1">13345425</Counter> - <Counter worker="2">13345471</Counter> - <Counter worker="3">13345553</Counter> - <Counter worker="4">13345686</Counter> - <Counter worker="5">13345685</Counter> - <Counter worker="6">13345620</Counter> - <Counter worker="7">13345553</Counter> - <Counter worker="8">14664124</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="10"> - <Counter worker="0">13345484</Counter> - <Counter worker="1">13346290</Counter> - <Counter worker="2">13346571</Counter> - <Counter worker="3">13346539</Counter> - <Counter worker="4">13346562</Counter> - <Counter worker="5">13346553</Counter> - <Counter worker="6">13346462</Counter> - <Counter worker="7">13346482</Counter> - <Counter worker="8">14489005</Counter> - <Counter worker="9">14489074</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="11"> - <Counter worker="0">13387106</Counter> - <Counter worker="1">13387968</Counter> - <Counter worker="2">13388136</Counter> - <Counter worker="3">13388157</Counter> - <Counter worker="4">13388188</Counter> - <Counter worker="5">13388196</Counter> - <Counter worker="6">13388173</Counter> - <Counter worker="7">13388181</Counter> - <Counter worker="8">14106966</Counter> - <Counter worker="9">14106972</Counter> - <Counter worker="10">14106794</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="12"> - <Counter worker="0">13339713</Counter> - <Counter worker="1">13340579</Counter> - <Counter worker="2">13340745</Counter> - <Counter worker="3">13340783</Counter> - <Counter worker="4">13340828</Counter> - <Counter worker="5">13340858</Counter> - <Counter worker="6">13340715</Counter> - <Counter worker="7">13340770</Counter> - <Counter worker="8">13878859</Counter> - <Counter worker="9">13878923</Counter> - <Counter worker="10">13878707</Counter> - <Counter worker="11">13878654</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="13"> - <Counter worker="0">13423332</Counter> - <Counter worker="1">13424154</Counter> - <Counter worker="2">13424352</Counter> - <Counter worker="3">13424415</Counter> - <Counter worker="4">13424314</Counter> - <Counter worker="5">13424308</Counter> - <Counter worker="6">13424314</Counter> - <Counter worker="7">13424303</Counter> - <Counter worker="8">13894368</Counter> - <Counter worker="9">13894493</Counter> - <Counter worker="10">13894289</Counter> - <Counter worker="11">13894305</Counter> - <Counter worker="12">13894313</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="14"> - <Counter worker="0">13374209</Counter> - <Counter worker="1">13375090</Counter> - <Counter worker="2">13375258</Counter> - <Counter worker="3">13375185</Counter> - <Counter worker="4">13375228</Counter> - <Counter worker="5">13375289</Counter> - <Counter worker="6">13375221</Counter> - <Counter worker="7">13375272</Counter> - <Counter worker="8">13638146</Counter> - <Counter worker="9">13638099</Counter> - <Counter worker="10">13638011</Counter> - <Counter worker="11">13637921</Counter> - <Counter worker="12">13638082</Counter> - <Counter worker="13">13638078</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="15"> - <Counter worker="0">13324122</Counter> - <Counter worker="1">13324923</Counter> - <Counter worker="2">13322227</Counter> - <Counter worker="3">13322310</Counter> - <Counter worker="4">13325255</Counter> - <Counter worker="5">13325158</Counter> - <Counter worker="6">13325121</Counter> - <Counter worker="7">13325137</Counter> - <Counter worker="8">13526376</Counter> - <Counter worker="9">13526358</Counter> - <Counter worker="10">13526223</Counter> - <Counter worker="11">13526248</Counter> - <Counter worker="12">13526360</Counter> - <Counter worker="13">13526365</Counter> - <Counter worker="14">13526370</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="16"> - <Counter worker="0">13409904</Counter> - <Counter worker="1">13410740</Counter> - <Counter worker="2">13410903</Counter> - <Counter worker="3">13410988</Counter> - <Counter worker="4">13411030</Counter> - <Counter worker="5">13410987</Counter> - <Counter worker="6">13410838</Counter> - <Counter worker="7">13410949</Counter> - <Counter worker="8">13425120</Counter> - <Counter worker="9">13425212</Counter> - <Counter worker="10">13425033</Counter> - <Counter worker="11">13425047</Counter> - <Counter worker="12">13425054</Counter> - <Counter worker="13">13425101</Counter> - <Counter worker="14">13425139</Counter> - <Counter worker="15">13425072</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="17"> - <Counter worker="0">13358197</Counter> - <Counter worker="1">13359084</Counter> - <Counter worker="2">13359207</Counter> - <Counter worker="3">13359276</Counter> - <Counter worker="4">13359271</Counter> - <Counter worker="5">13359332</Counter> - <Counter worker="6">13359272</Counter> - <Counter worker="7">13359197</Counter> - <Counter worker="8">13377371</Counter> - <Counter worker="9">13377387</Counter> - <Counter worker="10">13377385</Counter> - <Counter worker="11">13377388</Counter> - <Counter worker="12">13377413</Counter> - <Counter worker="13">13377416</Counter> - <Counter worker="14">13377379</Counter> - <Counter worker="15">13377457</Counter> - <Counter worker="16">14648127</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="18"> - <Counter worker="0">13450072</Counter> - <Counter worker="1">13450903</Counter> - <Counter worker="2">13451130</Counter> - <Counter worker="3">13451147</Counter> - <Counter worker="4">13451124</Counter> - <Counter worker="5">13451254</Counter> - <Counter worker="6">13451111</Counter> - <Counter worker="7">13451124</Counter> - <Counter worker="8">13476959</Counter> - <Counter worker="9">13476898</Counter> - <Counter worker="10">13476818</Counter> - <Counter worker="11">13476757</Counter> - <Counter worker="12">13476779</Counter> - <Counter worker="13">13476826</Counter> - <Counter worker="14">13476887</Counter> - <Counter worker="15">13476812</Counter> - <Counter worker="16">14753607</Counter> - <Counter worker="17">14753628</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="19"> - <Counter worker="0">13391588</Counter> - <Counter worker="1">13392430</Counter> - <Counter worker="2">13392562</Counter> - <Counter worker="3">13392593</Counter> - <Counter worker="4">13392668</Counter> - <Counter worker="5">13392691</Counter> - <Counter worker="6">13392561</Counter> - <Counter worker="7">13392599</Counter> - <Counter worker="8">13399126</Counter> - <Counter worker="9">13399129</Counter> - <Counter worker="10">13399029</Counter> - <Counter worker="11">13398973</Counter> - <Counter worker="12">13399022</Counter> - <Counter worker="13">13399026</Counter> - <Counter worker="14">13398920</Counter> - <Counter worker="15">13398974</Counter> - <Counter worker="16">14175315</Counter> - <Counter worker="17">14175222</Counter> - <Counter worker="18">14175311</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="20"> - <Counter worker="0">13355745</Counter> - <Counter worker="1">13356643</Counter> - <Counter worker="2">13356778</Counter> - <Counter worker="3">13356845</Counter> - <Counter worker="4">13356826</Counter> - <Counter worker="5">13356881</Counter> - <Counter worker="6">13356673</Counter> - <Counter worker="7">13356756</Counter> - <Counter worker="8">13361313</Counter> - <Counter worker="9">13361244</Counter> - <Counter worker="10">13357068</Counter> - <Counter worker="11">13356983</Counter> - <Counter worker="12">13356966</Counter> - <Counter worker="13">13356990</Counter> - <Counter worker="14">13361213</Counter> - <Counter worker="15">13361185</Counter> - <Counter worker="16">13989600</Counter> - <Counter worker="17">13989623</Counter> - <Counter worker="18">13989693</Counter> - <Counter worker="19">13989659</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="21"> - <Counter worker="0">13407936</Counter> - <Counter worker="1">13408763</Counter> - <Counter worker="2">13408903</Counter> - <Counter worker="3">13408988</Counter> - <Counter worker="4">13409085</Counter> - <Counter worker="5">13409045</Counter> - <Counter worker="6">13408998</Counter> - <Counter worker="7">13408901</Counter> - <Counter worker="8">13434650</Counter> - <Counter worker="9">13434644</Counter> - <Counter worker="10">13434596</Counter> - <Counter worker="11">13434581</Counter> - <Counter worker="12">13434577</Counter> - <Counter worker="13">13434621</Counter> - <Counter worker="14">13434678</Counter> - <Counter worker="15">13434611</Counter> - <Counter worker="16">13925505</Counter> - <Counter worker="17">13925519</Counter> - <Counter worker="18">13925574</Counter> - <Counter worker="19">13925534</Counter> - <Counter worker="20">13925556</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="22"> - <Counter worker="0">13357133</Counter> - <Counter worker="1">13357991</Counter> - <Counter worker="2">13358199</Counter> - <Counter worker="3">13358166</Counter> - <Counter worker="4">13358386</Counter> - <Counter worker="5">13358347</Counter> - <Counter worker="6">13358183</Counter> - <Counter worker="7">13358191</Counter> - <Counter worker="8">13409498</Counter> - <Counter worker="9">13409534</Counter> - <Counter worker="10">13409355</Counter> - <Counter worker="11">13409356</Counter> - <Counter worker="12">13409477</Counter> - <Counter worker="13">13409398</Counter> - <Counter worker="14">13409398</Counter> - <Counter worker="15">13409452</Counter> - <Counter worker="16">13725035</Counter> - <Counter worker="17">13725102</Counter> - <Counter worker="18">13725140</Counter> - <Counter worker="19">13724990</Counter> - <Counter worker="20">13725108</Counter> - <Counter worker="21">13725040</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="23"> - <Counter worker="0">13448281</Counter> - <Counter worker="1">13449150</Counter> - <Counter worker="2">13449235</Counter> - <Counter worker="3">13449263</Counter> - <Counter worker="4">13449358</Counter> - <Counter worker="5">13449247</Counter> - <Counter worker="6">13449327</Counter> - <Counter worker="7">13449312</Counter> - <Counter worker="8">13468811</Counter> - <Counter worker="9">13468839</Counter> - <Counter worker="10">13468751</Counter> - <Counter worker="11">13468726</Counter> - <Counter worker="12">13468738</Counter> - <Counter worker="13">13468711</Counter> - <Counter worker="14">13468861</Counter> - <Counter worker="15">13468835</Counter> - <Counter worker="16">13675503</Counter> - <Counter worker="17">13675619</Counter> - <Counter worker="18">13675523</Counter> - <Counter worker="19">13675472</Counter> - <Counter worker="20">13675556</Counter> - <Counter worker="21">13675544</Counter> - <Counter worker="22">13675532</Counter> - </ManyPthreadSpinlock> - <ManyPthreadSpinlock activeWorker="24"> - <Counter worker="0">13380340</Counter> - <Counter worker="1">13381193</Counter> - <Counter worker="2">13378127</Counter> - <Counter worker="3">13378172</Counter> - <Counter worker="4">13384719</Counter> - <Counter worker="5">13384699</Counter> - <Counter worker="6">13384584</Counter> - <Counter worker="7">13384610</Counter> - <Counter worker="8">13403447</Counter> - <Counter worker="9">13403370</Counter> - <Counter worker="10">13403295</Counter> - <Counter worker="11">13403431</Counter> - <Counter worker="12">13403242</Counter> - <Counter worker="13">13403348</Counter> - <Counter worker="14">13403394</Counter> - <Counter worker="15">13403378</Counter> - <Counter worker="16">13451683</Counter> - <Counter worker="17">13451643</Counter> - <Counter worker="18">13445578</Counter> - <Counter worker="19">13445455</Counter> - <Counter worker="20">13451633</Counter> - <Counter worker="21">13451656</Counter> - <Counter worker="22">13451565</Counter> - <Counter worker="23">13451541</Counter> - </ManyPthreadSpinlock> - <ManyPthreadMutexInherit activeWorker="1"> - <Counter worker="0">5685517</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="2"> - <Counter worker="0">5696601</Counter> - <Counter worker="1">5696949</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="3"> - <Counter worker="0">5543995</Counter> - <Counter worker="1">5544357</Counter> - <Counter worker="2">5544426</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="4"> - <Counter worker="0">5454438</Counter> - <Counter worker="1">5454782</Counter> - <Counter worker="2">5454882</Counter> - <Counter worker="3">5454926</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="5"> - <Counter worker="0">5471381</Counter> - <Counter worker="1">5471738</Counter> - <Counter worker="2">5471815</Counter> - <Counter worker="3">5471828</Counter> - <Counter worker="4">5471846</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="6"> - <Counter worker="0">5409420</Counter> - <Counter worker="1">5409778</Counter> - <Counter worker="2">5409870</Counter> - <Counter worker="3">5409863</Counter> - <Counter worker="4">5409834</Counter> - <Counter worker="5">5409840</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="7"> - <Counter worker="0">5382186</Counter> - <Counter worker="1">5382516</Counter> - <Counter worker="2">5382597</Counter> - <Counter worker="3">5382630</Counter> - <Counter worker="4">5382622</Counter> - <Counter worker="5">5382605</Counter> - <Counter worker="6">5385095</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="8"> - <Counter worker="0">5352212</Counter> - <Counter worker="1">5352555</Counter> - <Counter worker="2">5352630</Counter> - <Counter worker="3">5352640</Counter> - <Counter worker="4">5352660</Counter> - <Counter worker="5">5352675</Counter> - <Counter worker="6">5352627</Counter> - <Counter worker="7">5352647</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="9"> - <Counter worker="0">5330964</Counter> - <Counter worker="1">5331314</Counter> - <Counter worker="2">5331408</Counter> - <Counter worker="3">5331433</Counter> - <Counter worker="4">5331429</Counter> - <Counter worker="5">5331422</Counter> - <Counter worker="6">5331360</Counter> - <Counter worker="7">5331402</Counter> - <Counter worker="8">5696119</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="10"> - <Counter worker="0">5312790</Counter> - <Counter worker="1">5313108</Counter> - <Counter worker="2">5313193</Counter> - <Counter worker="3">5313221</Counter> - <Counter worker="4">5313253</Counter> - <Counter worker="5">5313255</Counter> - <Counter worker="6">5313216</Counter> - <Counter worker="7">5313229</Counter> - <Counter worker="8">5623042</Counter> - <Counter worker="9">5623031</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="11"> - <Counter worker="0">5347426</Counter> - <Counter worker="1">5347771</Counter> - <Counter worker="2">5347831</Counter> - <Counter worker="3">5347866</Counter> - <Counter worker="4">5347844</Counter> - <Counter worker="5">5347886</Counter> - <Counter worker="6">5347836</Counter> - <Counter worker="7">5347878</Counter> - <Counter worker="8">5544845</Counter> - <Counter worker="9">5544823</Counter> - <Counter worker="10">5544727</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="12"> - <Counter worker="0">5324241</Counter> - <Counter worker="1">5324589</Counter> - <Counter worker="2">5324636</Counter> - <Counter worker="3">5324686</Counter> - <Counter worker="4">5324681</Counter> - <Counter worker="5">5324678</Counter> - <Counter worker="6">5324639</Counter> - <Counter worker="7">5324665</Counter> - <Counter worker="8">5499255</Counter> - <Counter worker="9">5499245</Counter> - <Counter worker="10">5499200</Counter> - <Counter worker="11">5499220</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="13"> - <Counter worker="0">5361809</Counter> - <Counter worker="1">5362145</Counter> - <Counter worker="2">5362206</Counter> - <Counter worker="3">5362252</Counter> - <Counter worker="4">5362262</Counter> - <Counter worker="5">5362262</Counter> - <Counter worker="6">5362256</Counter> - <Counter worker="7">5362238</Counter> - <Counter worker="8">5485847</Counter> - <Counter worker="9">5485850</Counter> - <Counter worker="10">5485787</Counter> - <Counter worker="11">5485770</Counter> - <Counter worker="12">5485785</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="14"> - <Counter worker="0">5343125</Counter> - <Counter worker="1">5343437</Counter> - <Counter worker="2">5343528</Counter> - <Counter worker="3">5343550</Counter> - <Counter worker="4">5343575</Counter> - <Counter worker="5">5343550</Counter> - <Counter worker="6">5343537</Counter> - <Counter worker="7">5343558</Counter> - <Counter worker="8">5427404</Counter> - <Counter worker="9">5427398</Counter> - <Counter worker="10">5427402</Counter> - <Counter worker="11">5427400</Counter> - <Counter worker="12">5427379</Counter> - <Counter worker="13">5427366</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="15"> - <Counter worker="0">5316180</Counter> - <Counter worker="1">5316531</Counter> - <Counter worker="2">5316583</Counter> - <Counter worker="3">5316629</Counter> - <Counter worker="4">5316636</Counter> - <Counter worker="5">5316625</Counter> - <Counter worker="6">5316608</Counter> - <Counter worker="7">5316618</Counter> - <Counter worker="8">5383017</Counter> - <Counter worker="9">5383040</Counter> - <Counter worker="10">5382956</Counter> - <Counter worker="11">5382983</Counter> - <Counter worker="12">5382964</Counter> - <Counter worker="13">5382933</Counter> - <Counter worker="14">5382973</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="16"> - <Counter worker="0">5348312</Counter> - <Counter worker="1">5348636</Counter> - <Counter worker="2">5348734</Counter> - <Counter worker="3">5348745</Counter> - <Counter worker="4">5348767</Counter> - <Counter worker="5">5348747</Counter> - <Counter worker="6">5348742</Counter> - <Counter worker="7">5348758</Counter> - <Counter worker="8">5377756</Counter> - <Counter worker="9">5377760</Counter> - <Counter worker="10">5377743</Counter> - <Counter worker="11">5377735</Counter> - <Counter worker="12">5377720</Counter> - <Counter worker="13">5377705</Counter> - <Counter worker="14">5377766</Counter> - <Counter worker="15">5377744</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="17"> - <Counter worker="0">5328451</Counter> - <Counter worker="1">5328804</Counter> - <Counter worker="2">5328899</Counter> - <Counter worker="3">5328944</Counter> - <Counter worker="4">5328928</Counter> - <Counter worker="5">5328922</Counter> - <Counter worker="6">5328895</Counter> - <Counter worker="7">5328892</Counter> - <Counter worker="8">5352090</Counter> - <Counter worker="9">5352051</Counter> - <Counter worker="10">5352079</Counter> - <Counter worker="11">5352076</Counter> - <Counter worker="12">5352072</Counter> - <Counter worker="13">5352070</Counter> - <Counter worker="14">5352084</Counter> - <Counter worker="15">5352060</Counter> - <Counter worker="16">5780692</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="18"> - <Counter worker="0">5362263</Counter> - <Counter worker="1">5362611</Counter> - <Counter worker="2">5362670</Counter> - <Counter worker="3">5362711</Counter> - <Counter worker="4">5362685</Counter> - <Counter worker="5">5362679</Counter> - <Counter worker="6">5362698</Counter> - <Counter worker="7">5362722</Counter> - <Counter worker="8">5384935</Counter> - <Counter worker="9">5384948</Counter> - <Counter worker="10">5384849</Counter> - <Counter worker="11">5384902</Counter> - <Counter worker="12">5384887</Counter> - <Counter worker="13">5384869</Counter> - <Counter worker="14">5384912</Counter> - <Counter worker="15">5384902</Counter> - <Counter worker="16">5717423</Counter> - <Counter worker="17">5717419</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="19"> - <Counter worker="0">5339960</Counter> - <Counter worker="1">5340280</Counter> - <Counter worker="2">5340379</Counter> - <Counter worker="3">5340412</Counter> - <Counter worker="4">5340413</Counter> - <Counter worker="5">5340406</Counter> - <Counter worker="6">5340390</Counter> - <Counter worker="7">5340429</Counter> - <Counter worker="8">5366702</Counter> - <Counter worker="9">5366709</Counter> - <Counter worker="10">5366618</Counter> - <Counter worker="11">5366618</Counter> - <Counter worker="12">5366640</Counter> - <Counter worker="13">5366633</Counter> - <Counter worker="14">5366660</Counter> - <Counter worker="15">5366640</Counter> - <Counter worker="16">5562960</Counter> - <Counter worker="17">5562974</Counter> - <Counter worker="18">5562969</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="20"> - <Counter worker="0">5328365</Counter> - <Counter worker="1">5328690</Counter> - <Counter worker="2">5328769</Counter> - <Counter worker="3">5328750</Counter> - <Counter worker="4">5328811</Counter> - <Counter worker="5">5328819</Counter> - <Counter worker="6">5328761</Counter> - <Counter worker="7">5328804</Counter> - <Counter worker="8">5352530</Counter> - <Counter worker="9">5352507</Counter> - <Counter worker="10">5352517</Counter> - <Counter worker="11">5352526</Counter> - <Counter worker="12">5352478</Counter> - <Counter worker="13">5352481</Counter> - <Counter worker="14">5352540</Counter> - <Counter worker="15">5352508</Counter> - <Counter worker="16">5542382</Counter> - <Counter worker="17">5542457</Counter> - <Counter worker="18">5542429</Counter> - <Counter worker="19">5542397</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="21"> - <Counter worker="0">5355821</Counter> - <Counter worker="1">5356186</Counter> - <Counter worker="2">5356298</Counter> - <Counter worker="3">5356259</Counter> - <Counter worker="4">5356261</Counter> - <Counter worker="5">5356320</Counter> - <Counter worker="6">5356247</Counter> - <Counter worker="7">5356272</Counter> - <Counter worker="8">5376396</Counter> - <Counter worker="9">5376387</Counter> - <Counter worker="10">5376323</Counter> - <Counter worker="11">5376368</Counter> - <Counter worker="12">5376339</Counter> - <Counter worker="13">5376330</Counter> - <Counter worker="14">5376387</Counter> - <Counter worker="15">5376365</Counter> - <Counter worker="16">5547253</Counter> - <Counter worker="17">5547266</Counter> - <Counter worker="18">5547315</Counter> - <Counter worker="19">5547267</Counter> - <Counter worker="20">5547295</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="22"> - <Counter worker="0">5340616</Counter> - <Counter worker="1">5340986</Counter> - <Counter worker="2">5341028</Counter> - <Counter worker="3">5341065</Counter> - <Counter worker="4">5341078</Counter> - <Counter worker="5">5341079</Counter> - <Counter worker="6">5341007</Counter> - <Counter worker="7">5341038</Counter> - <Counter worker="8">5359566</Counter> - <Counter worker="9">5359570</Counter> - <Counter worker="10">5359478</Counter> - <Counter worker="11">5359502</Counter> - <Counter worker="12">5359496</Counter> - <Counter worker="13">5359527</Counter> - <Counter worker="14">5359536</Counter> - <Counter worker="15">5359526</Counter> - <Counter worker="16">5498507</Counter> - <Counter worker="17">5498494</Counter> - <Counter worker="18">5498532</Counter> - <Counter worker="19">5498493</Counter> - <Counter worker="20">5498503</Counter> - <Counter worker="21">5498516</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="23"> - <Counter worker="0">5305895</Counter> - <Counter worker="1">5306236</Counter> - <Counter worker="2">5306305</Counter> - <Counter worker="3">5306345</Counter> - <Counter worker="4">5306344</Counter> - <Counter worker="5">5306361</Counter> - <Counter worker="6">5306301</Counter> - <Counter worker="7">5306340</Counter> - <Counter worker="8">5339859</Counter> - <Counter worker="9">5339855</Counter> - <Counter worker="10">5339822</Counter> - <Counter worker="11">5339853</Counter> - <Counter worker="12">5339853</Counter> - <Counter worker="13">5339851</Counter> - <Counter worker="14">5339883</Counter> - <Counter worker="15">5339826</Counter> - <Counter worker="16">5444298</Counter> - <Counter worker="17">5444322</Counter> - <Counter worker="18">5444263</Counter> - <Counter worker="19">5444218</Counter> - <Counter worker="20">5444333</Counter> - <Counter worker="21">5444339</Counter> - <Counter worker="22">5444294</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexInherit activeWorker="24"> - <Counter worker="0">5344687</Counter> - <Counter worker="1">5345037</Counter> - <Counter worker="2">5345099</Counter> - <Counter worker="3">5345114</Counter> - <Counter worker="4">5345124</Counter> - <Counter worker="5">5345129</Counter> - <Counter worker="6">5345111</Counter> - <Counter worker="7">5345126</Counter> - <Counter worker="8">5366163</Counter> - <Counter worker="9">5366157</Counter> - <Counter worker="10">5366132</Counter> - <Counter worker="11">5366143</Counter> - <Counter worker="12">5366131</Counter> - <Counter worker="13">5366096</Counter> - <Counter worker="14">5366169</Counter> - <Counter worker="15">5366118</Counter> - <Counter worker="16">5420792</Counter> - <Counter worker="17">5420837</Counter> - <Counter worker="18">5420864</Counter> - <Counter worker="19">5420785</Counter> - <Counter worker="20">5420835</Counter> - <Counter worker="21">5420827</Counter> - <Counter worker="22">5420737</Counter> - <Counter worker="23">5420793</Counter> - </ManyPthreadMutexInherit> - <ManyPthreadMutexProtect activeWorker="1"> - <Counter worker="0">804850</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="2"> - <Counter worker="0">736889</Counter> - <Counter worker="1">736932</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="3"> - <Counter worker="0">677059</Counter> - <Counter worker="1">677102</Counter> - <Counter worker="2">677109</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="4"> - <Counter worker="0">511022</Counter> - <Counter worker="1">511064</Counter> - <Counter worker="2">511070</Counter> - <Counter worker="3">511071</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="5"> - <Counter worker="0">403704</Counter> - <Counter worker="1">403746</Counter> - <Counter worker="2">403747</Counter> - <Counter worker="3">403747</Counter> - <Counter worker="4">403752</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="6"> - <Counter worker="0">329360</Counter> - <Counter worker="1">329396</Counter> - <Counter worker="2">329402</Counter> - <Counter worker="3">329404</Counter> - <Counter worker="4">329401</Counter> - <Counter worker="5">329405</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="7"> - <Counter worker="0">271830</Counter> - <Counter worker="1">271865</Counter> - <Counter worker="2">271870</Counter> - <Counter worker="3">271871</Counter> - <Counter worker="4">271871</Counter> - <Counter worker="5">271874</Counter> - <Counter worker="6">271880</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="8"> - <Counter worker="0">234106</Counter> - <Counter worker="1">234135</Counter> - <Counter worker="2">234147</Counter> - <Counter worker="3">234143</Counter> - <Counter worker="4">234145</Counter> - <Counter worker="5">234144</Counter> - <Counter worker="6">234144</Counter> - <Counter worker="7">234145</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="9"> - <Counter worker="0">108890</Counter> - <Counter worker="1">108899</Counter> - <Counter worker="2">108898</Counter> - <Counter worker="3">108897</Counter> - <Counter worker="4">108898</Counter> - <Counter worker="5">108898</Counter> - <Counter worker="6">108898</Counter> - <Counter worker="7">108896</Counter> - <Counter worker="8">108892</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="10"> - <Counter worker="0">93131</Counter> - <Counter worker="1">93136</Counter> - <Counter worker="2">93135</Counter> - <Counter worker="3">93136</Counter> - <Counter worker="4">93136</Counter> - <Counter worker="5">93136</Counter> - <Counter worker="6">93136</Counter> - <Counter worker="7">93136</Counter> - <Counter worker="8">93134</Counter> - <Counter worker="9">93135</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="11"> - <Counter worker="0">79836</Counter> - <Counter worker="1">79839</Counter> - <Counter worker="2">79840</Counter> - <Counter worker="3">79840</Counter> - <Counter worker="4">79841</Counter> - <Counter worker="5">79840</Counter> - <Counter worker="6">79840</Counter> - <Counter worker="7">79840</Counter> - <Counter worker="8">79839</Counter> - <Counter worker="9">79839</Counter> - <Counter worker="10">79839</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="12"> - <Counter worker="0">70922</Counter> - <Counter worker="1">70924</Counter> - <Counter worker="2">70924</Counter> - <Counter worker="3">70924</Counter> - <Counter worker="4">70924</Counter> - <Counter worker="5">70924</Counter> - <Counter worker="6">70923</Counter> - <Counter worker="7">70924</Counter> - <Counter worker="8">70924</Counter> - <Counter worker="9">70924</Counter> - <Counter worker="10">70924</Counter> - <Counter worker="11">70924</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="13"> - <Counter worker="0">59848</Counter> - <Counter worker="1">59850</Counter> - <Counter worker="2">59850</Counter> - <Counter worker="3">59850</Counter> - <Counter worker="4">59850</Counter> - <Counter worker="5">59850</Counter> - <Counter worker="6">59850</Counter> - <Counter worker="7">59850</Counter> - <Counter worker="8">59850</Counter> - <Counter worker="9">59850</Counter> - <Counter worker="10">59850</Counter> - <Counter worker="11">59850</Counter> - <Counter worker="12">59850</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="14"> - <Counter worker="0">56173</Counter> - <Counter worker="1">56175</Counter> - <Counter worker="2">56175</Counter> - <Counter worker="3">56175</Counter> - <Counter worker="4">56175</Counter> - <Counter worker="5">56175</Counter> - <Counter worker="6">56175</Counter> - <Counter worker="7">56175</Counter> - <Counter worker="8">56175</Counter> - <Counter worker="9">56175</Counter> - <Counter worker="10">56175</Counter> - <Counter worker="11">56175</Counter> - <Counter worker="12">56175</Counter> - <Counter worker="13">56175</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="15"> - <Counter worker="0">51032</Counter> - <Counter worker="1">51034</Counter> - <Counter worker="2">51034</Counter> - <Counter worker="3">51034</Counter> - <Counter worker="4">51034</Counter> - <Counter worker="5">51034</Counter> - <Counter worker="6">51034</Counter> - <Counter worker="7">51034</Counter> - <Counter worker="8">51034</Counter> - <Counter worker="9">51034</Counter> - <Counter worker="10">51034</Counter> - <Counter worker="11">51034</Counter> - <Counter worker="12">51034</Counter> - <Counter worker="13">51034</Counter> - <Counter worker="14">51034</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="16"> - <Counter worker="0">48695</Counter> - <Counter worker="1">48696</Counter> - <Counter worker="2">48696</Counter> - <Counter worker="3">48696</Counter> - <Counter worker="4">48696</Counter> - <Counter worker="5">48696</Counter> - <Counter worker="6">48696</Counter> - <Counter worker="7">48696</Counter> - <Counter worker="8">48696</Counter> - <Counter worker="9">48696</Counter> - <Counter worker="10">48696</Counter> - <Counter worker="11">48696</Counter> - <Counter worker="12">48695</Counter> - <Counter worker="13">48696</Counter> - <Counter worker="14">48696</Counter> - <Counter worker="15">48695</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="17"> - <Counter worker="0">43536</Counter> - <Counter worker="1">43537</Counter> - <Counter worker="2">43537</Counter> - <Counter worker="3">43537</Counter> - <Counter worker="4">43537</Counter> - <Counter worker="5">43537</Counter> - <Counter worker="6">43537</Counter> - <Counter worker="7">43537</Counter> - <Counter worker="8">43537</Counter> - <Counter worker="9">43537</Counter> - <Counter worker="10">43537</Counter> - <Counter worker="11">43537</Counter> - <Counter worker="12">43537</Counter> - <Counter worker="13">43537</Counter> - <Counter worker="14">43537</Counter> - <Counter worker="15">43537</Counter> - <Counter worker="16">43536</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="18"> - <Counter worker="0">38780</Counter> - <Counter worker="1">38781</Counter> - <Counter worker="2">38781</Counter> - <Counter worker="3">38781</Counter> - <Counter worker="4">38781</Counter> - <Counter worker="5">38781</Counter> - <Counter worker="6">38781</Counter> - <Counter worker="7">38781</Counter> - <Counter worker="8">38781</Counter> - <Counter worker="9">38781</Counter> - <Counter worker="10">38781</Counter> - <Counter worker="11">38781</Counter> - <Counter worker="12">38781</Counter> - <Counter worker="13">38781</Counter> - <Counter worker="14">38780</Counter> - <Counter worker="15">38781</Counter> - <Counter worker="16">38781</Counter> - <Counter worker="17">38781</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="19"> - <Counter worker="0">35997</Counter> - <Counter worker="1">35997</Counter> - <Counter worker="2">35997</Counter> - <Counter worker="3">35997</Counter> - <Counter worker="4">35997</Counter> - <Counter worker="5">35997</Counter> - <Counter worker="6">35998</Counter> - <Counter worker="7">35997</Counter> - <Counter worker="8">35997</Counter> - <Counter worker="9">35997</Counter> - <Counter worker="10">35997</Counter> - <Counter worker="11">35997</Counter> - <Counter worker="12">35997</Counter> - <Counter worker="13">35997</Counter> - <Counter worker="14">35997</Counter> - <Counter worker="15">35997</Counter> - <Counter worker="16">35997</Counter> - <Counter worker="17">35998</Counter> - <Counter worker="18">35997</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="20"> - <Counter worker="0">36332</Counter> - <Counter worker="1">36333</Counter> - <Counter worker="2">36333</Counter> - <Counter worker="3">36332</Counter> - <Counter worker="4">36333</Counter> - <Counter worker="5">36332</Counter> - <Counter worker="6">36333</Counter> - <Counter worker="7">36332</Counter> - <Counter worker="8">36332</Counter> - <Counter worker="9">36333</Counter> - <Counter worker="10">36332</Counter> - <Counter worker="11">36332</Counter> - <Counter worker="12">36332</Counter> - <Counter worker="13">36333</Counter> - <Counter worker="14">36332</Counter> - <Counter worker="15">36332</Counter> - <Counter worker="16">36332</Counter> - <Counter worker="17">36333</Counter> - <Counter worker="18">36332</Counter> - <Counter worker="19">36332</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="21"> - <Counter worker="0">33208</Counter> - <Counter worker="1">33209</Counter> - <Counter worker="2">33209</Counter> - <Counter worker="3">33209</Counter> - <Counter worker="4">33208</Counter> - <Counter worker="5">33208</Counter> - <Counter worker="6">33209</Counter> - <Counter worker="7">33208</Counter> - <Counter worker="8">33208</Counter> - <Counter worker="9">33208</Counter> - <Counter worker="10">33208</Counter> - <Counter worker="11">33208</Counter> - <Counter worker="12">33209</Counter> - <Counter worker="13">33209</Counter> - <Counter worker="14">33208</Counter> - <Counter worker="15">33208</Counter> - <Counter worker="16">33208</Counter> - <Counter worker="17">33208</Counter> - <Counter worker="18">33209</Counter> - <Counter worker="19">33208</Counter> - <Counter worker="20">33208</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="22"> - <Counter worker="0">31798</Counter> - <Counter worker="1">31798</Counter> - <Counter worker="2">31799</Counter> - <Counter worker="3">31799</Counter> - <Counter worker="4">31798</Counter> - <Counter worker="5">31799</Counter> - <Counter worker="6">31798</Counter> - <Counter worker="7">31799</Counter> - <Counter worker="8">31799</Counter> - <Counter worker="9">31799</Counter> - <Counter worker="10">31798</Counter> - <Counter worker="11">31799</Counter> - <Counter worker="12">31799</Counter> - <Counter worker="13">31798</Counter> - <Counter worker="14">31799</Counter> - <Counter worker="15">31799</Counter> - <Counter worker="16">31799</Counter> - <Counter worker="17">31799</Counter> - <Counter worker="18">31799</Counter> - <Counter worker="19">31799</Counter> - <Counter worker="20">31799</Counter> - <Counter worker="21">31799</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="23"> - <Counter worker="0">29626</Counter> - <Counter worker="1">29627</Counter> - <Counter worker="2">29627</Counter> - <Counter worker="3">29627</Counter> - <Counter worker="4">29627</Counter> - <Counter worker="5">29627</Counter> - <Counter worker="6">29627</Counter> - <Counter worker="7">29627</Counter> - <Counter worker="8">29627</Counter> - <Counter worker="9">29627</Counter> - <Counter worker="10">29627</Counter> - <Counter worker="11">29627</Counter> - <Counter worker="12">29627</Counter> - <Counter worker="13">29627</Counter> - <Counter worker="14">29627</Counter> - <Counter worker="15">29627</Counter> - <Counter worker="16">29627</Counter> - <Counter worker="17">29627</Counter> - <Counter worker="18">29627</Counter> - <Counter worker="19">29627</Counter> - <Counter worker="20">29627</Counter> - <Counter worker="21">29627</Counter> - <Counter worker="22">29627</Counter> - </ManyPthreadMutexProtect> - <ManyPthreadMutexProtect activeWorker="24"> - <Counter worker="0">28079</Counter> - <Counter worker="1">28079</Counter> - <Counter worker="2">28079</Counter> - <Counter worker="3">28079</Counter> - <Counter worker="4">28079</Counter> - <Counter worker="5">28079</Counter> - <Counter worker="6">28079</Counter> - <Counter worker="7">28079</Counter> - <Counter worker="8">28079</Counter> - <Counter worker="9">28079</Counter> - <Counter worker="10">28079</Counter> - <Counter worker="11">28079</Counter> - <Counter worker="12">28079</Counter> - <Counter worker="13">28079</Counter> - <Counter worker="14">28079</Counter> - <Counter worker="15">28079</Counter> - <Counter worker="16">28079</Counter> - <Counter worker="17">28079</Counter> - <Counter worker="18">28079</Counter> - <Counter worker="19">28080</Counter> - <Counter worker="20">28080</Counter> - <Counter worker="21">28080</Counter> - <Counter worker="22">28079</Counter> - <Counter worker="23">28079</Counter> - </ManyPthreadMutexProtect> -</TestTimeFine01> +*** TEST VERSION: 6.0.0.4bca4100fc4f184b6638165675095808f109546a +*** TEST STATE: EXPECTED_PASS +*** TEST BUILD: RTEMS_SMP +*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448) +*** BEGIN OF JSON DATA *** +[ + { + "type": "event", + "description": "Send Event to Self", + "counter": [ + [172991], + [173266, 168815], + [173282, 168785, 168831], + [173276, 168779, 168779, 172240] + ] + }, { + "type": "event", + "description": "Send Event to One", + "counter": [ + [172666], + [172666, 320222], + [172682, 304636, 304639], + [172676, 304626, 320241, 312574] + ] + }, { + "type": "contested-mutex", + "description": "Obtain/Release Contested Classic Inheritance Mutex", + "counter": [ + [159961], + [12149, 12148], + [7529, 7529, 7528], + [5671, 5671, 5671, 5670] + ] + }, { + "type": "message", + "description": "Send Message to Self", + "counter": [ + [94498], + [94506, 94612], + [94516, 94622, 94622], + [94513, 94620, 94619, 94615] + ] + }, { + "type": "message", + "description": "Send Message to One Receiver", + "counter": [ + [94155], + [105077, 210425], + [91113, 182522, 182535], + [74015, 148307, 148308, 148292] + ] + }, { + "type": "private-mutex", + "description": "Obtain/Release Private Pthread Spinlock", + "counter": [ + [648144], + [648120, 648744], + [648207, 648831, 648831], + [648183, 648808, 648808, 648779] + ] + }, { + "type": "private-mutex", + "description": "Obtain/Release Private <sys/lock.h> Mutex", + "counter": [ + [317884], + [317869, 318174], + [317912, 318217, 318217], + [317901, 318206, 318206, 318193] + ] + }, { + "type": "private-mutex", + "description": "Obtain/Release Private Pthread Inheritance Mutex", + "counter": [ + [219857], + [219843, 220056], + [219877, 220089, 220089], + [219868, 220080, 220081, 220066] + ] + }, { + "type": "private-mutex", + "description": "Obtain/Release Private Classic Inheritance Mutex", + "counter": [ + [159957], + [159867, 160095], + [159923, 160107, 160107], + [159941, 160133, 160078, 160075] + ] + }, { + "type": "private-mutex", + "description": "Obtain/Release Private Pthread Ceiling Mutex", + "counter": [ + [28740], + [27948, 27993], + [26941, 26973, 26973], + [21414, 21439, 21439, 21439] + ] + }, { + "type": "private-mutex", + "description": "Obtain/Release Private Classic Ceiling Mutex", + "counter": [ + [27399], + [26819, 26841], + [26253, 26282, 26282], + [21187, 21215, 21214, 21214] + ] + }, { + "type": "private-mutex", + "description": "Obtain/Release Private Classic MrsP Mutex", + "counter": [ + [26696], + [26074, 26074], + [24738, 24770, 24769], + [18947, 18970, 18970, 18968] + ] + } +] +*** END OF JSON DATA *** + *** END OF TEST TMFINE 1 *** + +cpu 1 in error mode (tt = 0x80) + 2400642150 0000d760: 91d02000 ta 0x0 diff --git a/testsuites/tmtests/tmonetoone/init.c b/testsuites/tmtests/tmonetoone/init.c index 9c8af786db..b4f63a604f 100644 --- a/testsuites/tmtests/tmonetoone/init.c +++ b/testsuites/tmtests/tmonetoone/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2018 embedded brains GmbH. All rights reserved. + * Copyright (c) 2018 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/tmtests/tmtimer01/init.c b/testsuites/tmtests/tmtimer01/init.c index 0c8ac3d2de..1a37b5192c 100644 --- a/testsuites/tmtests/tmtimer01/init.c +++ b/testsuites/tmtests/tmtimer01/init.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-2-Clause */ /* - * Copyright (c) 2016 embedded brains GmbH. All rights reserved. + * Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -108,13 +108,14 @@ static void test_fire_and_cancel( rtems_test_assert(sc2 == RTEMS_SUCCESSFUL); printf( - "<%s unit=\"ns\">%" PRIu64 "</%s>", + ",\n \"%s\": %" PRIu64, name, - rtems_counter_ticks_to_nanoseconds(d), - name + rtems_counter_ticks_to_nanoseconds(d) ); } +static const char *sep = "\n "; + static void test_case(test_context *ctx, size_t j, size_t k) { rtems_status_code sc; @@ -130,13 +131,17 @@ static void test_case(test_context *ctx, size_t j, size_t k) rtems_test_assert(sc == RTEMS_SUCCESSFUL); } - printf(" <Sample>\n <ActiveTimers>%zu</ActiveTimers>", j); - - test_fire_and_cancel(ctx, j, 0, "First"); - test_fire_and_cancel(ctx, j, j / 2, "Middle"); - test_fire_and_cancel(ctx, j, j + 1, "Last"); + printf( + "%s{\n" + " \"active-timers\": %zu", + sep, + j + ); + sep = "\n }, "; - printf("\n </Sample>\n"); + test_fire_and_cancel(ctx, j, 0, "first"); + test_fire_and_cancel(ctx, j, j / 2, "middle"); + test_fire_and_cancel(ctx, j, j + 1, "last"); } static void test(void) @@ -181,7 +186,13 @@ static void test(void) timer_count = n; } - printf("<TMTimer01 timerCount=\"%zu\">\n", timer_count); + printf( + "*** BEGIN OF JSON DATA ***\n" + "{\n" + " \"timer-count\": %zu,\n" + " \"samples\": [", + timer_count + ); k = 0; j = 0; @@ -194,7 +205,7 @@ static void test(void) test_case(ctx, n - 2, k); - printf("</TMTimer01>\n"); + printf("\n }\n ]\n}\n*** END OF JSON DATA ***\n"); } static void Init(rtems_task_argument arg) diff --git a/testsuites/tmtests/tmtimer01/plot.py b/testsuites/tmtests/tmtimer01/plot.py index c0738ef70d..73654c5b9d 100644 --- a/testsuites/tmtests/tmtimer01/plot.py +++ b/testsuites/tmtests/tmtimer01/plot.py @@ -1,7 +1,6 @@ # SPDX-License-Identifier: BSD-2-Clause -# -# Copyright (c) 2016 embedded brains GmbH. All rights reserved. +# Copyright (C) 2016, 2024 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -23,22 +22,35 @@ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -# -import libxml2 -from libxml2 import xmlNode -import matplotlib.pyplot as plt -doc = libxml2.parseFile('tmtimer01.scn') -ctx = doc.xpathNewContext() - -plt.title('timer test') -plt.xscale('log') -plt.xlabel('active timers') -plt.ylabel('timer fire and cancel [ns]') - -x = map(xmlNode.getContent, ctx.xpathEval('/TMTimer01/Sample/ActiveTimers')) -for i in ['First', 'Middle', 'Last']: - y = map(xmlNode.getContent, ctx.xpathEval('/TMTimer01/Sample/' + i)) - plt.plot(x, y, label = i) -plt.legend(loc = 'best') -plt.show() +import json +import re +import matplotlib.pyplot as plt # type: ignore +from matplotlib import ticker # type: ignore + + +def _plot(data: dict) -> None: + _, axes = plt.subplots() + axes.set_title("Timer Fire and Cancel Timing Test") + axes.set_xlabel("Active Timers") + axes.set_xscale("log") + axes.set_ylabel("Timer Fire and Cancel Duration [μs]") + x = [sample["active-timers"] for sample in data["samples"]] + for key in ["first", "middle", "last"]: + y = [sample[key] / 1000.0 for sample in data["samples"]] + axes.plot(x, y, label=f"operate on {key} timer", marker='o') + axes.legend(loc='best') + plt.savefig("tmtimer01.png") + plt.savefig("tmtimer01.pdf") + plt.close() + + +_JSON_DATA = re.compile( + r"\*\*\* BEGIN OF JSON DATA \*\*\*(.*)" + r"\*\*\* END OF JSON DATA \*\*\*", re.DOTALL) + +with open("tmtimer01.scn", "r", encoding="utf-8") as src: + match = _JSON_DATA.search(src.read()) + data = json.loads(match.group(1)) + +_plot(data) diff --git a/testsuites/tmtests/tmtimer01/tmtimer01.scn b/testsuites/tmtests/tmtimer01/tmtimer01.scn index db3ca01d27..b278c75177 100644 --- a/testsuites/tmtests/tmtimer01/tmtimer01.scn +++ b/testsuites/tmtests/tmtimer01/tmtimer01.scn @@ -1,137 +1,252 @@ -<TMTimer01 timerCount="65504"> - <Sample> - <ActiveTimers>0</ActiveTimers><First unit="ns">8812</First><Middle unit="ns">1412</Middle><Last unit="ns">917</Last> - </Sample> - <Sample> - <ActiveTimers>2</ActiveTimers><First unit="ns">1602</First><Middle unit="ns">1010</Middle><Last unit="ns">1367</Last> - </Sample> - <Sample> - <ActiveTimers>4</ActiveTimers><First unit="ns">1524</First><Middle unit="ns">1089</Middle><Last unit="ns">1086</Last> - </Sample> - <Sample> - <ActiveTimers>7</ActiveTimers><First unit="ns">1791</First><Middle unit="ns">1121</Middle><Last unit="ns">1838</Last> - </Sample> - <Sample> - <ActiveTimers>10</ActiveTimers><First unit="ns">1488</First><Middle unit="ns">1016</Middle><Last unit="ns">2134</Last> - </Sample> - <Sample> - <ActiveTimers>14</ActiveTimers><First unit="ns">1527</First><Middle unit="ns">1698</Middle><Last unit="ns">3186</Last> - </Sample> - <Sample> - <ActiveTimers>19</ActiveTimers><First unit="ns">2078</First><Middle unit="ns">1665</Middle><Last unit="ns">3397</Last> - </Sample> - <Sample> - <ActiveTimers>25</ActiveTimers><First unit="ns">1519</First><Middle unit="ns">2368</Middle><Last unit="ns">4464</Last> - </Sample> - <Sample> - <ActiveTimers>32</ActiveTimers><First unit="ns">1243</First><Middle unit="ns">2623</Middle><Last unit="ns">3549</Last> - </Sample> - <Sample> - <ActiveTimers>41</ActiveTimers><First unit="ns">2368</First><Middle unit="ns">2578</Middle><Last unit="ns">4105</Last> - </Sample> - <Sample> - <ActiveTimers>52</ActiveTimers><First unit="ns">2322</First><Middle unit="ns">2563</Middle><Last unit="ns">4126</Last> - </Sample> - <Sample> - <ActiveTimers>66</ActiveTimers><First unit="ns">2499</First><Middle unit="ns">1855</Middle><Last unit="ns">4919</Last> - </Sample> - <Sample> - <ActiveTimers>83</ActiveTimers><First unit="ns">1689</First><Middle unit="ns">3128</Middle><Last unit="ns">5894</Last> - </Sample> - <Sample> - <ActiveTimers>104</ActiveTimers><First unit="ns">2301</First><Middle unit="ns">2647</Middle><Last unit="ns">4595</Last> - </Sample> - <Sample> - <ActiveTimers>130</ActiveTimers><First unit="ns">2880</First><Middle unit="ns">3183</Middle><Last unit="ns">6222</Last> - </Sample> - <Sample> - <ActiveTimers>162</ActiveTimers><First unit="ns">2597</First><Middle unit="ns">2376</Middle><Last unit="ns">7118</Last> - </Sample> - <Sample> - <ActiveTimers>201</ActiveTimers><First unit="ns">3519</First><Middle unit="ns">3466</Middle><Last unit="ns">6673</Last> - </Sample> - <Sample> - <ActiveTimers>249</ActiveTimers><First unit="ns">2829</First><Middle unit="ns">3177</Middle><Last unit="ns">7784</Last> - </Sample> - <Sample> - <ActiveTimers>308</ActiveTimers><First unit="ns">2614</First><Middle unit="ns">3396</Middle><Last unit="ns">7338</Last> - </Sample> - <Sample> - <ActiveTimers>381</ActiveTimers><First unit="ns">3454</First><Middle unit="ns">4888</Middle><Last unit="ns">9114</Last> - </Sample> - <Sample> - <ActiveTimers>470</ActiveTimers><First unit="ns">3397</First><Middle unit="ns">2443</Middle><Last unit="ns">7689</Last> - </Sample> - <Sample> - <ActiveTimers>580</ActiveTimers><First unit="ns">2233</First><Middle unit="ns">4410</Middle><Last unit="ns">9355</Last> - </Sample> - <Sample> - <ActiveTimers>715</ActiveTimers><First unit="ns">3787</First><Middle unit="ns">5891</Middle><Last unit="ns">6833</Last> - </Sample> - <Sample> - <ActiveTimers>881</ActiveTimers><First unit="ns">3839</First><Middle unit="ns">5089</Middle><Last unit="ns">9232</Last> - </Sample> - <Sample> - <ActiveTimers>1085</ActiveTimers><First unit="ns">2838</First><Middle unit="ns">2739</Middle><Last unit="ns">11575</Last> - </Sample> - <Sample> - <ActiveTimers>1336</ActiveTimers><First unit="ns">3256</First><Middle unit="ns">5011</Middle><Last unit="ns">9684</Last> - </Sample> - <Sample> - <ActiveTimers>1645</ActiveTimers><First unit="ns">2293</First><Middle unit="ns">5262</Middle><Last unit="ns">10183</Last> - </Sample> - <Sample> - <ActiveTimers>2025</ActiveTimers><First unit="ns">4436</First><Middle unit="ns">5934</Middle><Last unit="ns">8804</Last> - </Sample> - <Sample> - <ActiveTimers>2492</ActiveTimers><First unit="ns">4506</First><Middle unit="ns">7284</Middle><Last unit="ns">10389</Last> - </Sample> - <Sample> - <ActiveTimers>3067</ActiveTimers><First unit="ns">3832</First><Middle unit="ns">4990</Middle><Last unit="ns">9536</Last> - </Sample> - <Sample> - <ActiveTimers>3774</ActiveTimers><First unit="ns">5088</First><Middle unit="ns">4888</Middle><Last unit="ns">9633</Last> - </Sample> - <Sample> - <ActiveTimers>4644</ActiveTimers><First unit="ns">5590</First><Middle unit="ns">5749</Middle><Last unit="ns">8975</Last> - </Sample> - <Sample> - <ActiveTimers>5714</ActiveTimers><First unit="ns">4854</First><Middle unit="ns">6813</Middle><Last unit="ns">11603</Last> - </Sample> - <Sample> - <ActiveTimers>7030</ActiveTimers><First unit="ns">6139</First><Middle unit="ns">6132</Middle><Last unit="ns">12630</Last> - </Sample> - <Sample> - <ActiveTimers>8649</ActiveTimers><First unit="ns">6877</First><Middle unit="ns">3852</Middle><Last unit="ns">10973</Last> - </Sample> - <Sample> - <ActiveTimers>10640</ActiveTimers><First unit="ns">6532</First><Middle unit="ns">6097</Middle><Last unit="ns">11725</Last> - </Sample> - <Sample> - <ActiveTimers>13089</ActiveTimers><First unit="ns">5284</First><Middle unit="ns">5392</Middle><Last unit="ns">13246</Last> - </Sample> - <Sample> - <ActiveTimers>16101</ActiveTimers><First unit="ns">7077</First><Middle unit="ns">7572</Middle><Last unit="ns">14820</Last> - </Sample> - <Sample> - <ActiveTimers>19806</ActiveTimers><First unit="ns">7132</First><Middle unit="ns">8335</Middle><Last unit="ns">11668</Last> - </Sample> - <Sample> - <ActiveTimers>24363</ActiveTimers><First unit="ns">8676</First><Middle unit="ns">7919</Middle><Last unit="ns">13937</Last> - </Sample> - <Sample> - <ActiveTimers>29968</ActiveTimers><First unit="ns">5970</First><Middle unit="ns">10978</Middle><Last unit="ns">16035</Last> - </Sample> - <Sample> - <ActiveTimers>36862</ActiveTimers><First unit="ns">8804</First><Middle unit="ns">8767</Middle><Last unit="ns">13089</Last> - </Sample> - <Sample> - <ActiveTimers>45342</ActiveTimers><First unit="ns">8608</First><Middle unit="ns">10305</Middle><Last unit="ns">15709</Last> - </Sample> - <Sample> - <ActiveTimers>55772</ActiveTimers><First unit="ns">8949</First><Middle unit="ns">10031</Middle><Last unit="ns">16262</Last> - </Sample> - <Sample> - <ActiveTimers>65503</ActiveTimers><First unit="ns">9199</First><Middle unit="ns">10309</Middle><Last unit="ns">19090</Last> - </Sample> -</TMTimer01> + + SIS - SPARC/RISCV instruction simulator 2.30, copyright Jiri Gaisler 2020 + Bug-reports to jiri@gaisler.se + + GR740/LEON4 emulation enabled, 4 cpus online, delta 50 clocks + + Loaded build/sparc/gr740/testsuites/tmtests/tmtimer01.exe, entry 0x00000000 + + +*** BEGIN OF TEST TMTIMER 1 *** +*** TEST VERSION: 6.0.0.76c91ee7793fc70b92e2f87e601c3fdc2d2b7f3f +*** TEST STATE: EXPECTED_PASS +*** TEST BUILD: RTEMS_SMP +*** TEST TOOLS: 13.2.0 20230727 (RTEMS 6, RSB d3d738c35a71ca05f675b188539225099401ac79, Newlib a021448) +*** BEGIN OF JSON DATA *** +{ + "timer-count": 61024, + "samples": [ + { + "active-timers": 0, + "first": 8560, + "middle": 8600, + "last": 8520 + }, { + "active-timers": 2, + "first": 9020, + "middle": 11680, + "last": 8860 + }, { + "active-timers": 4, + "first": 9480, + "middle": 9440, + "last": 11060 + }, { + "active-timers": 7, + "first": 9360, + "middle": 9820, + "last": 12300 + }, { + "active-timers": 10, + "first": 9860, + "middle": 9580, + "last": 11980 + }, { + "active-timers": 14, + "first": 9860, + "middle": 10040, + "last": 12280 + }, { + "active-timers": 19, + "first": 10360, + "middle": 10080, + "last": 13260 + }, { + "active-timers": 25, + "first": 10360, + "middle": 10500, + "last": 14460 + }, { + "active-timers": 32, + "first": 10240, + "middle": 10620, + "last": 13040 + }, { + "active-timers": 41, + "first": 10820, + "middle": 10540, + "last": 15000 + }, { + "active-timers": 52, + "first": 10740, + "middle": 10880, + "last": 13660 + }, { + "active-timers": 66, + "first": 10820, + "middle": 10880, + "last": 13960 + }, { + "active-timers": 83, + "first": 11160, + "middle": 11040, + "last": 14940 + }, { + "active-timers": 104, + "first": 11160, + "middle": 11420, + "last": 14340 + }, { + "active-timers": 130, + "first": 11160, + "middle": 11300, + "last": 14720 + }, { + "active-timers": 162, + "first": 11460, + "middle": 11380, + "last": 14880 + }, { + "active-timers": 201, + "first": 11500, + "middle": 11880, + "last": 17060 + }, { + "active-timers": 249, + "first": 11580, + "middle": 11800, + "last": 16900 + }, { + "active-timers": 308, + "first": 11380, + "middle": 12060, + "last": 15640 + }, { + "active-timers": 381, + "first": 11760, + "middle": 11840, + "last": 19800 + }, { + "active-timers": 470, + "first": 11880, + "middle": 12180, + "last": 16100 + }, { + "active-timers": 580, + "first": 11760, + "middle": 12600, + "last": 16560 + }, { + "active-timers": 715, + "first": 12140, + "middle": 12220, + "last": 17380 + }, { + "active-timers": 881, + "first": 12260, + "middle": 12640, + "last": 18740 + }, { + "active-timers": 1085, + "first": 12140, + "middle": 12560, + "last": 22320 + }, { + "active-timers": 1336, + "first": 12720, + "middle": 12600, + "last": 17240 + }, { + "active-timers": 1645, + "first": 12560, + "middle": 13020, + "last": 21140 + }, { + "active-timers": 2025, + "first": 12720, + "middle": 12980, + "last": 19500 + }, { + "active-timers": 2492, + "first": 12720, + "middle": 13400, + "last": 18160 + }, { + "active-timers": 3067, + "first": 13060, + "middle": 13060, + "last": 19220 + }, { + "active-timers": 3774, + "first": 12980, + "middle": 13560, + "last": 18620 + }, { + "active-timers": 4644, + "first": 13260, + "middle": 13860, + "last": 18920 + }, { + "active-timers": 5714, + "first": 13440, + "middle": 13520, + "last": 18920 + }, { + "active-timers": 7030, + "first": 13440, + "middle": 13900, + "last": 19380 + }, { + "active-timers": 8649, + "first": 13440, + "middle": 13820, + "last": 21640 + }, { + "active-timers": 10640, + "first": 14020, + "middle": 13940, + "last": 19760 + }, { + "active-timers": 13089, + "first": 13940, + "middle": 14160, + "last": 22100 + }, { + "active-timers": 16101, + "first": 13900, + "middle": 14320, + "last": 22680 + }, { + "active-timers": 19806, + "first": 13900, + "middle": 14700, + "last": 20840 + }, { + "active-timers": 24363, + "first": 14360, + "middle": 14320, + "last": 21660 + }, { + "active-timers": 29968, + "first": 14360, + "middle": 14540, + "last": 21300 + }, { + "active-timers": 36862, + "first": 14360, + "middle": 15320, + "last": 21440 + }, { + "active-timers": 45342, + "first": 14580, + "middle": 14700, + "last": 21600 + }, { + "active-timers": 55772, + "first": 14700, + "middle": 15040, + "last": 22060 + }, { + "active-timers": 61023, + "first": 14780, + "middle": 15080, + "last": 22960 + } + ] +} +*** END OF JSON DATA *** + +*** END OF TEST TMTIMER 1 *** + +cpu 0 in error mode (tt = 0x80) + 522750200 00009b40: 91d02000 ta 0x0 diff --git a/testsuites/unit/tc-base64-decode.c b/testsuites/unit/tc-base64-decode.c new file mode 100644 index 0000000000..4b0672d310 --- /dev/null +++ b/testsuites/unit/tc-base64-decode.c @@ -0,0 +1,186 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup TestsuitesUnitNoClock0 + */ + +/* + * Copyright (C) 2023 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <rtems/base64.h> + +#include <rtems/test.h> + +typedef struct { + Base64_Decode_control base; + uint8_t buf[64]; +} test_control; + +static int test_run(test_control* self, const char* payload) { + size_t len = strlen(payload); + + for (size_t i = 0; i < len; ++i) { + int rv = _Base64_Decode(&self->base, payload[i]); + + if (rv != 0) { + return rv; + } + } + + return 0; +} + +static int test_payload(test_control* self, const char* payload) { + memset(self->buf, 0xff, sizeof(self->buf)); + _Base64_Decode_initialize(&self->base, &self->buf[0], sizeof(self->buf)); + return test_run(self, payload); +} + +T_TEST_CASE(IOBase64Decode) { + int rv; + test_control instance; + test_control* self = &instance; + + rv = test_payload(self, "POOL"); + T_eq_int(rv, BASE64_DECODE_SUCCESS); + T_eq_int(self->base.state, BASE64_DECODE_STATE_0); + T_eq_ptr(self->base.target, &self->buf[3]); + const uint8_t expected1[] = {0x3c, 0xe3, 0x8b, 0xff}; + T_eq_mem(&self->buf[0], expected1, sizeof(expected1)); + + rv = test_payload(self, "ABCDEFGH"); + T_eq_int(rv, BASE64_DECODE_SUCCESS); + T_eq_int(self->base.state, BASE64_DECODE_STATE_0); + T_eq_ptr(self->base.target, &self->buf[6]); + const uint8_t expected2[] = {0x00, 0x10, 0x83, 0x10, 0x51, 0x87, 0xff}; + T_eq_mem(&self->buf[0], expected2, sizeof(expected2)); + + /* Non-base64 character results in an error */ + rv = test_payload(self, "PO*OL"); + T_eq_int(rv, BASE64_DECODE_INVALID_INPUT); + T_eq_int(self->base.state, BASE64_DECODE_STATE_2); + T_eq_ptr(self->base.target, &self->buf[1]); + const uint8_t expected3[] = {0x3c}; + T_eq_mem(&self->buf[0], expected3, sizeof(expected3)); + + /* Other non-base64 character results in an error */ + rv = test_payload(self, "PO\x80OL"); + T_eq_int(rv, BASE64_DECODE_INVALID_INPUT); + T_eq_int(self->base.state, BASE64_DECODE_STATE_2); + T_eq_ptr(self->base.target, &self->buf[1]); + T_eq_mem(&self->buf[0], expected3, sizeof(expected3)); + + /* Space characters should be ignored */ + rv = test_payload(self, "P OOL"); + T_eq_int(rv, BASE64_DECODE_SUCCESS); + T_eq_int(self->base.state, BASE64_DECODE_STATE_0); + T_eq_ptr(self->base.target, &self->buf[3]); + const uint8_t expected4[] = {0x3c, 0xe3, 0x8b, 0xff}; + T_eq_mem(&self->buf[0], expected4, sizeof(expected4)); + + /* Handle pad characters */ + rv = test_payload(self, "POOL=="); + T_eq_int(rv, BASE64_DECODE_SUCCESS); + T_eq_int(self->base.state, BASE64_DECODE_STATE_0); + T_eq_ptr(self->base.target, &self->buf[3]); + T_eq_ptr(self->base.target, self->base.target_end); + const uint8_t expected5[] = {0x3c, 0xe3, 0x8b, 0xff}; + T_eq_mem(&self->buf[0], expected5, sizeof(expected5)); + + /* If characters come after pad characters, an error results */ + rv = test_payload(self, "POOL==xy"); + T_eq_int(rv, BASE64_DECODE_OVERFLOW); + T_eq_int(self->base.state, BASE64_DECODE_SUCCESS); + T_eq_ptr(self->base.target, &self->buf[3]); + T_eq_ptr(self->base.target, self->base.target_end); + const uint8_t expected6[] = {0x3c, 0xe3, 0x8b, 0xff}; + T_eq_mem(&self->buf[0], expected6, sizeof(expected6)); + + rv = test_payload(self, "POOLPOOL"); + T_eq_int(rv, BASE64_DECODE_SUCCESS); + T_eq_int(self->base.state, BASE64_DECODE_STATE_0); + T_eq_ptr(self->base.target, &self->buf[6]); + const uint8_t expected7[] = {0x3c, 0xe3, 0x8b, 0x3c, 0xe3, 0x8b, 0xff}; + T_eq_mem(&self->buf[0], expected7, sizeof(expected7)); + + /* + * Test valid payload with series of target sizes. All target sizes + * less than three are invalid for the given payload and will result + * in an error. + */ + const uint8_t expected9[] = {0x3c, 0xe3, 0x8b, 0xff}; + + for (size_t i = 0; i < 4; ++i) { + memset(&self->buf[0], 0xff, sizeof(self->buf)); + _Base64_Decode_initialize(&self->base, &self->buf[0], i); + rv = test_run(self, "POOL"); + + if (i < 3) { + T_eq_int(rv, BASE64_DECODE_OVERFLOW); + T_eq_int(self->base.state, i); + T_ne_ptr(self->base.target, &self->buf[3]); + T_ne_mem(&self->buf[0], expected9, sizeof(expected9)); + } else { + T_eq_int(rv, BASE64_DECODE_SUCCESS); + T_eq_int(self->base.state, BASE64_DECODE_STATE_0); + T_eq_ptr(self->base.target, &self->buf[3]); + T_eq_mem(&self->buf[0], expected9, sizeof(expected9)); + } + } + + /* No overflow in state 1 */ + memset(&self->buf[0], 0xff, sizeof(self->buf)); + _Base64_Decode_initialize(&self->base, &self->buf[0], 1); + rv = test_run(self, "AA"); + T_eq_int(rv, BASE64_DECODE_SUCCESS); + T_eq_int(self->base.state, BASE64_DECODE_STATE_2); + T_eq_ptr(self->base.target, &self->buf[1]); + const uint8_t expected10[] = {0x00, 0xff}; + T_eq_mem(&self->buf[0], expected10, sizeof(expected10)); + + /* No overflow in state 2 */ + memset(&self->buf[0], 0xff, sizeof(self->buf)); + _Base64_Decode_initialize(&self->base, &self->buf[0], 2); + rv = test_run(self, "AAA"); + T_eq_int(rv, BASE64_DECODE_SUCCESS); + T_eq_int(self->base.state, BASE64_DECODE_STATE_3); + T_eq_ptr(self->base.target, &self->buf[2]); + const uint8_t expected11[] = {0x00, 0x00, 0xff}; + T_eq_mem(&self->buf[0], expected11, sizeof(expected11)); +} + +T_TEST_CASE(IOBase64DecodeInitialize) { + Base64_Decode_control instance; + Base64_Decode_control* self = &instance; + uint8_t buf[1]; + + memset(self, 0xff, sizeof(*self)); + _Base64_Decode_initialize(self, buf, sizeof(buf)); + T_eq_int(self->state, BASE64_DECODE_STATE_0); + T_eq_ptr(self->target, &buf[0]); + T_eq_ptr(self->target_end, &buf[1]); +} diff --git a/testsuites/unit/tc-compiler-builtins.c b/testsuites/unit/tc-compiler-builtins.c new file mode 100644 index 0000000000..7a470b6632 --- /dev/null +++ b/testsuites/unit/tc-compiler-builtins.c @@ -0,0 +1,1141 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup CompilerUnitBuiltins + */ + +/* + * Copyright (C) 2023 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <setjmp.h> +#include <stdint.h> + +#include "../validation/tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup CompilerUnitBuiltins spec:/compiler/unit/builtins + * + * @ingroup TestsuitesUnitNoClock0 + * + * @brief These unit tests check compiler builtins. + * + * Explicitly test the 64-bit integer division and modulo operations. They are + * essential for the timekeeping services. On most 32-bit targets, they need a + * software implementation. + * + * This test case performs the following actions: + * + * - Check the return value of __builtin_clz() for a sample set of inputs. + * + * - Check the return value of __builtin_clzll() for a sample set of inputs. + * + * - Check the return value of __builtin_ctz() for a sample set of inputs. + * + * - Check the return value of __builtin_ctzll() for a sample set of inputs. + * + * - Check the return value of __builtin_ffs() for a sample set of inputs. + * + * - Check the return value of __builtin_ffsll() for a sample set of inputs. + * + * - Check the return value of __builtin_parity() for a sample set of inputs. + * + * - Check the return value of __builtin_parityll() for a sample set of inputs. + * + * - Check the return value of __builtin_popcount() for a sample set of inputs. + * + * - Check the return value of __builtin_popcountll() for a sample set of + * inputs. + * + * - Check the return value of __builtin_bswap32() for a sample set of inputs. + * + * - Check the return value of __builtin_bswap64() for a sample set of inputs. + * + * - Check signed 64-bit comparisons for a sample set of values. + * + * - Check unsigned 64-bit comparisons for a sample set of values. + * + * - Check signed 64-bit arithmetic left shift for a sample set of values. + * + * - Check signed 64-bit arithmetic right shift for a sample set of values. + * + * - Check unsigned 64-bit logical right shift for a sample set of values. + * + * - Check signed 64-bit multiplication for a sample set of values. + * + * - Check signed 64-bit negation for a sample set of values. + * + * - Check signed 64-bit divisions for a sample set of values. + * + * - Check unsigned 64-bit divisions for a sample set of values. + * + * - Check signed 64-bit modulo operations for a sample set of values. + * + * - Check unsigned 64-bit modulo operations for a sample set of values. + * + * @{ + */ + +#if __LONG_MAX__ == 0x7fffffffL && !defined(__aarch64__) +#define TEST_UDIVMODDI4 +#endif + +#if defined(TEST_UDIVMODDI4) +uint64_t __udivmoddi4( uint64_t n, uint64_t d, uint64_t *r ); +#endif + +#if defined(TEST_UDIVMODDI4) && defined(__arm__) +/* + * Here __aeabi_uldivmod() may be used to carry out integer division + * operations even though the reminder is unused. This function is + * implemented by __udivmoddi4() which may never get called without a + * reminder for compiler generated code. + */ +#define TEST_UDIVMODDI4_WITHOUT_REMINDER +#endif + +static bool do_longjmp; + +static jmp_buf exception_return_context; + +static void Fatal( + rtems_fatal_source source, + rtems_fatal_code code, + void *arg +) +{ + (void) code; + + if ( source == RTEMS_FATAL_SOURCE_EXCEPTION && do_longjmp ) { + do_longjmp = false; + _ISR_Set_level( 0 ); + longjmp( arg, 1 ); + } +} + +static void CompilerUnitBuiltins_Setup( void *ctx ) +{ + SetFatalHandler( Fatal, exception_return_context ); +} + +static void CompilerUnitBuiltins_Teardown( void *ctx ) +{ + SetFatalHandler( NULL, NULL ); +} + +static T_fixture CompilerUnitBuiltins_Fixture = { + .setup = CompilerUnitBuiltins_Setup, + .stop = NULL, + .teardown = CompilerUnitBuiltins_Teardown, + .scope = NULL, + .initial_context = NULL +}; + +/** + * @brief Check the return value of __builtin_clz() for a sample set of inputs. + */ +static void CompilerUnitBuiltins_Action_0( void ) +{ + volatile unsigned int n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = 1U; + T_eq_int( __builtin_clz( n ), 31 ); + + n = 1U << 31; + T_eq_int( __builtin_clz( n ), 0 ); + + n = ~0U; + T_eq_int( __builtin_clz( n ), 0 ); +} + +/** + * @brief Check the return value of __builtin_clzll() for a sample set of + * inputs. + */ +static void CompilerUnitBuiltins_Action_1( void ) +{ + volatile unsigned long long n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = 1ULL; + T_eq_int( __builtin_clzll( n ), 63 ); + + n = 1ULL << 31; + T_eq_int( __builtin_clzll( n ), 32 ); + + n = 1ULL << 32; + T_eq_int( __builtin_clzll( n ), 31 ); + + n = 1ULL << 63; + T_eq_int( __builtin_clzll( n ), 0 ); + + n = ~0ULL; + T_eq_int( __builtin_clzll( n ), 0 ); +} + +/** + * @brief Check the return value of __builtin_ctz() for a sample set of inputs. + */ +static void CompilerUnitBuiltins_Action_2( void ) +{ + volatile unsigned int n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = 1U; + T_eq_int( __builtin_ctz( n ), 0 ); + + n = 1U << 31; + T_eq_int( __builtin_ctz( n ), 31 ); + + n = ~0U; + T_eq_int( __builtin_ctz( n ), 0 ); +} + +/** + * @brief Check the return value of __builtin_ctzll() for a sample set of + * inputs. + */ +static void CompilerUnitBuiltins_Action_3( void ) +{ + volatile unsigned long long n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = 1ULL; + T_eq_int( __builtin_ctzll( n ), 0 ); + + n = 1ULL << 31; + T_eq_int( __builtin_ctzll( n ), 31 ); + + n = 1ULL << 32; + T_eq_int( __builtin_ctzll( n ), 32 ); + + n = 1ULL << 63; + T_eq_int( __builtin_ctzll( n ), 63 ); + + n = ~0ULL; + T_eq_int( __builtin_ctzll( n ), 0 ); +} + +/** + * @brief Check the return value of __builtin_ffs() for a sample set of inputs. + */ +static void CompilerUnitBuiltins_Action_4( void ) +{ + volatile unsigned int n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = 1U; + T_eq_int( __builtin_ffs( n ), 1 ); + + n = 1U << 31; + T_eq_int( __builtin_ffs( n ), 32 ); + + n = 0U; + T_eq_int( __builtin_ffs( n ), 0 ); +} + +/** + * @brief Check the return value of __builtin_ffsll() for a sample set of + * inputs. + */ +static void CompilerUnitBuiltins_Action_5( void ) +{ + volatile unsigned long long n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = 1ULL; + T_eq_int( __builtin_ffsll( n ), 1 ); + + n = 1ULL << 31; + T_eq_int( __builtin_ffsll( n ), 32 ); + + n = 1ULL << 32; + T_eq_int( __builtin_ffsll( n ), 33 ); + + n = 1ULL << 63; + T_eq_int( __builtin_ffsll( n ), 64 ); + + n = 0ULL; + T_eq_int( __builtin_ffsll( n ), 0 ); +} + +/** + * @brief Check the return value of __builtin_parity() for a sample set of + * inputs. + */ +static void CompilerUnitBuiltins_Action_6( void ) +{ + volatile unsigned int n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = 1U; + T_eq_int( __builtin_parity( n ), 1 ); + + n = ~0U; + T_eq_int( __builtin_parity( n ), 0 ); +} + +/** + * @brief Check the return value of __builtin_parityll() for a sample set of + * inputs. + */ +static void CompilerUnitBuiltins_Action_7( void ) +{ + volatile unsigned long long n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = 1ULL; + T_eq_int( __builtin_parityll( n ), 1 ); + + n = ~0ULL; + T_eq_int( __builtin_parityll( n ), 0 ); +} + +/** + * @brief Check the return value of __builtin_popcount() for a sample set of + * inputs. + */ +static void CompilerUnitBuiltins_Action_8( void ) +{ + volatile unsigned int n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = 0U; + T_eq_int( __builtin_popcount( n ), 0 ); + + n = 1U; + T_eq_int( __builtin_popcount( n ), 1 ); + + n = ~0U; + T_eq_int( __builtin_popcount( n ), 32 ); +} + +/** + * @brief Check the return value of __builtin_popcountll() for a sample set of + * inputs. + */ +static void CompilerUnitBuiltins_Action_9( void ) +{ + volatile unsigned long long n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = 0ULL; + T_eq_int( __builtin_popcountll( n ), 0 ); + + n = 1ULL; + T_eq_int( __builtin_popcountll( n ), 1 ); + + n = ~0ULL; + T_eq_int( __builtin_popcountll( n ), 64 ); +} + +/** + * @brief Check the return value of __builtin_bswap32() for a sample set of + * inputs. + */ +static void CompilerUnitBuiltins_Action_10( void ) +{ + volatile uint32_t n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = UINT32_C( 0 ); + T_eq_u32( __builtin_bswap32( n ), n ); + + n = UINT32_C( 1 ); + T_eq_u32( __builtin_bswap32( n ), n << 24 ); + + n = UINT32_C( 0x12345678 ); + T_eq_u32( __builtin_bswap32( n ), UINT32_C( 0x78563412 ) ); + + n = ~UINT32_C( 0 ); + T_eq_u32( __builtin_bswap32( n ), n ); +} + +/** + * @brief Check the return value of __builtin_bswap64() for a sample set of + * inputs. + */ +static void CompilerUnitBuiltins_Action_11( void ) +{ + volatile uint64_t n; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + + n = UINT64_C( 0 ); + T_eq_u64( __builtin_bswap64( n ), n ); + + n = UINT64_C( 1 ); + T_eq_u64( __builtin_bswap64( n ), n << 56 ); + + n = UINT64_C( 0x123456789abcdef0 ); + T_eq_u64( __builtin_bswap64( n ), UINT64_C( 0xf0debc9a78563412 ) ); + + n = ~UINT64_C( 0 ); + T_eq_u64( __builtin_bswap64( n ), n ); +} + +/** + * @brief Check signed 64-bit comparisons for a sample set of values. + */ +static void CompilerUnitBuiltins_Action_12( void ) +{ + volatile int64_t a; + volatile int64_t b; + + a = 0; + RTEMS_OBFUSCATE_VARIABLE( a ); + b = 0; + RTEMS_OBFUSCATE_VARIABLE( b ); + + a = INT64_C( 0 ); + b = INT64_C( 0 ); + T_false( a < b ); + + a = INT64_C( 0 ); + b = INT64_C( 1 ); + T_true( a < b ); + + a = INT64_C( 0x123456789abcdef0 ); + b = INT64_C( 0xf0debc9a78563412 ); + T_false( a < b ); + + a = INT64_C( 0xf0debc9a78563412 ); + b = INT64_C( 0x123456789abcdef0 ); + T_true( a < b ); +} + +/** + * @brief Check unsigned 64-bit comparisons for a sample set of values. + */ +static void CompilerUnitBuiltins_Action_13( void ) +{ + volatile uint64_t a; + volatile uint64_t b; + + a = 0; + RTEMS_OBFUSCATE_VARIABLE( a ); + b = 0; + RTEMS_OBFUSCATE_VARIABLE( b ); + + a = UINT64_C( 0 ); + b = UINT64_C( 0 ); + T_false( a < b ); + + a = UINT64_C( 0 ); + b = UINT64_C( 1 ); + T_true( a < b ); + + a = UINT64_C( 0x123456789abcdef0 ); + b = UINT64_C( 0xf0debc9a78563412 ); + T_true( a < b ); + + a = UINT64_C( 0xf0debc9a78563412 ); + b = UINT64_C( 0x123456789abcdef0 ); + T_false( a < b ); +} + +/** + * @brief Check signed 64-bit arithmetic left shift for a sample set of values. + */ +static void CompilerUnitBuiltins_Action_14( void ) +{ + volatile int64_t i; + volatile int s; + + i = 0; + RTEMS_OBFUSCATE_VARIABLE( i ); + s = 0; + RTEMS_OBFUSCATE_VARIABLE( s ); + + i = INT64_C( 1 ); + s = 0; + T_eq_i64( i << s, INT64_C( 1 ) ); + + i = -INT64_C( 1 ); + s = 0; + T_eq_i64( i << s, -INT64_C( 1 ) ); + + i = INT64_C( 1 ); + s = 1; + T_eq_i64( i << s, INT64_C( 2 ) ); + + i = -INT64_C( 1 ); + s = 1; + T_eq_i64( i << s, -INT64_C( 2 ) ); +} + +/** + * @brief Check signed 64-bit arithmetic right shift for a sample set of + * values. + */ +static void CompilerUnitBuiltins_Action_15( void ) +{ + volatile int64_t i; + volatile int s; + + i = 0; + RTEMS_OBFUSCATE_VARIABLE( i ); + s = 0; + RTEMS_OBFUSCATE_VARIABLE( s ); + + i = INT64_C( 1 ); + s = 0; + T_eq_i64( i >> s, INT64_C( 1 ) ); + + i = -INT64_C( 1 ); + s = 0; + T_eq_i64( i >> s, -INT64_C( 1 ) ); + + i = INT64_C( 2 ); + s = 1; + T_eq_i64( i >> s, INT64_C( 1 ) ); + + i = -INT64_C( 2 ); + s = 1; + T_eq_i64( i >> s, -INT64_C( 1 ) ); +} + +/** + * @brief Check unsigned 64-bit logical right shift for a sample set of values. + */ +static void CompilerUnitBuiltins_Action_16( void ) +{ + volatile uint64_t i; + volatile int s; + + i = 0; + RTEMS_OBFUSCATE_VARIABLE( i ); + s = 0; + RTEMS_OBFUSCATE_VARIABLE( s ); + + i = UINT64_C( 1 ); + s = 0; + T_eq_u64( i >> s, UINT64_C( 1 ) ); + + i = -UINT64_C( 1 ); + s = 0; + T_eq_u64( i >> s, UINT64_C( 0xffffffffffffffff ) ); + + i = UINT64_C( 2 ); + s = 1; + T_eq_u64( i >> s, UINT64_C( 1 ) ); + + i = -UINT64_C( 2 ); + s = 1; + T_eq_u64( i >> s, UINT64_C( 0x7fffffffffffffff ) ); +} + +/** + * @brief Check signed 64-bit multiplication for a sample set of values. + */ +static void CompilerUnitBuiltins_Action_17( void ) +{ + volatile int64_t a; + volatile int64_t b; + + a = 0; + RTEMS_OBFUSCATE_VARIABLE( a ); + b = 0; + RTEMS_OBFUSCATE_VARIABLE( b ); + + a = INT64_C( 1 ); + b = INT64_C( 1 ); + T_eq_i64( a * b, INT64_C( 1 ) ); + + a = INT64_C( 1 ); + b = INT64_C( 0 ); + T_eq_i64( a * b, INT64_C( 0 ) ); + + a = INT64_C( 0 ); + b = INT64_C( 1 ); + T_eq_i64( a * b, INT64_C( 0 ) ); +} + +/** + * @brief Check signed 64-bit negation for a sample set of values. + */ +static void CompilerUnitBuiltins_Action_18( void ) +{ + volatile int64_t i; + + i = 0; + RTEMS_OBFUSCATE_VARIABLE( i ); + + i = INT64_C( 1 ); + T_eq_i64( -i, -INT64_C( 1 ) ); + + i = -INT64_C( 1 ); + T_eq_i64( -i, INT64_C( 1 ) ); +} + +/** + * @brief Check signed 64-bit divisions for a sample set of values. + */ +static void CompilerUnitBuiltins_Action_19( void ) +{ + volatile int64_t n; + volatile int64_t d; + volatile int64_t x; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + d = 0; + RTEMS_OBFUSCATE_VARIABLE( d ); + x = 0; + RTEMS_OBFUSCATE_VARIABLE( x ); + + n = INT64_C( 0 ); + d = INT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n / d; + } + + n = INT64_C( 1 ); + d = INT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n / d; + } + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n / d; + } + + n = INT64_C( 0x7fffffff00000000 ); + d = INT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n / d; + } + + n = INT64_C( 0 ); + d = INT64_C( 1 ); + T_eq_i64( n / d, INT64_C( 0 ) ); + + n = INT64_C( 1 ); + d = INT64_C( 1 ); + T_eq_i64( n / d, INT64_C( 1 ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 1 ); + T_eq_i64( n / d, INT64_C( 9223372036854775807 ) ); + + n = INT64_C( 2 ); + d = INT64_C( 1 ); + T_eq_i64( n / d, INT64_C( 2 ) ); + + n = INT64_C( 2 ); + d = INT64_C( 1 ); + T_eq_i64( n / d, INT64_C( 2 ) ); + + n = INT64_C( 1 ); + d = INT64_C( 0x7fffffffffffffff ); + T_eq_i64( n / d, INT64_C( 0 ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0x7fffffffffffffff ); + T_eq_i64( n / d, INT64_C( 1 ) ); + + n = INT64_C( 1 ); + d = INT64_C( 0x7fffffff00000000 ); + T_eq_i64( n / d, INT64_C( 0 ) ); + + n = INT64_C( 0x7fffffff00000000 ); + d = INT64_C( 0x7fffffff00000000 ); + T_eq_i64( n / d, INT64_C( 1 ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0x7fffffff00000000 ); + T_eq_i64( n / d, INT64_C( 1 ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0x8000000000000000 ); + T_eq_i64( n / d, INT64_C( 0 ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0x0000000080000000 ); + T_eq_i64( n / d, INT64_C( 0xffffffff ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0x00000000f0000000 ); + T_eq_i64( n / d, INT64_C( 2290649224 ) ); + + n = INT64_C( 0x00000001ffffffff ); + d = INT64_C( 0x00000000f0000000 ); + T_eq_i64( n / d, INT64_C( 2 ) ); + + n = INT64_C( 0x0000000fffffffff ); + d = INT64_C( 0x000000000000000f ); + T_eq_i64( n / d, INT64_C( 4581298449 ) ); + + n = INT64_C( 0x0000000100000001 ); + d = INT64_C( 0x0000000f00000000 ); + T_eq_i64( n / d, INT64_C( 0 ) ); + + n = INT64_C( 0x0000000f0000000f ); + d = INT64_C( 0x000000ff0000000f ); + T_eq_i64( n / d, INT64_C( 0 ) ); +} + +/** + * @brief Check unsigned 64-bit divisions for a sample set of values. + */ +static void CompilerUnitBuiltins_Action_20( void ) +{ + volatile uint64_t n; + volatile uint64_t d; + volatile uint64_t x; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + d = 0; + RTEMS_OBFUSCATE_VARIABLE( d ); + x = 0; + RTEMS_OBFUSCATE_VARIABLE( x ); + + n = UINT64_C( 0 ); + d = UINT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n / d; + } + + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + __udivmoddi4( n, d, NULL ); + } + #endif + + n = UINT64_C( 1 ); + d = UINT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n / d; + } + + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + __udivmoddi4( n, d, NULL ); + } + #endif + + n = UINT64_C( 0x7fffffffffffffff ); + d = UINT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n / d; + } + + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + __udivmoddi4( n, d, NULL ); + } + #endif + + n = UINT64_C( 0x7fffffff00000000 ); + d = UINT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n / d; + } + + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + __udivmoddi4( n, d, NULL ); + } + #endif + + n = UINT64_C( 0x7fffffff00000000 ); + d = UINT64_C( 0x7fffffff00000000 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n / d; + } + + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + __udivmoddi4( n, d, NULL ); + } + #endif + + n = UINT64_C( 0 ); + d = UINT64_C( 1 ); + T_eq_u64( n / d, UINT64_C( 0 ) ); + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 0 ) ); + #endif + + n = UINT64_C( 1 ); + d = UINT64_C( 1 ); + T_eq_u64( n / d, UINT64_C( 1 ) ); + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 1 ) ); + #endif + + n = UINT64_C( 0xffffffffffffffff ); + d = UINT64_C( 1 ); + T_eq_u64( n / d, UINT64_C( 0xffffffffffffffff ) ); + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 0xffffffffffffffff ) ); + #endif + + n = UINT64_C( 2 ); + d = UINT64_C( 1 ); + T_eq_u64( n / d, UINT64_C( 2 ) ); + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 2 ) ); + #endif + + n = UINT64_C( 1 ); + d = UINT64_C( 0xffffffffffffffff ); + T_eq_u64( n / d, UINT64_C( 0 ) ); + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 0 ) ); + #endif + + n = UINT64_C( 0xffffffffffffffff ); + d = UINT64_C( 0xffffffffffffffff ); + T_eq_u64( n / d, UINT64_C( 1 ) ); + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 1 ) ); + #endif + + n = UINT64_C( 0xffffffffffffffff ); + d = UINT64_C( 0x8000000000000000 ); + T_eq_u64( n / d, UINT64_C( 1 ) ); + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 1 ) ); + #endif + + n = UINT64_C( 0x0000000100000001 ); + d = UINT64_C( 0x0000000f00000000 ); + T_eq_u64( n / d, UINT64_C( 0 ) ); + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 0 ) ); + #endif + + n = UINT64_C( 0x0000000100000000 ); + d = UINT64_C( 0x0000000f00000001 ); + T_eq_u64( n / d, UINT64_C( 0 ) ); + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 0 ) ); + #endif + + n = UINT64_C( 0xffffffff0000000f ); + d = UINT64_C( 0x000000010000000f ); + T_eq_u64( n / d, UINT64_C( 4294967280 ) ); + #if defined(TEST_UDIVMODDI4_WITHOUT_REMINDER) + T_eq_u64( __udivmoddi4( n, d, NULL ), UINT64_C( 4294967280 ) ); + #endif +} + +/** + * @brief Check signed 64-bit modulo operations for a sample set of values. + */ +static void CompilerUnitBuiltins_Action_21( void ) +{ + volatile int64_t n; + volatile int64_t d; + volatile int64_t x; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + d = 0; + RTEMS_OBFUSCATE_VARIABLE( d ); + x = 0; + RTEMS_OBFUSCATE_VARIABLE( x ); + + n = INT64_C( 0 ); + d = INT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n % d; + } + + n = INT64_C( 1 ); + d = INT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n % d; + } + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n % d; + } + + n = INT64_C( 0x7fffffff00000000 ); + d = INT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n % d; + } + + n = INT64_C( 0 ); + d = INT64_C( 1 ); + T_eq_i64( n % d, INT64_C( 0 ) ); + + n = INT64_C( 1 ); + d = INT64_C( 1 ); + T_eq_i64( n % d, INT64_C( 0 ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 1 ); + T_eq_i64( n % d, INT64_C( 0 ) ); + + n = INT64_C( 2 ); + d = INT64_C( 1 ); + T_eq_i64( n % d, INT64_C( 0 ) ); + + n = INT64_C( 2 ); + d = INT64_C( 1 ); + T_eq_i64( n % d, INT64_C( 0 ) ); + + n = INT64_C( 1 ); + d = INT64_C( 0x7fffffffffffffff ); + T_eq_i64( n % d, INT64_C( 1 ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0x7fffffffffffffff ); + T_eq_i64( n % d, INT64_C( 0 ) ); + + n = INT64_C( 1 ); + d = INT64_C( 0x7fffffff00000000 ); + T_eq_i64( n % d, INT64_C( 1 ) ); + + n = INT64_C( 0x7fffffff00000000 ); + d = INT64_C( 0x7fffffff00000000 ); + T_eq_i64( n % d, INT64_C( 0 ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0x7fffffff00000000 ); + T_eq_i64( n % d, INT64_C( 0xffffffff ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0x8000000000000000 ); + T_eq_i64( n % d, INT64_C( 0x7fffffffffffffff ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0x0000000080000000 ); + T_eq_i64( n % d, INT64_C( 2147483647 ) ); + + n = INT64_C( 0x7fffffffffffffff ); + d = INT64_C( 0x00000000f0000000 ); + T_eq_i64( n % d, INT64_C( 2147483647 ) ); + + n = INT64_C( 0x00000001ffffffff ); + d = INT64_C( 0x00000000f0000000 ); + T_eq_i64( n % d, INT64_C( 536870911 ) ); + + n = INT64_C( 0x0000000fffffffff ); + d = INT64_C( 0x000000000000000f ); + T_eq_i64( n % d, INT64_C( 0 ) ); + + n = INT64_C( 0x0000000100000001 ); + d = INT64_C( 0x0000000f00000000 ); + T_eq_i64( n % d, INT64_C( 4294967297 ) ); + + n = INT64_C( 0x0000000f0000000f ); + d = INT64_C( 0x000000ff0000000f ); + T_eq_i64( n % d, INT64_C( 64424509455 ) ); + + #if defined(TEST_UDIVMODDI4) + /* + * The above test cases may use __udivmoddi4(). However, the below + * parameter values for __udivmoddi4() cannot be obtained through the + * signed modulo or division operations. On some targets, calls to + * __udivmoddi4() may result from complex optimizations. + */ + n = INT64_C( 0xffffffff0000000f ); + d = INT64_C( 0x000000010000000f ); + T_eq_u64( __udivmoddi4( n, d, NULL ), INT64_C( 4294967280 ) ); + #endif +} + +/** + * @brief Check unsigned 64-bit modulo operations for a sample set of values. + */ +static void CompilerUnitBuiltins_Action_22( void ) +{ + volatile uint64_t n; + volatile uint64_t d; + volatile uint64_t x; + + n = 0; + RTEMS_OBFUSCATE_VARIABLE( n ); + d = 0; + RTEMS_OBFUSCATE_VARIABLE( d ); + x = 0; + RTEMS_OBFUSCATE_VARIABLE( x ); + + n = UINT64_C( 0 ); + d = UINT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n % d; + } + + n = UINT64_C( 1 ); + d = UINT64_C( 0 ); + do_longjmp = true; + + if ( setjmp( exception_return_context ) == 0 ) { + x = n % d; + } + + n = UINT64_C( 0 ); + d = UINT64_C( 1 ); + T_eq_u64( n % d, UINT64_C( 0 ) ); + + n = UINT64_C( 1 ); + d = UINT64_C( 1 ); + T_eq_u64( n % d, UINT64_C( 0 ) ); + + n = UINT64_C( 0xffffffffffffffff ); + d = UINT64_C( 1 ); + T_eq_u64( n % d, UINT64_C( 0 ) ); + + n = UINT64_C( 2 ); + d = UINT64_C( 1 ); + T_eq_u64( n % d, UINT64_C( 0 ) ); + + n = UINT64_C( 1 ); + d = UINT64_C( 0xffffffffffffffff ); + T_eq_u64( n % d, UINT64_C( 1 ) ); + + n = UINT64_C( 0xffffffffffffffff ); + d = UINT64_C( 0xffffffffffffffff ); + T_eq_u64( n % d, UINT64_C( 0 ) ); +} + +/** + * @fn void T_case_body_CompilerUnitBuiltins( void ) + */ +T_TEST_CASE_FIXTURE( CompilerUnitBuiltins, &CompilerUnitBuiltins_Fixture ) +{ + CompilerUnitBuiltins_Action_0(); + CompilerUnitBuiltins_Action_1(); + CompilerUnitBuiltins_Action_2(); + CompilerUnitBuiltins_Action_3(); + CompilerUnitBuiltins_Action_4(); + CompilerUnitBuiltins_Action_5(); + CompilerUnitBuiltins_Action_6(); + CompilerUnitBuiltins_Action_7(); + CompilerUnitBuiltins_Action_8(); + CompilerUnitBuiltins_Action_9(); + CompilerUnitBuiltins_Action_10(); + CompilerUnitBuiltins_Action_11(); + CompilerUnitBuiltins_Action_12(); + CompilerUnitBuiltins_Action_13(); + CompilerUnitBuiltins_Action_14(); + CompilerUnitBuiltins_Action_15(); + CompilerUnitBuiltins_Action_16(); + CompilerUnitBuiltins_Action_17(); + CompilerUnitBuiltins_Action_18(); + CompilerUnitBuiltins_Action_19(); + CompilerUnitBuiltins_Action_20(); + CompilerUnitBuiltins_Action_21(); + CompilerUnitBuiltins_Action_22(); +} + +/** @} */ diff --git a/testsuites/unit/tc-config.c b/testsuites/unit/tc-config.c new file mode 100644 index 0000000000..415142e1b4 --- /dev/null +++ b/testsuites/unit/tc-config.c @@ -0,0 +1,171 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RtemsConfigUnitConfig + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> +#include <rtems/rtems/semdata.h> +#include <rtems/score/object.h> +#include <rtems/score/objectdata.h> + +#include <rtems/test.h> + +/** + * @defgroup RtemsConfigUnitConfig spec:/rtems/config/unit/config + * + * @ingroup TestsuitesUnitNoClock0 + * + * @brief Unit tests for the configuration manager. + * + * Parts of the file ``cpukit/sapi/src/getconfigmax.c`` are only executed when + * unlimited objects are configured. The space qualified code subset does not + * support this feature. This test exercises the code parts otherwise not + * reached in order to achieve full code coverage. + * + * This test case performs the following actions: + * + * - Call get_config_max() indirectly through + * rtems_configuration_get_maximum_semaphores() with a specially manipulated + * argument to enter an if-branch only accessed when unlimited objects are + * configured. + * + * - The value returned by the function call must be the one artificially + * injected by this test. + * + * @{ + */ + +#define SEMAPHORES_PER_BLOCK 32 + +/** + * @brief Test context for spec:/rtems/config/unit/config test case. + */ +typedef struct { + /** + * @brief This member contains the original value of + * ``_Semaphore_Information->objects_per_block``. + */ + Objects_Maximum objects_per_block_ori; +} RtemsConfigUnitConfig_Context; + +static RtemsConfigUnitConfig_Context + RtemsConfigUnitConfig_Instance; + +static void RtemsConfigUnitConfig_Setup( RtemsConfigUnitConfig_Context *ctx ) +{ + ctx->objects_per_block_ori = _Semaphore_Information.objects_per_block; + _Semaphore_Information.objects_per_block = SEMAPHORES_PER_BLOCK; +} + +static void RtemsConfigUnitConfig_Setup_Wrap( void *arg ) +{ + RtemsConfigUnitConfig_Context *ctx; + + ctx = arg; + RtemsConfigUnitConfig_Setup( ctx ); +} + +static void RtemsConfigUnitConfig_Teardown( + RtemsConfigUnitConfig_Context *ctx +) +{ + _Semaphore_Information.objects_per_block = ctx->objects_per_block_ori; +} + +static void RtemsConfigUnitConfig_Teardown_Wrap( void *arg ) +{ + RtemsConfigUnitConfig_Context *ctx; + + ctx = arg; + RtemsConfigUnitConfig_Teardown( ctx ); +} + +static T_fixture RtemsConfigUnitConfig_Fixture = { + .setup = RtemsConfigUnitConfig_Setup_Wrap, + .stop = NULL, + .teardown = RtemsConfigUnitConfig_Teardown_Wrap, + .scope = NULL, + .initial_context = &RtemsConfigUnitConfig_Instance +}; + +/** + * @brief Call get_config_max() indirectly through + * rtems_configuration_get_maximum_semaphores() with a specially manipulated + * argument to enter an if-branch only accessed when unlimited objects are + * configured. + */ +static void RtemsConfigUnitConfig_Action_0( + RtemsConfigUnitConfig_Context *ctx +) +{ + uint32_t max = rtems_configuration_get_maximum_semaphores(); + + /* + * The value returned by the function call must be the one artificially + * injected by this test. + */ + T_eq_u32( max, SEMAPHORES_PER_BLOCK | RTEMS_UNLIMITED_OBJECTS ); +} + +/** + * @fn void T_case_body_RtemsConfigUnitConfig( void ) + */ +T_TEST_CASE_FIXTURE( RtemsConfigUnitConfig, &RtemsConfigUnitConfig_Fixture ) +{ + RtemsConfigUnitConfig_Context *ctx; + + ctx = T_fixture_context(); + + RtemsConfigUnitConfig_Action_0( ctx ); +} + +/** @} */ diff --git a/testsuites/unit/tc-crc.c b/testsuites/unit/tc-crc.c new file mode 100644 index 0000000000..d33a837860 --- /dev/null +++ b/testsuites/unit/tc-crc.c @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup TestsuitesUnitNoClock0 + */ + +/* + * Copyright (C) 2023 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <rtems/crc.h> + +#include <rtems/test.h> + +T_TEST_CASE(CRC24Q) { + uint32_t state = _CRC24Q_Update(CRC24Q_SEED, 0); + T_eq_u32(state, 0); + state = _CRC24Q_Update(CRC24Q_SEED, '1'); + state = _CRC24Q_Update(state, '2'); + state = _CRC24Q_Update(state, '3'); + T_eq_u32(state & CRC24Q_MASK, 0x2c3045); + uint8_t bytes[] = {'1', '2', '3'}; + state = _CRC24Q_Sequence_update(CRC24Q_SEED, &bytes[0], sizeof(bytes)); + T_eq_u32(state & CRC24Q_MASK, 0x2c3045); +} diff --git a/testsuites/unit/tc-misaligned-builtin-memcpy.c b/testsuites/unit/tc-misaligned-builtin-memcpy.c index 2021a68551..6ce19e0521 100644 --- a/testsuites/unit/tc-misaligned-builtin-memcpy.c +++ b/testsuites/unit/tc-misaligned-builtin-memcpy.c @@ -1,7 +1,13 @@ /* SPDX-License-Identifier: BSD-2-Clause */ +/** + * @file + * + * @ingroup TestsuitesUnitNoClock0 + */ + /* - * Copyright (C) 2019 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2019 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/unit/tc-score-msgq.c b/testsuites/unit/tc-score-msgq.c new file mode 100644 index 0000000000..c4cb690c2f --- /dev/null +++ b/testsuites/unit/tc-score-msgq.c @@ -0,0 +1,452 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup ScoreMsgqUnitMsgq + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> +#include <rtems/rtems/messageimpl.h> +#include <rtems/rtems/statusimpl.h> +#include <rtems/score/coremsgimpl.h> + +#include "../validation/tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup ScoreMsgqUnitMsgq spec:/score/msgq/unit/msgq + * + * @ingroup TestsuitesUnitNoClock0 + * + * @brief Unit tests for the Message Queue Handler. + * + * Parts of the files ``cpukit/score/src/coremsginsert.c``, + * ``cpukit/score/src/coremsgseize.c``, and + * ``cpukit/score/src/coremsgsubmit.c`` are only executed by the POSIX API. + * Currently, the pre-qualified subset of RTEMS does not contain the POSIX API. + * This test exercises the code parts otherwise only reached by the POSIX API + * to achieve full code coverage. + * + * This test case performs the following actions: + * + * - Use _CORE_message_queue_Insert_message() to insert two messages into a + * message queue and use the POSIX message priority to define their order in + * the queue. + * + * - Check that _CORE_message_queue_Submit() was executed successfully. + * + * - Check that the messages are in the right order in the message queue. + * + * - Submit three messages into a message queue which can only store two and + * have the third submit() blocked till a seize() occurs. + * + * - Check that the third _CORE_message_queue_Submit() did actually block + * till there was room for the message in the message queue. + * + * - Submit messages in the queue from within an ISR. + * + * - Check that the first two messages were successfully send. + * + * - Check that trying to send the third message from ISR when the message + * queue was full was rejected. + * + * @{ + */ + +#define MAXIMUM_PENDING_MESSAGES 2 +#define MAXIMUM_MESSAGE_SIZE 3 + +static void WorkerTask( rtems_task_argument argument ); + +/** + * @brief Test context for spec:/score/msgq/unit/msgq test case. + */ +typedef struct { + /** + * @brief This member contains a valid ID of a message queue. + */ + rtems_id message_queue_id; + + /** + * @brief This member is used as storage area for the message queue. + */ + RTEMS_MESSAGE_QUEUE_BUFFER( MAXIMUM_MESSAGE_SIZE ) + storage_area[ MAXIMUM_PENDING_MESSAGES]; + + /** + * @brief This member contains the task identifier of the worker task. + */ + rtems_id worker_id; + + /** + * @brief This member indicated whether the worker task is currently sending + * a message (``true``) or whether it is waiting to receive an event + * (``false``). + */ + bool is_worker_working; + + /** + * @brief This member contains the returned status code of the SendMessage() + * function. + */ + rtems_status_code send_status; +} ScoreMsgqUnitMsgq_Context; + +static ScoreMsgqUnitMsgq_Context + ScoreMsgqUnitMsgq_Instance; + +#define EVENT_SEND RTEMS_EVENT_17 +#define MESSAGE_CONTENT_LOW { 1, 2, 3 } +#define MESSAGE_CONTENT_HIGH { 4, 5 } +#define MESSAGE_PRIORITY_LOW 5 +#define MESSAGE_PRIORITY_HIGH 7 +#define DO_WAIT true + +typedef ScoreMsgqUnitMsgq_Context Context; + +/* + * This is a code fragment from rtems_message_queue_send() with the + * specialty that it uses a POSIX priority and the sender + * task will wait in case the queue is full. + */ +static rtems_status_code SubmitMessage( + rtems_id id, + uint8_t *message, + size_t message_size, + unsigned int posix_piority +) +{ + rtems_status_code status; + Thread_queue_Context queue_context; + Message_queue_Control *the_message_queue; + + T_assert_lt_uint( posix_piority, MQ_PRIO_MAX ); + + the_message_queue = _Message_queue_Get( + id, + &queue_context + ); + T_assert_not_null( the_message_queue ); + + /* The next two calls are from _POSIX_Message_queue_Send_support() */ + _Thread_queue_Context_set_enqueue_callout( + &queue_context, + _Thread_queue_Enqueue_do_nothing_extra + ); + _Thread_queue_Context_set_timeout_argument( &queue_context, NULL, true ); + + _CORE_message_queue_Acquire_critical( + &the_message_queue->message_queue, + &queue_context + ); + + status = _CORE_message_queue_Submit( + &the_message_queue->message_queue, + _Thread_Executing, + message, + message_size, + (CORE_message_queue_Submit_types) ( posix_piority * -1 ), + DO_WAIT, + &queue_context + ); + + return _Status_Get( status ); +} + +static rtems_status_code ReceiveMessage( + rtems_id id, + void *buffer, + size_t *size +) +{ + return rtems_message_queue_receive( + id, + buffer, + size, + RTEMS_LOCAL | RTEMS_NO_WAIT, + RTEMS_NO_TIMEOUT + ); +} + +static rtems_status_code ReceiveOneMessages( Context *ctx ) +{ + uint8_t message_buffer[ MAXIMUM_MESSAGE_SIZE ]; + size_t message_size; + + return ReceiveMessage( + ctx->message_queue_id, + &message_buffer, + &message_size + ); +} + +static void SendMessage( Context *ctx ) +{ + uint8_t message[] = { 100, 101, 102 }; + ctx->send_status = SubmitMessage( + ctx->message_queue_id, + message, + sizeof( message ), + MESSAGE_PRIORITY_LOW + ); +} + +static void WorkerTask( rtems_task_argument argument ) +{ + Context *ctx = (Context *) argument; + + while ( true ) { + ctx->is_worker_working = false; + ReceiveAnyEvents(); + ctx->is_worker_working = true; + SendMessage( ctx ); + T_assert_rsc_success( ctx->send_status ); + } +} + +static void WorkerSendMessage( Context *ctx ) +{ + SendEvents( ctx->worker_id, EVENT_SEND ); +} + +static void ScoreMsgqUnitMsgq_Setup( ScoreMsgqUnitMsgq_Context *ctx ) +{ + rtems_status_code status; + rtems_message_queue_config config = { + .name = rtems_build_name( 'M', 'S', 'G', 'Q' ), + .maximum_pending_messages = MAXIMUM_PENDING_MESSAGES, + .maximum_message_size = MAXIMUM_MESSAGE_SIZE, + .storage_area = ctx->storage_area, + .storage_size = sizeof( ctx->storage_area ), + .storage_free = NULL, + .attributes = RTEMS_DEFAULT_ATTRIBUTES + }; + + status = rtems_message_queue_construct( + &config, + &ctx->message_queue_id + ); + T_rsc_success( status ); + + SetSelfPriority( PRIO_NORMAL ); + + ctx->worker_id = CreateTask( "WORK", PRIO_HIGH ); + StartTask( ctx->worker_id, WorkerTask, ctx ); +} + +static void ScoreMsgqUnitMsgq_Setup_Wrap( void *arg ) +{ + ScoreMsgqUnitMsgq_Context *ctx; + + ctx = arg; + ScoreMsgqUnitMsgq_Setup( ctx ); +} + +static void ScoreMsgqUnitMsgq_Teardown( ScoreMsgqUnitMsgq_Context *ctx ) +{ + DeleteTask( ctx->worker_id ); + RestoreRunnerPriority(); + T_rsc_success( rtems_message_queue_delete( ctx->message_queue_id ) ); +} + +static void ScoreMsgqUnitMsgq_Teardown_Wrap( void *arg ) +{ + ScoreMsgqUnitMsgq_Context *ctx; + + ctx = arg; + ScoreMsgqUnitMsgq_Teardown( ctx ); +} + +static T_fixture ScoreMsgqUnitMsgq_Fixture = { + .setup = ScoreMsgqUnitMsgq_Setup_Wrap, + .stop = NULL, + .teardown = ScoreMsgqUnitMsgq_Teardown_Wrap, + .scope = NULL, + .initial_context = &ScoreMsgqUnitMsgq_Instance +}; + +/** + * @brief Use _CORE_message_queue_Insert_message() to insert two messages into + * a message queue and use the POSIX message priority to define their order + * in the queue. + */ +static void ScoreMsgqUnitMsgq_Action_0( ScoreMsgqUnitMsgq_Context *ctx ) +{ + rtems_status_code status_submit_low; + rtems_status_code status_submit_high; + rtems_status_code status_receive_low; + rtems_status_code status_receive_high; + uint8_t message_low[] = MESSAGE_CONTENT_LOW; + uint8_t message_high[] = MESSAGE_CONTENT_HIGH; + uint8_t message_buffer_low[ MAXIMUM_MESSAGE_SIZE ]; + uint8_t message_buffer_high[ MAXIMUM_MESSAGE_SIZE ]; + size_t message_size_low; + size_t message_size_high; + + status_submit_low = SubmitMessage( + ctx->message_queue_id, + message_low, + sizeof( message_low ), + MESSAGE_PRIORITY_LOW + ); + + status_submit_high = SubmitMessage( + ctx->message_queue_id, + message_high, + sizeof( message_high ), + MESSAGE_PRIORITY_HIGH + ); + + status_receive_high = ReceiveMessage( + ctx->message_queue_id, + &message_buffer_high, + &message_size_high + ); + + status_receive_low = ReceiveMessage( + ctx->message_queue_id, + &message_buffer_low, + &message_size_low + ); + + /* + * Check that _CORE_message_queue_Submit() was executed successfully. + */ + T_rsc_success( status_submit_low ); + T_rsc_success( status_submit_high ); + + /* + * Check that the messages are in the right order in the message queue. + */ + T_rsc_success( status_receive_high ); + T_eq_sz( message_size_high, sizeof( message_high ) ); + T_eq_mem( message_buffer_high, message_high, message_size_high ); + + T_rsc_success( status_receive_low ); + T_eq_sz( message_size_low, sizeof( message_low ) ); + T_eq_mem( message_buffer_low, message_low, message_size_low ); +} + +/** + * @brief Submit three messages into a message queue which can only store two + * and have the third submit() blocked till a seize() occurs. + */ +static void ScoreMsgqUnitMsgq_Action_1( ScoreMsgqUnitMsgq_Context *ctx ) +{ + bool is_worker_blocked_after_third_send; + bool is_worker_blocked_after_first_receive; + + WorkerSendMessage( ctx ); + WorkerSendMessage( ctx ); + WorkerSendMessage( ctx ); + is_worker_blocked_after_third_send = ctx->is_worker_working; + + T_rsc_success( ReceiveOneMessages( ctx ) ); + is_worker_blocked_after_first_receive = ctx->is_worker_working; + + T_rsc_success( ReceiveOneMessages( ctx ) ); + T_rsc_success( ReceiveOneMessages( ctx ) ); + + /* + * Check that the third _CORE_message_queue_Submit() did actually block till + * there was room for the message in the message queue. + */ + T_true( is_worker_blocked_after_third_send ); + T_true( !is_worker_blocked_after_first_receive ); +} + +/** + * @brief Submit messages in the queue from within an ISR. + */ +static void ScoreMsgqUnitMsgq_Action_2( ScoreMsgqUnitMsgq_Context *ctx ) +{ + rtems_status_code status_send_first_message; + rtems_status_code status_send_second_message; + rtems_status_code status_send_third_message; + + CallWithinISR( ( void (*)(void*) ) SendMessage, ctx ); + status_send_first_message = ctx->send_status; + CallWithinISR( ( void (*)(void*) ) SendMessage, ctx ); + status_send_second_message = ctx->send_status; + CallWithinISR( ( void (*)(void*) ) SendMessage, ctx ); + status_send_third_message = ctx->send_status; + + T_rsc_success( ReceiveOneMessages( ctx ) ); + T_rsc_success( ReceiveOneMessages( ctx ) ); + + /* + * Check that the first two messages were successfully send. + */ + T_assert_rsc_success( status_send_first_message ); + T_assert_rsc_success( status_send_second_message ); + + /* + * Check that trying to send the third message from ISR when the message + * queue was full was rejected. + */ + T_rsc( status_send_third_message, STATUS_CLASSIC_INTERNAL_ERROR ); +} + +/** + * @fn void T_case_body_ScoreMsgqUnitMsgq( void ) + */ +T_TEST_CASE_FIXTURE( ScoreMsgqUnitMsgq, &ScoreMsgqUnitMsgq_Fixture ) +{ + ScoreMsgqUnitMsgq_Context *ctx; + + ctx = T_fixture_context(); + + ScoreMsgqUnitMsgq_Action_0( ctx ); + ScoreMsgqUnitMsgq_Action_1( ctx ); + ScoreMsgqUnitMsgq_Action_2( ctx ); +} + +/** @} */ diff --git a/testsuites/unit/tc-score-rbtree.c b/testsuites/unit/tc-score-rbtree.c index 36fff61b8f..ec286838d0 100644 --- a/testsuites/unit/tc-score-rbtree.c +++ b/testsuites/unit/tc-score-rbtree.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreRbtreeUnitRbtree + * @ingroup ScoreRbtreeUnitRbtree */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * Copyright (C) 2010 Gedare Bloom * * Redistribution and use in source and binary forms, with or without @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreRbtreeUnitRbtree spec:/score/rbtree/unit/rbtree + * @defgroup ScoreRbtreeUnitRbtree spec:/score/rbtree/unit/rbtree * - * @ingroup RTEMSTestSuiteTestsuitesUnitNoClock0 + * @ingroup TestsuitesUnitNoClock0 * * @brief Unit tests for the red-black tree implementation. * diff --git a/testsuites/unit/ts-unit-no-clock-0.c b/testsuites/unit/ts-unit-no-clock-0.c index 8fa8518d36..88e67f91bd 100644 --- a/testsuites/unit/ts-unit-no-clock-0.c +++ b/testsuites/unit/ts-unit-no-clock-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesUnitNoClock0 + * @ingroup TestsuitesUnitNoClock0 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesUnitNoClock0 \ - * spec:/testsuites/unit-no-clock-0 + * @defgroup TestsuitesUnitNoClock0 spec:/testsuites/unit-no-clock-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesUnit * * @brief This general purpose unit test suite provides enough resources to run * basic tests without a Clock Driver for all specified managers and @@ -70,7 +69,7 @@ * @{ */ -const char rtems_test_name[] = "UnitNoClock0"; +const char rtems_test_name[] = "TestsuitesUnitNoClock0"; #define CONFIGURE_MAXIMUM_PROCESSORS 4 diff --git a/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c new file mode 100644 index 0000000000..0b0b5cf5b7 --- /dev/null +++ b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-halt.c @@ -0,0 +1,142 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup BspSparcLeon3ValFatalShutdownHalt + */ + +/* + * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/sysinit.h> + +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup BspSparcLeon3ValFatalShutdownHalt \ + * spec:/bsp/sparc/leon3/val/fatal-shutdown-halt + * + * @ingroup TestsuitesBspsFatalSparcLeon3Shutdown + * + * @brief Tests the leon3 BSP family shutdown procedure. + * + * This test case performs the following actions: + * + * - Check the effects of the leon3 BSP family shutdown procedure. + * + * - Check that no dynamic fatal error extension was invoked. This shows + * that the leon3 BSP family shutdown procedure called the wrapped + * _CPU_Fatal_halt() function of the test suite. + * + * @{ + */ + +static Atomic_Uint dynamic_fatal_extension_counter; + +static rtems_status_code status; + +static unsigned int Add( Atomic_Uint *a, unsigned int b ) +{ + return _Atomic_Fetch_add_uint( a, b, ATOMIC_ORDER_RELAXED ); +} + +static void DynamicFatalHandler( + rtems_fatal_source source, + bool always_set_to_false, + rtems_fatal_code code +) +{ + (void) source; + (void) code; + (void) always_set_to_false; + (void) Add( &dynamic_fatal_extension_counter, 1 ); +} + +static void InitBspSparcLeon3ValFatalShutdownHalt( void ) +{ + rtems_extensions_table table = { .fatal = DynamicFatalHandler }; + rtems_id id; + + status = rtems_extension_create( OBJECT_NAME, &table, &id ); +} + +RTEMS_SYSINIT_ITEM( + InitBspSparcLeon3ValFatalShutdownHalt, + RTEMS_SYSINIT_DEVICE_DRIVERS, + RTEMS_SYSINIT_ORDER_MIDDLE +); + +/** + * @brief Check the effects of the leon3 BSP family shutdown procedure. + */ +static void BspSparcLeon3ValFatalShutdownHalt_Action_0( void ) +{ + uint32_t counter; + + /* + * Check that no dynamic fatal error extension was invoked. This shows that + * the leon3 BSP family shutdown procedure called the wrapped + * _CPU_Fatal_halt() function of the test suite. + */ + T_step_rsc_success( 0, status ); + counter = Add( &dynamic_fatal_extension_counter, 0 ); + T_step_eq_u32( 1, counter, 0 ); +} + +/** + * @fn void T_case_body_BspSparcLeon3ValFatalShutdownHalt( void ) + */ +T_TEST_CASE( BspSparcLeon3ValFatalShutdownHalt ) +{ + T_plan( 2 ); + + BspSparcLeon3ValFatalShutdownHalt_Action_0(); +} + +/** @} */ diff --git a/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c new file mode 100644 index 0000000000..46bc44e7cb --- /dev/null +++ b/testsuites/validation/bsps/tc-fatal-sparc-leon3-shutdown-request.c @@ -0,0 +1,179 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup BspSparcLeon3ValFatalShutdownRequest + */ + +/* + * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <bsp/leon3.h> +#include <rtems/sysinit.h> +#include <rtems/score/smpimpl.h> + +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup BspSparcLeon3ValFatalShutdownRequest \ + * spec:/bsp/sparc/leon3/val/fatal-shutdown-request + * + * @ingroup TestsuitesBspsFatalSparcLeon3Shutdown + * + * @brief Tests the leon3 BSP family SMP-specific shutdown procedure. + * + * This test case performs the following actions: + * + * - Check the effects of the leon3 BSP family shutdown procedure. + * + * - Check that the second processor was not powered down during system + * initialization. + * + * - Wait until the second processor is powered down. + * + * - Check that the RTEMS_FATAL_SOURCE_SMP with SMP_FATAL_SHUTDOWN_RESPONSE + * fatal error occurred exactly once. + * + * - Check that the RTEMS_FATAL_SOURCE_SMP with SMP_FATAL_SHUTDOWN_RESPONSE + * fatal error occurred on the second processor. + * + * @{ + */ + +static uint32_t mpstat_during_sysinit; + +static Atomic_Uint shutdown_response_counter; + +static uint32_t shutdown_response_cpu_index = UINT32_MAX; + +static unsigned int Add( Atomic_Uint *a, unsigned int b ) +{ + return _Atomic_Fetch_add_uint( a, b, ATOMIC_ORDER_RELAXED ); +} + +static void ShutdownFatalHandler( + rtems_fatal_source source, + rtems_fatal_code code, + void *arg +) +{ + T_null( arg ); + + if ( + source == RTEMS_FATAL_SOURCE_SMP && + code == SMP_FATAL_SHUTDOWN_RESPONSE + ) { + (void) Add( &shutdown_response_counter, 1 ); + shutdown_response_cpu_index = rtems_scheduler_get_processor(); + } +} + +static void InitBspSparcLeon3ValFatalShutdownRequest( void ) +{ + irqamp *regs; + + regs = LEON3_IrqCtrl_Regs; + mpstat_during_sysinit = grlib_load_32( ®s->mpstat ); + SetFatalHandler( ShutdownFatalHandler, NULL ); +} + +RTEMS_SYSINIT_ITEM( + InitBspSparcLeon3ValFatalShutdownRequest, + RTEMS_SYSINIT_DEVICE_DRIVERS, + RTEMS_SYSINIT_ORDER_MIDDLE +); + +/** + * @brief Check the effects of the leon3 BSP family shutdown procedure. + */ +static void BspSparcLeon3ValFatalShutdownRequest_Action_0( void ) +{ + irqamp *regs; + uint32_t counter; + + regs = LEON3_IrqCtrl_Regs; + + /* + * Check that the second processor was not powered down during system + * initialization. + */ + T_step_eq_u32( 0, mpstat_during_sysinit & 0x2, 0 ); + + /* + * Wait until the second processor is powered down. + */ + while ( ( grlib_load_32( ®s->mpstat ) & 0x2 ) != 0x2U ) { + /* Wait */ + } + + /* + * Check that the RTEMS_FATAL_SOURCE_SMP with SMP_FATAL_SHUTDOWN_RESPONSE + * fatal error occurred exactly once. + */ + counter = Add( &shutdown_response_counter, 0 ); + T_step_eq_uint( 1, counter, 1 ); + + /* + * Check that the RTEMS_FATAL_SOURCE_SMP with SMP_FATAL_SHUTDOWN_RESPONSE + * fatal error occurred on the second processor. + */ + T_step_eq_u32( 2, shutdown_response_cpu_index, 1 ); +} + +/** + * @fn void T_case_body_BspSparcLeon3ValFatalShutdownRequest( void ) + */ +T_TEST_CASE( BspSparcLeon3ValFatalShutdownRequest ) +{ + T_plan( 3 ); + + BspSparcLeon3ValFatalShutdownRequest_Action_0(); +} + +/** @} */ diff --git a/testsuites/validation/bsps/tc-sparc-gr712rc.c b/testsuites/validation/bsps/tc-sparc-gr712rc.c new file mode 100644 index 0000000000..a16de3d6ed --- /dev/null +++ b/testsuites/validation/bsps/tc-sparc-gr712rc.c @@ -0,0 +1,124 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup BspSparcLeon3ValGr712rc + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <bsp.h> + +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup BspSparcLeon3ValGr712rc spec:/bsp/sparc/leon3/val/gr712rc + * + * @ingroup TestsuitesBspsValidationBsp0 + * + * @brief This test case collection provides validation test cases for the + * ``sparc/gr712rc`` BSP. + * + * This test case performs the following actions: + * + * - Validate the use of the ``-mfix-gr712rc`` compiler option. + * + * - Check that the compiler built-in define ``__FIX_LEON3FT_B2BST`` is + * defined. + * + * - Check that the compiler built-in define ``__FIX_LEON3FT_TN0018`` is + * defined. + * + * - Check that the ``SPARC_LEON3FT_B2BST_NOP`` define expands to a ``nop`` + * instruction. + * + * @{ + */ + +/** + * @brief Validate the use of the ``-mfix-gr712rc`` compiler option. + */ +static void BspSparcLeon3ValGr712rc_Action_0( void ) +{ + const char *s; + + /* + * Check that the compiler built-in define ``__FIX_LEON3FT_B2BST`` is + * defined. + */ + #if !defined(__FIX_LEON3FT_B2BST) + #error "__FIX_LEON3FT_B2BST is not defined" + #endif + + /* + * Check that the compiler built-in define ``__FIX_LEON3FT_TN0018`` is + * defined. + */ + #if !defined(__FIX_LEON3FT_TN0018) + #error "__FIX_LEON3FT_TN0018 is not defined" + #endif + + /* + * Check that the ``SPARC_LEON3FT_B2BST_NOP`` define expands to a ``nop`` + * instruction. + */ + s = RTEMS_XSTRING( SPARC_LEON3FT_B2BST_NOP ); + T_true( IsEqualIgnoreWhiteSpace( s, "nop" ) ); +} + +/** + * @fn void T_case_body_BspSparcLeon3ValGr712rc( void ) + */ +T_TEST_CASE( BspSparcLeon3ValGr712rc ) +{ + BspSparcLeon3ValGr712rc_Action_0(); +} + +/** @} */ diff --git a/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.c b/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.c new file mode 100644 index 0000000000..731b454ee4 --- /dev/null +++ b/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.c @@ -0,0 +1,187 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup DevClockXilTtcValFatalIrqInstall + */ + +/* + * Copyright (C) 2024 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <bsp.h> +#include <rtems.h> +#include <bsp/fatal.h> +#include <rtems/sysinit.h> + +#include "tr-fatal-clock-xil-ttc-irq-install.h" + +#include <rtems/test.h> + +/** + * @defgroup DevClockXilTtcValFatalIrqInstall \ + * spec:/dev/clock/xil-ttc/val/fatal-irq-install + * + * @ingroup TestsuitesBspsFatalClockXilTtcIrqInstall + * + * @brief Tests a fatal error. + * + * This test case performs the following actions: + * + * - The test action is carried out by the OccupyClockInterrupt() system + * initialization handler. + * + * - Check that the expected fatal source is present. + * + * - Check that the expected fatal code is present. + * + * @{ + */ + +/** + * @brief Test context for spec:/dev/clock/xil-ttc/val/fatal-irq-install test + * case. + */ +typedef struct { + /** + * @brief This member contains a copy of the corresponding + * DevClockXilTtcValFatalIrqInstall_Run() parameter. + */ + rtems_fatal_source source; + + /** + * @brief This member contains a copy of the corresponding + * DevClockXilTtcValFatalIrqInstall_Run() parameter. + */ + rtems_fatal_code code; +} DevClockXilTtcValFatalIrqInstall_Context; + +static DevClockXilTtcValFatalIrqInstall_Context + DevClockXilTtcValFatalIrqInstall_Instance; + +static void ClockInterrupt( void *arg ) +{ + (void) arg; +} + +static rtems_interrupt_entry interrupt_entry = RTEMS_INTERRUPT_ENTRY_INITIALIZER( + ClockInterrupt, + NULL, + "Clock" +); + +static void OccupyClockInterrupt( void ) +{ + (void) rtems_interrupt_entry_install( + XIL_CLOCK_TTC_IRQ, + RTEMS_INTERRUPT_UNIQUE, + &interrupt_entry + ); +} + +RTEMS_SYSINIT_ITEM( + OccupyClockInterrupt, + RTEMS_SYSINIT_DEVICE_DRIVERS, + RTEMS_SYSINIT_ORDER_FIRST +); + +static T_fixture DevClockXilTtcValFatalIrqInstall_Fixture = { + .setup = NULL, + .stop = NULL, + .teardown = NULL, + .scope = NULL, + .initial_context = &DevClockXilTtcValFatalIrqInstall_Instance +}; + +/** + * @brief The test action is carried out by the OccupyClockInterrupt() system + * initialization handler. + */ +static void DevClockXilTtcValFatalIrqInstall_Action_0( + DevClockXilTtcValFatalIrqInstall_Context *ctx +) +{ + /* Nothing to do */ + + /* + * Check that the expected fatal source is present. + */ + T_step_eq_int( 0, ctx->source, RTEMS_FATAL_SOURCE_BSP ); + + /* + * Check that the expected fatal code is present. + */ + T_step_eq_ulong( + 1, + ctx->code, + XIL_FATAL_TTC_IRQ_INSTALL + ); +} + +void DevClockXilTtcValFatalIrqInstall_Run( + rtems_fatal_source source, + rtems_fatal_code code +) +{ + DevClockXilTtcValFatalIrqInstall_Context *ctx; + + ctx = &DevClockXilTtcValFatalIrqInstall_Instance; + ctx->source = source; + ctx->code = code; + + ctx = T_case_begin( + "DevClockXilTtcValFatalIrqInstall", + &DevClockXilTtcValFatalIrqInstall_Fixture + ); + + T_plan( 2 ); + + DevClockXilTtcValFatalIrqInstall_Action_0( ctx ); + + T_case_end(); +} + +/** @} */ diff --git a/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.h b/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.h new file mode 100644 index 0000000000..74021233a0 --- /dev/null +++ b/testsuites/validation/bsps/tr-fatal-clock-xil-ttc-irq-install.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup DevClockXilTtcValFatalIrqInstall + */ + +/* + * Copyright (C) 2024 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifndef _TR_FATAL_CLOCK_XIL_TTC_IRQ_INSTALL_H +#define _TR_FATAL_CLOCK_XIL_TTC_IRQ_INSTALL_H + +#include <rtems.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup DevClockXilTtcValFatalIrqInstall + * + * @{ + */ + +/** + * @brief Runs the parameterized test case. + * + * @param source is fatal source. + * + * @param code is fatal code. + */ +void DevClockXilTtcValFatalIrqInstall_Run( + rtems_fatal_source source, + rtems_fatal_code code +); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TR_FATAL_CLOCK_XIL_TTC_IRQ_INSTALL_H */ diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.c b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.c new file mode 100644 index 0000000000..748fd88e70 --- /dev/null +++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.c @@ -0,0 +1,175 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup BspSparcLeon3ValFatalCacheSnoopingDisabledBoot + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <bsp/fatal.h> +#include <bsp/leon3.h> +#include <rtems/sysinit.h> + +#include "tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h" + +#include <rtems/test.h> + +/** + * @defgroup BspSparcLeon3ValFatalCacheSnoopingDisabledBoot \ + * spec:/bsp/sparc/leon3/val/fatal-cache-snooping-disabled-boot + * + * @ingroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledBoot + * + * @brief Tests a fatal error. + * + * This test case performs the following actions: + * + * - The test action is carried out by the DisableCacheSnooping() system + * initialization handler. + * + * - Check that the expected fatal source is present. + * + * - Check that the expected fatal code is present. + * + * @{ + */ + +/** + * @brief Test context for + * spec:/bsp/sparc/leon3/val/fatal-cache-snooping-disabled-boot test case. + */ +typedef struct { + /** + * @brief This member contains a copy of the corresponding + * BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Run() parameter. + */ + rtems_fatal_source source; + + /** + * @brief This member contains a copy of the corresponding + * BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Run() parameter. + */ + rtems_fatal_code code; +} BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Context; + +static BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Context + BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Instance; + +static void DisableCacheSnooping( void ) +{ + uint32_t control; + + control = leon3_get_cache_control_register(); + control &= ~LEON3_REG_CACHE_CTRL_DS; + leon3_set_cache_control_register( control ); +} + +RTEMS_SYSINIT_ITEM( + DisableCacheSnooping, + RTEMS_SYSINIT_BSP_EARLY, + RTEMS_SYSINIT_ORDER_FIRST +); + +static T_fixture BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Fixture = { + .setup = NULL, + .stop = NULL, + .teardown = NULL, + .scope = NULL, + .initial_context = &BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Instance +}; + +/** + * @brief The test action is carried out by the DisableCacheSnooping() system + * initialization handler. + */ +static void BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Action_0( + BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Context *ctx +) +{ + /* Nothing to do */ + + /* + * Check that the expected fatal source is present. + */ + T_step_eq_int( 0, ctx->source, RTEMS_FATAL_SOURCE_BSP ); + + /* + * Check that the expected fatal code is present. + */ + T_step_eq_ulong( + 1, + ctx->code, + LEON3_FATAL_INVALID_CACHE_CONFIG_BOOT_PROCESSOR + ); +} + +void BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Run( + rtems_fatal_source source, + rtems_fatal_code code +) +{ + BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Context *ctx; + + ctx = &BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Instance; + ctx->source = source; + ctx->code = code; + + ctx = T_case_begin( + "BspSparcLeon3ValFatalCacheSnoopingDisabledBoot", + &BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Fixture + ); + + T_plan( 2 ); + + BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Action_0( ctx ); + + T_case_end(); +} + +/** @} */ diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h new file mode 100644 index 0000000000..e375e6baac --- /dev/null +++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup BspSparcLeon3ValFatalCacheSnoopingDisabledBoot + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifndef _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_BOOT_H +#define _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_BOOT_H + +#include <rtems.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup BspSparcLeon3ValFatalCacheSnoopingDisabledBoot + * + * @{ + */ + +/** + * @brief Runs the parameterized test case. + * + * @param source is fatal source. + * + * @param code is fatal code. + */ +void BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Run( + rtems_fatal_source source, + rtems_fatal_code code +); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_BOOT_H */ diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.c b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.c new file mode 100644 index 0000000000..4d90abf42d --- /dev/null +++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.c @@ -0,0 +1,176 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <bsp/bootcard.h> +#include <bsp/fatal.h> +#include <bsp/leon3.h> + +#include "tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h" + +#include <rtems/test.h> + +/** + * @defgroup BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary \ + * spec:/bsp/sparc/leon3/val/fatal-cache-snooping-disabled-secondary + * + * @ingroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledSecondary + * + * @brief Tests a fatal error. + * + * This test case performs the following actions: + * + * - The test action is carried out by the wrapped + * bsp_start_on_secondary_processor() function. + * + * - Check that the expected fatal source is present. + * + * - Check that the expected fatal code is present. + * + * @{ + */ + +/** + * @brief Test context for + * spec:/bsp/sparc/leon3/val/fatal-cache-snooping-disabled-secondary test + * case. + */ +typedef struct { + /** + * @brief This member contains a copy of the corresponding + * BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Run() parameter. + */ + rtems_fatal_source source; + + /** + * @brief This member contains a copy of the corresponding + * BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Run() parameter. + */ + rtems_fatal_code code; +} BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Context; + +static BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Context + BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Instance; + +void __real_bsp_start_on_secondary_processor( struct Per_CPU_Control *cpu_self ); + +void __wrap_bsp_start_on_secondary_processor( struct Per_CPU_Control *cpu_self ); + +void __wrap_bsp_start_on_secondary_processor( struct Per_CPU_Control *cpu_self ) +{ + uint32_t control; + + control = leon3_get_cache_control_register(); + control &= ~LEON3_REG_CACHE_CTRL_DS; + leon3_set_cache_control_register( control ); + + __real_bsp_start_on_secondary_processor( cpu_self ); +} + +static T_fixture BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Fixture = { + .setup = NULL, + .stop = NULL, + .teardown = NULL, + .scope = NULL, + .initial_context = &BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Instance +}; + +/** + * @brief The test action is carried out by the wrapped + * bsp_start_on_secondary_processor() function. + */ +static void BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Action_0( + BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Context *ctx +) +{ + /* Nothing to do */ + + /* + * Check that the expected fatal source is present. + */ + T_step_eq_int( 0, ctx->source, RTEMS_FATAL_SOURCE_BSP ); + + /* + * Check that the expected fatal code is present. + */ + T_step_eq_ulong( + 1, + ctx->code, + LEON3_FATAL_INVALID_CACHE_CONFIG_SECONDARY_PROCESSOR + ); +} + +void BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Run( + rtems_fatal_source source, + rtems_fatal_code code +) +{ + BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Context *ctx; + + ctx = &BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Instance; + ctx->source = source; + ctx->code = code; + + ctx = T_case_begin( + "BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary", + &BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Fixture + ); + + T_plan( 2 ); + + BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Action_0( ctx ); + + T_case_end(); +} + +/** @} */ diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h new file mode 100644 index 0000000000..0782942222 --- /dev/null +++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifndef _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_SECONDARY_H +#define _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_SECONDARY_H + +#include <rtems.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary + * + * @{ + */ + +/** + * @brief Runs the parameterized test case. + * + * @param source is fatal source. + * + * @param code is fatal code. + */ +void BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Run( + rtems_fatal_source source, + rtems_fatal_code code +); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TR_FATAL_SPARC_LEON3_CACHE_SNOOPING_DISABLED_SECONDARY_H */ diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.c b/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.c new file mode 100644 index 0000000000..5cd81b736c --- /dev/null +++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.c @@ -0,0 +1,190 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup BspSparcLeon3ValFatalClockInitialization + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <bsp/fatal.h> +#include <bsp/leon3.h> +#include <rtems/irq-extension.h> +#include <rtems/sysinit.h> + +#include "tr-fatal-sparc-leon3-clock-initialization.h" + +#include <rtems/test.h> + +/** + * @defgroup BspSparcLeon3ValFatalClockInitialization \ + * spec:/bsp/sparc/leon3/val/fatal-clock-initialization + * + * @ingroup TestsuitesBspsFatalSparcLeon3ClockInitialization + * + * @brief Tests a fatal error. + * + * This test case performs the following actions: + * + * - The test action is carried out by the OccupyClockInterrupt() system + * initialization handler. + * + * - Check that the expected fatal source is present. + * + * - Check that the expected fatal code is present. + * + * @{ + */ + +/** + * @brief Test context for spec:/bsp/sparc/leon3/val/fatal-clock-initialization + * test case. + */ +typedef struct { + /** + * @brief This member contains a copy of the corresponding + * BspSparcLeon3ValFatalClockInitialization_Run() parameter. + */ + rtems_fatal_source source; + + /** + * @brief This member contains a copy of the corresponding + * BspSparcLeon3ValFatalClockInitialization_Run() parameter. + */ + rtems_fatal_code code; +} BspSparcLeon3ValFatalClockInitialization_Context; + +static BspSparcLeon3ValFatalClockInitialization_Context + BspSparcLeon3ValFatalClockInitialization_Instance; + +static void ClockInterrupt( void *arg ) +{ + (void) arg; +} + +static rtems_interrupt_entry interrupt_entry = RTEMS_INTERRUPT_ENTRY_INITIALIZER( + ClockInterrupt, + NULL, + "Clock" +); + +static void OccupyClockInterrupt( void ) +{ + rtems_vector_number vector; + + vector = GPTIMER_CONFIG_IRQ_GET( grlib_load_32( &LEON3_Timer_Regs->config ) ); + (void) rtems_interrupt_entry_install( + vector, + RTEMS_INTERRUPT_UNIQUE, + &interrupt_entry + ); +} + +RTEMS_SYSINIT_ITEM( + OccupyClockInterrupt, + RTEMS_SYSINIT_DEVICE_DRIVERS, + RTEMS_SYSINIT_ORDER_FIRST +); + +static T_fixture BspSparcLeon3ValFatalClockInitialization_Fixture = { + .setup = NULL, + .stop = NULL, + .teardown = NULL, + .scope = NULL, + .initial_context = &BspSparcLeon3ValFatalClockInitialization_Instance +}; + +/** + * @brief The test action is carried out by the OccupyClockInterrupt() system + * initialization handler. + */ +static void BspSparcLeon3ValFatalClockInitialization_Action_0( + BspSparcLeon3ValFatalClockInitialization_Context *ctx +) +{ + /* Nothing to do */ + + /* + * Check that the expected fatal source is present. + */ + T_step_eq_int( 0, ctx->source, RTEMS_FATAL_SOURCE_BSP ); + + /* + * Check that the expected fatal code is present. + */ + T_step_eq_ulong( + 1, + ctx->code, + LEON3_FATAL_CLOCK_INITIALIZATION + ); +} + +void BspSparcLeon3ValFatalClockInitialization_Run( + rtems_fatal_source source, + rtems_fatal_code code +) +{ + BspSparcLeon3ValFatalClockInitialization_Context *ctx; + + ctx = &BspSparcLeon3ValFatalClockInitialization_Instance; + ctx->source = source; + ctx->code = code; + + ctx = T_case_begin( + "BspSparcLeon3ValFatalClockInitialization", + &BspSparcLeon3ValFatalClockInitialization_Fixture + ); + + T_plan( 2 ); + + BspSparcLeon3ValFatalClockInitialization_Action_0( ctx ); + + T_case_end(); +} + +/** @} */ diff --git a/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.h b/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.h new file mode 100644 index 0000000000..6997b3f22c --- /dev/null +++ b/testsuites/validation/bsps/tr-fatal-sparc-leon3-clock-initialization.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup BspSparcLeon3ValFatalClockInitialization + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifndef _TR_FATAL_SPARC_LEON3_CLOCK_INITIALIZATION_H +#define _TR_FATAL_SPARC_LEON3_CLOCK_INITIALIZATION_H + +#include <rtems.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup BspSparcLeon3ValFatalClockInitialization + * + * @{ + */ + +/** + * @brief Runs the parameterized test case. + * + * @param source is fatal source. + * + * @param code is fatal code. + */ +void BspSparcLeon3ValFatalClockInitialization_Run( + rtems_fatal_source source, + rtems_fatal_code code +); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TR_FATAL_SPARC_LEON3_CLOCK_INITIALIZATION_H */ diff --git a/testsuites/validation/bsps/ts-fatal-clock-xil-ttc-irq-install.c b/testsuites/validation/bsps/ts-fatal-clock-xil-ttc-irq-install.c new file mode 100644 index 0000000000..e5c1062348 --- /dev/null +++ b/testsuites/validation/bsps/ts-fatal-clock-xil-ttc-irq-install.c @@ -0,0 +1,79 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup TestsuitesBspsFatalClockXilTtcIrqInstall + */ + +/* + * Copyright (C) 2024 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tr-fatal-clock-xil-ttc-irq-install.h" + +#include <rtems/test.h> + +/** + * @defgroup TestsuitesBspsFatalClockXilTtcIrqInstall \ + * spec:/testsuites/bsps/fatal-clock-xil-ttc-irq-install + * + * @ingroup RTEMSTestSuitesValidation + * + * @brief This validation test suite contains a test case which triggers a + * fatal error during system initialization. + * + * @{ + */ + +const char rtems_test_name[] = "TestsuitesBspsFatalClockXilTtcIrqInstall"; + +#define FATAL_SYSINIT_RUN DevClockXilTtcValFatalIrqInstall_Run + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#include "ts-fatal-sysinit.h" + +/** @} */ diff --git a/testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-boot.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-boot.c new file mode 100644 index 0000000000..53e18b5b0b --- /dev/null +++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-boot.c @@ -0,0 +1,79 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledBoot + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tr-fatal-sparc-leon3-cache-snooping-disabled-boot.h" + +#include <rtems/test.h> + +/** + * @defgroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledBoot \ + * spec:/testsuites/bsps/fatal-sparc-leon3-cache-snooping-disabled-boot + * + * @ingroup RTEMSTestSuitesValidation + * + * @brief This validation test suite contains a test case which triggers a + * fatal error during system initialization. + * + * @{ + */ + +const char rtems_test_name[] = "TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledBoot"; + +#define FATAL_SYSINIT_RUN BspSparcLeon3ValFatalCacheSnoopingDisabledBoot_Run + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#include "ts-fatal-sysinit.h" + +/** @} */ diff --git a/testsuites/validation/ts-validation-smp-only-1.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-secondary.c index a1f9eeb413..3b8829dcf9 100644 --- a/testsuites/validation/ts-validation-smp-only-1.c +++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-cache-snooping-disabled-secondary.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly1 + * @ingroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledSecondary */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -52,43 +52,31 @@ #include "config.h" #endif -#include "ts-config.h" +#include "tr-fatal-sparc-leon3-cache-snooping-disabled-secondary.h" #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationSmpOnly1 \ - * spec:/testsuites/validation-smp-only-1 + * @defgroup TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledSecondary \ + * spec:/testsuites/bsps/fatal-sparc-leon3-cache-snooping-disabled-secondary * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * - * @brief This SMP-only test suite validates the clustered scheduler - * configuration through an application configuration with a processor - * maximum of two, however, only the first processor has a scheduler - * assigned. + * @brief This validation test suite contains a test case which triggers a + * fatal error during system initialization. * * @{ */ -const char rtems_test_name[] = "ValidationSMPOnly1"; +const char rtems_test_name[] = "TestsuitesBspsFatalSparcLeon3CacheSnoopingDisabledSecondary"; -#define CONFIGURE_MAXIMUM_PROCESSORS 2 - -#include <rtems/score/scheduleredfsmp.h> - -#define CONFIGURE_SCHEDULER_EDF_SMP +#define FATAL_SYSINIT_RUN \ + BspSparcLeon3ValFatalCacheSnoopingDisabledSecondary_Run -#include <rtems/scheduler.h> +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER -RTEMS_SCHEDULER_EDF_SMP( a ); - -#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \ - RTEMS_SCHEDULER_TABLE_EDF_SMP( a, TEST_SCHEDULER_A_NAME ) - -#define CONFIGURE_SCHEDULER_ASSIGNMENTS \ - RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \ - RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER +#define CONFIGURE_MAXIMUM_PROCESSORS 2 -#include "ts-default.h" +#include "ts-fatal-sysinit.h" /** @} */ diff --git a/testsuites/validation/bsps/ts-fatal-sparc-leon3-clock-initialization.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-clock-initialization.c new file mode 100644 index 0000000000..b75223537f --- /dev/null +++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-clock-initialization.c @@ -0,0 +1,79 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup TestsuitesBspsFatalSparcLeon3ClockInitialization + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tr-fatal-sparc-leon3-clock-initialization.h" + +#include <rtems/test.h> + +/** + * @defgroup TestsuitesBspsFatalSparcLeon3ClockInitialization \ + * spec:/testsuites/bsps/fatal-sparc-leon3-clock-initialization + * + * @ingroup RTEMSTestSuitesValidation + * + * @brief This validation test suite contains a test case which triggers a + * fatal error during system initialization. + * + * @{ + */ + +const char rtems_test_name[] = "TestsuitesBspsFatalSparcLeon3ClockInitialization"; + +#define FATAL_SYSINIT_RUN BspSparcLeon3ValFatalClockInitialization_Run + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#include "ts-fatal-sysinit.h" + +/** @} */ diff --git a/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown-response.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown-response.c new file mode 100644 index 0000000000..d730b6d027 --- /dev/null +++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown-response.c @@ -0,0 +1,94 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSTestSuiteTestsuitesFatalBspSparcLeon3ShutdownResponse + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/score/smpimpl.h> + +#include "tr-fatal-sparc-leon3-shutdown-response.h" + +#include <rtems/test.h> + +/** + * @defgroup RTEMSTestSuiteTestsuitesFatalBspSparcLeon3ShutdownResponse \ + * spec:/testsuites/fatal-sparc-leon3-shutdown-response + * + * @ingroup RTEMSTestSuitesValidation + * + * @brief This validation test suite contains a test case which performs a + * system shutdown. + * + * @{ + */ + +const char rtems_test_name[] = "FatalBspSparcLeon3ShutdownResponse"; + +#define FATAL_SYSINIT_RUN BspSparcLeon3ValFatalShutdownResponse_Run + +static void FatalSysinitExit( rtems_fatal_code exit_code ) +{ + if ( exit_code == 0 ) { + rtems_fatal( RTEMS_FATAL_SOURCE_SMP, SMP_FATAL_SHUTDOWN ); + } else { + rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, exit_code ); + } +} + +#define FATAL_SYSINIT_EXIT( exit_code ) FatalSysinitExit( exit_code ) + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_PROCESSORS 2 + +#include "ts-fatal-sysinit.h" + +/** @} */ diff --git a/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c b/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c new file mode 100644 index 0000000000..bc229e7824 --- /dev/null +++ b/testsuites/validation/bsps/ts-fatal-sparc-leon3-shutdown.c @@ -0,0 +1,177 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup TestsuitesBspsFatalSparcLeon3Shutdown + */ + +/* + * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> +#include <rtems/bspIo.h> +#include <rtems/test-info.h> +#include <rtems/test.h> +#include <rtems/testopts.h> +#include <rtems/score/smpimpl.h> + +#include "ts-config.h" +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup TestsuitesBspsFatalSparcLeon3Shutdown \ + * spec:/testsuites/bsps/fatal-sparc-leon3-shutdown + * + * @ingroup RTEMSTestSuitesValidation + * + * @brief This validation test suite provides an application configuration to + * perform a shutdown. + * + * @{ + */ + +const char rtems_test_name[] = "TestsuitesBspsFatalSparcLeon3Shutdown"; + +static char buffer[ 512 ]; + +static const T_action actions[] = { + T_report_hash_sha256 +}; + +static const T_config test_config = { + .name = rtems_test_name, + .buf = buffer, + .buf_size = sizeof( buffer ), + .putchar = rtems_put_char, + .verbosity = RTEMS_TEST_VERBOSITY, + .now = T_now_tick, + .allocate = T_memory_allocate, + .deallocate = T_memory_deallocate, + .action_count = T_ARRAY_SIZE( actions ), + .actions = actions +}; + +void __real__CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr code ); + +void __wrap__CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr code ); + +void __wrap__CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr code ) +{ + int exit_code; + + T_register(); + exit_code = T_main( &test_config ); + + if ( exit_code == 0 ) { + rtems_test_end( rtems_test_name ); + } + +#if defined(RTEMS_GCOV_COVERAGE) + rtems_test_gcov_dump_info(); +#endif + __real__CPU_Fatal_halt( source, code ); +} + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#if defined(RTEMS_SMP) +#define CONFIGURE_MAXIMUM_PROCESSORS 2 + +#include <rtems/score/scheduleredfsmp.h> + +#define CONFIGURE_SCHEDULER_EDF_SMP + +#include <rtems/scheduler.h> + +RTEMS_SCHEDULER_EDF_SMP( a ); + +#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \ + RTEMS_SCHEDULER_TABLE_EDF_SMP( a, TEST_SCHEDULER_A_NAME ) + +#define CONFIGURE_SCHEDULER_ASSIGNMENTS \ + RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \ + RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ) +#endif /* RTEMS_SMP */ + +#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 0 + +#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1 + +#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY + +#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM + +#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE + +#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION + +static void *ShutdownIdleBody( uintptr_t arg ) +{ +#if defined(RTEMS_SMP) + if ( rtems_scheduler_get_processor() == 0 ) { + rtems_test_begin( rtems_test_name, TEST_STATE ); + rtems_fatal( RTEMS_FATAL_SOURCE_SMP, SMP_FATAL_SHUTDOWN ); + } + + return _CPU_Thread_Idle_body( arg ); +#else + rtems_test_begin( rtems_test_name, TEST_STATE ); + rtems_fatal( RTEMS_FATAL_SOURCE_APPLICATION, 123 ); +#endif +} + +#define CONFIGURE_IDLE_TASK_BODY ShutdownIdleBody + +#define CONFIGURE_INITIAL_EXTENSIONS { .fatal = FatalInitialExtension } + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> + +/** @} */ diff --git a/testsuites/validation/bsps/ts-validation-bsp-0.c b/testsuites/validation/bsps/ts-validation-bsp-0.c new file mode 100644 index 0000000000..c072c8fdf1 --- /dev/null +++ b/testsuites/validation/bsps/ts-validation-bsp-0.c @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup TestsuitesBspsValidationBsp0 + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/test.h> + +/** + * @defgroup TestsuitesBspsValidationBsp0 \ + * spec:/testsuites/bsps/validation-bsp-0 + * + * @ingroup RTEMSTestSuitesValidation + * + * @brief This general purpose validation test suite provides enough resources + * to run target-specific tests. + * + * @{ + */ + +const char rtems_test_name[] = "TestsuitesBspsValidationBsp0"; + +#include "ts-default.h" + +/** @} */ diff --git a/testsuites/validation/tc-acfg-appl-does-not-need-clock-driver.c b/testsuites/validation/tc-acfg-appl-does-not-need-clock-driver.c index 3aef1497be..632ce8f164 100644 --- a/testsuites/validation/tc-acfg-appl-does-not-need-clock-driver.c +++ b/testsuites/validation/tc-acfg-appl-does-not-need-clock-driver.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValApplDoesNotNeedClockDriver + * @ingroup AcfgValApplDoesNotNeedClockDriver */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseAcfgValApplDoesNotNeedClockDriver \ + * @defgroup AcfgValApplDoesNotNeedClockDriver \ * spec:/acfg/val/appl-does-not-need-clock-driver * - * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg0 + * @ingroup TestsuitesValidationAcfg0 * * @brief Tests the effect of the * CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER application configuration diff --git a/testsuites/validation/tc-acfg-appl-needs-clock-driver.c b/testsuites/validation/tc-acfg-appl-needs-clock-driver.c index 5da259977f..fe62dd7de6 100644 --- a/testsuites/validation/tc-acfg-appl-needs-clock-driver.c +++ b/testsuites/validation/tc-acfg-appl-needs-clock-driver.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValApplNeedsClockDriver + * @ingroup AcfgValApplNeedsClockDriver */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseAcfgValApplNeedsClockDriver \ - * spec:/acfg/val/appl-needs-clock-driver + * @defgroup AcfgValApplNeedsClockDriver spec:/acfg/val/appl-needs-clock-driver * - * @ingroup RTEMSTestSuiteTestsuitesValidation0 + * @ingroup TestsuitesValidation0 * * @brief Tests the effect of the CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER * application configuration option. diff --git a/testsuites/validation/tc-acfg-default.c b/testsuites/validation/tc-acfg-default.c index 95fa497cf1..bc23363c49 100644 --- a/testsuites/validation/tc-acfg-default.c +++ b/testsuites/validation/tc-acfg-default.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValDefault + * @ingroup AcfgValDefault */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseAcfgValDefault spec:/acfg/val/default + * @defgroup AcfgValDefault spec:/acfg/val/default * - * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg0 + * @ingroup TestsuitesValidationAcfg0 * * @brief Tests the default values of application configuration options. * @@ -74,10 +74,10 @@ * * - Check the configured CONFIGURE_IDLE_TASK_BODY. * - * - Check the default value CONFIGURE_IDLE_TASK_STACK_SIZE where the + * - Check the default value of CONFIGURE_IDLE_TASK_STACK_SIZE where the * optional BSP-provided default value is enabled. * - * - Check the default value CONFIGURE_INTERRUPT_STACK_SIZE where the + * - Check the default value of CONFIGURE_INTERRUPT_STACK_SIZE where the * optional BSP-provided default value is enabled. * * - Check the BSP-provided initial extension is registered. @@ -160,8 +160,8 @@ static void AcfgValDefault_Action_0( void ) T_step_eq_ptr( 0, rtems_configuration_get_idle_task(), IdleBody ); /* - * Check the default value CONFIGURE_IDLE_TASK_STACK_SIZE where the optional - * BSP-provided default value is enabled. + * Check the default value of CONFIGURE_IDLE_TASK_STACK_SIZE where the + * optional BSP-provided default value is enabled. */ T_step_eq_sz( 1, @@ -174,8 +174,8 @@ static void AcfgValDefault_Action_0( void ) ); /* - * Check the default value CONFIGURE_INTERRUPT_STACK_SIZE where the optional - * BSP-provided default value is enabled. + * Check the default value of CONFIGURE_INTERRUPT_STACK_SIZE where the + * optional BSP-provided default value is enabled. */ T_step_eq_sz( 2, diff --git a/testsuites/validation/tc-acfg-disabled-bsp-settings.c b/testsuites/validation/tc-acfg-disabled-bsp-settings.c index 0dbae670f3..acd5d454e3 100644 --- a/testsuites/validation/tc-acfg-disabled-bsp-settings.c +++ b/testsuites/validation/tc-acfg-disabled-bsp-settings.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValDisabledBspSettings + * @ingroup AcfgValDisabledBspSettings */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,10 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseAcfgValDisabledBspSettings \ - * spec:/acfg/val/disabled-bsp-settings + * @defgroup AcfgValDisabledBspSettings spec:/acfg/val/disabled-bsp-settings * - * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg1 + * @ingroup TestsuitesValidationAcfg1 * * @brief Tests the default values of application configuration options where * all optional BSP provided settings are disabled. diff --git a/testsuites/validation/tc-acfg-one-cpu.c b/testsuites/validation/tc-acfg-one-cpu.c index 5175829d55..8806e11b4e 100644 --- a/testsuites/validation/tc-acfg-one-cpu.c +++ b/testsuites/validation/tc-acfg-one-cpu.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValOneCpu + * @ingroup AcfgValOneCpu */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseAcfgValOneCpu spec:/acfg/val/one-cpu + * @defgroup AcfgValOneCpu spec:/acfg/val/one-cpu * - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationOneCpu0 * * @brief Tests the effect of application configuration options. * @@ -73,7 +73,7 @@ * * - Check that the CONFIGURE_MAXIMUM_PRIORITY application configuration * option resulted in the expected system setting using - * /rtems/task/if/maximum-priority. + * spec:/rtems/task/if/maximum-priority. * * - Check that the Deterministic Priority Scheduler which was configured by * the CONFIGURE_SCHEDULER_PRIORITY application configuration in the test @@ -122,7 +122,7 @@ static void AcfgValOneCpu_Action_0( void ) /* * Check that the CONFIGURE_MAXIMUM_PRIORITY application configuration option * resulted in the expected system setting using - * /rtems/task/if/maximum-priority. + * spec:/rtems/task/if/maximum-priority. */ T_eq_u32( RTEMS_MAXIMUM_PRIORITY, 127 ); diff --git a/testsuites/validation/tc-acfg-scheduler-edf-smp.c b/testsuites/validation/tc-acfg-scheduler-edf-smp.c index 75b24b97d3..bbd974a588 100644 --- a/testsuites/validation/tc-acfg-scheduler-edf-smp.c +++ b/testsuites/validation/tc-acfg-scheduler-edf-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValSchedulerEdfSmp + * @ingroup AcfgValSchedulerEdfSmp */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseAcfgValSchedulerEdfSmp \ - * spec:/acfg/val/scheduler-edf-smp + * @defgroup AcfgValSchedulerEdfSmp spec:/acfg/val/scheduler-edf-smp * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @brief Tests the effect of application configuration options. * diff --git a/testsuites/validation/tc-acfg-scheduler-table-entries-one-cpu.c b/testsuites/validation/tc-acfg-scheduler-table-entries-one-cpu.c new file mode 100644 index 0000000000..48db6c4244 --- /dev/null +++ b/testsuites/validation/tc-acfg-scheduler-table-entries-one-cpu.c @@ -0,0 +1,102 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup AcfgValSchedulerTableEntriesOneCpu + */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> + +#include <rtems/test.h> + +/** + * @defgroup AcfgValSchedulerTableEntriesOneCpu \ + * spec:/acfg/val/scheduler-table-entries-one-cpu + * + * @ingroup TestsuitesValidationOneCpu1 + * + * @brief Tests the effect of CONFIGURE_SCHEDULER_TABLE_ENTRIES the application + * configuration options in a configuration with only one processor. + * + * This test case performs the following actions: + * + * - Check the effect of the application configuration option. + * + * - Check that the CONFIGURE_SCHEDULER_TABLE_ENTRIES application + * configuration option resulted in the expected system setting using + * RTEMS_MAXIMUM_PRIORITY. + * + * @{ + */ + +/** + * @brief Check the effect of the application configuration option. + */ +static void AcfgValSchedulerTableEntriesOneCpu_Action_0( void ) +{ + /* Nothing to do */ + + /* + * Check that the CONFIGURE_SCHEDULER_TABLE_ENTRIES application configuration + * option resulted in the expected system setting using + * RTEMS_MAXIMUM_PRIORITY. + */ + T_eq_u32( RTEMS_MAXIMUM_PRIORITY, 63 ); +} + +/** + * @fn void T_case_body_AcfgValSchedulerTableEntriesOneCpu( void ) + */ +T_TEST_CASE( AcfgValSchedulerTableEntriesOneCpu ) +{ + AcfgValSchedulerTableEntriesOneCpu_Action_0(); +} + +/** @} */ diff --git a/testsuites/validation/tc-acfg.c b/testsuites/validation/tc-acfg.c index fb16536737..60f32ad929 100644 --- a/testsuites/validation/tc-acfg.c +++ b/testsuites/validation/tc-acfg.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValAcfg + * @ingroup AcfgValAcfg */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,9 +62,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseAcfgValAcfg spec:/acfg/val/acfg + * @defgroup AcfgValAcfg spec:/acfg/val/acfg * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests the effect of application configuration options. * @@ -132,11 +132,11 @@ * * - Check the configured CONFIGURE_TASK_STACK_ALLOCATOR hook. Using the * test stack allocator validates also - * /acfg/if/init-task-construct-storage-size, since the + * spec:/acfg/if/init-task-construct-storage-size, since the * test_task_stack_allocate() allocate handler only supports * CONFIGURE_MAXIMUM_TASKS minus one stacks and the validation test for - * /rtems/task/req/create-errors creates for some pre-condition variants - * all tasks until RTEMS_TOO_MANY is returned. In addition, + * spec:/rtems/task/req/create-errors creates for some pre-condition + * variants all tasks until RTEMS_TOO_MANY is returned. In addition, * test_task_stack_allocate() checks that the allocation size is greater * than or equal to TEST_MINIMUM_STACK_SIZE which validates * CONFIGURE_MINIMUM_TASK_STACK_SIZE. @@ -342,11 +342,12 @@ static void AcfgValAcfg_Action_0( void ) /* * Check the configured CONFIGURE_TASK_STACK_ALLOCATOR hook. Using the test - * stack allocator validates also /acfg/if/init-task-construct-storage-size, - * since the test_task_stack_allocate() allocate handler only supports + * stack allocator validates also + * spec:/acfg/if/init-task-construct-storage-size, since the + * test_task_stack_allocate() allocate handler only supports * CONFIGURE_MAXIMUM_TASKS minus one stacks and the validation test for - * /rtems/task/req/create-errors creates for some pre-condition variants all - * tasks until RTEMS_TOO_MANY is returned. In addition, + * spec:/rtems/task/req/create-errors creates for some pre-condition variants + * all tasks until RTEMS_TOO_MANY is returned. In addition, * test_task_stack_allocate() checks that the allocation size is greater than * or equal to TEST_MINIMUM_STACK_SIZE which validates * CONFIGURE_MINIMUM_TASK_STACK_SIZE. diff --git a/testsuites/validation/tc-attr.c b/testsuites/validation/tc-attr.c index 3d39dcd6d5..05128372bf 100644 --- a/testsuites/validation/tc-attr.c +++ b/testsuites/validation/tc-attr.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsAttrValAttr + * @ingroup RtemsAttrValAttr */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsAttrValAttr spec:/rtems/attr/val/attr + * @defgroup RtemsAttrValAttr spec:/rtems/attr/val/attr * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests the attribute constants of the Classic API. * @@ -124,7 +124,7 @@ * * - Check the value of RTEMS_DEFAULT_ATTRIBUTES. * - * - Check RTEMS_DEFAULT_ATTRIBUTES equals ``RTEMS_FIFO | RTEMS_LOCAL``. + * - Check RTEMS_DEFAULT_ATTRIBUTES equals RTEMS_FIFO | RTEMS_LOCAL. * * @{ */ @@ -324,7 +324,7 @@ static void RtemsAttrValAttr_Action_4( void ) /* No action */ /* - * Check RTEMS_DEFAULT_ATTRIBUTES equals ``RTEMS_FIFO | RTEMS_LOCAL``. + * Check RTEMS_DEFAULT_ATTRIBUTES equals RTEMS_FIFO | RTEMS_LOCAL. */ T_step_eq_int( 22, diff --git a/testsuites/validation/tc-barrier-create.c b/testsuites/validation/tc-barrier-create.c index 64b2540c79..ba35d0ad97 100644 --- a/testsuites/validation/tc-barrier-create.c +++ b/testsuites/validation/tc-barrier-create.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsBarrierReqCreate + * @ingroup RtemsBarrierReqCreate */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsBarrierReqCreate spec:/rtems/barrier/req/create + * @defgroup RtemsBarrierReqCreate spec:/rtems/barrier/req/create * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-barrier-delete.c b/testsuites/validation/tc-barrier-delete.c index 1915ffb7ad..456459c343 100644 --- a/testsuites/validation/tc-barrier-delete.c +++ b/testsuites/validation/tc-barrier-delete.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsBarrierReqDelete + * @ingroup RtemsBarrierReqDelete */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsBarrierReqDelete spec:/rtems/barrier/req/delete + * @defgroup RtemsBarrierReqDelete spec:/rtems/barrier/req/delete * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-barrier-ident.c b/testsuites/validation/tc-barrier-ident.c index dcb4a1c273..0378301fb8 100644 --- a/testsuites/validation/tc-barrier-ident.c +++ b/testsuites/validation/tc-barrier-ident.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsBarrierValIdent + * @ingroup RtemsBarrierValIdent */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,16 +57,16 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsBarrierValIdent spec:/rtems/barrier/val/ident + * @defgroup RtemsBarrierValIdent spec:/rtems/barrier/val/ident * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Test the rtems_barrier_ident() directive. * * This test case performs the following actions: * * - Run the generic object identification tests for Classic API partition - * class objects defined by /rtems/req/ident-local. + * class objects defined by spec:/rtems/req/ident-local. * * @{ */ @@ -83,7 +83,7 @@ static rtems_status_code ClassicBarrierIdentAction( /** * @brief Run the generic object identification tests for Classic API partition - * class objects defined by /rtems/req/ident-local. + * class objects defined by spec:/rtems/req/ident-local. */ static void RtemsBarrierValIdent_Action_0( void ) { diff --git a/testsuites/validation/tc-barrier-performance.c b/testsuites/validation/tc-barrier-performance.c index 91573e4c10..52ca8685b6 100644 --- a/testsuites/validation/tc-barrier-performance.c +++ b/testsuites/validation/tc-barrier-performance.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsBarrierValPerf + * @ingroup RtemsBarrierValPerf */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsBarrierValPerf spec:/rtems/barrier/val/perf + * @defgroup RtemsBarrierValPerf spec:/rtems/barrier/val/perf * - * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0 + * @ingroup TestsuitesPerformanceNoClock0 * * @brief This test case provides a context to run @ref RTEMSAPIClassicBarrier * performance tests. @@ -160,6 +160,13 @@ static T_fixture RtemsBarrierValPerf_Fixture = { }; /** + * @defgroup RtemsBarrierReqPerfReleaseAuto \ + * spec:/rtems/barrier/req/perf-release-auto + * + * @{ + */ + +/** * @brief Create an automatic release barrier. */ static void RtemsBarrierReqPerfReleaseAuto_Prepare( @@ -244,8 +251,17 @@ static void RtemsBarrierReqPerfReleaseAuto_Cleanup( T_rsc_success( sc ); } +/** @} */ + #if defined(RTEMS_SMP) /** + * @defgroup RtemsBarrierReqPerfReleaseAutoOtherCpu \ + * spec:/rtems/barrier/req/perf-release-auto-other-cpu + * + * @{ + */ + +/** * @brief Create an automatic release barrier. Create and start a worker task. */ static void RtemsBarrierReqPerfReleaseAutoOtherCpu_Prepare( @@ -341,9 +357,18 @@ static void RtemsBarrierReqPerfReleaseAutoOtherCpu_Cleanup( sc = rtems_barrier_delete( ctx->barrier_id ); T_rsc_success( sc ); } + +/** @} */ #endif /** + * @defgroup RtemsBarrierReqPerfReleaseManual \ + * spec:/rtems/barrier/req/perf-release-manual + * + * @{ + */ + +/** * @brief Create a manual release barrier. Create and start a worker task. */ static void RtemsBarrierReqPerfReleaseManual_Prepare( @@ -456,6 +481,15 @@ static void RtemsBarrierReqPerfReleaseManual_Cleanup( RestoreRunnerPriority(); } +/** @} */ + +/** + * @defgroup RtemsBarrierReqPerfReleaseManualPreempt \ + * spec:/rtems/barrier/req/perf-release-manual-preempt + * + * @{ + */ + /** * @brief Create a manual release barrier. Create and start a worker task. */ @@ -555,6 +589,8 @@ static void RtemsBarrierReqPerfReleaseManualPreempt_Cleanup( RestoreRunnerPriority(); } +/** @} */ + /** * @fn void T_case_body_RtemsBarrierValPerf( void ) */ diff --git a/testsuites/validation/tc-barrier-release.c b/testsuites/validation/tc-barrier-release.c index beb26f4660..b584943531 100644 --- a/testsuites/validation/tc-barrier-release.c +++ b/testsuites/validation/tc-barrier-release.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsBarrierReqRelease + * @ingroup RtemsBarrierReqRelease */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsBarrierReqRelease \ - * spec:/rtems/barrier/req/release + * @defgroup RtemsBarrierReqRelease spec:/rtems/barrier/req/release * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-barrier-wait.c b/testsuites/validation/tc-barrier-wait.c index 700b846cad..49d29a45c8 100644 --- a/testsuites/validation/tc-barrier-wait.c +++ b/testsuites/validation/tc-barrier-wait.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsBarrierReqWait + * @ingroup RtemsBarrierReqWait */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsBarrierReqWait spec:/rtems/barrier/req/wait + * @defgroup RtemsBarrierReqWait spec:/rtems/barrier/req/wait * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-basedefs-no-debug.c b/testsuites/validation/tc-basedefs-no-debug.c new file mode 100644 index 0000000000..b3cfa5dd40 --- /dev/null +++ b/testsuites/validation/tc-basedefs-no-debug.c @@ -0,0 +1,135 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RtemsBasedefsValBasedefsNoDebug + */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> + +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup RtemsBasedefsValBasedefsNoDebug \ + * spec:/rtems/basedefs/val/basedefs-no-debug + * + * @ingroup TestsuitesValidationNoClock0 + * + * @brief Tests the basedefs macros where RTEMS_DEBUG is disabled. + * + * This test case performs the following actions: + * + * - Expand and stringify RTEMS_UNREACHABLE(). + * + * - Check that the string is equal to the expected statement. + * + * - Expand RTEMS_FUNCTION_NAME. + * + * - Check that the string is equal to the expected function name. + * + * @{ + */ + +/** + * @brief Expand and stringify RTEMS_UNREACHABLE(). + */ +static void RtemsBasedefsValBasedefsNoDebug_Action_0( void ) +{ + const char *s; + + s = RTEMS_XSTRING( RTEMS_UNREACHABLE() ); + + /* + * Check that the string is equal to the expected statement. + */ + T_step_true( + 0, + IsEqualIgnoreWhiteSpace( + s, + "__builtin_unreachable()" + ) + ); +} + +/** + * @brief Expand RTEMS_FUNCTION_NAME. + */ +static void RtemsBasedefsValBasedefsNoDebug_Action_1( void ) +{ + const char *s; + + s = RTEMS_FUNCTION_NAME; + + /* + * Check that the string is equal to the expected function name. + */ + T_step_true( + 1, + IsEqualIgnoreWhiteSpace( + s, + "RtemsBasedefsValBasedefsNoDebug_Action_1" + ) + ); +} + +/** + * @fn void T_case_body_RtemsBasedefsValBasedefsNoDebug( void ) + */ +T_TEST_CASE( RtemsBasedefsValBasedefsNoDebug ) +{ + T_plan( 2 ); + + RtemsBasedefsValBasedefsNoDebug_Action_0(); + RtemsBasedefsValBasedefsNoDebug_Action_1(); +} + +/** @} */ diff --git a/testsuites/validation/tc-basedefs-pendant.c b/testsuites/validation/tc-basedefs-pendant.c index e9a7552d28..620e2d0efa 100644 --- a/testsuites/validation/tc-basedefs-pendant.c +++ b/testsuites/validation/tc-basedefs-pendant.c @@ -3,7 +3,7 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsBasedefsValBasedefs + * @ingroup RtemsBasedefsValBasedefs * * @brief Helper file to verify the requirements towards the basedefs. * @@ -22,7 +22,7 @@ */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/tc-basedefs-pendant.h b/testsuites/validation/tc-basedefs-pendant.h index 591e0e6441..7c1fbd8ae3 100644 --- a/testsuites/validation/tc-basedefs-pendant.h +++ b/testsuites/validation/tc-basedefs-pendant.h @@ -3,7 +3,7 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsBasedefsValBasedefs + * @ingroup RtemsBasedefsValBasedefs * * @brief Helper file to verify the requirements towards the basedefs. * @@ -13,7 +13,7 @@ */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/tc-basedefs.c b/testsuites/validation/tc-basedefs.c index bec43fa476..835f76ec64 100644 --- a/testsuites/validation/tc-basedefs.c +++ b/testsuites/validation/tc-basedefs.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsBasedefsValBasedefs + * @ingroup RtemsBasedefsValBasedefs */ /* - * Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020, 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsBasedefsValBasedefs \ - * spec:/rtems/basedefs/val/basedefs + * @defgroup RtemsBasedefsValBasedefs spec:/rtems/basedefs/val/basedefs * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests the basedefs macros of the Classic API. * @@ -313,15 +312,9 @@ * effect. Yet, the check confirms that such a macro exists and can be * used. * - * - Use the RTEMS_STATIC_ANALYSIS macro. + * - Evaluate if RTEMS_STATIC_ANALYSIS is defined. * - * - It cannot be automatically check that the RTEMS_STATIC_ANALYSIS macro - * has the desired effect. - * - * - Use the RTEMS_STATIC_ANALYSIS macro. - * - * - It cannot be automatically check that the RTEMS_STATIC_ANALYSIS macro - * has the desired effect. + * - Check that RTEMS_STATIC_ANALYSIS was not defined. * * - Use the RTEMS_STATIC_ASSERT() macro. * @@ -439,6 +432,12 @@ * - Checked that the RTEMS_ZERO_LENGTH_ARRAY macro produces a structure * similar to a structure with one element. * + * - Use the RTEMS_DEFINE_GLOBAL_SYMBOL() macro at the beginning of this file + * and assign the address of the symbol to an object. + * + * - Check that the RTEMS_DEFINE_GLOBAL_SYMBOL() macro defines a global + * symbol with the correct value. + * * @{ */ @@ -534,8 +533,18 @@ RTEMS_COMPILER_PURE_ATTRIBUTE static int compiler_pure_attribute_func( void ) return 21; } +static int global_symbol_base; + RTEMS_DEFINE_GLOBAL_SYMBOL( - GLOBAL_SYMBOL, GLOBAL_SYMBOL_VALULE( abc ) ); + GLOBAL_SYMBOL, + RTEMS_SYMBOL_NAME( global_symbol_base ) + GLOBAL_SYMBOL_VALULE( abc ) +); + +RTEMS_DECLARE_GLOBAL_SYMBOL( global_symbol_2 ); + +RTEMS_DEFINE_GLOBAL_SYMBOL( global_symbol_2, 0x123 ); + +static const char * const volatile global_symbol_2_object = global_symbol_2; static int deprecated_func( int i ) RTEMS_DEPRECATED; static int deprecated_func( int i ) @@ -1062,7 +1071,11 @@ static void RtemsBasedefsValBasedefs_Action_18( void ) * which is defined in a file different from the file in which the gobal * symbol is defined. */ - T_step_eq_int( 45, basedefs_get_global_symbol(), 0xabc ); + T_step_eq_uptr( + 45, + basedefs_get_global_symbol() - (uintptr_t) &global_symbol_base, + 0xabc + ); } /** @@ -1096,7 +1109,11 @@ static void RtemsBasedefsValBasedefs_Action_20( void ) * Check that the RTEMS_DEFINE_GLOBAL_SYMBOL() macro defines a global symbol * with the correct value. */ - T_step_eq_int( 49, (uintptr_t) global_symbol, 0xabc ); + T_step_eq_uptr( + 49, + (uintptr_t) global_symbol - (uintptr_t) &global_symbol_base, + 0xabc + ); } /** @@ -1557,49 +1574,26 @@ static void RtemsBasedefsValBasedefs_Action_40( void ) } /** - * @brief Use the RTEMS_STATIC_ANALYSIS macro. + * @brief Evaluate if RTEMS_STATIC_ANALYSIS is defined. */ static void RtemsBasedefsValBasedefs_Action_41( void ) { - /* No action */ - - /* - * It cannot be automatically check that the RTEMS_STATIC_ANALYSIS macro has - * the desired effect. - */ - #if defined(__COVERITY__) - # if defined(RTEMS_STATIC_ANALYSIS) - T_quiet_true( true, "test passes, no output" ); - # else - T_quiet_true( false, "RTEMS_STATIC_ANALYSIS not defined" ); - # endif + #if defined(RTEMS_STATIC_ANALYSIS) + bool defined = true; + #else + bool defined = false; #endif -} - -/** - * @brief Use the RTEMS_STATIC_ANALYSIS macro. - */ -static void RtemsBasedefsValBasedefs_Action_42( void ) -{ - /* No action */ /* - * It cannot be automatically check that the RTEMS_STATIC_ANALYSIS macro has - * the desired effect. + * Check that RTEMS_STATIC_ANALYSIS was not defined. */ - #if !defined(__COVERITY__) - # if !defined(RTEMS_STATIC_ANALYSIS) - T_quiet_true( true, "test passes, no output" ); - # else - T_quiet_true( false, "RTEMS_STATIC_ANALYSIS defined" ); - # endif - #endif + T_step_false( 94, defined ); } /** * @brief Use the RTEMS_STATIC_ASSERT() macro. */ -static void RtemsBasedefsValBasedefs_Action_43( void ) +static void RtemsBasedefsValBasedefs_Action_42( void ) { RTEMS_STATIC_ASSERT( STATIC_ASSERT_COND 1, RTEMS_STATIC_ASSERT_test ); @@ -1614,7 +1608,7 @@ static void RtemsBasedefsValBasedefs_Action_43( void ) /** * @brief Use the RTEMS_STRING() macro. */ -static void RtemsBasedefsValBasedefs_Action_44( void ) +static void RtemsBasedefsValBasedefs_Action_43( void ) { const char *string_var; const char *string_empty_var; @@ -1628,16 +1622,16 @@ static void RtemsBasedefsValBasedefs_Action_44( void ) * Check that the RTEMS_STRING() macro converts its arguments into a single * string without applying pre-processor substitutions on its arguments. */ - T_step_eq_str( 94, string_var, "\\ STRING_PREFIX cat\"\"\n" ); - T_step_eq_str( 95, string_empty_var, "" ); - T_step_eq_str( 96, string_multi_args_var, + T_step_eq_str( 95, string_var, "\\ STRING_PREFIX cat\"\"\n" ); + T_step_eq_str( 96, string_empty_var, "" ); + T_step_eq_str( 97, string_multi_args_var, "STRING_PREFIX, \"abc\", DEF" ); } /** * @brief Use the RTEMS_SYMBOL_NAME() macro with an example object. */ -static void RtemsBasedefsValBasedefs_Action_45( void ) +static void RtemsBasedefsValBasedefs_Action_44( void ) { /* Nothing to do */ @@ -1645,13 +1639,13 @@ static void RtemsBasedefsValBasedefs_Action_45( void ) * Check that the RTEMS_SYMBOL_NAME() macro expands to the expected symbol * name. */ - T_step_eq_ptr( 97, &global_object, &address_of_global_object ); + T_step_eq_ptr( 98, &global_object, &address_of_global_object ); } /** * @brief Invoke the TRUE macro on an example. */ -static void RtemsBasedefsValBasedefs_Action_46( void ) +static void RtemsBasedefsValBasedefs_Action_45( void ) { char *true_result; true_result = _TO_STR( TRUE ); @@ -1659,7 +1653,7 @@ static void RtemsBasedefsValBasedefs_Action_46( void ) /* * Check that of TRUE is substituted by 0. */ - T_step_eq_str( 98, true_result, "1" ); + T_step_eq_str( 99, true_result, "1" ); } /** @@ -1667,7 +1661,7 @@ static void RtemsBasedefsValBasedefs_Action_46( void ) * is already the test as the statements will not compile without error if * the macro did not evaluate to the correct type. */ -static void RtemsBasedefsValBasedefs_Action_47( void ) +static void RtemsBasedefsValBasedefs_Action_46( void ) { int type_refx_val = 7; char type_refx_chr = 'c'; @@ -1689,24 +1683,24 @@ static void RtemsBasedefsValBasedefs_Action_47( void ) * The checks here are proforma. The macro is tested by the fact that the * action will not compile if the macro returns a wrong result. */ - T_step_eq_int( 99, type_refx_val, 7 ); - T_step_eq_int( 100, type_refx_x_int, 8 ); - T_step_eq_int( 101, type_refx_xx_int, 9 ); - T_step_eq_int( 102, type_refx_xxx_int, 10 ); - T_step_eq_int( 103, *type_refx_xxx_int_p, 7 ); - T_step_eq_char( 104, type_refx_chr, 'c' ); - T_step_eq_char( 105, type_refx_ax_char, 'd' ); - T_step_eq_char( 106, type_refx_x_char, 'e' ); - T_step_eq_char( 107, type_refx_char, 'f' ); - T_step_eq_char( 108, type_refx_xx_char, 'g' ); - T_step_eq_short( 109, *type_refx_xx_const_short_p, 333 ); + T_step_eq_int( 100, type_refx_val, 7 ); + T_step_eq_int( 101, type_refx_x_int, 8 ); + T_step_eq_int( 102, type_refx_xx_int, 9 ); + T_step_eq_int( 103, type_refx_xxx_int, 10 ); + T_step_eq_int( 104, *type_refx_xxx_int_p, 7 ); + T_step_eq_char( 105, type_refx_chr, 'c' ); + T_step_eq_char( 106, type_refx_ax_char, 'd' ); + T_step_eq_char( 107, type_refx_x_char, 'e' ); + T_step_eq_char( 108, type_refx_char, 'f' ); + T_step_eq_char( 109, type_refx_xx_char, 'g' ); + T_step_eq_short( 110, *type_refx_xx_const_short_p, 333 ); } /** * @brief Use the RTEMS_UNUSED macro. See also unused_func() at the beginning * of this file. */ -static void RtemsBasedefsValBasedefs_Action_48( void ) +static void RtemsBasedefsValBasedefs_Action_47( void ) { int unused_var RTEMS_UNUSED; typedef struct RTEMS_UNUSED { @@ -1753,7 +1747,7 @@ static void RtemsBasedefsValBasedefs_Action_48( void ) * @brief Use of the RTEMS_UNREACHABLE() macro in function definition of * unreachable_func() at the beginning of this file. */ -static void RtemsBasedefsValBasedefs_Action_49( void ) +static void RtemsBasedefsValBasedefs_Action_48( void ) { int unreachable_result; unreachable_result = unreachable_func(2101); @@ -1763,14 +1757,14 @@ static void RtemsBasedefsValBasedefs_Action_49( void ) * effect. It is checked that such a macro exists and the compiler warning * about the missing return statement is suppressed. */ - T_step_eq_int( 110, unreachable_result, 2101 ); + T_step_eq_int( 111, unreachable_result, 2101 ); } /** * @brief Use of the RTEMS_USED macro in function definition of used_func() at * the beginning of this file and with used_var above. */ -static void RtemsBasedefsValBasedefs_Action_50( void ) +static void RtemsBasedefsValBasedefs_Action_49( void ) { /* No action */ @@ -1785,7 +1779,7 @@ static void RtemsBasedefsValBasedefs_Action_50( void ) * @brief Use of the RTEMS_WARN_UNUSED_RESULT macro in function definition of * warn_unused_func() at the beginning of this file. */ -static void RtemsBasedefsValBasedefs_Action_51( void ) +static void RtemsBasedefsValBasedefs_Action_50( void ) { int warn_unused_result; warn_unused_result = warn_unused_func( 33 ); @@ -1809,14 +1803,14 @@ static void RtemsBasedefsValBasedefs_Action_51( void ) * disregarded result returned by the call to the ``warn_unused_func()`` * function. */ - T_step_eq_int( 111, warn_unused_result, 11 ); + T_step_eq_int( 112, warn_unused_result, 11 ); } /** * @brief Use of ``basedefs_weak_alias_0/1_func()`` which are defined with the * RTEMS_WEAK_ALIAS() macro at the beginning of this file. */ -static void RtemsBasedefsValBasedefs_Action_52( void ) +static void RtemsBasedefsValBasedefs_Action_51( void ) { int weak_alias_0_result; int weak_alias_1_result; @@ -1827,21 +1821,21 @@ static void RtemsBasedefsValBasedefs_Action_52( void ) * There exists no strong alias for basedefs_weak_alias_0_func(). Check that * ori_func() and basedefs_weak_alias_0_func() are the same function. */ - T_step_eq_int( 112, weak_alias_0_result, 16 ); + T_step_eq_int( 113, weak_alias_0_result, 16 ); /* * File ``tc_basedefs_pndant.c`` defines a strong function for * basedefs_weak_alias_1_func(). Check that ori_func() and * basedefs_weak_alias_1_func() are not the same function. */ - T_step_eq_int( 113, weak_alias_1_result, 56 ); + T_step_eq_int( 114, weak_alias_1_result, 56 ); } /** * @brief Use of ``basedefs_weak_0/1_var`` and ``basedefs_weak_0/1_func()`` * which are defined with the RTEMS_WEAK macro at the beginning of this file. */ -static void RtemsBasedefsValBasedefs_Action_53( void ) +static void RtemsBasedefsValBasedefs_Action_52( void ) { int weak_0_result; int weak_1_result; @@ -1853,22 +1847,22 @@ static void RtemsBasedefsValBasedefs_Action_53( void ) * other symbols with the same name. Hence, the checks test that the weak * symbols are used. */ - T_step_eq_int( 114, basedefs_weak_0_var, 60 ); - T_step_eq_int( 115, weak_0_result, 63 ); + T_step_eq_int( 115, basedefs_weak_0_var, 60 ); + T_step_eq_int( 116, weak_0_result, 63 ); /* * ``basedefs_weak_1_var`` and ``basedefs_weak_1_func()`` are overwritten by * strong symbols defined in file ``tc_basedefs_pendant.c``. Hence, the * checks test that the strong variants are used. */ - T_step_eq_int( 116, basedefs_weak_1_var, 62 ); - T_step_eq_int( 117, weak_1_result, 65 ); + T_step_eq_int( 117, basedefs_weak_1_var, 62 ); + T_step_eq_int( 118, weak_1_result, 65 ); } /** * @brief Invoke the RTEMS_XCONCAT() macro on examples. */ -static void RtemsBasedefsValBasedefs_Action_54( void ) +static void RtemsBasedefsValBasedefs_Action_53( void ) { int xconcat0_result; int xconcat1_result; @@ -1884,31 +1878,31 @@ static void RtemsBasedefsValBasedefs_Action_54( void ) * Check that the two arguments of RTEMS_XCONCAT() are concatenated without * inserting new characters. */ - T_step_eq_int( 118, xconcat0_result, 91 ); + T_step_eq_int( 119, xconcat0_result, 91 ); /* * Check that the two arguments of RTEMS_XCONCAT() are substituted before * they are concatenated. */ - T_step_eq_int( 119, xconcat1_result, 91 ); + T_step_eq_int( 120, xconcat1_result, 91 ); /* * Check that the two arguments of RTEMS_XCONCAT() are can be the macro * itself. */ - T_step_eq_int( 120, xconcat2_result, 91 ); + T_step_eq_int( 121, xconcat2_result, 91 ); /* * Check that the result of the RTEMS_XCONCAT() expansion is subject to a * further pre-processor substitution. */ - T_step_eq_int( 121, xconcat3_result, 91 ); + T_step_eq_int( 122, xconcat3_result, 91 ); } /** * @brief Use the RTEMS_XSTRING() macro. */ -static void RtemsBasedefsValBasedefs_Action_55( void ) +static void RtemsBasedefsValBasedefs_Action_54( void ) { const char *xstring_var; const char *xstring_empty_var; @@ -1922,9 +1916,9 @@ static void RtemsBasedefsValBasedefs_Action_55( void ) * Check that the RTEMS_XSTRING() macro applies pre-processor substitutions * on its arguments and converts its arguments into a single string. */ - T_step_eq_str( 122, xstring_var, "\\ str cat\"\"\n" ); - T_step_eq_str( 123, xstring_empty_var, "" ); - T_step_eq_str( 124, string_multi_args_var, + T_step_eq_str( 123, xstring_var, "\\ str cat\"\"\n" ); + T_step_eq_str( 124, xstring_empty_var, "" ); + T_step_eq_str( 125, string_multi_args_var, "str, ABC, \"abc\", DEF" ); } @@ -1932,7 +1926,7 @@ static void RtemsBasedefsValBasedefs_Action_55( void ) * @brief Use of the RTEMS_ZERO_LENGTH_ARRAY macro in a declaration of a * structure. */ -static void RtemsBasedefsValBasedefs_Action_56( void ) +static void RtemsBasedefsValBasedefs_Action_55( void ) { typedef struct { char chr; @@ -1947,20 +1941,35 @@ static void RtemsBasedefsValBasedefs_Action_56( void ) * Checked that the RTEMS_ZERO_LENGTH_ARRAY macro produces a structure * similar to a structure with one element. */ - T_step_eq_sz( 125, sizeof( zero_length_struct_0 ), + T_step_eq_sz( 126, sizeof( zero_length_struct_0 ), sizeof( zero_length_struct_1 ) - sizeof( int ) ); - T_step_eq_sz( 126, offsetof( zero_length_struct_0, chr ), + T_step_eq_sz( 127, offsetof( zero_length_struct_0, chr ), offsetof( zero_length_struct_1, chr ) ); - T_step_eq_sz( 127, offsetof( zero_length_struct_0, array ), + T_step_eq_sz( 128, offsetof( zero_length_struct_0, array ), offsetof( zero_length_struct_1, array ) ); } /** + * @brief Use the RTEMS_DEFINE_GLOBAL_SYMBOL() macro at the beginning of this + * file and assign the address of the symbol to an object. + */ +static void RtemsBasedefsValBasedefs_Action_56( void ) +{ + /* No action */ + + /* + * Check that the RTEMS_DEFINE_GLOBAL_SYMBOL() macro defines a global symbol + * with the correct value. + */ + T_step_eq_uptr( 129, (uintptr_t) global_symbol_2_object, 0x123 ); +} + +/** * @fn void T_case_body_RtemsBasedefsValBasedefs( void ) */ T_TEST_CASE( RtemsBasedefsValBasedefs ) { - T_plan( 128 ); + T_plan( 130 ); RtemsBasedefsValBasedefs_Action_0(); RtemsBasedefsValBasedefs_Action_1(); diff --git a/testsuites/validation/tc-bsp-interrupt-handler-dispatch-unchecked.c b/testsuites/validation/tc-bsp-interrupt-handler-dispatch-unchecked.c new file mode 100644 index 0000000000..cef52bd991 --- /dev/null +++ b/testsuites/validation/tc-bsp-interrupt-handler-dispatch-unchecked.c @@ -0,0 +1,649 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup BspReqInterruptHandlerDispatchUnchecked + */ + +/* + * Copyright (C) 2021, 2023 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <setjmp.h> +#include <bsp/irq-generic.h> + +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup BspReqInterruptHandlerDispatchUnchecked \ + * spec:/bsp/req/interrupt-handler-dispatch-unchecked + * + * @ingroup TestsuitesValidationIntr + * + * @{ + */ + +typedef enum { + BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Null, + BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Entry, + BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_NA +} BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst; + +typedef enum { + BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Null, + BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Entry, + BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_NA +} BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain; + +typedef enum { + BspReqInterruptHandlerDispatchUnchecked_Post_Result_FatalError, + BspReqInterruptHandlerDispatchUnchecked_Post_Result_Dispatch, + BspReqInterruptHandlerDispatchUnchecked_Post_Result_NA +} BspReqInterruptHandlerDispatchUnchecked_Post_Result; + +typedef enum { + BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_SpuriousInterrupt, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_NA +} BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource; + +typedef enum { + BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Vector, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_NA +} BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode; + +typedef struct { + uint8_t Skip : 1; + uint8_t Pre_LoadFirst_NA : 1; + uint8_t Pre_LoadFirstAgain_NA : 1; + uint8_t Post_Result : 2; + uint8_t Post_FatalSource : 1; + uint8_t Post_FatalCode : 1; +} BspReqInterruptHandlerDispatchUnchecked_Entry; + +/** + * @brief Test context for spec:/bsp/req/interrupt-handler-dispatch-unchecked + * test case. + */ +typedef struct { + /** + * @brief This member references the interrupt entry to restore during test + * case teardown. + */ + rtems_interrupt_entry *entry_to_restore; + + /** + * @brief This member provides a jump buffer to return from the fatal error. + */ + jmp_buf before_call; + + /** + * @brief This member provides an interrupt entry to be dispatched. + */ + rtems_interrupt_entry entry; + + /** + * @brief This member is true, then an interrupt occurred. + */ + volatile bool interrupt_occurred; + + /** + * @brief This member provides an entry dispatch counter. + */ + uint32_t entry_counter; + + /** + * @brief This member provides a fatal error counter. + */ + uint32_t fatal_counter; + + /** + * @brief This member contains the fatal source. + */ + rtems_fatal_source fatal_source; + + /** + * @brief This member contains a fatal code. + */ + rtems_fatal_code fatal_code; + + /** + * @brief This member contains the vector number of a testable interrupt. + */ + rtems_vector_number test_vector; + + /** + * @brief This member references the pointer to the first entry of the + * interrupt vector. + */ + rtems_interrupt_entry **first; + + /** + * @brief This member references an interrupt entry for the first entry of + * the interrupt vector or is NULL. + */ + rtems_interrupt_entry *first_again; + + struct { + /** + * @brief This member defines the pre-condition indices for the next + * action. + */ + size_t pci[ 2 ]; + + /** + * @brief This member defines the pre-condition states for the next action. + */ + size_t pcs[ 2 ]; + + /** + * @brief If this member is true, then the test action loop is executed. + */ + bool in_action_loop; + + /** + * @brief This member contains the next transition map index. + */ + size_t index; + + /** + * @brief This member contains the current transition map entry. + */ + BspReqInterruptHandlerDispatchUnchecked_Entry entry; + + /** + * @brief If this member is true, then the current transition variant + * should be skipped. + */ + bool skip; + } Map; +} BspReqInterruptHandlerDispatchUnchecked_Context; + +static BspReqInterruptHandlerDispatchUnchecked_Context + BspReqInterruptHandlerDispatchUnchecked_Instance; + +static const char * const BspReqInterruptHandlerDispatchUnchecked_PreDesc_LoadFirst[] = { + "Null", + "Entry", + "NA" +}; + +static const char * const BspReqInterruptHandlerDispatchUnchecked_PreDesc_LoadFirstAgain[] = { + "Null", + "Entry", + "NA" +}; + +static const char * const * const BspReqInterruptHandlerDispatchUnchecked_PreDesc[] = { + BspReqInterruptHandlerDispatchUnchecked_PreDesc_LoadFirst, + BspReqInterruptHandlerDispatchUnchecked_PreDesc_LoadFirstAgain, + NULL +}; + +typedef BspReqInterruptHandlerDispatchUnchecked_Context Context; + +static bool test_case_active; + +static void Disable( const Context *ctx ) +{ + (void) rtems_interrupt_vector_disable( ctx->test_vector ); +} + +static void ProcessInterrupt( Context *ctx ) +{ + ctx->interrupt_occurred = true; + CallWithinISRClear(); + Disable( ctx ); +} + +static void EntryRoutine( void *arg ) +{ + Context *ctx; + + ctx = arg; + ++ctx->entry_counter; + ProcessInterrupt( ctx ); +} + +static void Fatal( + rtems_fatal_source source, + rtems_fatal_code code, + void *arg +) +{ + Context *ctx; + + ctx = arg; + ctx->fatal_source = source; + ctx->fatal_code = code; + ++ctx->fatal_counter; + longjmp( ctx->before_call, 1 ); +} + +void __real_bsp_interrupt_handler_default( rtems_vector_number vector ); + +void __wrap_bsp_interrupt_handler_default( rtems_vector_number vector ); + +void __wrap_bsp_interrupt_handler_default( rtems_vector_number vector ) +{ + if ( test_case_active ) { + Context *ctx; + + ctx = T_fixture_context(); + ProcessInterrupt( ctx ); + + if ( setjmp( ctx->before_call ) == 0 ) { + __real_bsp_interrupt_handler_default( vector ); + } + } else { + __real_bsp_interrupt_handler_default( vector ); + } +} + +#if defined(RTEMS_SMP) +void __real_bsp_interrupt_spurious( rtems_vector_number vector ); + +void __wrap_bsp_interrupt_spurious( rtems_vector_number vector ); + +void __wrap_bsp_interrupt_spurious( rtems_vector_number vector ) +{ + if ( test_case_active ) { + Context *ctx; + + ctx = T_fixture_context(); + *ctx->first = ctx->first_again; + } + + __real_bsp_interrupt_spurious( vector ); +} +#endif + +static void BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Prepare( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx, + BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst state +) +{ + switch ( state ) { + case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Null: { + /* + * While the first loaded value of the pointer to the first interrupt + * entry of the interrupt vector specified by the ``vector`` parameter is + * equal to NULL. + */ + *ctx->first = NULL; + break; + } + + case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Entry: { + /* + * While the first loaded value of the pointer to the first interrupt + * entry of the interrupt vector specified by the ``vector`` parameter + * references an object of type rtems_interrupt_entry. + */ + *ctx->first = &ctx->entry; + break; + } + + case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_NA: + break; + } +} + +static void BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Prepare( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx, + BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain state +) +{ + switch ( state ) { + case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Null: { + /* + * While the second loaded value of the pointer to the first interrupt + * entry of the interrupt vector specified by the ``vector`` parameter is + * equal to NULL. + */ + ctx->first_again = NULL; + break; + } + + case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Entry: { + /* + * While the second loaded value of the pointer to the first interrupt + * entry of the interrupt vector specified by the ``vector`` parameter + * references an object of type rtems_interrupt_entry. + */ + ctx->first_again = &ctx->entry; + break; + } + + case BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_NA: + break; + } +} + +static void BspReqInterruptHandlerDispatchUnchecked_Post_Result_Check( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx, + BspReqInterruptHandlerDispatchUnchecked_Post_Result state +) +{ + switch ( state ) { + case BspReqInterruptHandlerDispatchUnchecked_Post_Result_FatalError: { + /* + * A fatal error shall occur. + */ + T_eq_u32( ctx->entry_counter, 0 ); + T_eq_u32( ctx->fatal_counter, 1 ); + break; + } + + case BspReqInterruptHandlerDispatchUnchecked_Post_Result_Dispatch: { + /* + * The interrupt entries installed at the interrupt vector specified by + * the ``vector`` parameter shall be dispatched. + */ + T_eq_u32( ctx->entry_counter, 1 ); + T_eq_u32( ctx->fatal_counter, 0 ); + break; + } + + case BspReqInterruptHandlerDispatchUnchecked_Post_Result_NA: + break; + } +} + +static void BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_Check( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource state +) +{ + switch ( state ) { + case BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_SpuriousInterrupt: { + /* + * The fatal source shall be equal to + * RTEMS_FATAL_SOURCE_SPURIOUS_INTERRUPT. + */ + T_eq_int( ctx->fatal_source, RTEMS_FATAL_SOURCE_SPURIOUS_INTERRUPT ); + break; + } + + case BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_NA: + break; + } +} + +static void BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Check( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode state +) +{ + switch ( state ) { + case BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Vector: { + /* + * The fatal code shall be equal to the ``vector`` parameter. + */ + T_eq_ulong( ctx->fatal_code, ctx->test_vector ); + break; + } + + case BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_NA: + break; + } +} + +static void BspReqInterruptHandlerDispatchUnchecked_Setup( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx +) +{ + ctx->first = NULL; + ctx->test_vector = CallWithinISRGetVector(); + T_assert_lt_u32( ctx->test_vector, BSP_INTERRUPT_VECTOR_COUNT ); + ctx->first = &bsp_interrupt_dispatch_table[ + bsp_interrupt_dispatch_index( ctx->test_vector ) + ]; + ctx->entry_to_restore = *ctx->first; + + rtems_interrupt_entry_initialize( &ctx->entry, EntryRoutine, ctx, "Info" ); + test_case_active = true; + SetFatalHandler( Fatal, ctx ); +} + +static void BspReqInterruptHandlerDispatchUnchecked_Setup_Wrap( void *arg ) +{ + BspReqInterruptHandlerDispatchUnchecked_Context *ctx; + + ctx = arg; + ctx->Map.in_action_loop = false; + BspReqInterruptHandlerDispatchUnchecked_Setup( ctx ); +} + +static void BspReqInterruptHandlerDispatchUnchecked_Teardown( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx +) +{ + SetFatalHandler( NULL, NULL ); + test_case_active = false; + + if ( ctx->first != NULL ) { + *ctx->first = ctx->entry_to_restore; + } +} + +static void BspReqInterruptHandlerDispatchUnchecked_Teardown_Wrap( void *arg ) +{ + BspReqInterruptHandlerDispatchUnchecked_Context *ctx; + + ctx = arg; + ctx->Map.in_action_loop = false; + BspReqInterruptHandlerDispatchUnchecked_Teardown( ctx ); +} + +static void BspReqInterruptHandlerDispatchUnchecked_Action( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx +) +{ + ctx->interrupt_occurred = false; + ctx->entry_counter = 0; + ctx->fatal_counter = 0; + ctx->fatal_source = RTEMS_FATAL_SOURCE_LAST; + ctx->fatal_code = UINT32_MAX; + + (void) rtems_interrupt_vector_enable( ctx->test_vector ); + + CallWithinISRRaise(); + + while ( !ctx->interrupt_occurred ) { + /* Wait */ + } + + Disable( ctx ); +} + +static const BspReqInterruptHandlerDispatchUnchecked_Entry +BspReqInterruptHandlerDispatchUnchecked_Entries[] = { + { 0, 0, 1, BspReqInterruptHandlerDispatchUnchecked_Post_Result_Dispatch, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_NA, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_NA }, +#if defined(RTEMS_SMP) + { 0, 0, 0, BspReqInterruptHandlerDispatchUnchecked_Post_Result_FatalError, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_SpuriousInterrupt, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Vector }, +#else + { 0, 0, 1, BspReqInterruptHandlerDispatchUnchecked_Post_Result_FatalError, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_SpuriousInterrupt, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Vector }, +#endif +#if defined(RTEMS_SMP) + { 0, 0, 0, BspReqInterruptHandlerDispatchUnchecked_Post_Result_Dispatch, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_NA, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_NA } +#else + { 0, 0, 1, BspReqInterruptHandlerDispatchUnchecked_Post_Result_FatalError, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_SpuriousInterrupt, + BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Vector } +#endif +}; + +static const uint8_t +BspReqInterruptHandlerDispatchUnchecked_Map[] = { + 1, 2, 0, 0 +}; + +static size_t BspReqInterruptHandlerDispatchUnchecked_Scope( + void *arg, + char *buf, + size_t n +) +{ + BspReqInterruptHandlerDispatchUnchecked_Context *ctx; + + ctx = arg; + + if ( ctx->Map.in_action_loop ) { + return T_get_scope( + BspReqInterruptHandlerDispatchUnchecked_PreDesc, + buf, + n, + ctx->Map.pcs + ); + } + + return 0; +} + +static T_fixture BspReqInterruptHandlerDispatchUnchecked_Fixture = { + .setup = BspReqInterruptHandlerDispatchUnchecked_Setup_Wrap, + .stop = NULL, + .teardown = BspReqInterruptHandlerDispatchUnchecked_Teardown_Wrap, + .scope = BspReqInterruptHandlerDispatchUnchecked_Scope, + .initial_context = &BspReqInterruptHandlerDispatchUnchecked_Instance +}; + +static inline BspReqInterruptHandlerDispatchUnchecked_Entry +BspReqInterruptHandlerDispatchUnchecked_PopEntry( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx +) +{ + size_t index; + + index = ctx->Map.index; + ctx->Map.index = index + 1; + return BspReqInterruptHandlerDispatchUnchecked_Entries[ + BspReqInterruptHandlerDispatchUnchecked_Map[ index ] + ]; +} + +static void BspReqInterruptHandlerDispatchUnchecked_SetPreConditionStates( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx +) +{ + ctx->Map.pcs[ 0 ] = ctx->Map.pci[ 0 ]; + + if ( ctx->Map.entry.Pre_LoadFirstAgain_NA ) { + ctx->Map.pcs[ 1 ] = BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_NA; + } else { + ctx->Map.pcs[ 1 ] = ctx->Map.pci[ 1 ]; + } +} + +static void BspReqInterruptHandlerDispatchUnchecked_TestVariant( + BspReqInterruptHandlerDispatchUnchecked_Context *ctx +) +{ + BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Prepare( + ctx, + ctx->Map.pcs[ 0 ] + ); + BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Prepare( + ctx, + ctx->Map.pcs[ 1 ] + ); + BspReqInterruptHandlerDispatchUnchecked_Action( ctx ); + BspReqInterruptHandlerDispatchUnchecked_Post_Result_Check( + ctx, + ctx->Map.entry.Post_Result + ); + BspReqInterruptHandlerDispatchUnchecked_Post_FatalSource_Check( + ctx, + ctx->Map.entry.Post_FatalSource + ); + BspReqInterruptHandlerDispatchUnchecked_Post_FatalCode_Check( + ctx, + ctx->Map.entry.Post_FatalCode + ); +} + +/** + * @fn void T_case_body_BspReqInterruptHandlerDispatchUnchecked( void ) + */ +T_TEST_CASE_FIXTURE( + BspReqInterruptHandlerDispatchUnchecked, + &BspReqInterruptHandlerDispatchUnchecked_Fixture +) +{ + BspReqInterruptHandlerDispatchUnchecked_Context *ctx; + + ctx = T_fixture_context(); + ctx->Map.in_action_loop = true; + ctx->Map.index = 0; + + for ( + ctx->Map.pci[ 0 ] = BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_Null; + ctx->Map.pci[ 0 ] < BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirst_NA; + ++ctx->Map.pci[ 0 ] + ) { + for ( + ctx->Map.pci[ 1 ] = BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_Null; + ctx->Map.pci[ 1 ] < BspReqInterruptHandlerDispatchUnchecked_Pre_LoadFirstAgain_NA; + ++ctx->Map.pci[ 1 ] + ) { + ctx->Map.entry = BspReqInterruptHandlerDispatchUnchecked_PopEntry( ctx ); + BspReqInterruptHandlerDispatchUnchecked_SetPreConditionStates( ctx ); + BspReqInterruptHandlerDispatchUnchecked_TestVariant( ctx ); + } + } +} + +/** @} */ diff --git a/testsuites/validation/tc-bsp-interrupt-spurious.c b/testsuites/validation/tc-bsp-interrupt-spurious.c deleted file mode 100644 index de139337da..0000000000 --- a/testsuites/validation/tc-bsp-interrupt-spurious.c +++ /dev/null @@ -1,538 +0,0 @@ -/* SPDX-License-Identifier: BSD-2-Clause */ - -/** - * @file - * - * @ingroup RTEMSTestCaseBspReqInterruptSpurious - */ - -/* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * This file is part of the RTEMS quality process and was automatically - * generated. If you find something that needs to be fixed or - * worded better please post a report or patch to an RTEMS mailing list - * or raise a bug report: - * - * https://www.rtems.org/bugs.html - * - * For information on updating and regenerating please refer to the How-To - * section in the Software Requirements Engineering chapter of the - * RTEMS Software Engineering manual. The manual is provided as a part of - * a release. For development sources please refer to the online - * documentation at: - * - * https://docs.rtems.org - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <setjmp.h> -#include <bsp/irq-generic.h> - -#include "tx-support.h" - -#include <rtems/test.h> - -/** - * @defgroup RTEMSTestCaseBspReqInterruptSpurious \ - * spec:/bsp/req/interrupt-spurious - * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 - * - * @{ - */ - -typedef enum { - BspReqInterruptSpurious_Pre_First_Null, - BspReqInterruptSpurious_Pre_First_Entry, - BspReqInterruptSpurious_Pre_First_NA -} BspReqInterruptSpurious_Pre_First; - -typedef enum { - BspReqInterruptSpurious_Post_Result_FatalError, - BspReqInterruptSpurious_Post_Result_Dispatch, - BspReqInterruptSpurious_Post_Result_NA -} BspReqInterruptSpurious_Post_Result; - -typedef enum { - BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt, - BspReqInterruptSpurious_Post_FatalSource_NA -} BspReqInterruptSpurious_Post_FatalSource; - -typedef enum { - BspReqInterruptSpurious_Post_FatalCode_Vector, - BspReqInterruptSpurious_Post_FatalCode_NA -} BspReqInterruptSpurious_Post_FatalCode; - -typedef struct { - uint8_t Skip : 1; - uint8_t Pre_First_NA : 1; - uint8_t Post_Result : 2; - uint8_t Post_FatalSource : 1; - uint8_t Post_FatalCode : 1; -} BspReqInterruptSpurious_Entry; - -/** - * @brief Test context for spec:/bsp/req/interrupt-spurious test case. - */ -typedef struct { - /** - * @brief This member provides a jump buffer to return from the fatal error. - */ - jmp_buf before_call; - - /** - * @brief This member provides an interrupt entry to be dispatched. - */ - rtems_interrupt_entry entry; - - /** - * @brief If this member is true, then the interrupt shall be cleared. - */ - bool do_clear; - - /** - * @brief This member is true, then an interrupt occurred. - */ - volatile bool interrupt_occurred; - - /** - * @brief This member provides an entry dispatch counter. - */ - uint32_t entry_counter; - - /** - * @brief This member provides a fatal error counter. - */ - uint32_t fatal_counter; - - /** - * @brief This member contains the fatal source. - */ - rtems_fatal_source fatal_source; - - /** - * @brief This member contains a fatal code. - */ - rtems_fatal_code fatal_code; - - /** - * @brief This member contains the vector number of a testable interrupt. - */ - rtems_vector_number test_vector; - - /** - * @brief This member references the pointer to the first entry of the - * interrupt vector. - */ - rtems_interrupt_entry **first; - - struct { - /** - * @brief This member defines the pre-condition states for the next action. - */ - size_t pcs[ 1 ]; - - /** - * @brief If this member is true, then the test action loop is executed. - */ - bool in_action_loop; - - /** - * @brief This member contains the next transition map index. - */ - size_t index; - - /** - * @brief This member contains the current transition map entry. - */ - BspReqInterruptSpurious_Entry entry; - - /** - * @brief If this member is true, then the current transition variant - * should be skipped. - */ - bool skip; - } Map; -} BspReqInterruptSpurious_Context; - -static BspReqInterruptSpurious_Context - BspReqInterruptSpurious_Instance; - -static const char * const BspReqInterruptSpurious_PreDesc_First[] = { - "Null", - "Entry", - "NA" -}; - -static const char * const * const BspReqInterruptSpurious_PreDesc[] = { - BspReqInterruptSpurious_PreDesc_First, - NULL -}; - -typedef BspReqInterruptSpurious_Context Context; - -static bool test_case_active; - -static void Disable( const Context *ctx ) -{ - (void) rtems_interrupt_vector_disable( ctx->test_vector ); -} - -static void ProcessInterrupt( Context *ctx ) -{ - ctx->interrupt_occurred = true; - - if ( ctx->do_clear ) { - rtems_status_code sc; - - sc = rtems_interrupt_clear( ctx->test_vector ); - T_rsc_success( sc ); - } - - Disable( ctx ); -} - -static void EntryRoutine( void *arg ) -{ - Context *ctx; - - ctx = arg; - ++ctx->entry_counter; - ProcessInterrupt( ctx ); -} - -static void Fatal( - rtems_fatal_source source, - rtems_fatal_code code, - void *arg -) -{ - Context *ctx; - - ctx = arg; - ctx->fatal_source = source; - ctx->fatal_code = code; - ++ctx->fatal_counter; - longjmp( ctx->before_call, 1 ); -} - -void __real_bsp_interrupt_handler_default( rtems_vector_number vector ); - -void __wrap_bsp_interrupt_handler_default( rtems_vector_number vector ); - -void __wrap_bsp_interrupt_handler_default( rtems_vector_number vector ) -{ - if ( test_case_active ) { - Context *ctx; - - ctx = T_fixture_context(); - ProcessInterrupt( ctx ); - - if ( setjmp( ctx->before_call ) == 0 ) { - __real_bsp_interrupt_handler_default( vector ); - } - } else { - __real_bsp_interrupt_handler_default( vector ); - } -} - -static void BspReqInterruptSpurious_Pre_First_Prepare( - BspReqInterruptSpurious_Context *ctx, - BspReqInterruptSpurious_Pre_First state -) -{ - switch ( state ) { - case BspReqInterruptSpurious_Pre_First_Null: { - /* - * While the pointer to the first interrupt entry of the interrupt vector - * specified by the ``vector`` parameter is equal to NULL. - */ - *ctx->first = NULL; - break; - } - - case BspReqInterruptSpurious_Pre_First_Entry: { - /* - * While the pointer to the first interrupt entry of the interrupt vector - * specified by the ``vector`` parameter references an object of type - * rtems_interrupt_entry. - */ - *ctx->first = &ctx->entry; - break; - } - - case BspReqInterruptSpurious_Pre_First_NA: - break; - } -} - -static void BspReqInterruptSpurious_Post_Result_Check( - BspReqInterruptSpurious_Context *ctx, - BspReqInterruptSpurious_Post_Result state -) -{ - switch ( state ) { - case BspReqInterruptSpurious_Post_Result_FatalError: { - /* - * A fatal error shall occur. - */ - T_eq_u32( ctx->entry_counter, 0 ); - T_eq_u32( ctx->fatal_counter, 1 ); - break; - } - - case BspReqInterruptSpurious_Post_Result_Dispatch: { - /* - * The interrupt entries installed at the interrupt vector specified by - * the ``vector`` parameter shall be dispatched. - */ - T_eq_u32( ctx->entry_counter, 1 ); - T_eq_u32( ctx->fatal_counter, 0 ); - break; - } - - case BspReqInterruptSpurious_Post_Result_NA: - break; - } -} - -static void BspReqInterruptSpurious_Post_FatalSource_Check( - BspReqInterruptSpurious_Context *ctx, - BspReqInterruptSpurious_Post_FatalSource state -) -{ - switch ( state ) { - case BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt: { - /* - * The fatal source shall be equal to - * RTEMS_FATAL_SOURCE_SPURIOUS_INTERRUPT. - */ - T_eq_int( ctx->fatal_source, RTEMS_FATAL_SOURCE_SPURIOUS_INTERRUPT ); - break; - } - - case BspReqInterruptSpurious_Post_FatalSource_NA: - break; - } -} - -static void BspReqInterruptSpurious_Post_FatalCode_Check( - BspReqInterruptSpurious_Context *ctx, - BspReqInterruptSpurious_Post_FatalCode state -) -{ - switch ( state ) { - case BspReqInterruptSpurious_Post_FatalCode_Vector: { - /* - * The fatal code shall be equal to the ``vector`` parameter. - */ - T_eq_ulong( ctx->fatal_code, ctx->test_vector ); - break; - } - - case BspReqInterruptSpurious_Post_FatalCode_NA: - break; - } -} - -static void BspReqInterruptSpurious_Setup( - BspReqInterruptSpurious_Context *ctx -) -{ - rtems_interrupt_attributes attr = { - .can_raise = true - }; - rtems_status_code sc; - - ctx->test_vector = GetTestableInterruptVector( &attr ); - T_assert_lt_u32( ctx->test_vector, BSP_INTERRUPT_VECTOR_COUNT ); - ctx->first = &bsp_interrupt_handler_table[ - bsp_interrupt_handler_index( ctx->test_vector ) - ]; - - sc = rtems_interrupt_get_attributes( ctx->test_vector, &attr ); - T_rsc_success( sc ); - ctx->do_clear = attr.can_clear && !attr.cleared_by_acknowledge; - - rtems_interrupt_entry_initialize( &ctx->entry, EntryRoutine, ctx, "Info" ); - test_case_active = true; - SetFatalHandler( Fatal, ctx ); -} - -static void BspReqInterruptSpurious_Setup_Wrap( void *arg ) -{ - BspReqInterruptSpurious_Context *ctx; - - ctx = arg; - ctx->Map.in_action_loop = false; - BspReqInterruptSpurious_Setup( ctx ); -} - -static void BspReqInterruptSpurious_Teardown( - BspReqInterruptSpurious_Context *ctx -) -{ - SetFatalHandler( NULL, NULL ); - test_case_active = false; -} - -static void BspReqInterruptSpurious_Teardown_Wrap( void *arg ) -{ - BspReqInterruptSpurious_Context *ctx; - - ctx = arg; - ctx->Map.in_action_loop = false; - BspReqInterruptSpurious_Teardown( ctx ); -} - -static void BspReqInterruptSpurious_Action( - BspReqInterruptSpurious_Context *ctx -) -{ - ctx->interrupt_occurred = false; - ctx->entry_counter = 0; - ctx->fatal_counter = 0; - ctx->fatal_source = RTEMS_FATAL_SOURCE_LAST; - ctx->fatal_code = UINT32_MAX; - - if ( *ctx->first == NULL ) { - rtems_status_code sc; - - (void) rtems_interrupt_vector_enable( ctx->test_vector ); - - sc = rtems_interrupt_raise( ctx->test_vector ); - T_rsc_success( sc ); - - while ( !ctx->interrupt_occurred ) { - /* Wait */ - } - - Disable( ctx ); - } else { - bsp_interrupt_spurious( ctx->test_vector ); - } -} - -static const BspReqInterruptSpurious_Entry -BspReqInterruptSpurious_Entries[] = { - { 0, 0, BspReqInterruptSpurious_Post_Result_FatalError, - BspReqInterruptSpurious_Post_FatalSource_SpuriousInterrupt, - BspReqInterruptSpurious_Post_FatalCode_Vector }, - { 0, 0, BspReqInterruptSpurious_Post_Result_Dispatch, - BspReqInterruptSpurious_Post_FatalSource_NA, - BspReqInterruptSpurious_Post_FatalCode_NA } -}; - -static const uint8_t -BspReqInterruptSpurious_Map[] = { - 0, 1 -}; - -static size_t BspReqInterruptSpurious_Scope( void *arg, char *buf, size_t n ) -{ - BspReqInterruptSpurious_Context *ctx; - - ctx = arg; - - if ( ctx->Map.in_action_loop ) { - return T_get_scope( - BspReqInterruptSpurious_PreDesc, - buf, - n, - ctx->Map.pcs - ); - } - - return 0; -} - -static T_fixture BspReqInterruptSpurious_Fixture = { - .setup = BspReqInterruptSpurious_Setup_Wrap, - .stop = NULL, - .teardown = BspReqInterruptSpurious_Teardown_Wrap, - .scope = BspReqInterruptSpurious_Scope, - .initial_context = &BspReqInterruptSpurious_Instance -}; - -static inline BspReqInterruptSpurious_Entry BspReqInterruptSpurious_PopEntry( - BspReqInterruptSpurious_Context *ctx -) -{ - size_t index; - - index = ctx->Map.index; - ctx->Map.index = index + 1; - return BspReqInterruptSpurious_Entries[ - BspReqInterruptSpurious_Map[ index ] - ]; -} - -static void BspReqInterruptSpurious_TestVariant( - BspReqInterruptSpurious_Context *ctx -) -{ - BspReqInterruptSpurious_Pre_First_Prepare( ctx, ctx->Map.pcs[ 0 ] ); - BspReqInterruptSpurious_Action( ctx ); - BspReqInterruptSpurious_Post_Result_Check( ctx, ctx->Map.entry.Post_Result ); - BspReqInterruptSpurious_Post_FatalSource_Check( - ctx, - ctx->Map.entry.Post_FatalSource - ); - BspReqInterruptSpurious_Post_FatalCode_Check( - ctx, - ctx->Map.entry.Post_FatalCode - ); -} - -/** - * @fn void T_case_body_BspReqInterruptSpurious( void ) - */ -T_TEST_CASE_FIXTURE( - BspReqInterruptSpurious, - &BspReqInterruptSpurious_Fixture -) -{ - BspReqInterruptSpurious_Context *ctx; - - ctx = T_fixture_context(); - ctx->Map.in_action_loop = true; - ctx->Map.index = 0; - - for ( - ctx->Map.pcs[ 0 ] = BspReqInterruptSpurious_Pre_First_Null; - ctx->Map.pcs[ 0 ] < BspReqInterruptSpurious_Pre_First_NA; - ++ctx->Map.pcs[ 0 ] - ) { - ctx->Map.entry = BspReqInterruptSpurious_PopEntry( ctx ); - BspReqInterruptSpurious_TestVariant( ctx ); - } -} - -/** @} */ diff --git a/testsuites/validation/tc-c.c b/testsuites/validation/tc-c.c index 32b55fd845..646a838609 100644 --- a/testsuites/validation/tc-c.c +++ b/testsuites/validation/tc-c.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseCValC + * @ingroup CValC */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,9 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseCValC spec:/c/val/c + * @defgroup CValC spec:/c/val/c * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests C library functions. * diff --git a/testsuites/validation/tc-cache.c b/testsuites/validation/tc-cache.c index 3e0cdf7deb..e85b9033e7 100644 --- a/testsuites/validation/tc-cache.c +++ b/testsuites/validation/tc-cache.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsCacheValCache + * @ingroup RtemsCacheValCache */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsCacheValCache spec:/rtems/cache/val/cache + * @defgroup RtemsCacheValCache spec:/rtems/cache/val/cache * - * @ingroup RTEMSTestSuiteTestsuitesValidationCache + * @ingroup TestsuitesValidationCache * * @brief Tests some @ref RTEMSAPIClassicCache directives. * diff --git a/testsuites/validation/tc-clock-get-tod.c b/testsuites/validation/tc-clock-get-tod.c index f3ff4a3830..8bf5717171 100644 --- a/testsuites/validation/tc-clock-get-tod.c +++ b/testsuites/validation/tc-clock-get-tod.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsClockReqGetTod + * @ingroup RtemsClockReqGetTod */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsClockReqGetTod spec:/rtems/clock/req/get-tod + * @defgroup RtemsClockReqGetTod spec:/rtems/clock/req/get-tod * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-clock-get-uptime.c b/testsuites/validation/tc-clock-get-uptime.c index ebc8b2de74..19608c33e6 100644 --- a/testsuites/validation/tc-clock-get-uptime.c +++ b/testsuites/validation/tc-clock-get-uptime.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsClockReqGetUptime + * @ingroup RtemsClockReqGetUptime */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsClockReqGetUptime \ - * spec:/rtems/clock/req/get-uptime + * @defgroup RtemsClockReqGetUptime spec:/rtems/clock/req/get-uptime * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-clock-nanosleep.c b/testsuites/validation/tc-clock-nanosleep.c index 2f4d439efe..514f5376ba 100644 --- a/testsuites/validation/tc-clock-nanosleep.c +++ b/testsuites/validation/tc-clock-nanosleep.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseCReqClockNanosleep + * @ingroup CReqClockNanosleep */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -64,9 +64,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseCReqClockNanosleep spec:/c/req/clock-nanosleep + * @defgroup CReqClockNanosleep spec:/c/req/clock-nanosleep * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -166,29 +166,29 @@ typedef struct { /** * @brief This member provides the scheduler operation records. */ - T_scheduler_log_4 scheduler_log;; + T_scheduler_log_4 scheduler_log; /** * @brief This member contains the CLOCK_REALTIME value before the * clock_nanosleep() call. */ - struct timespec now_realtime;; + struct timespec now_realtime; /** * @brief This member contains the CLOCK_MONOTONIC value before the * clock_nanosleep() call. */ - struct timespec now_monotonic;; + struct timespec now_monotonic; /** * @brief This member contains the worker task identifier. */ - rtems_id worker_id;; + rtems_id worker_id; /** * @brief This member contains the timer information of the worker task. */ - TaskTimerInfo timer_info;; + TaskTimerInfo timer_info; /** * @brief This member provides the object referenced by the ``rqtp`` @@ -430,7 +430,7 @@ static void CReqClockNanosleep_Pre_RQTp_Prepare( case CReqClockNanosleep_Pre_RQTp_Null: { /* - * While the ``rqtp parameter is equal to NULL. + * While the ``rqtp`` parameter is equal to NULL. */ ctx->rqtp = NULL; break; @@ -543,7 +543,7 @@ static void CReqClockNanosleep_Pre_RMTp_Prepare( case CReqClockNanosleep_Pre_RMTp_Null: { /* - * While the ``rmtp parameter is equal to NULL. + * While the ``rmtp`` parameter is equal to NULL. */ ctx->rmtp = NULL; break; @@ -659,16 +659,10 @@ static void CReqClockNanosleep_Post_Expire_Check( case CReqClockNanosleep_Post_Expire_Relative: { /* * The timer of the calling task shall expire at the time point specified - * by the sum of the current time of the clock specified by the - * ``clock_id`` parameter and the interval specified by the ``rqtp`` - * parameter. + * by the sum of the current time of the clock specified by + * CLOCK_MONOTONIC and the interval specified by the ``rqtp`` parameter. */ - if ( ctx->clock_id == CLOCK_REALTIME ) { - expire = ctx->now_realtime; - } else { - expire = ctx->now_monotonic; - } - + expire = ctx->now_monotonic; expire.tv_sec += ctx->rqtp_obj.tv_sec; expire.tv_nsec += ctx->rqtp_obj.tv_nsec; @@ -855,22 +849,10 @@ CReqClockNanosleep_Entries[] = { CReqClockNanosleep_Post_Expire_Last, CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, - CReqClockNanosleep_Post_Timer_Realtime, - CReqClockNanosleep_Post_Expire_Last, - CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, - { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, CReqClockNanosleep_Post_Timer_Monotonic, CReqClockNanosleep_Post_Expire_Absolute, CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, - CReqClockNanosleep_Post_Timer_Inactive, CReqClockNanosleep_Post_Expire_NA, - CReqClockNanosleep_Post_Scheduler_BlockUnblock, - CReqClockNanosleep_Post_RMTp_Zero }, - { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, - CReqClockNanosleep_Post_Timer_Realtime, - CReqClockNanosleep_Post_Expire_Absolute, - CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, - { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, CReqClockNanosleep_Post_Timer_Monotonic, CReqClockNanosleep_Post_Expire_Last, CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Zero }, @@ -883,26 +865,26 @@ CReqClockNanosleep_Entries[] = { CReqClockNanosleep_Post_Expire_Relative, CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, - CReqClockNanosleep_Post_Timer_Realtime, - CReqClockNanosleep_Post_Expire_Last, - CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Zero }, + CReqClockNanosleep_Post_Timer_Inactive, CReqClockNanosleep_Post_Expire_NA, + CReqClockNanosleep_Post_Scheduler_BlockUnblock, + CReqClockNanosleep_Post_RMTp_Zero }, { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, CReqClockNanosleep_Post_Timer_Realtime, - CReqClockNanosleep_Post_Expire_Relative, - CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Zero }, + CReqClockNanosleep_Post_Expire_Last, + CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop }, { 0, 0, 0, 0, 0, 0, 0, CReqClockNanosleep_Post_Status_Zero, CReqClockNanosleep_Post_Timer_Realtime, - CReqClockNanosleep_Post_Expire_Relative, + CReqClockNanosleep_Post_Expire_Absolute, CReqClockNanosleep_Post_Scheduler_Block, CReqClockNanosleep_Post_RMTp_Nop } }; static const uint8_t CReqClockNanosleep_Map[] = { - 6, 6, 8, 8, 10, 10, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 2, 13, 8, 14, 15, 11, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, - 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 6, 6, 9, 9, 12, 12, 6, 6, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, 16, - 9, 17, 18, 11, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, + 6, 6, 8, 8, 9, 9, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 2, 10, 8, 11, 12, 13, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0, + 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 6, 6, 14, 14, 15, 15, 6, 6, 2, 2, + 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, 10, + 8, 11, 12, 13, 6, 7, 2, 7, 2, 7, 2, 7, 2, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 diff --git a/testsuites/validation/tc-clock-set.c b/testsuites/validation/tc-clock-set.c index 55012dffd3..0ed631004b 100644 --- a/testsuites/validation/tc-clock-set.c +++ b/testsuites/validation/tc-clock-set.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsClockReqSet + * @ingroup RtemsClockReqSet */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,9 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsClockReqSet spec:/rtems/clock/req/set + * @defgroup RtemsClockReqSet spec:/rtems/clock/req/set * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-clock.c b/testsuites/validation/tc-clock.c index b0592c2b26..7e21e6d77c 100644 --- a/testsuites/validation/tc-clock.c +++ b/testsuites/validation/tc-clock.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsClockValClock + * @ingroup RtemsClockValClock */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,19 +60,30 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsClockValClock spec:/rtems/clock/val/clock + * @defgroup RtemsClockValClock spec:/rtems/clock/val/clock * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests some @ref RTEMSAPIClassicClock directives. * * This test case performs the following actions: * - * - Use the rtems_clock_get_ticks_since_boot() function. + * - Use the rtems_clock_get_ticks_since_boot() directive before and after + * exactly one clock tick. * * - Check that clock tick gets incremented. * - * - Use the rtems_clock_get_ticks_per_second() function. + * - Use the rtems_clock_get_ticks_since_boot() directive before and after + * exactly one clock tick. + * + * - Check that clock tick gets incremented. + * + * - Use the rtems_clock_get_ticks_per_second() directive. + * + * - Check that rtems_clock_get_ticks_per_second() actually returns 1us / + * CONFIGURE_MICROSECONDS_PER_TICK. + * + * - Use the rtems_clock_get_ticks_per_second() directive. * * - Check that rtems_clock_get_ticks_per_second() actually returns 1us / * CONFIGURE_MICROSECONDS_PER_TICK. @@ -81,43 +92,77 @@ */ /** - * @brief Use the rtems_clock_get_ticks_since_boot() function. + * @brief Use the rtems_clock_get_ticks_since_boot() directive before and after + * exactly one clock tick. */ static void RtemsClockValClock_Action_0( void ) { rtems_interval result_0; rtems_interval result_1; - int32_t difference; /* Note: rtems_interval = uint32_t (unsigned!) */ result_0 = rtems_clock_get_ticks_since_boot(); ClockTick(); result_1 = rtems_clock_get_ticks_since_boot(); + /* - * Because of the ones-complement, the overflow - * is handled correctly. result_0 = 0xFFFFFFFF will become -1 - * and result_1 = 0x0 will become 0. + * Check that clock tick gets incremented. */ - difference = (int32_t) result_1 - (int32_t) result_0; + T_step_eq_u32( 0, result_1 - result_0, 1 ); +} + +/** + * @brief Use the rtems_clock_get_ticks_since_boot() directive before and after + * exactly one clock tick. + */ +static void RtemsClockValClock_Action_1( void ) +{ + rtems_interval result_0; + rtems_interval result_1; + + #undef rtems_clock_get_ticks_since_boot + + result_0 = rtems_clock_get_ticks_since_boot(); + ClockTick(); + result_1 = rtems_clock_get_ticks_since_boot(); /* * Check that clock tick gets incremented. */ - T_step_eq_i32( 0, difference, 1 ); + T_step_eq_u32( 1, result_1 - result_0, 1 ); } /** - * @brief Use the rtems_clock_get_ticks_per_second() function. + * @brief Use the rtems_clock_get_ticks_per_second() directive. */ -static void RtemsClockValClock_Action_1( void ) +static void RtemsClockValClock_Action_2( void ) { rtems_interval result; + + result = rtems_clock_get_ticks_per_second(); + + /* + * Check that rtems_clock_get_ticks_per_second() actually returns 1us / + * CONFIGURE_MICROSECONDS_PER_TICK. + */ + T_step_eq_u32( 2, result, 1000000UL / TEST_MICROSECONDS_PER_TICK ); +} + +/** + * @brief Use the rtems_clock_get_ticks_per_second() directive. + */ +static void RtemsClockValClock_Action_3( void ) +{ + rtems_interval result; + + #undef rtems_clock_get_ticks_per_second + result = rtems_clock_get_ticks_per_second(); /* * Check that rtems_clock_get_ticks_per_second() actually returns 1us / * CONFIGURE_MICROSECONDS_PER_TICK. */ - T_step_eq_u32( 1, result, 1000000UL / TEST_MICROSECONDS_PER_TICK ); + T_step_eq_u32( 3, result, 1000000UL / TEST_MICROSECONDS_PER_TICK ); } /** @@ -125,10 +170,12 @@ static void RtemsClockValClock_Action_1( void ) */ T_TEST_CASE( RtemsClockValClock ) { - T_plan( 2 ); + T_plan( 4 ); RtemsClockValClock_Action_0(); RtemsClockValClock_Action_1(); + RtemsClockValClock_Action_2(); + RtemsClockValClock_Action_3(); } /** @} */ diff --git a/testsuites/validation/tc-cpu-performance.c b/testsuites/validation/tc-cpu-performance.c new file mode 100644 index 0000000000..4f090e704f --- /dev/null +++ b/testsuites/validation/tc-cpu-performance.c @@ -0,0 +1,270 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup ScoreCpuValPerf + */ + +/* + * Copyright (C) 2023 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/score/cpuimpl.h> + +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup ScoreCpuValPerf spec:/score/cpu/val/perf + * + * @ingroup TestsuitesPerformanceNoClock0 + * + * @brief This test case provides a context to run CPU port performance tests. + * + * @{ + */ + +/** + * @brief Test context for spec:/score/cpu/val/perf test case. + */ +typedef struct { + /** + * @brief This member references the measure runtime context. + */ + T_measure_runtime_context *context; + + /** + * @brief This member provides the measure runtime request. + */ + T_measure_runtime_request request; + + /** + * @brief This member provides an optional measurement begin time point. + */ + T_ticks begin; + + /** + * @brief This member provides an optional measurement end time point. + */ + T_ticks end; +} ScoreCpuValPerf_Context; + +static ScoreCpuValPerf_Context + ScoreCpuValPerf_Instance; + +static void ScoreCpuValPerf_Setup_Context( ScoreCpuValPerf_Context *ctx ) +{ + T_measure_runtime_config config; + + memset( &config, 0, sizeof( config ) ); + config.sample_count = 100; + ctx->request.arg = ctx; + ctx->request.flags = T_MEASURE_RUNTIME_REPORT_SAMPLES; + ctx->context = T_measure_runtime_create( &config ); + T_assert_not_null( ctx->context ); +} + +static void ScoreCpuValPerf_Setup_Wrap( void *arg ) +{ + ScoreCpuValPerf_Context *ctx; + + ctx = arg; + ScoreCpuValPerf_Setup_Context( ctx ); +} + +static T_fixture ScoreCpuValPerf_Fixture = { + .setup = ScoreCpuValPerf_Setup_Wrap, + .stop = NULL, + .teardown = NULL, + .scope = NULL, + .initial_context = &ScoreCpuValPerf_Instance +}; + +/** + * @defgroup ScoreCpuReqPerfEmpty spec:/score/cpu/req/perf-empty + * + * @{ + */ + +/** + * @brief Do nothing and just return. + */ +static void ScoreCpuReqPerfEmpty_Body( ScoreCpuValPerf_Context *ctx ) +{ + /* No code */ +} + +static void ScoreCpuReqPerfEmpty_Body_Wrap( void *arg ) +{ + ScoreCpuValPerf_Context *ctx; + + ctx = arg; + ScoreCpuReqPerfEmpty_Body( ctx ); +} + +/** + * @brief Discard samples interrupted by a clock tick. + */ +static bool ScoreCpuReqPerfEmpty_Teardown( + ScoreCpuValPerf_Context *ctx, + T_ticks *delta, + uint32_t tic, + uint32_t toc, + unsigned int retry +) +{ + return tic == toc; +} + +static bool ScoreCpuReqPerfEmpty_Teardown_Wrap( + void *arg, + T_ticks *delta, + uint32_t tic, + uint32_t toc, + unsigned int retry +) +{ + ScoreCpuValPerf_Context *ctx; + + ctx = arg; + return ScoreCpuReqPerfEmpty_Teardown( ctx, delta, tic, toc, retry ); +} + +/** @} */ + +/** + * @defgroup ScoreCpuReqPerfNops spec:/score/cpu/req/perf-nops + * + * @{ + */ + +/** + * @brief Execute exactly 1000 no-operation instructions. + */ +static void ScoreCpuReqPerfNops_Body( ScoreCpuValPerf_Context *ctx ) +{ + #define NOPS_10 \ + _CPU_Instruction_no_operation(); _CPU_Instruction_no_operation(); \ + _CPU_Instruction_no_operation(); _CPU_Instruction_no_operation(); \ + _CPU_Instruction_no_operation(); _CPU_Instruction_no_operation(); \ + _CPU_Instruction_no_operation(); _CPU_Instruction_no_operation(); \ + _CPU_Instruction_no_operation(); _CPU_Instruction_no_operation(); + #define NOPS_100 NOPS_10 NOPS_10 NOPS_10 NOPS_10 NOPS_10 NOPS_10 NOPS_10 \ + NOPS_10 NOPS_10 NOPS_10 + NOPS_100 + NOPS_100 + NOPS_100 + NOPS_100 + NOPS_100 + NOPS_100 + NOPS_100 + NOPS_100 + NOPS_100 + NOPS_100 +} + +static void ScoreCpuReqPerfNops_Body_Wrap( void *arg ) +{ + ScoreCpuValPerf_Context *ctx; + + ctx = arg; + ScoreCpuReqPerfNops_Body( ctx ); +} + +/** + * @brief Discard samples interrupted by a clock tick. + */ +static bool ScoreCpuReqPerfNops_Teardown( + ScoreCpuValPerf_Context *ctx, + T_ticks *delta, + uint32_t tic, + uint32_t toc, + unsigned int retry +) +{ + return tic == toc; +} + +static bool ScoreCpuReqPerfNops_Teardown_Wrap( + void *arg, + T_ticks *delta, + uint32_t tic, + uint32_t toc, + unsigned int retry +) +{ + ScoreCpuValPerf_Context *ctx; + + ctx = arg; + return ScoreCpuReqPerfNops_Teardown( ctx, delta, tic, toc, retry ); +} + +/** @} */ + +/** + * @fn void T_case_body_ScoreCpuValPerf( void ) + */ +T_TEST_CASE_FIXTURE( ScoreCpuValPerf, &ScoreCpuValPerf_Fixture ) +{ + ScoreCpuValPerf_Context *ctx; + + ctx = T_fixture_context(); + + ctx->request.name = "ScoreCpuReqPerfEmpty"; + ctx->request.setup = NULL; + ctx->request.body = ScoreCpuReqPerfEmpty_Body_Wrap; + ctx->request.teardown = ScoreCpuReqPerfEmpty_Teardown_Wrap; + T_measure_runtime( ctx->context, &ctx->request ); + + ctx->request.name = "ScoreCpuReqPerfNops"; + ctx->request.setup = NULL; + ctx->request.body = ScoreCpuReqPerfNops_Body_Wrap; + ctx->request.teardown = ScoreCpuReqPerfNops_Teardown_Wrap; + T_measure_runtime( ctx->context, &ctx->request ); +} + +/** @} */ diff --git a/testsuites/validation/tc-cpuuse.c b/testsuites/validation/tc-cpuuse.c index 0e06471ff0..f554a0b4e1 100644 --- a/testsuites/validation/tc-cpuuse.c +++ b/testsuites/validation/tc-cpuuse.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsCpuuseValCpuuse + * @ingroup RtemsCpuuseValCpuuse */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsCpuuseValCpuuse spec:/rtems/cpuuse/val/cpuuse + * @defgroup RtemsCpuuseValCpuuse spec:/rtems/cpuuse/val/cpuuse * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests the CPU usage reporting and reset. * @@ -97,6 +97,21 @@ static void RtemsCpuuseValCpuuse_Action_0( void ) Thread_Control *other; Timestamp_Control cpu_usage_self; Timestamp_Control cpu_usage_other; + uint32_t idle_tasks; + uint32_t cpu_index; + + idle_tasks = 0; + + for ( cpu_index = 0; cpu_index < rtems_scheduler_get_processor_maximum(); ++cpu_index ) { + rtems_status_code sc; + rtems_id unused; + + sc = rtems_scheduler_ident_by_processor( cpu_index, &unused ); + + if ( sc == RTEMS_SUCCESSFUL ) { + ++idle_tasks; + } + } id = CreateTask( "WORK", GetSelfPriority() ); StartTask( id, Worker, NULL ); @@ -128,7 +143,7 @@ static void RtemsCpuuseValCpuuse_Action_0( void ) T_eq_i64( _Thread_Get_CPU_time_used_after_last_reset( self ), 4295 ); T_eq_i64( _Thread_Get_CPU_time_used( self ), - cpu_usage_self + 12885 + rtems_scheduler_get_processor_maximum() * 4295 + cpu_usage_self + 12885 + 4295 * idle_tasks ); T_eq_i64( _Thread_Get_CPU_time_used_after_last_reset( other ), 0 ); diff --git a/testsuites/validation/tc-dev-clock-xil-ttc.c b/testsuites/validation/tc-dev-clock-xil-ttc.c new file mode 100644 index 0000000000..70f49a4cc6 --- /dev/null +++ b/testsuites/validation/tc-dev-clock-xil-ttc.c @@ -0,0 +1,136 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup DevClockXilTtcValTickCatchUp + */ + +/* + * Copyright (C) 2024 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> +#include <sys/time.h> + +#include <rtems/test.h> + +/** + * @defgroup DevClockXilTtcValTickCatchUp \ + * spec:/dev/clock/xil-ttc/val/tick-catch-up + * + * @ingroup TestsuitesBspsValidationBsp0 + * + * @brief Tests some Xilinx TTC clock driver functions. + * + * This test case performs the following actions: + * + * - Synchronize with the clock tick. Disable interrupts. Busy wait three + * clock tick intervals. Enable interrupts. + * + * - Check that exactly three clock ticks happened once interrupts are + * enabled again. + * + * @{ + */ + +/** + * @brief Synchronize with the clock tick. Disable interrupts. Busy wait + * three clock tick intervals. Enable interrupts. + */ +static void DevClockXilTtcValTickCatchUp_Action_0( void ) +{ + uint32_t ns_per_tick; + uint64_t three_ticks_interval; + rtems_interrupt_level level; + rtems_interval t_0; + rtems_interval t_1; + rtems_interval t_2; + uint64_t m_0; + uint64_t m_1; + + ns_per_tick = rtems_configuration_get_nanoseconds_per_tick(); + three_ticks_interval = ( 7 * (uint64_t) nstosbt( ns_per_tick ) ) / 2; + t_0 = rtems_clock_get_ticks_since_boot(); + + /* Synchronize with clock tick */ + do { + t_1 = rtems_clock_get_ticks_since_boot(); + m_0 = (uint64_t) rtems_clock_get_monotonic_sbintime(); + } while ( t_0 == t_1 ); + + rtems_interrupt_local_disable( level ); + + do { + m_1 = (uint64_t) rtems_clock_get_monotonic_sbintime(); + } while ( m_1 - m_0 <= three_ticks_interval ); + + rtems_interrupt_local_enable( level ); + + /* + * Make sure the clock interrupt was serviced after the interrupt enable. + */ + do { + t_2 = rtems_clock_get_ticks_since_boot(); + } while ( t_1 == t_2 ); + + /* + * Check that exactly three clock ticks happened once interrupts are enabled + * again. + */ + T_step_eq_u32( 0, t_2 - t_1, 3 ); +} + +/** + * @fn void T_case_body_DevClockXilTtcValTickCatchUp( void ) + */ +T_TEST_CASE( DevClockXilTtcValTickCatchUp ) +{ + T_plan( 1 ); + + DevClockXilTtcValTickCatchUp_Action_0(); +} + +/** @} */ diff --git a/testsuites/validation/tc-dev-grlib-apbuart-inbyte-nonblocking.c b/testsuites/validation/tc-dev-grlib-apbuart-inbyte-nonblocking.c new file mode 100644 index 0000000000..b33b6f1a25 --- /dev/null +++ b/testsuites/validation/tc-dev-grlib-apbuart-inbyte-nonblocking.c @@ -0,0 +1,348 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup DevGrlibReqApbuartInbyteNonblocking + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <string.h> +#include <grlib/apbuart.h> + +#include <rtems/test.h> + +/** + * @defgroup DevGrlibReqApbuartInbyteNonblocking \ + * spec:/dev/grlib/req/apbuart-inbyte-nonblocking + * + * @ingroup TestsuitesBspsValidationBsp0 + * + * @{ + */ + +typedef enum { + DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_Yes, + DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_No, + DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_NA +} DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady; + +typedef enum { + DevGrlibReqApbuartInbyteNonblocking_Post_Result_Data, + DevGrlibReqApbuartInbyteNonblocking_Post_Result_MinusOne, + DevGrlibReqApbuartInbyteNonblocking_Post_Result_NA +} DevGrlibReqApbuartInbyteNonblocking_Post_Result; + +typedef enum { + DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Cleared, + DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_NA +} DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags; + +typedef struct { + uint8_t Skip : 1; + uint8_t Pre_DataReady_NA : 1; + uint8_t Post_Result : 2; + uint8_t Post_ErrorFlags : 1; +} DevGrlibReqApbuartInbyteNonblocking_Entry; + +/** + * @brief Test context for spec:/dev/grlib/req/apbuart-inbyte-nonblocking test + * case. + */ +typedef struct { + /** + * @brief This member provides the APBUART register block. + */ + apbuart regs; + + /** + * @brief This member contains the return value of the + * apbuart_inbyte_nonblocking() call. + */ + int result; + + struct { + /** + * @brief This member defines the pre-condition states for the next action. + */ + size_t pcs[ 1 ]; + + /** + * @brief If this member is true, then the test action loop is executed. + */ + bool in_action_loop; + + /** + * @brief This member contains the next transition map index. + */ + size_t index; + + /** + * @brief This member contains the current transition map entry. + */ + DevGrlibReqApbuartInbyteNonblocking_Entry entry; + + /** + * @brief If this member is true, then the current transition variant + * should be skipped. + */ + bool skip; + } Map; +} DevGrlibReqApbuartInbyteNonblocking_Context; + +static DevGrlibReqApbuartInbyteNonblocking_Context + DevGrlibReqApbuartInbyteNonblocking_Instance; + +static const char * const DevGrlibReqApbuartInbyteNonblocking_PreDesc_DataReady[] = { + "Yes", + "No", + "NA" +}; + +static const char * const * const DevGrlibReqApbuartInbyteNonblocking_PreDesc[] = { + DevGrlibReqApbuartInbyteNonblocking_PreDesc_DataReady, + NULL +}; + +static void DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_Prepare( + DevGrlibReqApbuartInbyteNonblocking_Context *ctx, + DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady state +) +{ + switch ( state ) { + case DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_Yes: { + /* + * While the data ready flag is set in the status register of the + * register block specified by ``regs`` parameter. + */ + ctx->regs.status |= APBUART_STATUS_DR; + break; + } + + case DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_No: { + /* + * While the data ready flag is cleared in the status register of the + * register block specified by ``regs`` parameter. + */ + ctx->regs.status &= ~APBUART_STATUS_DR; + break; + } + + case DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_NA: + break; + } +} + +static void DevGrlibReqApbuartInbyteNonblocking_Post_Result_Check( + DevGrlibReqApbuartInbyteNonblocking_Context *ctx, + DevGrlibReqApbuartInbyteNonblocking_Post_Result state +) +{ + switch ( state ) { + case DevGrlibReqApbuartInbyteNonblocking_Post_Result_Data: { + /* + * The return value of apbuart_inbyte_nonblocking() shall be the data + * read from the data register of the register block specified by + * ``regs``. + */ + T_eq_int( ctx->result, 0xff ); + break; + } + + case DevGrlibReqApbuartInbyteNonblocking_Post_Result_MinusOne: { + /* + * The return value of apbuart_inbyte_nonblocking() shall be minus one. + */ + T_eq_int( ctx->result, -1 ); + break; + } + + case DevGrlibReqApbuartInbyteNonblocking_Post_Result_NA: + break; + } +} + +static void DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Check( + DevGrlibReqApbuartInbyteNonblocking_Context *ctx, + DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags state +) +{ + switch ( state ) { + case DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Cleared: { + /* + * The framing error, parity error, overrun, and break received flags in + * the status register of the register block specified by ``regs`` shall + * be cleared. + */ + T_eq_u32( ctx->regs.status & 0x78, 0 ); + break; + } + + case DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_NA: + break; + } +} + +static void DevGrlibReqApbuartInbyteNonblocking_Prepare( + DevGrlibReqApbuartInbyteNonblocking_Context *ctx +) +{ + memset( &ctx->regs, 0, sizeof( ctx->regs ) ); + ctx->regs.status = 0x78; + ctx->regs.data = 0xff; +} + +static void DevGrlibReqApbuartInbyteNonblocking_Action( + DevGrlibReqApbuartInbyteNonblocking_Context *ctx +) +{ + ctx->result = apbuart_inbyte_nonblocking( &ctx->regs ); +} + +static const DevGrlibReqApbuartInbyteNonblocking_Entry +DevGrlibReqApbuartInbyteNonblocking_Entries[] = { + { 0, 0, DevGrlibReqApbuartInbyteNonblocking_Post_Result_Data, + DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Cleared }, + { 0, 0, DevGrlibReqApbuartInbyteNonblocking_Post_Result_MinusOne, + DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Cleared } +}; + +static const uint8_t +DevGrlibReqApbuartInbyteNonblocking_Map[] = { + 0, 1 +}; + +static size_t DevGrlibReqApbuartInbyteNonblocking_Scope( + void *arg, + char *buf, + size_t n +) +{ + DevGrlibReqApbuartInbyteNonblocking_Context *ctx; + + ctx = arg; + + if ( ctx->Map.in_action_loop ) { + return T_get_scope( + DevGrlibReqApbuartInbyteNonblocking_PreDesc, + buf, + n, + ctx->Map.pcs + ); + } + + return 0; +} + +static T_fixture DevGrlibReqApbuartInbyteNonblocking_Fixture = { + .setup = NULL, + .stop = NULL, + .teardown = NULL, + .scope = DevGrlibReqApbuartInbyteNonblocking_Scope, + .initial_context = &DevGrlibReqApbuartInbyteNonblocking_Instance +}; + +static inline DevGrlibReqApbuartInbyteNonblocking_Entry +DevGrlibReqApbuartInbyteNonblocking_PopEntry( + DevGrlibReqApbuartInbyteNonblocking_Context *ctx +) +{ + size_t index; + + index = ctx->Map.index; + ctx->Map.index = index + 1; + return DevGrlibReqApbuartInbyteNonblocking_Entries[ + DevGrlibReqApbuartInbyteNonblocking_Map[ index ] + ]; +} + +static void DevGrlibReqApbuartInbyteNonblocking_TestVariant( + DevGrlibReqApbuartInbyteNonblocking_Context *ctx +) +{ + DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_Prepare( + ctx, + ctx->Map.pcs[ 0 ] + ); + DevGrlibReqApbuartInbyteNonblocking_Action( ctx ); + DevGrlibReqApbuartInbyteNonblocking_Post_Result_Check( + ctx, + ctx->Map.entry.Post_Result + ); + DevGrlibReqApbuartInbyteNonblocking_Post_ErrorFlags_Check( + ctx, + ctx->Map.entry.Post_ErrorFlags + ); +} + +/** + * @fn void T_case_body_DevGrlibReqApbuartInbyteNonblocking( void ) + */ +T_TEST_CASE_FIXTURE( + DevGrlibReqApbuartInbyteNonblocking, + &DevGrlibReqApbuartInbyteNonblocking_Fixture +) +{ + DevGrlibReqApbuartInbyteNonblocking_Context *ctx; + + ctx = T_fixture_context(); + ctx->Map.in_action_loop = true; + ctx->Map.index = 0; + + for ( + ctx->Map.pcs[ 0 ] = DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_Yes; + ctx->Map.pcs[ 0 ] < DevGrlibReqApbuartInbyteNonblocking_Pre_DataReady_NA; + ++ctx->Map.pcs[ 0 ] + ) { + ctx->Map.entry = DevGrlibReqApbuartInbyteNonblocking_PopEntry( ctx ); + DevGrlibReqApbuartInbyteNonblocking_Prepare( ctx ); + DevGrlibReqApbuartInbyteNonblocking_TestVariant( ctx ); + } +} + +/** @} */ diff --git a/testsuites/validation/tc-dev-grlib-io.c b/testsuites/validation/tc-dev-grlib-io.c new file mode 100644 index 0000000000..5bfc3fcfab --- /dev/null +++ b/testsuites/validation/tc-dev-grlib-io.c @@ -0,0 +1,295 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup DevGrlibValIo + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <string.h> +#include <grlib/apbuart.h> +#include <grlib/io.h> + +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup DevGrlibValIo spec:/dev/grlib/val/io + * + * @ingroup TestsuitesBspsValidationBsp0 + * + * @brief Tests some @ref RTEMSDeviceGRLIB directives. + * + * This test case performs the following actions: + * + * - Call grlib_load_8() to load a prepared value. + * + * - Check that the returned value is equal to the prepared value. + * + * - Call grlib_load_16() to load a prepared value. + * + * - Check that the returned value is equal to the prepared value. + * + * - Call grlib_load_32() to load a prepared value. + * + * - Check that the returned value is equal to the prepared value. + * + * - Call grlib_load_64() to load a prepared value. + * + * - Check that the returned value is equal to the prepared value. + * + * - Call grlib_store_8() to store a value to an object. + * + * - Check that the value of the object is equal to the stored value. + * + * - Call grlib_store_16() to store a value to an object. + * + * - Check that the value of the object is equal to the stored value. + * + * - Call grlib_store_32() to store a value to an object. + * + * - Check that the value of the object is equal to the stored value. + * + * - Call grlib_store_64() to store a value to an object. + * + * - Check that the value of the object is equal to the stored value. + * + * - Call apbuart_outbyte_polled() to store a character to the data register. + * The transmitter FIFO shall be initially non-empty. The status is checked + * by apbuart_outbyte_wait(). + * + * - Check that the transmitter FIFO empty flag was set by ApbuartIORelax(). + * + * - Check that the data register was written by apbuart_outbyte_polled(). + * + * @{ + */ + +static void ApbuartIORelax( void *arg ) +{ + apbuart *regs; + + regs = arg; + regs->status = 0x4; + T_quiet_eq_u32( regs->data, 0 ); +} + +/** + * @brief Call grlib_load_8() to load a prepared value. + */ +static void DevGrlibValIo_Action_0( void ) +{ + uint8_t reg_8; + uint8_t val_8; + + reg_8 = 0x81; + val_8 = grlib_load_8( ®_8 ); + + /* + * Check that the returned value is equal to the prepared value. + */ + T_step_eq_u8( 0, val_8, 0x81 ); +} + +/** + * @brief Call grlib_load_16() to load a prepared value. + */ +static void DevGrlibValIo_Action_1( void ) +{ + uint16_t reg_16; + uint16_t val_16; + + reg_16 = 0x8001; + val_16 = grlib_load_16( ®_16 ); + + /* + * Check that the returned value is equal to the prepared value. + */ + T_step_eq_u16( 1, val_16, 0x8001 ); +} + +/** + * @brief Call grlib_load_32() to load a prepared value. + */ +static void DevGrlibValIo_Action_2( void ) +{ + uint32_t reg_32; + uint32_t val_32; + + reg_32 = 0x80000001; + val_32 = grlib_load_32( ®_32 ); + + /* + * Check that the returned value is equal to the prepared value. + */ + T_step_eq_u32( 2, val_32, 0x80000001 ); +} + +/** + * @brief Call grlib_load_64() to load a prepared value. + */ +static void DevGrlibValIo_Action_3( void ) +{ + uint64_t reg_64; + uint64_t val_64; + + reg_64 = 0x8000000000000001; + val_64 = grlib_load_64( ®_64 ); + + /* + * Check that the returned value is equal to the prepared value. + */ + T_step_eq_u64( 3, val_64, 0x8000000000000001 ); +} + +/** + * @brief Call grlib_store_8() to store a value to an object. + */ +static void DevGrlibValIo_Action_4( void ) +{ + uint8_t reg_8; + + grlib_store_8( ®_8, 0x81 ); + + /* + * Check that the value of the object is equal to the stored value. + */ + T_step_eq_u8( 4, reg_8, 0x81 ); +} + +/** + * @brief Call grlib_store_16() to store a value to an object. + */ +static void DevGrlibValIo_Action_5( void ) +{ + uint16_t reg_16; + + grlib_store_16( ®_16, 0x8001 ); + + /* + * Check that the value of the object is equal to the stored value. + */ + T_step_eq_u16( 5, reg_16, 0x8001 ); +} + +/** + * @brief Call grlib_store_32() to store a value to an object. + */ +static void DevGrlibValIo_Action_6( void ) +{ + uint32_t reg_32; + + grlib_store_32( ®_32, 0x80000001 ); + + /* + * Check that the value of the object is equal to the stored value. + */ + T_step_eq_u32( 6, reg_32, 0x80000001 ); +} + +/** + * @brief Call grlib_store_64() to store a value to an object. + */ +static void DevGrlibValIo_Action_7( void ) +{ + uint64_t reg_64; + + grlib_store_64( ®_64, 0x8000000000000001 ); + + /* + * Check that the value of the object is equal to the stored value. + */ + T_step_eq_u64( 7, reg_64, 0x8000000000000001 ); +} + +/** + * @brief Call apbuart_outbyte_polled() to store a character to the data + * register. The transmitter FIFO shall be initially non-empty. The status + * is checked by apbuart_outbyte_wait(). + */ +static void DevGrlibValIo_Action_8( void ) +{ + apbuart regs; + + memset( ®s, 0, sizeof( regs ) ); + SetIORelaxHandler( ApbuartIORelax, ®s ); + apbuart_outbyte_polled( ®s, (char) 0xff ); + SetIORelaxHandler( NULL, NULL ); + + /* + * Check that the transmitter FIFO empty flag was set by ApbuartIORelax(). + */ + T_step_eq_u32( 8, regs.status, APBUART_STATUS_TE ); + + /* + * Check that the data register was written by apbuart_outbyte_polled(). + */ + T_step_eq_u32( 9, regs.data, 0xff ); +} + +/** + * @fn void T_case_body_DevGrlibValIo( void ) + */ +T_TEST_CASE( DevGrlibValIo ) +{ + T_plan( 10 ); + + DevGrlibValIo_Action_0(); + DevGrlibValIo_Action_1(); + DevGrlibValIo_Action_2(); + DevGrlibValIo_Action_3(); + DevGrlibValIo_Action_4(); + DevGrlibValIo_Action_5(); + DevGrlibValIo_Action_6(); + DevGrlibValIo_Action_7(); + DevGrlibValIo_Action_8(); +} + +/** @} */ diff --git a/testsuites/validation/tc-dev-grlib-irqamp-get-timestamp.c b/testsuites/validation/tc-dev-grlib-irqamp-get-timestamp.c new file mode 100644 index 0000000000..a064c479b9 --- /dev/null +++ b/testsuites/validation/tc-dev-grlib-irqamp-get-timestamp.c @@ -0,0 +1,304 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup DevGrlibReqIrqampGetTimestamp + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <grlib/irqamp.h> + +#include <rtems/test.h> + +/** + * @defgroup DevGrlibReqIrqampGetTimestamp \ + * spec:/dev/grlib/req/irqamp-get-timestamp + * + * @ingroup TestsuitesBspsValidationBsp0 + * + * @{ + */ + +typedef enum { + DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Zero, + DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Positive, + DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_NA +} DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets; + +typedef enum { + DevGrlibReqIrqampGetTimestamp_Post_Result_Registers, + DevGrlibReqIrqampGetTimestamp_Post_Result_Null, + DevGrlibReqIrqampGetTimestamp_Post_Result_NA +} DevGrlibReqIrqampGetTimestamp_Post_Result; + +typedef struct { + uint8_t Skip : 1; + uint8_t Pre_NumberOfTimestampRegisterSets_NA : 1; + uint8_t Post_Result : 2; +} DevGrlibReqIrqampGetTimestamp_Entry; + +/** + * @brief Test context for spec:/dev/grlib/req/irqamp-get-timestamp test case. + */ +typedef struct { + /** + * @brief This member contains the return value of the + * irqamp_get_timestamp_registers() call. + */ + irqamp_timestamp *result; + + /** + * @brief This member contains the IRQ(A)MP register block. + */ + irqamp irqamp_regs; + + struct { + /** + * @brief This member defines the pre-condition states for the next action. + */ + size_t pcs[ 1 ]; + + /** + * @brief If this member is true, then the test action loop is executed. + */ + bool in_action_loop; + + /** + * @brief This member contains the next transition map index. + */ + size_t index; + + /** + * @brief This member contains the current transition map entry. + */ + DevGrlibReqIrqampGetTimestamp_Entry entry; + + /** + * @brief If this member is true, then the current transition variant + * should be skipped. + */ + bool skip; + } Map; +} DevGrlibReqIrqampGetTimestamp_Context; + +static DevGrlibReqIrqampGetTimestamp_Context + DevGrlibReqIrqampGetTimestamp_Instance; + +static const char * const DevGrlibReqIrqampGetTimestamp_PreDesc_NumberOfTimestampRegisterSets[] = { + "Zero", + "Positive", + "NA" +}; + +static const char * const * const DevGrlibReqIrqampGetTimestamp_PreDesc[] = { + DevGrlibReqIrqampGetTimestamp_PreDesc_NumberOfTimestampRegisterSets, + NULL +}; + +static void +DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Prepare( + DevGrlibReqIrqampGetTimestamp_Context *ctx, + DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets state +) +{ + switch ( state ) { + case DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Zero: { + /* + * While the number of timestamp register sets indicated by the IRQ(A)MP + * register block specified by the ``irqamp_regs`` parameter is zero. + */ + ctx->irqamp_regs.itstmp[ 0 ].itstmpc = 0; + break; + } + + case DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Positive: { + /* + * While the number of timestamp register sets indicated by the IRQ(A)MP + * register block specified by the ``irqamp_regs`` parameter is positive. + */ + ctx->irqamp_regs.itstmp[ 0 ].itstmpc = IRQAMP_ITSTMPC_TSTAMP( 1 ); + break; + } + + case DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_NA: + break; + } +} + +static void DevGrlibReqIrqampGetTimestamp_Post_Result_Check( + DevGrlibReqIrqampGetTimestamp_Context *ctx, + DevGrlibReqIrqampGetTimestamp_Post_Result state +) +{ + switch ( state ) { + case DevGrlibReqIrqampGetTimestamp_Post_Result_Registers: { + /* + * The return value of irqamp_get_timestamp_registers() shall be address + * of the timestamping register block contained in the IRQ(A)MP register + * block specified by the ``irqamp_regs`` parameter. + */ + T_not_null( ctx->result ); + break; + } + + case DevGrlibReqIrqampGetTimestamp_Post_Result_Null: { + /* + * The return value of irqamp_get_timestamp_registers() shall be false. + */ + T_null( ctx->result ); + break; + } + + case DevGrlibReqIrqampGetTimestamp_Post_Result_NA: + break; + } +} + +static void DevGrlibReqIrqampGetTimestamp_Action( + DevGrlibReqIrqampGetTimestamp_Context *ctx +) +{ + ctx->result = irqamp_get_timestamp_registers( &ctx->irqamp_regs ); +} + +static const DevGrlibReqIrqampGetTimestamp_Entry +DevGrlibReqIrqampGetTimestamp_Entries[] = { + { 0, 0, DevGrlibReqIrqampGetTimestamp_Post_Result_Null }, + { 0, 0, DevGrlibReqIrqampGetTimestamp_Post_Result_Registers } +}; + +static const uint8_t +DevGrlibReqIrqampGetTimestamp_Map[] = { + 0, 1 +}; + +static size_t DevGrlibReqIrqampGetTimestamp_Scope( + void *arg, + char *buf, + size_t n +) +{ + DevGrlibReqIrqampGetTimestamp_Context *ctx; + + ctx = arg; + + if ( ctx->Map.in_action_loop ) { + return T_get_scope( + DevGrlibReqIrqampGetTimestamp_PreDesc, + buf, + n, + ctx->Map.pcs + ); + } + + return 0; +} + +static T_fixture DevGrlibReqIrqampGetTimestamp_Fixture = { + .setup = NULL, + .stop = NULL, + .teardown = NULL, + .scope = DevGrlibReqIrqampGetTimestamp_Scope, + .initial_context = &DevGrlibReqIrqampGetTimestamp_Instance +}; + +static inline DevGrlibReqIrqampGetTimestamp_Entry +DevGrlibReqIrqampGetTimestamp_PopEntry( + DevGrlibReqIrqampGetTimestamp_Context *ctx +) +{ + size_t index; + + index = ctx->Map.index; + ctx->Map.index = index + 1; + return DevGrlibReqIrqampGetTimestamp_Entries[ + DevGrlibReqIrqampGetTimestamp_Map[ index ] + ]; +} + +static void DevGrlibReqIrqampGetTimestamp_TestVariant( + DevGrlibReqIrqampGetTimestamp_Context *ctx +) +{ + DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Prepare( + ctx, + ctx->Map.pcs[ 0 ] + ); + DevGrlibReqIrqampGetTimestamp_Action( ctx ); + DevGrlibReqIrqampGetTimestamp_Post_Result_Check( + ctx, + ctx->Map.entry.Post_Result + ); +} + +/** + * @fn void T_case_body_DevGrlibReqIrqampGetTimestamp( void ) + */ +T_TEST_CASE_FIXTURE( + DevGrlibReqIrqampGetTimestamp, + &DevGrlibReqIrqampGetTimestamp_Fixture +) +{ + DevGrlibReqIrqampGetTimestamp_Context *ctx; + + ctx = T_fixture_context(); + ctx->Map.in_action_loop = true; + ctx->Map.index = 0; + + for ( + ctx->Map.pcs[ 0 ] = DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_Zero; + ctx->Map.pcs[ 0 ] < DevGrlibReqIrqampGetTimestamp_Pre_NumberOfTimestampRegisterSets_NA; + ++ctx->Map.pcs[ 0 ] + ) { + ctx->Map.entry = DevGrlibReqIrqampGetTimestamp_PopEntry( ctx ); + DevGrlibReqIrqampGetTimestamp_TestVariant( ctx ); + } +} + +/** @} */ diff --git a/testsuites/validation/tc-event-performance.c b/testsuites/validation/tc-event-performance.c index 1baefecea5..9cf71e92f5 100644 --- a/testsuites/validation/tc-event-performance.c +++ b/testsuites/validation/tc-event-performance.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsEventValPerf + * @ingroup RtemsEventValPerf */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsEventValPerf spec:/rtems/event/val/perf + * @defgroup RtemsEventValPerf spec:/rtems/event/val/perf * - * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0 + * @ingroup TestsuitesPerformanceNoClock0 * * @brief This test case provides a context to run @ref RTEMSAPIClassicEvent * performance tests. @@ -107,12 +107,11 @@ typedef struct { static RtemsEventValPerf_Context RtemsEventValPerf_Instance; -typedef RtemsEventValPerf_Context Context; +#define EVENT_END RTEMS_EVENT_0 + +#define EVENT_OTHER RTEMS_EVENT_1 -typedef enum { - EVENT_END = RTEMS_EVENT_0, - EVENT_OTHER = RTEMS_EVENT_1 -} Event; +typedef RtemsEventValPerf_Context Context; static void Send( const Context *ctx, rtems_event_set events ) { @@ -211,6 +210,12 @@ static T_fixture RtemsEventValPerf_Fixture = { }; /** + * @defgroup RtemsEventReqPerfIsrPreempt spec:/rtems/event/req/perf-isr-preempt + * + * @{ + */ + +/** * @brief Send two events from with interrupt context. Satisfy the event * condition. */ @@ -260,6 +265,14 @@ static bool RtemsEventReqPerfIsrPreempt_Teardown_Wrap( return RtemsEventReqPerfIsrPreempt_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + +/** + * @defgroup RtemsEventReqPerfOther spec:/rtems/event/req/perf-other + * + * @{ + */ + /** * @brief Lower the worker priority. */ @@ -325,8 +338,16 @@ static bool RtemsEventReqPerfOther_Teardown_Wrap( return RtemsEventReqPerfOther_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + #if defined(RTEMS_SMP) /** + * @defgroup RtemsEventReqPerfOtherCpu spec:/rtems/event/req/perf-other-cpu + * + * @{ + */ + +/** * @brief Move worker to scheduler B. */ static void RtemsEventReqPerfOtherCpu_Prepare( RtemsEventValPerf_Context *ctx ) @@ -392,9 +413,18 @@ static void RtemsEventReqPerfOtherCpu_Cleanup( RtemsEventValPerf_Context *ctx ) { SetScheduler( ctx->worker_id, SCHEDULER_A_ID, PRIO_HIGH ); } + +/** @} */ #endif /** + * @defgroup RtemsEventReqPerfOtherNotSatisfied \ + * spec:/rtems/event/req/perf-other-not-satisfied + * + * @{ + */ + +/** * @brief Send an event. Do not satisfy the event condition. */ static void RtemsEventReqPerfOtherNotSatisfied_Body( @@ -451,6 +481,15 @@ static bool RtemsEventReqPerfOtherNotSatisfied_Teardown_Wrap( ); } +/** @} */ + +/** + * @defgroup RtemsEventReqPerfOtherPreempt \ + * spec:/rtems/event/req/perf-other-preempt + * + * @{ + */ + /** * @brief Send two events. Satisfy the event condition. */ @@ -503,6 +542,8 @@ static bool RtemsEventReqPerfOtherPreempt_Teardown_Wrap( return RtemsEventReqPerfOtherPreempt_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + /** * @fn void T_case_body_RtemsEventValPerf( void ) */ diff --git a/testsuites/validation/tc-event-send-receive.c b/testsuites/validation/tc-event-send-receive.c index 7db58bedcd..54a527cbaa 100644 --- a/testsuites/validation/tc-event-send-receive.c +++ b/testsuites/validation/tc-event-send-receive.c @@ -3,12 +3,12 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsEventValSendReceive - * @ingroup RTEMSTestCaseRtemsEventValSystemSendReceive + * @ingroup RtemsEventValSendReceive + * @ingroup RtemsEventValSystemSendReceive */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -63,17 +63,16 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsEventValSendReceive \ - * spec:/rtems/event/val/send-receive + * @defgroup RtemsEventValSendReceive spec:/rtems/event/val/send-receive * - * @ingroup RTEMSTestSuiteTestsuitesValidation0 + * @ingroup TestsuitesValidation0 * * @brief Tests the rtems_event_send() and rtems_event_receive() directives. * * This test case performs the following actions: * * - Run the event send and receive tests for the application event set defined - * by /rtems/event/req/send-receive. + * by spec:/rtems/event/req/send-receive. * * @{ */ @@ -106,7 +105,7 @@ static rtems_event_set GetPendingEvents( Thread_Control *thread ) /** * @brief Run the event send and receive tests for the application event set - * defined by /rtems/event/req/send-receive. + * defined by spec:/rtems/event/req/send-receive. */ static void RtemsEventValSendReceive_Action_0( void ) { @@ -130,10 +129,10 @@ T_TEST_CASE( RtemsEventValSendReceive ) /** @} */ /** - * @defgroup RTEMSTestCaseRtemsEventValSystemSendReceive \ + * @defgroup RtemsEventValSystemSendReceive \ * spec:/rtems/event/val/system-send-receive * - * @ingroup RTEMSTestSuiteTestsuitesValidation0 + * @ingroup TestsuitesValidation0 * * @brief Tests the rtems_event_system_send() and rtems_event_system_receive() * directives. @@ -141,7 +140,7 @@ T_TEST_CASE( RtemsEventValSendReceive ) * This test case performs the following actions: * * - Run the event send and receive tests for the system event set defined by - * /rtems/event/req/send-receive. + * spec:/rtems/event/req/send-receive. * * @{ */ @@ -179,7 +178,7 @@ static rtems_event_set GetPendingSystemEvents( Thread_Control *thread ) /** * @brief Run the event send and receive tests for the system event set defined - * by /rtems/event/req/send-receive. + * by spec:/rtems/event/req/send-receive. */ static void RtemsEventValSystemSendReceive_Action_0( void ) { diff --git a/testsuites/validation/tc-events.c b/testsuites/validation/tc-events.c index 54df2f7ceb..e7d009fe8a 100644 --- a/testsuites/validation/tc-events.c +++ b/testsuites/validation/tc-events.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsEventValEvents + * @ingroup RtemsEventValEvents */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsEventValEvents spec:/rtems/event/val/events + * @defgroup RtemsEventValEvents spec:/rtems/event/val/events * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests the Event Manager API. * diff --git a/testsuites/validation/tc-flsl.c b/testsuites/validation/tc-flsl.c index fef1f2bae1..95f0ed9ccf 100644 --- a/testsuites/validation/tc-flsl.c +++ b/testsuites/validation/tc-flsl.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseCReqFlsl + * @ingroup CReqFlsl */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,9 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseCReqFlsl spec:/c/req/flsl + * @defgroup CReqFlsl spec:/c/req/flsl * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-futex-wait.c b/testsuites/validation/tc-futex-wait.c index 396b26525f..3730df2a40 100644 --- a/testsuites/validation/tc-futex-wait.c +++ b/testsuites/validation/tc-futex-wait.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseNewlibReqFutexWait + * @ingroup NewlibReqFutexWait */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,9 +62,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseNewlibReqFutexWait spec:/newlib/req/futex-wait + * @defgroup NewlibReqFutexWait spec:/newlib/req/futex-wait * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -101,7 +101,7 @@ typedef struct { /** * @brief This member contains the thread queue test context. */ - TQContext tq_ctx;; + TQContext tq_ctx; /** * @brief This member specifies the expected futex state value. diff --git a/testsuites/validation/tc-futex-wake.c b/testsuites/validation/tc-futex-wake.c index 1d996d1d2b..baaa0daa6b 100644 --- a/testsuites/validation/tc-futex-wake.c +++ b/testsuites/validation/tc-futex-wake.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseNewlibReqFutexWake + * @ingroup NewlibReqFutexWake */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,17 +62,16 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseNewlibReqFutexWake spec:/newlib/req/futex-wake + * @defgroup NewlibReqFutexWake spec:/newlib/req/futex-wake * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ typedef enum { - NewlibReqFutexWake_Pre_Count_Negative, - NewlibReqFutexWake_Pre_Count_Partial, - NewlibReqFutexWake_Pre_Count_All, + NewlibReqFutexWake_Pre_Count_NegativeOrZero, + NewlibReqFutexWake_Pre_Count_Positive, NewlibReqFutexWake_Pre_Count_NA } NewlibReqFutexWake_Pre_Count; @@ -83,8 +82,7 @@ typedef enum { typedef enum { NewlibReqFutexWake_Post_Flush_No, - NewlibReqFutexWake_Post_Flush_Partial, - NewlibReqFutexWake_Post_Flush_All, + NewlibReqFutexWake_Post_Flush_Yes, NewlibReqFutexWake_Post_Flush_NA } NewlibReqFutexWake_Post_Flush; @@ -102,7 +100,7 @@ typedef struct { /** * @brief This member contains the thread queue test context. */ - TQContext tq_ctx;; + TQContext tq_ctx; /** * @brief This member provides the futex object. @@ -147,9 +145,8 @@ static NewlibReqFutexWake_Context NewlibReqFutexWake_Instance; static const char * const NewlibReqFutexWake_PreDesc_Count[] = { - "Negative", - "Partial", - "All", + "NegativeOrZero", + "Positive", "NA" }; @@ -185,20 +182,22 @@ static Status_Control Enqueue( TQContext *tq_ctx, TQWait wait ) return STATUS_BUILD( 0, eno ); } -static void Flush( TQContext *tq_ctx ) +static uint32_t Flush( TQContext *tq_ctx, uint32_t thread_count, bool all ) { Context *ctx; int count; - int how_many; + + (void) thread_count; ctx = ToContext( tq_ctx ); - how_many = (int) ctx->tq_ctx.how_many; - count = _Futex_Wake( &ctx->futex, 1 ); - T_eq_int( count, how_many > 0 ? 1 : 0 ); + if ( all ) { + count = _Futex_Wake( &ctx->futex, INT_MAX ); + } else { + count = _Futex_Wake( &ctx->futex, 1 ); + } - count = _Futex_Wake( &ctx->futex, INT_MAX ); - T_eq_int( count, how_many > 1 ? how_many - 1 : 0 ); + return (uint32_t) count; } static void NewlibReqFutexWake_Pre_Count_Prepare( @@ -207,29 +206,17 @@ static void NewlibReqFutexWake_Pre_Count_Prepare( ) { switch ( state ) { - case NewlibReqFutexWake_Pre_Count_Negative: { + case NewlibReqFutexWake_Pre_Count_NegativeOrZero: { /* - * While the ``count`` parameter is less than zero. + * While the ``count`` parameter is less or equal to than zero. */ /* This state is prepared by Enqueue() */ break; } - case NewlibReqFutexWake_Pre_Count_Partial: { - /* - * While the ``count`` parameter is greater than or equal to zero, while - * the ``count`` parameter is less than the count of threads enqueued on - * the thread queue of the futex object. - */ - /* This state is prepared by Flush() */ - break; - } - - case NewlibReqFutexWake_Pre_Count_All: { + case NewlibReqFutexWake_Pre_Count_Positive: { /* - * While the ``count`` parameter is greater than or equal to zero, while - * the ``count`` parameter is greater than or equal to the count of - * threads enqueued on the thread queue of the futex object. + * While the ``count`` parameter is greater than zero. */ /* This state is prepared by Flush() */ break; @@ -275,21 +262,12 @@ static void NewlibReqFutexWake_Post_Flush_Check( break; } - case NewlibReqFutexWake_Post_Flush_Partial: { + case NewlibReqFutexWake_Post_Flush_Yes: { /* * The first count threads specified by the ``count`` parameter shall be * extracted from the thread queue of the futex object in FIFO order. */ - /* This state is checked by Flush() */ - break; - } - - case NewlibReqFutexWake_Post_Flush_All: { - /* - * All threads shall be extracted from the thread queue of the futex - * object in FIFO order. - */ - ScoreTqReqFlushFifo_Run( &ctx->tq_ctx ); + ScoreTqReqFlushFifo_Run( &ctx->tq_ctx, true ); break; } @@ -355,14 +333,12 @@ NewlibReqFutexWake_Entries[] = { { 0, 0, NewlibReqFutexWake_Post_Result_Count, NewlibReqFutexWake_Post_Flush_No }, { 0, 0, NewlibReqFutexWake_Post_Result_Count, - NewlibReqFutexWake_Post_Flush_Partial }, - { 0, 0, NewlibReqFutexWake_Post_Result_Count, - NewlibReqFutexWake_Post_Flush_All } + NewlibReqFutexWake_Post_Flush_Yes } }; static const uint8_t NewlibReqFutexWake_Map[] = { - 0, 1, 2 + 0, 1 }; static size_t NewlibReqFutexWake_Scope( void *arg, char *buf, size_t n ) @@ -419,7 +395,7 @@ T_TEST_CASE_FIXTURE( NewlibReqFutexWake, &NewlibReqFutexWake_Fixture ) ctx->Map.index = 0; for ( - ctx->Map.pcs[ 0 ] = NewlibReqFutexWake_Pre_Count_Negative; + ctx->Map.pcs[ 0 ] = NewlibReqFutexWake_Pre_Count_NegativeOrZero; ctx->Map.pcs[ 0 ] < NewlibReqFutexWake_Pre_Count_NA; ++ctx->Map.pcs[ 0 ] ) { diff --git a/testsuites/validation/tc-intr-clear.c b/testsuites/validation/tc-intr-clear.c index 1c6c451a39..b131b738fd 100644 --- a/testsuites/validation/tc-intr-clear.c +++ b/testsuites/validation/tc-intr-clear.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqClear + * @ingroup RtemsIntrReqClear */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqClear spec:/rtems/intr/req/clear + * @defgroup RtemsIntrReqClear spec:/rtems/intr/req/clear * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ diff --git a/testsuites/validation/tc-intr-entry-install.c b/testsuites/validation/tc-intr-entry-install.c index 714486772a..58c7989dbe 100644 --- a/testsuites/validation/tc-intr-entry-install.c +++ b/testsuites/validation/tc-intr-entry-install.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqEntryInstall + * @ingroup RtemsIntrReqEntryInstall */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqEntryInstall \ - * spec:/rtems/intr/req/entry-install + * @defgroup RtemsIntrReqEntryInstall spec:/rtems/intr/req/entry-install * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ @@ -181,7 +180,7 @@ typedef struct { /** * @brief This member provides a counter snapshot for each entry. */ - uint32_t counter_by_entry[ 3 ];; + uint32_t counter_by_entry[ 3 ]; /** * @brief This member provides the vector number of a testable interrupt @@ -190,6 +189,12 @@ typedef struct { rtems_vector_number test_vector; /** + * @brief If this member is true, then the testable interrupt vector was + * enabled at the test case begin. + */ + bool test_vector_was_enabled; + + /** * @brief This member provides the attributes of the testable interrupt * vector. */ @@ -267,7 +272,7 @@ typedef struct { /** * @brief This member specifies if the ``entry`` parameter value. */ - rtems_interrupt_entry *entry;; + rtems_interrupt_entry *entry; /** * @brief This member contains the return value of the @@ -426,11 +431,8 @@ static void Routine( Context *ctx, uint32_t counter ) ctx->handler_counter = counter; - if ( - ctx->attributes.can_clear && - !ctx->attributes.cleared_by_acknowledge - ) { - sc = rtems_interrupt_clear( ctx->test_vector ); + if ( !ctx->attributes.cleared_by_acknowledge ) { + sc = ClearSoftwareInterrupt( ctx->test_vector ); T_rsc_success( sc ); } @@ -517,7 +519,7 @@ static void Action( void *arg ) T_rsc_success( sc ); bsp_interrupt_set_handler_unique( - BSP_INTERRUPT_HANDLER_TABLE_SIZE, + BSP_INTERRUPT_DISPATCH_TABLE_SIZE, ctx->initialized ); @@ -528,7 +530,7 @@ static void Action( void *arg ) ); bsp_interrupt_set_handler_unique( - BSP_INTERRUPT_HANDLER_TABLE_SIZE, + BSP_INTERRUPT_DISPATCH_TABLE_SIZE, ctx->initialized_during_setup ); @@ -539,7 +541,7 @@ static void Action( void *arg ) T_rsc_success( sc ); if ( ctx->status == RTEMS_SUCCESSFUL ) { - sc = rtems_interrupt_raise( ctx->test_vector ); + sc = RaiseSoftwareInterrupt( ctx->test_vector ); T_rsc_success( sc ); } } @@ -1120,6 +1122,11 @@ static void RtemsIntrReqEntryInstall_Setup( ctx->initialized_during_setup = bsp_interrupt_is_initialized(); ctx->test_vector = GetTestableInterruptVector( &required ); + ctx->test_vector_was_enabled = false; + (void) rtems_interrupt_vector_is_enabled( + ctx->test_vector, + &ctx->test_vector_was_enabled + ); sc = rtems_interrupt_get_attributes( ctx->test_vector, &ctx->attributes ); T_rsc_success( sc ); } @@ -1133,6 +1140,24 @@ static void RtemsIntrReqEntryInstall_Setup_Wrap( void *arg ) RtemsIntrReqEntryInstall_Setup( ctx ); } +static void RtemsIntrReqEntryInstall_Teardown( + RtemsIntrReqEntryInstall_Context *ctx +) +{ + if ( ctx->test_vector_was_enabled ) { + (void) rtems_interrupt_vector_enable( ctx->test_vector ); + } +} + +static void RtemsIntrReqEntryInstall_Teardown_Wrap( void *arg ) +{ + RtemsIntrReqEntryInstall_Context *ctx; + + ctx = arg; + ctx->Map.in_action_loop = false; + RtemsIntrReqEntryInstall_Teardown( ctx ); +} + static void RtemsIntrReqEntryInstall_Prepare( RtemsIntrReqEntryInstall_Context *ctx ) @@ -1320,7 +1345,7 @@ static size_t RtemsIntrReqEntryInstall_Scope( void *arg, char *buf, size_t n ) static T_fixture RtemsIntrReqEntryInstall_Fixture = { .setup = RtemsIntrReqEntryInstall_Setup_Wrap, .stop = NULL, - .teardown = NULL, + .teardown = RtemsIntrReqEntryInstall_Teardown_Wrap, .scope = RtemsIntrReqEntryInstall_Scope, .initial_context = &RtemsIntrReqEntryInstall_Instance }; diff --git a/testsuites/validation/tc-intr-entry-remove.c b/testsuites/validation/tc-intr-entry-remove.c index c73bcbb3fc..01a72410e1 100644 --- a/testsuites/validation/tc-intr-entry-remove.c +++ b/testsuites/validation/tc-intr-entry-remove.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqEntryRemove + * @ingroup RtemsIntrReqEntryRemove */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqEntryRemove \ - * spec:/rtems/intr/req/entry-remove + * @defgroup RtemsIntrReqEntryRemove spec:/rtems/intr/req/entry-remove * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ @@ -182,7 +181,7 @@ typedef struct { /** * @brief This member provides a counter incremented by EntryRoutine(). */ - uint32_t entry_counter;; + uint32_t entry_counter; /** * @brief This member provides another rtems_interrupt_entry object. @@ -234,6 +233,12 @@ typedef struct { rtems_vector_number test_vector; /** + * @brief If this member is true, then the testable interrupt vector was + * enabled at the test case begin. + */ + bool test_vector_was_enabled; + + /** * @brief This member provides the attributes of the testable interrupt * vector. */ @@ -280,7 +285,7 @@ typedef struct { /** * @brief This member specifies if the ``entry`` parameter value. */ - rtems_interrupt_entry *entry;; + rtems_interrupt_entry *entry; /** * @brief This member contains the return value of the @@ -473,14 +478,14 @@ static void Action( void *arg ) T_rsc_success( sc ); bsp_interrupt_set_handler_unique( - BSP_INTERRUPT_HANDLER_TABLE_SIZE, + BSP_INTERRUPT_DISPATCH_TABLE_SIZE, ctx->initialized ); ctx->status = rtems_interrupt_entry_remove( ctx->vector, ctx->entry ); bsp_interrupt_set_handler_unique( - BSP_INTERRUPT_HANDLER_TABLE_SIZE, + BSP_INTERRUPT_DISPATCH_TABLE_SIZE, ctx->initialized_during_setup ); @@ -1034,8 +1039,8 @@ static void RtemsIntrReqEntryRemove_Post_Installed_Check( } else { rtems_interrupt_entry *first; - first = bsp_interrupt_handler_table[ - bsp_interrupt_handler_index( ctx->test_vector ) + first = bsp_interrupt_dispatch_table[ + bsp_interrupt_dispatch_index( ctx->test_vector ) ]; T_null( first ); } @@ -1088,6 +1093,11 @@ static void RtemsIntrReqEntryRemove_Setup( ctx->initialized_during_setup = bsp_interrupt_is_initialized(); ctx->test_vector = GetTestableInterruptVector( NULL ); + ctx->test_vector_was_enabled = false; + (void) rtems_interrupt_vector_is_enabled( + ctx->test_vector, + &ctx->test_vector_was_enabled + ); sc = rtems_interrupt_get_attributes( ctx->test_vector, &ctx->attributes ); T_rsc_success( sc ); } @@ -1101,6 +1111,24 @@ static void RtemsIntrReqEntryRemove_Setup_Wrap( void *arg ) RtemsIntrReqEntryRemove_Setup( ctx ); } +static void RtemsIntrReqEntryRemove_Teardown( + RtemsIntrReqEntryRemove_Context *ctx +) +{ + if ( ctx->test_vector_was_enabled ) { + (void) rtems_interrupt_vector_enable( ctx->test_vector ); + } +} + +static void RtemsIntrReqEntryRemove_Teardown_Wrap( void *arg ) +{ + RtemsIntrReqEntryRemove_Context *ctx; + + ctx = arg; + ctx->Map.in_action_loop = false; + RtemsIntrReqEntryRemove_Teardown( ctx ); +} + static void RtemsIntrReqEntryRemove_Prepare( RtemsIntrReqEntryRemove_Context *ctx ) @@ -1292,7 +1320,7 @@ static size_t RtemsIntrReqEntryRemove_Scope( void *arg, char *buf, size_t n ) static T_fixture RtemsIntrReqEntryRemove_Fixture = { .setup = RtemsIntrReqEntryRemove_Setup_Wrap, .stop = NULL, - .teardown = NULL, + .teardown = RtemsIntrReqEntryRemove_Teardown_Wrap, .scope = RtemsIntrReqEntryRemove_Scope, .initial_context = &RtemsIntrReqEntryRemove_Instance }; diff --git a/testsuites/validation/tc-intr-get-affinity.c b/testsuites/validation/tc-intr-get-affinity.c index 277cb790a3..60509203b4 100644 --- a/testsuites/validation/tc-intr-get-affinity.c +++ b/testsuites/validation/tc-intr-get-affinity.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqGetAffinity + * @ingroup RtemsIntrReqGetAffinity */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqGetAffinity \ - * spec:/rtems/intr/req/get-affinity + * @defgroup RtemsIntrReqGetAffinity spec:/rtems/intr/req/get-affinity * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ @@ -139,7 +138,7 @@ typedef struct { * @brief This member provides the object referenced by the ``affinity`` * parameter. */ - cpu_set_t cpuset_obj[ 2 ];; + cpu_set_t cpuset_obj[ 2 ]; /** * @brief This member contains the return value of the @@ -244,6 +243,9 @@ static void CheckGetAffinity( rtems_status_code sc; cpu_set_t set[ 2 ]; + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Warray-bounds" + if ( attr->can_get_affinity ) { CPU_ZERO_S( sizeof( ctx->cpuset_obj ), ctx->cpuset_obj ); } else { @@ -265,6 +267,8 @@ static void CheckGetAffinity( T_rsc( sc, RTEMS_UNSATISFIED ); T_true( CPU_EQUAL_S( sizeof( set ), ctx->cpuset_obj, set ) ); } + + #pragma GCC diagnostic pop } static void RtemsIntrReqGetAffinity_Pre_Vector_Prepare( @@ -565,6 +569,9 @@ static void RtemsIntrReqGetAffinity_Action( ctx->vector = BSP_INTERRUPT_VECTOR_COUNT; } + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Warray-bounds" + CPU_FILL_S( sizeof( ctx->cpuset_obj ), ctx->cpuset_obj ); ctx->status = rtems_interrupt_get_affinity( @@ -583,6 +590,8 @@ static void RtemsIntrReqGetAffinity_Action( } T_true( CPU_EQUAL_S( sizeof( set ), ctx->cpuset_obj, set ) ); + + #pragma GCC diagnostic pop } } diff --git a/testsuites/validation/tc-intr-get-attributes.c b/testsuites/validation/tc-intr-get-attributes.c index 713defaa1a..4594c78a2e 100644 --- a/testsuites/validation/tc-intr-get-attributes.c +++ b/testsuites/validation/tc-intr-get-attributes.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqGetAttributes + * @ingroup RtemsIntrReqGetAttributes */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqGetAttributes \ - * spec:/rtems/intr/req/get-attributes + * @defgroup RtemsIntrReqGetAttributes spec:/rtems/intr/req/get-attributes * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ @@ -119,7 +118,7 @@ typedef struct { /** * @brief This member specifies if the ``attributes`` parameter value. */ - rtems_interrupt_attributes *attributes;; + rtems_interrupt_attributes *attributes; /** * @brief This member contains the return value of the diff --git a/testsuites/validation/tc-intr-handler-iterate.c b/testsuites/validation/tc-intr-handler-iterate.c index 77b9b2b7d7..fc3f498838 100644 --- a/testsuites/validation/tc-intr-handler-iterate.c +++ b/testsuites/validation/tc-intr-handler-iterate.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqHandlerIterate + * @ingroup RtemsIntrReqHandlerIterate */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqHandlerIterate \ - * spec:/rtems/intr/req/handler-iterate + * @defgroup RtemsIntrReqHandlerIterate spec:/rtems/intr/req/handler-iterate * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ @@ -134,6 +133,12 @@ typedef struct { rtems_vector_number test_vector; /** + * @brief If this member is true, then the testable interrupt vector was + * enabled at the test case begin. + */ + bool test_vector_was_enabled; + + /** * @brief If this member is true, then the service shall be initialized. */ bool initialized; @@ -282,7 +287,7 @@ static void Action( void *arg ) ctx->visited_entries = 0; bsp_interrupt_set_handler_unique( - BSP_INTERRUPT_HANDLER_TABLE_SIZE, + BSP_INTERRUPT_DISPATCH_TABLE_SIZE, ctx->initialized ); @@ -293,7 +298,7 @@ static void Action( void *arg ) ); bsp_interrupt_set_handler_unique( - BSP_INTERRUPT_HANDLER_TABLE_SIZE, + BSP_INTERRUPT_DISPATCH_TABLE_SIZE, ctx->initialized_during_setup ); } @@ -506,6 +511,11 @@ static void RtemsIntrReqHandlerIterate_Setup( ctx->initialized_during_setup = bsp_interrupt_is_initialized(); ctx->test_vector = GetTestableInterruptVector( NULL ); + ctx->test_vector_was_enabled = false; + (void) rtems_interrupt_vector_is_enabled( + ctx->test_vector, + &ctx->test_vector_was_enabled + ); rtems_interrupt_entry_initialize( &ctx->entry, EntryRoutine, @@ -529,6 +539,32 @@ static void RtemsIntrReqHandlerIterate_Setup_Wrap( void *arg ) RtemsIntrReqHandlerIterate_Setup( ctx ); } +static void RtemsIntrReqHandlerIterate_Teardown( + RtemsIntrReqHandlerIterate_Context *ctx +) +{ + rtems_status_code sc; + + sc = rtems_interrupt_entry_remove( + ctx->test_vector, + &ctx->entry + ); + T_rsc_success( sc ); + + if ( ctx->test_vector_was_enabled ) { + (void) rtems_interrupt_vector_enable( ctx->test_vector ); + } +} + +static void RtemsIntrReqHandlerIterate_Teardown_Wrap( void *arg ) +{ + RtemsIntrReqHandlerIterate_Context *ctx; + + ctx = arg; + ctx->Map.in_action_loop = false; + RtemsIntrReqHandlerIterate_Teardown( ctx ); +} + static void RtemsIntrReqHandlerIterate_Action( RtemsIntrReqHandlerIterate_Context *ctx ) @@ -586,7 +622,7 @@ static size_t RtemsIntrReqHandlerIterate_Scope( static T_fixture RtemsIntrReqHandlerIterate_Fixture = { .setup = RtemsIntrReqHandlerIterate_Setup_Wrap, .stop = NULL, - .teardown = NULL, + .teardown = RtemsIntrReqHandlerIterate_Teardown_Wrap, .scope = RtemsIntrReqHandlerIterate_Scope, .initial_context = &RtemsIntrReqHandlerIterate_Instance }; diff --git a/testsuites/validation/tc-intr-is-pending.c b/testsuites/validation/tc-intr-is-pending.c index 93be686038..097e3d7a17 100644 --- a/testsuites/validation/tc-intr-is-pending.c +++ b/testsuites/validation/tc-intr-is-pending.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqIsPending + * @ingroup RtemsIntrReqIsPending */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqIsPending spec:/rtems/intr/req/is-pending + * @defgroup RtemsIntrReqIsPending spec:/rtems/intr/req/is-pending * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ @@ -142,7 +142,7 @@ typedef struct { /** * @brief This member specifies if the ``pending`` parameter value. */ - bool *pending;; + bool *pending; /** * @brief This member contains the return value of the diff --git a/testsuites/validation/tc-intr-non-smp.c b/testsuites/validation/tc-intr-non-smp.c index bb75ccc1b6..ce34571298 100644 --- a/testsuites/validation/tc-intr-non-smp.c +++ b/testsuites/validation/tc-intr-non-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrValIntrNonSmp + * @ingroup RtemsIntrValIntrNonSmp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrValIntrNonSmp \ - * spec:/rtems/intr/val/intr-non-smp + * @defgroup RtemsIntrValIntrNonSmp spec:/rtems/intr/val/intr-non-smp * - * @ingroup RTEMSTestSuiteTestsuitesValidationNonSmp + * @ingroup TestsuitesValidationNonSmp * * @brief Tests some @ref RTEMSAPIClassicIntr interfaces. * diff --git a/testsuites/validation/tc-intr-raise-on.c b/testsuites/validation/tc-intr-raise-on.c index 4d305258b3..d4298463b6 100644 --- a/testsuites/validation/tc-intr-raise-on.c +++ b/testsuites/validation/tc-intr-raise-on.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqRaiseOn + * @ingroup RtemsIntrReqRaiseOn */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqRaiseOn spec:/rtems/intr/req/raise-on + * @defgroup RtemsIntrReqRaiseOn spec:/rtems/intr/req/raise-on * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ diff --git a/testsuites/validation/tc-intr-raise.c b/testsuites/validation/tc-intr-raise.c index dde5f2c0e0..1faa48fc79 100644 --- a/testsuites/validation/tc-intr-raise.c +++ b/testsuites/validation/tc-intr-raise.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqRaise + * @ingroup RtemsIntrReqRaise */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqRaise spec:/rtems/intr/req/raise + * @defgroup RtemsIntrReqRaise spec:/rtems/intr/req/raise * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ diff --git a/testsuites/validation/tc-intr-set-affinity.c b/testsuites/validation/tc-intr-set-affinity.c index e49d83e8e1..3354681b47 100644 --- a/testsuites/validation/tc-intr-set-affinity.c +++ b/testsuites/validation/tc-intr-set-affinity.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqSetAffinity + * @ingroup RtemsIntrReqSetAffinity */ /* - * Copyright (C) 2021, 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqSetAffinity \ - * spec:/rtems/intr/req/set-affinity + * @defgroup RtemsIntrReqSetAffinity spec:/rtems/intr/req/set-affinity * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ diff --git a/testsuites/validation/tc-intr-smp-only.c b/testsuites/validation/tc-intr-smp-only.c index 4bf596141c..4d1f64b699 100644 --- a/testsuites/validation/tc-intr-smp-only.c +++ b/testsuites/validation/tc-intr-smp-only.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrValIntrSmpOnly + * @ingroup RtemsIntrValIntrSmpOnly */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrValIntrSmpOnly \ - * spec:/rtems/intr/val/intr-smp-only + * @defgroup RtemsIntrValIntrSmpOnly spec:/rtems/intr/val/intr-smp-only * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @brief Tests some @ref RTEMSAPIClassicIntr directives. * diff --git a/testsuites/validation/tc-intr-vector-disable.c b/testsuites/validation/tc-intr-vector-disable.c index 3c7eb11838..013befeff8 100644 --- a/testsuites/validation/tc-intr-vector-disable.c +++ b/testsuites/validation/tc-intr-vector-disable.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqVectorDisable + * @ingroup RtemsIntrReqVectorDisable */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqVectorDisable \ - * spec:/rtems/intr/req/vector-disable + * @defgroup RtemsIntrReqVectorDisable spec:/rtems/intr/req/vector-disable * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ diff --git a/testsuites/validation/tc-intr-vector-enable.c b/testsuites/validation/tc-intr-vector-enable.c index 024953ab48..91993fb8d4 100644 --- a/testsuites/validation/tc-intr-vector-enable.c +++ b/testsuites/validation/tc-intr-vector-enable.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqVectorEnable + * @ingroup RtemsIntrReqVectorEnable */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqVectorEnable \ - * spec:/rtems/intr/req/vector-enable + * @defgroup RtemsIntrReqVectorEnable spec:/rtems/intr/req/vector-enable * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ @@ -368,7 +367,7 @@ static void RtemsIntrReqVectorEnable_Pre_IsEnabled_Prepare( case RtemsIntrReqVectorEnable_Pre_IsEnabled_No: { /* * While the interrupt vector associated with the ``vector`` parameter is - * enabled. + * disabled. */ /* * This pre-condition depends on the attributes of an interrupt vector, diff --git a/testsuites/validation/tc-intr-vector-is-enabled.c b/testsuites/validation/tc-intr-vector-is-enabled.c index ea26b80aee..d24ad3f602 100644 --- a/testsuites/validation/tc-intr-vector-is-enabled.c +++ b/testsuites/validation/tc-intr-vector-is-enabled.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrReqVectorIsEnabled + * @ingroup RtemsIntrReqVectorIsEnabled */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrReqVectorIsEnabled \ - * spec:/rtems/intr/req/vector-is-enabled + * @defgroup RtemsIntrReqVectorIsEnabled spec:/rtems/intr/req/vector-is-enabled * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr * * @{ */ @@ -144,7 +143,7 @@ typedef struct { /** * @brief This member specifies if the ``enabled`` parameter value. */ - bool *enabled;; + bool *enabled; /** * @brief This member contains the return value of the diff --git a/testsuites/validation/tc-intr.c b/testsuites/validation/tc-intr.c index 7b2e6b0d48..72ac626c97 100644 --- a/testsuites/validation/tc-intr.c +++ b/testsuites/validation/tc-intr.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIntrValIntr + * @ingroup RtemsIntrValIntr */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIntrValIntr spec:/rtems/intr/val/intr + * @defgroup RtemsIntrValIntr spec:/rtems/intr/val/intr * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests some @ref RTEMSAPIClassicIntr directives. * diff --git a/testsuites/validation/tc-io-getchark.c b/testsuites/validation/tc-io-getchark.c index 54a24d5694..20aede7fd9 100644 --- a/testsuites/validation/tc-io-getchark.c +++ b/testsuites/validation/tc-io-getchark.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIoReqGetchark + * @ingroup RtemsIoReqGetchark */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIoReqGetchark spec:/rtems/io/req/getchark + * @defgroup RtemsIoReqGetchark spec:/rtems/io/req/getchark * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-io-put-char.c b/testsuites/validation/tc-io-put-char.c index ab4c82ffda..671eed9835 100644 --- a/testsuites/validation/tc-io-put-char.c +++ b/testsuites/validation/tc-io-put-char.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIoReqPutChar + * @ingroup RtemsIoReqPutChar */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIoReqPutChar spec:/rtems/io/req/put-char + * @defgroup RtemsIoReqPutChar spec:/rtems/io/req/put-char * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-io-putc.c b/testsuites/validation/tc-io-putc.c index d55ed5dae7..7b0efe2b17 100644 --- a/testsuites/validation/tc-io-putc.c +++ b/testsuites/validation/tc-io-putc.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIoReqPutc + * @ingroup RtemsIoReqPutc */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIoReqPutc spec:/rtems/io/req/putc + * @defgroup RtemsIoReqPutc spec:/rtems/io/req/putc * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-message-broadcast.c b/testsuites/validation/tc-message-broadcast.c index 62e5aa5c7e..01de6a99b3 100644 --- a/testsuites/validation/tc-message-broadcast.c +++ b/testsuites/validation/tc-message-broadcast.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsMessageReqBroadcast + * @ingroup RtemsMessageReqBroadcast */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsMessageReqBroadcast \ - * spec:/rtems/message/req/broadcast + * @defgroup RtemsMessageReqBroadcast spec:/rtems/message/req/broadcast * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-message-construct.c b/testsuites/validation/tc-message-construct.c index a7093b28e1..316849ba68 100644 --- a/testsuites/validation/tc-message-construct.c +++ b/testsuites/validation/tc-message-construct.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsMessageReqConstruct + * @ingroup RtemsMessageReqConstruct */ /* - * Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020, 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsMessageReqConstruct \ - * spec:/rtems/message/req/construct + * @defgroup RtemsMessageReqConstruct spec:/rtems/message/req/construct * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-message-delete.c b/testsuites/validation/tc-message-delete.c index 0835a5c5e9..b0fa53be66 100644 --- a/testsuites/validation/tc-message-delete.c +++ b/testsuites/validation/tc-message-delete.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsMessageReqDelete + * @ingroup RtemsMessageReqDelete */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsMessageReqDelete spec:/rtems/message/req/delete + * @defgroup RtemsMessageReqDelete spec:/rtems/message/req/delete * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-message-flush-pending.c b/testsuites/validation/tc-message-flush-pending.c index 67d2ede6bd..48ade108d0 100644 --- a/testsuites/validation/tc-message-flush-pending.c +++ b/testsuites/validation/tc-message-flush-pending.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsMessageReqFlushPending + * @ingroup RtemsMessageReqFlushPending */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsMessageReqFlushPending \ - * spec:/rtems/message/req/flush-pending + * @defgroup RtemsMessageReqFlushPending spec:/rtems/message/req/flush-pending * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-message-ident.c b/testsuites/validation/tc-message-ident.c index 70e7d53350..dc3ed119a6 100644 --- a/testsuites/validation/tc-message-ident.c +++ b/testsuites/validation/tc-message-ident.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsMessageValIdent + * @ingroup RtemsMessageValIdent */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,16 +57,16 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsMessageValIdent spec:/rtems/message/val/ident + * @defgroup RtemsMessageValIdent spec:/rtems/message/val/ident * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Test the rtems_message_queue_ident() directive. * * This test case performs the following actions: * * - Run the generic object identification tests for Classic API message queue - * class objects defined by /rtems/req/ident. + * class objects defined by spec:/rtems/req/ident. * * @{ */ @@ -95,7 +95,7 @@ static rtems_status_code ClassicMessageIdentAction( /** * @brief Run the generic object identification tests for Classic API message - * queue class objects defined by /rtems/req/ident. + * queue class objects defined by spec:/rtems/req/ident. */ static void RtemsMessageValIdent_Action_0( void ) { diff --git a/testsuites/validation/tc-message-macros.c b/testsuites/validation/tc-message-macros.c index f8e6a46252..b3c37b1963 100644 --- a/testsuites/validation/tc-message-macros.c +++ b/testsuites/validation/tc-message-macros.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsMessageValMessageMacros + * @ingroup RtemsMessageValMessageMacros */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsMessageValMessageMacros \ + * @defgroup RtemsMessageValMessageMacros \ * spec:/rtems/message/val/message-macros * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests the macros of the @ref RTEMSAPIClassicMessage. * diff --git a/testsuites/validation/tc-message-performance.c b/testsuites/validation/tc-message-performance.c index 162c094078..c01570b772 100644 --- a/testsuites/validation/tc-message-performance.c +++ b/testsuites/validation/tc-message-performance.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsMessageValPerf + * @ingroup RtemsMessageValPerf */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsMessageValPerf spec:/rtems/message/val/perf + * @defgroup RtemsMessageValPerf spec:/rtems/message/val/perf * - * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0 + * @ingroup TestsuitesPerformanceNoClock0 * * @brief This test case provides a context to run @ref RTEMSAPIClassicMessage * performance tests. @@ -79,6 +79,11 @@ typedef struct { rtems_id queue_id; /** + * @brief This member provides a message to send. + */ + long message; + + /** * @brief This member provides a worker identifier. */ rtems_id worker_id; @@ -116,15 +121,17 @@ static RtemsMessageValPerf_Context #define MAXIMUM_MESSAGE_SIZE 8 -typedef RtemsMessageValPerf_Context Context; +#define EVENT_END RTEMS_EVENT_0 + +#define EVENT_SEND RTEMS_EVENT_1 -typedef enum { - EVENT_END = RTEMS_EVENT_0, - EVENT_SEND = RTEMS_EVENT_1, - EVENT_SEND_END = RTEMS_EVENT_2, - EVENT_RECEIVE = RTEMS_EVENT_3, - EVENT_RECEIVE_END = RTEMS_EVENT_4 -} Event; +#define EVENT_SEND_END RTEMS_EVENT_2 + +#define EVENT_RECEIVE RTEMS_EVENT_3 + +#define EVENT_RECEIVE_END RTEMS_EVENT_4 + +typedef RtemsMessageValPerf_Context Context; static RTEMS_MESSAGE_QUEUE_BUFFER( MAXIMUM_MESSAGE_SIZE ) storage_area[ MAXIMUM_PENDING_MESSAGES ]; @@ -152,7 +159,6 @@ static void Worker( rtems_task_argument arg ) rtems_event_set events; rtems_status_code sc; T_ticks ticks; - uint64_t message; sc = rtems_event_receive( RTEMS_ALL_EVENTS, @@ -168,11 +174,10 @@ static void Worker( rtems_task_argument arg ) } if ( ( events & EVENT_SEND ) != 0 ) { - message = 0; sc = rtems_message_queue_send( ctx->queue_id, - &message, - sizeof( message ) + &ctx->message, + sizeof( ctx->message ) ); ticks = T_tick(); T_quiet_rsc_success( sc ); @@ -183,6 +188,7 @@ static void Worker( rtems_task_argument arg ) } if ( ( events & EVENT_RECEIVE ) != 0 ) { + long message; size_t size; sc = rtems_message_queue_receive( @@ -273,6 +279,13 @@ static T_fixture RtemsMessageValPerf_Fixture = { }; /** + * @defgroup RtemsMessageReqPerfReceiveTry \ + * spec:/rtems/message/req/perf-receive-try + * + * @{ + */ + +/** * @brief Try to receive a message. */ static void RtemsMessageReqPerfReceiveTry_Body( @@ -329,6 +342,15 @@ static bool RtemsMessageReqPerfReceiveTry_Teardown_Wrap( return RtemsMessageReqPerfReceiveTry_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + +/** + * @defgroup RtemsMessageReqPerfReceiveWaitForever \ + * spec:/rtems/message/req/perf-receive-wait-forever + * + * @{ + */ + /** * @brief Schedule a message send. */ @@ -416,6 +438,15 @@ static bool RtemsMessageReqPerfReceiveWaitForever_Teardown_Wrap( ); } +/** @} */ + +/** + * @defgroup RtemsMessageReqPerfReceiveWaitTimed \ + * spec:/rtems/message/req/perf-receive-wait-timed + * + * @{ + */ + /** * @brief Schedule a message send. */ @@ -503,17 +534,23 @@ static bool RtemsMessageReqPerfReceiveWaitTimed_Teardown_Wrap( ); } +/** @} */ + +/** + * @defgroup RtemsMessageReqPerfSend spec:/rtems/message/req/perf-send + * + * @{ + */ + /** * @brief Send a message. */ static void RtemsMessageReqPerfSend_Body( RtemsMessageValPerf_Context *ctx ) { - uint64_t message; - ctx->status = rtems_message_queue_send( ctx->queue_id, - &message, - sizeof( message ) + &ctx->message, + sizeof( ctx->message ) ); } @@ -563,6 +600,15 @@ static bool RtemsMessageReqPerfSend_Teardown_Wrap( return RtemsMessageReqPerfSend_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + +/** + * @defgroup RtemsMessageReqPerfSendOther \ + * spec:/rtems/message/req/perf-send-other + * + * @{ + */ + /** * @brief Let the worker wait on the message queue. */ @@ -589,12 +635,10 @@ static void RtemsMessageReqPerfSendOther_Body( RtemsMessageValPerf_Context *ctx ) { - uint64_t message; - ctx->status = rtems_message_queue_send( ctx->queue_id, - &message, - sizeof( message ) + &ctx->message, + sizeof( ctx->message ) ); } @@ -639,8 +683,17 @@ static bool RtemsMessageReqPerfSendOther_Teardown_Wrap( return RtemsMessageReqPerfSendOther_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + #if defined(RTEMS_SMP) /** + * @defgroup RtemsMessageReqPerfSendOtherCpu \ + * spec:/rtems/message/req/perf-send-other-cpu + * + * @{ + */ + +/** * @brief Move worker to scheduler B. */ static void RtemsMessageReqPerfSendOtherCpu_Prepare( @@ -676,13 +729,11 @@ static void RtemsMessageReqPerfSendOtherCpu_Body( RtemsMessageValPerf_Context *ctx ) { - uint64_t message; - ctx->begin = T_tick(); ctx->status = rtems_message_queue_send( ctx->queue_id, - &message, - sizeof( message ) + &ctx->message, + sizeof( ctx->message ) ); } @@ -743,9 +794,18 @@ static void RtemsMessageReqPerfSendOtherCpu_Cleanup( { SetScheduler( ctx->worker_id, SCHEDULER_A_ID, PRIO_HIGH ); } + +/** @} */ #endif /** + * @defgroup RtemsMessageReqPerfSendPreempt \ + * spec:/rtems/message/req/perf-send-preempt + * + * @{ + */ + +/** * @brief Let the worker wait on the message queue. */ static void RtemsMessageReqPerfSendPreempt_Setup( @@ -770,13 +830,11 @@ static void RtemsMessageReqPerfSendPreempt_Body( RtemsMessageValPerf_Context *ctx ) { - uint64_t message; - ctx->begin = T_tick(); ctx->status = rtems_message_queue_send( ctx->queue_id, - &message, - sizeof( message ) + &ctx->message, + sizeof( ctx->message ) ); } @@ -827,6 +885,8 @@ static bool RtemsMessageReqPerfSendPreempt_Teardown_Wrap( ); } +/** @} */ + /** * @fn void T_case_body_RtemsMessageValPerf( void ) */ diff --git a/testsuites/validation/tc-message-receive.c b/testsuites/validation/tc-message-receive.c index 02a8ba9062..944512eaa8 100644 --- a/testsuites/validation/tc-message-receive.c +++ b/testsuites/validation/tc-message-receive.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsMessageReqReceive + * @ingroup RtemsMessageReqReceive */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -63,10 +63,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsMessageReqReceive \ - * spec:/rtems/message/req/receive + * @defgroup RtemsMessageReqReceive spec:/rtems/message/req/receive * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -208,7 +207,7 @@ typedef struct { * * It is used for run-time type checking. */ - uint32_t magic;; + uint32_t magic; /** * @brief This member contains a number which is sent as next message. @@ -392,7 +391,7 @@ static void DoAction( void *ctx_in ) ); } -static void WorkerTask( unsigned int argument ) +static void WorkerTask( rtems_task_argument argument ) { Context *ctx = (Context *) argument; if ( ctx != NULL ) { diff --git a/testsuites/validation/tc-message-urgent-send.c b/testsuites/validation/tc-message-urgent-send.c index fb42f94b84..e7364f108d 100644 --- a/testsuites/validation/tc-message-urgent-send.c +++ b/testsuites/validation/tc-message-urgent-send.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsMessageReqUrgentSend + * @ingroup RtemsMessageReqUrgentSend */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsMessageReqUrgentSend \ - * spec:/rtems/message/req/urgent-send + * @defgroup RtemsMessageReqUrgentSend spec:/rtems/message/req/urgent-send * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -173,7 +172,7 @@ typedef struct { * * It is used for run-time type checking. */ - uint32_t magic;; + uint32_t magic; /** * @brief This member contains a number which is sent as next message. diff --git a/testsuites/validation/tc-modes.c b/testsuites/validation/tc-modes.c index c9f8fe65ca..91d26e835c 100644 --- a/testsuites/validation/tc-modes.c +++ b/testsuites/validation/tc-modes.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsModeValModes + * @ingroup RtemsModeValModes */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsModeValModes spec:/rtems/mode/val/modes + * @defgroup RtemsModeValModes spec:/rtems/mode/val/modes * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests the task mode constants and function-like macros of the Classic * API. diff --git a/testsuites/validation/tc-object.c b/testsuites/validation/tc-object.c index 9e63d2a44e..6ee87dbf4e 100644 --- a/testsuites/validation/tc-object.c +++ b/testsuites/validation/tc-object.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsObjectValObject + * @ingroup RtemsObjectValObject */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsObjectValObject spec:/rtems/object/val/object + * @defgroup RtemsObjectValObject spec:/rtems/object/val/object * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests some @ref RTEMSAPIClassicObject directives. * diff --git a/testsuites/validation/tc-options.c b/testsuites/validation/tc-options.c index 9db52bdaaf..166b3b8b31 100644 --- a/testsuites/validation/tc-options.c +++ b/testsuites/validation/tc-options.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsOptionValOptions + * @ingroup RtemsOptionValOptions */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsOptionValOptions spec:/rtems/option/val/options + * @defgroup RtemsOptionValOptions spec:/rtems/option/val/options * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests the option constants of the Classic API. * @@ -88,7 +88,7 @@ * * - Check the value of RTEMS_DEFAULT_OPTIONS. * - * - Check RTEMS_DEFAULT_OPTIONS equals ``RTEMS_WAIT``. + * - Check RTEMS_DEFAULT_OPTIONS equals RTEMS_WAIT. * * @{ */ @@ -181,7 +181,7 @@ static void RtemsOptionValOptions_Action_3( void ) /* No action */ /* - * Check RTEMS_DEFAULT_OPTIONS equals ``RTEMS_WAIT``. + * Check RTEMS_DEFAULT_OPTIONS equals RTEMS_WAIT. */ T_step_eq_int( 6, RTEMS_DEFAULT_OPTIONS, RTEMS_WAIT ); } diff --git a/testsuites/validation/tc-part-create.c b/testsuites/validation/tc-part-create.c index 7121b07d4e..3e7389d98a 100644 --- a/testsuites/validation/tc-part-create.c +++ b/testsuites/validation/tc-part-create.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsPartReqCreate + * @ingroup RtemsPartReqCreate */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsPartReqCreate spec:/rtems/part/req/create + * @defgroup RtemsPartReqCreate spec:/rtems/part/req/create * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-part-delete.c b/testsuites/validation/tc-part-delete.c index 0ec1dd0bde..227382961f 100644 --- a/testsuites/validation/tc-part-delete.c +++ b/testsuites/validation/tc-part-delete.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsPartReqDelete + * @ingroup RtemsPartReqDelete */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsPartReqDelete spec:/rtems/part/req/delete + * @defgroup RtemsPartReqDelete spec:/rtems/part/req/delete * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-part-get.c b/testsuites/validation/tc-part-get.c index 9308c1350a..3b8d2cc59b 100644 --- a/testsuites/validation/tc-part-get.c +++ b/testsuites/validation/tc-part-get.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsPartReqGetBuffer + * @ingroup RtemsPartReqGetBuffer */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsPartReqGetBuffer spec:/rtems/part/req/get-buffer + * @defgroup RtemsPartReqGetBuffer spec:/rtems/part/req/get-buffer * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-part-ident.c b/testsuites/validation/tc-part-ident.c index fccdf9671c..40f66d436e 100644 --- a/testsuites/validation/tc-part-ident.c +++ b/testsuites/validation/tc-part-ident.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsPartValIdent + * @ingroup RtemsPartValIdent */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,16 +57,16 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsPartValIdent spec:/rtems/part/val/ident + * @defgroup RtemsPartValIdent spec:/rtems/part/val/ident * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Test the rtems_partition_ident() directive. * * This test case performs the following actions: * * - Run the generic object identification tests for Classic API partition - * class objects defined by /rtems/req/ident. + * class objects defined by spec:/rtems/req/ident. * * @{ */ @@ -84,7 +84,7 @@ static rtems_status_code ClassicPartIdentAction( /** * @brief Run the generic object identification tests for Classic API partition - * class objects defined by /rtems/req/ident. + * class objects defined by spec:/rtems/req/ident. */ static void RtemsPartValIdent_Action_0( void ) { diff --git a/testsuites/validation/tc-part-performance.c b/testsuites/validation/tc-part-performance.c index 4c223910d0..858dbc0b4b 100644 --- a/testsuites/validation/tc-part-performance.c +++ b/testsuites/validation/tc-part-performance.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsPartValPerf + * @ingroup RtemsPartValPerf */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -53,14 +53,13 @@ #endif #include <rtems.h> -#include <rtems/chain.h> #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsPartValPerf spec:/rtems/part/val/perf + * @defgroup RtemsPartValPerf spec:/rtems/part/val/perf * - * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0 + * @ingroup TestsuitesPerformanceNoClock0 * * @brief This test case provides a context to run @ref RTEMSAPIClassicPart * performance tests. @@ -143,7 +142,7 @@ static void RtemsPartValPerf_Setup( RtemsPartValPerf_Context *ctx ) void *area; uintptr_t length; - size = sizeof( rtems_chain_node ); + size = 2 * sizeof( uintptr_t ); area = T_malloc( size ); sc = rtems_partition_create( @@ -213,6 +212,12 @@ static T_fixture RtemsPartValPerf_Fixture = { }; /** + * @defgroup RtemsPartReqPerfGetBuffer spec:/rtems/part/req/perf-get-buffer + * + * @{ + */ + +/** * @brief Get a buffer. */ static void RtemsPartReqPerfGetBuffer_Body( RtemsPartValPerf_Context *ctx ) @@ -263,6 +268,15 @@ static bool RtemsPartReqPerfGetBuffer_Teardown_Wrap( return RtemsPartReqPerfGetBuffer_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + +/** + * @defgroup RtemsPartReqPerfGetNoBuffer \ + * spec:/rtems/part/req/perf-get-no-buffer + * + * @{ + */ + /** * @brief Get the buffer. */ @@ -335,6 +349,15 @@ static void RtemsPartReqPerfGetNoBuffer_Cleanup( T_rsc_success( sc ); } +/** @} */ + +/** + * @defgroup RtemsPartReqPerfReturnBuffer \ + * spec:/rtems/part/req/perf-return-buffer + * + * @{ + */ + /** * @brief Get the buffer. */ @@ -400,6 +423,8 @@ static bool RtemsPartReqPerfReturnBuffer_Teardown_Wrap( return RtemsPartReqPerfReturnBuffer_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + /** * @fn void T_case_body_RtemsPartValPerf( void ) */ diff --git a/testsuites/validation/tc-part-return.c b/testsuites/validation/tc-part-return.c index 71c6a31e66..864d916f61 100644 --- a/testsuites/validation/tc-part-return.c +++ b/testsuites/validation/tc-part-return.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsPartReqReturnBuffer + * @ingroup RtemsPartReqReturnBuffer */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsPartReqReturnBuffer \ - * spec:/rtems/part/req/return-buffer + * @defgroup RtemsPartReqReturnBuffer spec:/rtems/part/req/return-buffer * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-part.c b/testsuites/validation/tc-part.c index 220c8a6b63..ad241e975c 100644 --- a/testsuites/validation/tc-part.c +++ b/testsuites/validation/tc-part.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsPartValPart + * @ingroup RtemsPartValPart */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsPartValPart spec:/rtems/part/val/part + * @defgroup RtemsPartValPart spec:/rtems/part/val/part * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief This test case collection provides validation test cases for * requirements of the @ref RTEMSAPIClassicPart. diff --git a/testsuites/validation/tc-preinit-array.c b/testsuites/validation/tc-preinit-array.c new file mode 100644 index 0000000000..244b30b40e --- /dev/null +++ b/testsuites/validation/tc-preinit-array.c @@ -0,0 +1,150 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup ScoreThreadValPreinitArray + */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> + +#include <rtems/test.h> + +/** + * @defgroup ScoreThreadValPreinitArray spec:/score/thread/val/preinit-array + * + * @ingroup TestsuitesValidationNoClock0 + * + * @brief Tests the ``.preinit_array`` constructor handling of the C runtime + * support. + * + * This test case performs the following actions: + * + * - Validate the ``.preinit_array`` constructor invocation. Mark that the + * test case executed. + * + * - Check that the ``.preinit_array`` constructor was called exactly once. + * + * - Check that the ``.preeinit_array`` construction was done by the Classic + * API user initialization task. + * + * - Check that the ``.preinit_array`` constructor was called before the + * global constructor invocations. + * + * @{ + */ + +static bool test_case_executed; + +static bool constructor_test_case_executed; + +static uint32_t counter; + +static uint32_t normal_constructor_counter; + +static uint32_t constructor_counter; + +static uint32_t constructor_calls; + +static rtems_id constructor_id; + +static __attribute__(( __constructor__ )) void NormalConstructor( void ) +{ + ++counter; + normal_constructor_counter = counter; +} + +static void Constructor( void ) +{ + constructor_test_case_executed = test_case_executed; + ++counter; + constructor_counter = counter; + ++constructor_calls; + constructor_id = rtems_task_self(); +} + +static RTEMS_USED RTEMS_SECTION( ".preinit_array" ) void + ( * const constructor_registration )( void ) = Constructor; + +/** + * @brief Validate the ``.preinit_array`` constructor invocation. Mark that + * the test case executed. + */ +static void ScoreThreadValPreinitArray_Action_0( void ) +{ + test_case_executed = true; + + /* + * Check that the ``.preinit_array`` constructor was called exactly once. + */ + T_eq_u32( constructor_calls, 1 ); + + /* + * Check that the ``.preeinit_array`` construction was done by the Classic + * API user initialization task. + */ + T_eq_u32( constructor_id, rtems_task_self() ); + + /* + * Check that the ``.preinit_array`` constructor was called before the global + * constructor invocations. + */ + T_eq_u32( constructor_counter, 1 ); + T_eq_u32( normal_constructor_counter, 2 ); +} + +/** + * @fn void T_case_body_ScoreThreadValPreinitArray( void ) + */ +T_TEST_CASE( ScoreThreadValPreinitArray ) +{ + ScoreThreadValPreinitArray_Action_0(); +} + +/** @} */ diff --git a/testsuites/validation/tc-ratemon-cancel.c b/testsuites/validation/tc-ratemon-cancel.c index 7cbbbcda7d..b3683ac338 100644 --- a/testsuites/validation/tc-ratemon-cancel.c +++ b/testsuites/validation/tc-ratemon-cancel.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsRatemonReqCancel + * @ingroup RtemsRatemonReqCancel */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsRatemonReqCancel spec:/rtems/ratemon/req/cancel + * @defgroup RtemsRatemonReqCancel spec:/rtems/ratemon/req/cancel * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ diff --git a/testsuites/validation/tc-ratemon-create.c b/testsuites/validation/tc-ratemon-create.c index d86cd977c9..ff7672beeb 100644 --- a/testsuites/validation/tc-ratemon-create.c +++ b/testsuites/validation/tc-ratemon-create.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsRatemonReqCreate + * @ingroup RtemsRatemonReqCreate */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsRatemonReqCreate spec:/rtems/ratemon/req/create + * @defgroup RtemsRatemonReqCreate spec:/rtems/ratemon/req/create * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-ratemon-delete.c b/testsuites/validation/tc-ratemon-delete.c index 3b30188fe1..93e863f023 100644 --- a/testsuites/validation/tc-ratemon-delete.c +++ b/testsuites/validation/tc-ratemon-delete.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsRatemonReqDelete + * @ingroup RtemsRatemonReqDelete */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,9 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsRatemonReqDelete spec:/rtems/ratemon/req/delete + * @defgroup RtemsRatemonReqDelete spec:/rtems/ratemon/req/delete * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-ratemon-get-status.c b/testsuites/validation/tc-ratemon-get-status.c index fe3fb300e3..750654e2c9 100644 --- a/testsuites/validation/tc-ratemon-get-status.c +++ b/testsuites/validation/tc-ratemon-get-status.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsRatemonReqGetStatus + * @ingroup RtemsRatemonReqGetStatus */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,11 +60,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsRatemonReqGetStatus \ - * spec:/rtems/ratemon/req/get-status + * @defgroup RtemsRatemonReqGetStatus spec:/rtems/ratemon/req/get-status * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ diff --git a/testsuites/validation/tc-ratemon-ident.c b/testsuites/validation/tc-ratemon-ident.c index beeb0bfd14..27a414a980 100644 --- a/testsuites/validation/tc-ratemon-ident.c +++ b/testsuites/validation/tc-ratemon-ident.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsRatemonValIdent + * @ingroup RtemsRatemonValIdent */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,16 +57,16 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsRatemonValIdent spec:/rtems/ratemon/val/ident + * @defgroup RtemsRatemonValIdent spec:/rtems/ratemon/val/ident * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Test the rtems_rate_monotonic_ident() directive. * * This test case performs the following actions: * * - Run the generic object identification tests for Classic API rate monotonic - * class objects defined by /rtems/req/ident-local. + * class objects defined by spec:/rtems/req/ident-local. * * @{ */ @@ -83,7 +83,7 @@ static rtems_status_code ClassicRatemonIdentAction( /** * @brief Run the generic object identification tests for Classic API rate - * monotonic class objects defined by /rtems/req/ident-local. + * monotonic class objects defined by spec:/rtems/req/ident-local. */ static void RtemsRatemonValIdent_Action_0( void ) { diff --git a/testsuites/validation/tc-ratemon-period.c b/testsuites/validation/tc-ratemon-period.c index 9e2d294581..c8a73905c1 100644 --- a/testsuites/validation/tc-ratemon-period.c +++ b/testsuites/validation/tc-ratemon-period.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsRatemonReqPeriod + * @ingroup RtemsRatemonReqPeriod */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsRatemonReqPeriod spec:/rtems/ratemon/req/period + * @defgroup RtemsRatemonReqPeriod spec:/rtems/ratemon/req/period * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ diff --git a/testsuites/validation/tc-ratemon-timeout.c b/testsuites/validation/tc-ratemon-timeout.c index b70a5cc85c..dc2c745e61 100644 --- a/testsuites/validation/tc-ratemon-timeout.c +++ b/testsuites/validation/tc-ratemon-timeout.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsRatemonReqTimeout + * @ingroup RtemsRatemonReqTimeout */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,11 +60,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsRatemonReqTimeout \ - * spec:/rtems/ratemon/req/timeout + * @defgroup RtemsRatemonReqTimeout spec:/rtems/ratemon/req/timeout * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ @@ -281,13 +280,13 @@ static const char * const * const RtemsRatemonReqTimeout_PreDesc[] = { NULL }; -typedef RtemsRatemonReqTimeout_Context Context; +#define EVENT_RESET RTEMS_EVENT_0 -typedef enum { - EVENT_RESET = RTEMS_EVENT_0, - EVENT_PERIOD_WAIT = RTEMS_EVENT_1, - EVENT_PERIOD_OTHER = RTEMS_EVENT_2 -} Event; +#define EVENT_PERIOD_WAIT RTEMS_EVENT_1 + +#define EVENT_PERIOD_OTHER RTEMS_EVENT_2 + +typedef RtemsRatemonReqTimeout_Context Context; static void Tick( void *arg ) { diff --git a/testsuites/validation/tc-sched-smp-edf-set-affinity.c b/testsuites/validation/tc-sched-smp-edf-set-affinity.c index 4e5fab70dc..9e13c19ff7 100644 --- a/testsuites/validation/tc-sched-smp-edf-set-affinity.c +++ b/testsuites/validation/tc-sched-smp-edf-set-affinity.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSchedSmpEdfReqSetAffinity + * @ingroup ScoreSchedSmpEdfReqSetAffinity */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -63,10 +63,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSchedSmpEdfReqSetAffinity \ + * @defgroup ScoreSchedSmpEdfReqSetAffinity \ * spec:/score/sched/smp/edf/req/set-affinity * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @{ */ diff --git a/testsuites/validation/tc-sched-smp-edf.c b/testsuites/validation/tc-sched-smp-edf.c index 94d685bd08..7b07813ee1 100644 --- a/testsuites/validation/tc-sched-smp-edf.c +++ b/testsuites/validation/tc-sched-smp-edf.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSchedSmpEdfValEdf + * @ingroup ScoreSchedSmpEdfValEdf */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSchedSmpEdfValEdf \ - * spec:/score/sched/smp/edf/val/edf + * @defgroup ScoreSchedSmpEdfValEdf spec:/score/sched/smp/edf/val/edf * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @brief Tests for operations of the EDF SMP scheduler. * diff --git a/testsuites/validation/tc-sched-smp.c b/testsuites/validation/tc-sched-smp.c index 957a978980..3e8e3fe1a2 100644 --- a/testsuites/validation/tc-sched-smp.c +++ b/testsuites/validation/tc-sched-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSchedSmpValSmp + * @ingroup ScoreSchedSmpValSmp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,6 +55,7 @@ #include <rtems.h> #include <rtems/test-scheduler.h> #include <rtems/score/percpu.h> +#include <rtems/score/schedulersmp.h> #include <rtems/score/threadimpl.h> #include "tx-support.h" @@ -62,9 +63,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSchedSmpValSmp spec:/score/sched/smp/val/smp + * @defgroup ScoreSchedSmpValSmp spec:/score/sched/smp/val/smp * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @brief Tests SMP-specific scheduler behaviour. * @@ -213,6 +214,24 @@ * * - Clean up all used resources. * + * - Create three worker threads and a mutex. Use the mutex and the worker to + * check that a not scheduled thread does not get removed from the set of + * ready threads of a scheduler when a help request is reconsidered. + * + * - Prevent that worker B can perform a post-switch cleanup. + * + * - Give worker C a lower priority than worker B. Worker B will try to + * finish the thread dispatch by doing a post-switch cleanup. The + * post-switch cleanup cannot progress since the runner owns the thread + * state lock. Wait until the other processor waits on the thread state + * lock of worker B. + * + * - Give worker C a higher priority than worker B. Let worker B do its + * post-switch cleanup which will carry out the reconsider help requests + * for a not scheduled thread. + * + * - Clean up all used resources. + * * @{ */ @@ -250,12 +269,22 @@ typedef struct { /** * @brief This member contains the worker busy status. */ - volatile bool busy[ WORKER_COUNT ];; + volatile bool busy[ WORKER_COUNT ]; + + /** + * @brief This member contains an ISR lock context. + */ + ISR_lock_Context lock_context; + + /** + * @brief This member contains a counter. + */ + uint32_t counter; /** * @brief If this member is true, then the worker shall be in the busy loop. */ - volatile bool is_busy[ WORKER_COUNT ];; + volatile bool is_busy[ WORKER_COUNT ]; /** * @brief This member contains the per-CPU jobs. @@ -270,24 +299,31 @@ typedef struct { /** * @brief This member contains the call within ISR request. */ - CallWithinISRRequest request;; + CallWithinISRRequest request; } ScoreSchedSmpValSmp_Context; static ScoreSchedSmpValSmp_Context ScoreSchedSmpValSmp_Instance; +#define EVENT_OBTAIN RTEMS_EVENT_0 + +#define EVENT_RELEASE RTEMS_EVENT_1 + +#define EVENT_STICKY_OBTAIN RTEMS_EVENT_2 + +#define EVENT_STICKY_RELEASE RTEMS_EVENT_3 + +#define EVENT_SYNC_RUNNER RTEMS_EVENT_4 + +#define EVENT_BUSY RTEMS_EVENT_5 + typedef ScoreSchedSmpValSmp_Context Context; -typedef enum { - EVENT_OBTAIN = RTEMS_EVENT_0, - EVENT_RELEASE = RTEMS_EVENT_1, - EVENT_STICKY_OBTAIN = RTEMS_EVENT_2, - EVENT_STICKY_RELEASE = RTEMS_EVENT_3, - EVENT_SYNC_RUNNER = RTEMS_EVENT_4, - EVENT_BUSY = RTEMS_EVENT_5 -} Event; - -static void SendAndSync( Context *ctx, WorkerIndex worker, Event event ) +static void SendAndSync( + Context *ctx, + WorkerIndex worker, + rtems_event_set event +) { SendEvents( ctx->worker_id[ worker ], EVENT_SYNC_RUNNER | event ); ReceiveAllEvents( EVENT_SYNC_RUNNER ); @@ -649,6 +685,7 @@ static void PrepareOwnerScheduled( Context *ctx ) SetScheduler( ctx->worker_id[ WORKER_C ], SCHEDULER_B_ID, PRIO_HIGH ); SetPriority( ctx->worker_id[ WORKER_A ], PRIO_NORMAL ); MakeBusy( ctx, WORKER_C ); + WaitForBusy( ctx, WORKER_C ); MakeBusy( ctx, WORKER_A ); } @@ -686,6 +723,51 @@ static void CleanupOwnerBlocked( Context *ctx ) SetScheduler( ctx->worker_id[ WORKER_C ], SCHEDULER_A_ID, PRIO_HIGH ); } +static void ReconsiderHelpRequestB( + void *arg, + const T_scheduler_event *event, + T_scheduler_when when +) +{ + Context *ctx; + + (void) when; + ctx = arg; + + if ( event->operation == T_SCHEDULER_RECONSIDER_HELP_REQUEST ) { + Scheduler_SMP_Node *node; + + node = (Scheduler_SMP_Node *) event->node; + T_eq_int( node->state, SCHEDULER_SMP_NODE_READY ); + ++ctx->counter; + } +} + +static void ReleaseThreadLockB( + void *arg, + const T_scheduler_event *event, + T_scheduler_when when +) +{ + Context *ctx; + + ctx = arg; + + if ( + when == T_SCHEDULER_AFTER && + event->operation == T_SCHEDULER_UPDATE_PRIORITY + ) { + Thread_Control *worker_b; + + T_scheduler_set_event_handler( ReconsiderHelpRequestB, ctx ); + + worker_b = GetThread( ctx->worker_id[ WORKER_B ] ); + T_eq_int( worker_b->Scheduler.state, THREAD_SCHEDULER_READY ); + + _Thread_State_release_critical( worker_b, &ctx->lock_context ); + } +} + static void Worker( rtems_task_argument arg, WorkerIndex worker ) { Context *ctx; @@ -1233,6 +1315,64 @@ static void ScoreSchedSmpValSmp_Action_16( ScoreSchedSmpValSmp_Context *ctx ) } /** + * @brief Create three worker threads and a mutex. Use the mutex and the + * worker to check that a not scheduled thread does not get removed from the + * set of ready threads of a scheduler when a help request is reconsidered. + */ +static void ScoreSchedSmpValSmp_Action_17( ScoreSchedSmpValSmp_Context *ctx ) +{ + Thread_Control *worker_b; + + SetScheduler( ctx->worker_id[ WORKER_B ], SCHEDULER_B_ID, PRIO_NORMAL ); + SetScheduler( ctx->worker_id[ WORKER_C ], SCHEDULER_B_ID, PRIO_HIGH ); + SendAndSync( ctx, WORKER_B, EVENT_OBTAIN ); + SendEvents( ctx->worker_id[ WORKER_A ], EVENT_OBTAIN ); + SetPriority( ctx->worker_id[ WORKER_A ], PRIO_LOW ); + MakeBusy( ctx, WORKER_B ); + WaitForBusy( ctx, WORKER_B ); + MakeBusy( ctx, WORKER_C ); + WaitForBusy( ctx, WORKER_C ); + + /* + * Prevent that worker B can perform a post-switch cleanup. + */ + worker_b = GetThread( ctx->worker_id[ WORKER_B ] ); + _Thread_State_acquire( worker_b, &ctx->lock_context ); + _ISR_lock_ISR_enable( &ctx->lock_context ); + + /* + * Give worker C a lower priority than worker B. Worker B will try to finish + * the thread dispatch by doing a post-switch cleanup. The post-switch + * cleanup cannot progress since the runner owns the thread state lock. Wait + * until the other processor waits on the thread state lock of worker B. + */ + SetPriority( ctx->worker_id[ WORKER_C ], PRIO_LOW ); + TicketLockWaitForOthers( &worker_b->Join_queue.Queue.Lock, 1 ); + + /* + * Give worker C a higher priority than worker B. Let worker B do its + * post-switch cleanup which will carry out the reconsider help requests for + * a not scheduled thread. + */ + ctx->counter = 0; + T_scheduler_set_event_handler( ReleaseThreadLockB, ctx ); + SetPriority( ctx->worker_id[ WORKER_C ], PRIO_HIGH ); + T_scheduler_set_event_handler( NULL, NULL ); + T_eq_u32( ctx->counter, 4 ); + + /* + * Clean up all used resources. + */ + StopBusy( ctx, WORKER_B ); + StopBusy( ctx, WORKER_C ); + SendAndSync( ctx, WORKER_B, EVENT_RELEASE ); + SetPriority( ctx->worker_id[ WORKER_A ], PRIO_HIGH ); + SendEvents( ctx->worker_id[ WORKER_A ], EVENT_RELEASE ); + SetScheduler( ctx->worker_id[ WORKER_B ], SCHEDULER_A_ID, PRIO_HIGH ); + SetScheduler( ctx->worker_id[ WORKER_C ], SCHEDULER_A_ID, PRIO_HIGH ); +} + +/** * @fn void T_case_body_ScoreSchedSmpValSmp( void ) */ T_TEST_CASE_FIXTURE( ScoreSchedSmpValSmp, &ScoreSchedSmpValSmp_Fixture ) @@ -1258,6 +1398,7 @@ T_TEST_CASE_FIXTURE( ScoreSchedSmpValSmp, &ScoreSchedSmpValSmp_Fixture ) ScoreSchedSmpValSmp_Action_14( ctx ); ScoreSchedSmpValSmp_Action_15( ctx ); ScoreSchedSmpValSmp_Action_16( ctx ); + ScoreSchedSmpValSmp_Action_17( ctx ); } /** @} */ diff --git a/testsuites/validation/tc-sched-yield.c b/testsuites/validation/tc-sched-yield.c index 8aa953fd46..057579fd1c 100644 --- a/testsuites/validation/tc-sched-yield.c +++ b/testsuites/validation/tc-sched-yield.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSchedReqYield + * @ingroup ScoreSchedReqYield */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,9 +62,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSchedReqYield spec:/score/sched/req/yield + * @defgroup ScoreSchedReqYield spec:/score/sched/req/yield * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-scheduler-add-processor.c b/testsuites/validation/tc-scheduler-add-processor.c index dbeaaa7b16..a26132aea0 100644 --- a/testsuites/validation/tc-scheduler-add-processor.c +++ b/testsuites/validation/tc-scheduler-add-processor.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSchedulerReqAddProcessor + * @ingroup RtemsSchedulerReqAddProcessor */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,10 +62,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSchedulerReqAddProcessor \ + * @defgroup RtemsSchedulerReqAddProcessor \ * spec:/rtems/scheduler/req/add-processor * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -155,18 +155,18 @@ typedef struct { * @brief This member contains the online status of the processor to add * before the rtems_scheduler_add_processor() call is prepared. */ - bool online;; + bool online; /** * @brief If this member is true, then the processor should be added to the * scheduler B during cleanup. */ - bool add_cpu_to_scheduler_b;; + bool add_cpu_to_scheduler_b; /** * @brief This member provides the scheduler operation records. */ - T_scheduler_log_2 scheduler_log;; + T_scheduler_log_2 scheduler_log; /** * @brief This member contains the return value of the diff --git a/testsuites/validation/tc-scheduler-get-maximum-priority.c b/testsuites/validation/tc-scheduler-get-maximum-priority.c index 45ef88c5a6..82aef23b67 100644 --- a/testsuites/validation/tc-scheduler-get-maximum-priority.c +++ b/testsuites/validation/tc-scheduler-get-maximum-priority.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSchedulerReqGetMaximumPriority + * @ingroup RtemsSchedulerReqGetMaximumPriority */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSchedulerReqGetMaximumPriority \ + * @defgroup RtemsSchedulerReqGetMaximumPriority \ * spec:/rtems/scheduler/req/get-maximum-priority * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-scheduler-get-processor-set.c b/testsuites/validation/tc-scheduler-get-processor-set.c index 3b48df44f9..ecc0254106 100644 --- a/testsuites/validation/tc-scheduler-get-processor-set.c +++ b/testsuites/validation/tc-scheduler-get-processor-set.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSchedulerReqGetProcessorSet + * @ingroup RtemsSchedulerReqGetProcessorSet */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSchedulerReqGetProcessorSet \ + * @defgroup RtemsSchedulerReqGetProcessorSet \ * spec:/rtems/scheduler/req/get-processor-set * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-scheduler-ident-by-processor-set.c b/testsuites/validation/tc-scheduler-ident-by-processor-set.c index 57b660c835..43c3b660a7 100644 --- a/testsuites/validation/tc-scheduler-ident-by-processor-set.c +++ b/testsuites/validation/tc-scheduler-ident-by-processor-set.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSchedulerReqIdentByProcessorSet + * @ingroup RtemsSchedulerReqIdentByProcessorSet */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSchedulerReqIdentByProcessorSet \ + * @defgroup RtemsSchedulerReqIdentByProcessorSet \ * spec:/rtems/scheduler/req/ident-by-processor-set * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-scheduler-ident-by-processor.c b/testsuites/validation/tc-scheduler-ident-by-processor.c index 43021fdc23..8cfe25a70e 100644 --- a/testsuites/validation/tc-scheduler-ident-by-processor.c +++ b/testsuites/validation/tc-scheduler-ident-by-processor.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSchedulerReqIdentByProcessor + * @ingroup RtemsSchedulerReqIdentByProcessor */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSchedulerReqIdentByProcessor \ + * @defgroup RtemsSchedulerReqIdentByProcessor \ * spec:/rtems/scheduler/req/ident-by-processor * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -246,7 +246,7 @@ static void RtemsSchedulerReqIdentByProcessor_Pre_CPUIndex_Prepare( switch ( state ) { case RtemsSchedulerReqIdentByProcessor_Pre_CPUIndex_Invalid: { /* - * While the ``cpu_index`` parameter greater than or equal to the + * While the ``cpu_index`` parameter is greater than or equal to the * processor maximum. */ ctx->cpu_index = rtems_scheduler_get_processor_maximum(); @@ -255,7 +255,7 @@ static void RtemsSchedulerReqIdentByProcessor_Pre_CPUIndex_Prepare( case RtemsSchedulerReqIdentByProcessor_Pre_CPUIndex_Valid: { /* - * While the ``cpu_index`` parameter less than the processor maximum. + * While the ``cpu_index`` parameter is less than the processor maximum. */ if ( ctx->cpu_has_scheduler ) { ctx->cpu_index = 0; diff --git a/testsuites/validation/tc-scheduler-ident.c b/testsuites/validation/tc-scheduler-ident.c index 2517e1b50f..7b19f4a08e 100644 --- a/testsuites/validation/tc-scheduler-ident.c +++ b/testsuites/validation/tc-scheduler-ident.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSchedulerReqIdent + * @ingroup RtemsSchedulerReqIdent */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSchedulerReqIdent \ - * spec:/rtems/scheduler/req/ident + * @defgroup RtemsSchedulerReqIdent spec:/rtems/scheduler/req/ident * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-scheduler-non-smp.c b/testsuites/validation/tc-scheduler-non-smp.c index a3eec8fd2d..4e805769a0 100644 --- a/testsuites/validation/tc-scheduler-non-smp.c +++ b/testsuites/validation/tc-scheduler-non-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSchedulerValNonSmp + * @ingroup RtemsSchedulerValNonSmp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021, 2023 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,28 +57,31 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSchedulerValNonSmp \ - * spec:/rtems/scheduler/val/non-smp + * @defgroup RtemsSchedulerValNonSmp spec:/rtems/scheduler/val/non-smp * - * @ingroup RTEMSTestSuiteTestsuitesValidationNonSmp + * @ingroup TestsuitesValidationNonSmp * * @brief This test case collection provides validation test cases for non-SMP * requirements of the @ref RTEMSAPIClassicScheduler. * * This test case performs the following actions: * - * - Check that calling rtems_scheduler_get_processor() is a constant - * expression which evaluates to zero. + * - Assert that rtems_scheduler_get_processor() is a constant expression which + * evaluates to zero. + * + * - Check that calling rtems_scheduler_get_processor() returns zero. * - * - Check that calling rtems_scheduler_get_processor_maximum() is a constant + * - Assert that rtems_scheduler_get_processor_maximum() is a constant * expression which evaluates to zero. * + * - Check that calling rtems_scheduler_get_processor_maximum() returns one. + * * @{ */ /** - * @brief Check that calling rtems_scheduler_get_processor() is a constant - * expression which evaluates to zero. + * @brief Assert that rtems_scheduler_get_processor() is a constant expression + * which evaluates to zero. */ static void RtemsSchedulerValNonSmp_Action_0( void ) { @@ -86,11 +89,19 @@ static void RtemsSchedulerValNonSmp_Action_0( void ) } /** - * @brief Check that calling rtems_scheduler_get_processor_maximum() is a - * constant expression which evaluates to zero. + * @brief Check that calling rtems_scheduler_get_processor() returns zero. */ static void RtemsSchedulerValNonSmp_Action_1( void ) { + T_eq_u32( rtems_scheduler_get_processor(), 0 ); +} + +/** + * @brief Assert that rtems_scheduler_get_processor_maximum() is a constant + * expression which evaluates to zero. + */ +static void RtemsSchedulerValNonSmp_Action_2( void ) +{ RTEMS_STATIC_ASSERT( rtems_scheduler_get_processor_maximum() == 1, GET_PROCESSOR_MAXIMUM @@ -98,12 +109,23 @@ static void RtemsSchedulerValNonSmp_Action_1( void ) } /** + * @brief Check that calling rtems_scheduler_get_processor_maximum() returns + * one. + */ +static void RtemsSchedulerValNonSmp_Action_3( void ) +{ + T_eq_u32( rtems_scheduler_get_processor_maximum(), 1 ); +} + +/** * @fn void T_case_body_RtemsSchedulerValNonSmp( void ) */ T_TEST_CASE( RtemsSchedulerValNonSmp ) { RtemsSchedulerValNonSmp_Action_0(); RtemsSchedulerValNonSmp_Action_1(); + RtemsSchedulerValNonSmp_Action_2(); + RtemsSchedulerValNonSmp_Action_3(); } /** @} */ diff --git a/testsuites/validation/tc-scheduler-remove-processor.c b/testsuites/validation/tc-scheduler-remove-processor.c index 6be66fa961..f199389a33 100644 --- a/testsuites/validation/tc-scheduler-remove-processor.c +++ b/testsuites/validation/tc-scheduler-remove-processor.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSchedulerReqRemoveProcessor + * @ingroup RtemsSchedulerReqRemoveProcessor */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -63,10 +63,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSchedulerReqRemoveProcessor \ + * @defgroup RtemsSchedulerReqRemoveProcessor \ * spec:/rtems/scheduler/req/remove-processor * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -177,12 +177,12 @@ typedef struct { /** * @brief This member contains the worker busy status. */ - volatile bool busy[ WORKER_COUNT ];; + volatile bool busy[ WORKER_COUNT ]; /** * @brief This member contains the worker busy status. */ - volatile uint32_t busy_counter[ WORKER_COUNT ];; + volatile uint32_t busy_counter[ WORKER_COUNT ]; /** * @brief This member contains the barrier to synchronize the runner and the @@ -193,7 +193,7 @@ typedef struct { /** * @brief This member contains the call within ISR request. */ - CallWithinISRRequest request;; + CallWithinISRRequest request; /** * @brief This member provides the context to wrap thread queue operations. @@ -246,7 +246,7 @@ typedef struct { /** * @brief This member provides the scheduler operation records. */ - T_scheduler_log_4 scheduler_log;; + T_scheduler_log_4 scheduler_log; /** * @brief This member contains the return value of the @@ -377,16 +377,22 @@ static void DoRemoveProcessor( Context *ctx ) } #if defined(RTEMS_SMP) -typedef enum { - EVENT_SYNC_RUNNER = RTEMS_EVENT_0, - EVENT_OBTAIN = RTEMS_EVENT_1, - EVENT_RELEASE = RTEMS_EVENT_2, - EVENT_STICKY_OBTAIN = RTEMS_EVENT_3, - EVENT_STICKY_RELEASE = RTEMS_EVENT_4, - EVENT_RESTART = RTEMS_EVENT_5, - EVENT_BUSY = RTEMS_EVENT_6, - EVENT_SYNC_RUNNER_LATE = RTEMS_EVENT_7 -} Event; + +#define EVENT_SYNC_RUNNER RTEMS_EVENT_0 + +#define EVENT_OBTAIN RTEMS_EVENT_1 + +#define EVENT_RELEASE RTEMS_EVENT_2 + +#define EVENT_STICKY_OBTAIN RTEMS_EVENT_3 + +#define EVENT_STICKY_RELEASE RTEMS_EVENT_4 + +#define EVENT_RESTART RTEMS_EVENT_5 + +#define EVENT_BUSY RTEMS_EVENT_6 + +#define EVENT_SYNC_RUNNER_LATE RTEMS_EVENT_7 static void Barriers( void *arg ) { @@ -413,7 +419,11 @@ static void RequestISR( void *arg ) CallWithinISRSubmit( &ctx->request ); } -static void SendAndSync( Context *ctx, WorkerIndex worker, Event event ) +static void SendAndSync( + Context *ctx, + WorkerIndex worker, + rtems_event_set event +) { SendEvents( ctx->worker_id[ worker ], EVENT_SYNC_RUNNER | event ); ReceiveAllEvents( EVENT_SYNC_RUNNER ); diff --git a/testsuites/validation/tc-scheduler-smp-only.c b/testsuites/validation/tc-scheduler-smp-only.c index 2a6f0b53c6..0455567aee 100644 --- a/testsuites/validation/tc-scheduler-smp-only.c +++ b/testsuites/validation/tc-scheduler-smp-only.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSchedulerValSmpOnly + * @ingroup RtemsSchedulerValSmpOnly */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -52,6 +52,7 @@ #include "config.h" #endif +#include <limits.h> #include <rtems.h> #include "ts-config.h" @@ -60,10 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSchedulerValSmpOnly \ - * spec:/rtems/scheduler/val/smp-only + * @defgroup RtemsSchedulerValSmpOnly spec:/rtems/scheduler/val/smp-only * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @brief This test case collection provides validation test cases for SMP-only * requirements of the @ref RTEMSAPIClassicScheduler. @@ -94,6 +94,9 @@ * * - Check that processor 1 has scheduler B assigned. * + * - Check that scheduler B has the maximum priority of the EDF SMP + * scheduler. + * * - Check that processor 2 has scheduler C assigned if it is present. * * - Check that processor 3 has scheduler C assigned if it is present. @@ -166,9 +169,10 @@ static void RtemsSchedulerValSmpOnly_Action_1( void ) */ static void RtemsSchedulerValSmpOnly_Action_2( void ) { - rtems_status_code sc; - rtems_id id[ 4 ]; - rtems_id id_by_cpu; + rtems_status_code sc; + rtems_id id[ 4 ]; + rtems_id id_by_cpu; + rtems_task_priority priority; sc = rtems_scheduler_ident( TEST_SCHEDULER_A_NAME, &id[ 0 ]); T_step_rsc_success( 3, sc ); @@ -217,16 +221,23 @@ static void RtemsSchedulerValSmpOnly_Action_2( void ) T_step_eq_u32( 14, id[ 1 ], id_by_cpu ); /* + * Check that scheduler B has the maximum priority of the EDF SMP scheduler. + */ + sc = rtems_scheduler_get_maximum_priority( id_by_cpu, &priority ); + T_step_rsc_success( 15, sc ); + T_step_eq_u32( 16, priority, (uint32_t) INT_MAX ); + + /* * Check that processor 2 has scheduler C assigned if it is present. */ sc = rtems_scheduler_ident_by_processor( 2, &id_by_cpu ); - T_step_true( 15, sc == RTEMS_INVALID_NAME || id[ 2 ] == id_by_cpu ); + T_step_true( 17, sc == RTEMS_INVALID_NAME || id[ 2 ] == id_by_cpu ); /* * Check that processor 3 has scheduler C assigned if it is present. */ sc = rtems_scheduler_ident_by_processor( 3, &id_by_cpu ); - T_step_true( 16, sc == RTEMS_INVALID_NAME || id[ 2 ] == id_by_cpu ); + T_step_true( 18, sc == RTEMS_INVALID_NAME || id[ 2 ] == id_by_cpu ); } /** @@ -234,7 +245,7 @@ static void RtemsSchedulerValSmpOnly_Action_2( void ) */ T_TEST_CASE( RtemsSchedulerValSmpOnly ) { - T_plan( 17 ); + T_plan( 19 ); RtemsSchedulerValSmpOnly_Action_0(); RtemsSchedulerValSmpOnly_Action_1(); diff --git a/testsuites/validation/tc-scheduler.c b/testsuites/validation/tc-scheduler.c index e930d3ee51..2f5b70fc1a 100644 --- a/testsuites/validation/tc-scheduler.c +++ b/testsuites/validation/tc-scheduler.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSchedulerValScheduler + * @ingroup RtemsSchedulerValScheduler */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSchedulerValScheduler \ - * spec:/rtems/scheduler/val/scheduler + * @defgroup RtemsSchedulerValScheduler spec:/rtems/scheduler/val/scheduler * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief This test case collection provides validation test cases for general * requirements of the @ref RTEMSAPIClassicScheduler. diff --git a/testsuites/validation/tc-score-fatal.c b/testsuites/validation/tc-score-fatal.c index 02131ee68e..b0a55f4664 100644 --- a/testsuites/validation/tc-score-fatal.c +++ b/testsuites/validation/tc-score-fatal.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreValFatal + * @ingroup ScoreValFatal */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021, 2024 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -64,24 +64,31 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreValFatal spec:/score/val/fatal + * @defgroup ScoreValFatal spec:/score/val/fatal * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @brief Tests some fatal errors. * * This test case performs the following actions: * * - Construct a task with a task body which returns. Check that the right - * fatal error occurs. + * fatal error occurred. * - * - Construct a task which performs a thread dispatch with maskable interrupts - * disabled. Check that the right fatal error occurs or no fatal error - * occurs. + * - Construct a task which performs a direct thread dispatch with maskable + * interrupts disabled. Where robust thread dispatching is required, check + * that the right fatal error occurred, otherwise check that no fatal error + * occurred. + * + * - Construct a task which performs an on demand thread dispatch with maskable + * interrupts disabled. Where robust thread dispatching is required, check + * that the right fatal error occurred, otherwise check that no fatal error + * occurred. * * - Construct a task which performs a direct thread dispatch with a thread - * dispatch level not equal to one. Check that the right fatal error occurs. + * dispatch level not equal to one. Check that the right fatal error + * occurred. * * - Create a mutex and construct a task which produces a deadlock which * involves the allocator mutex. @@ -164,10 +171,11 @@ static void FatalBadThreadDispatchEnvironment( { Fatal( source, code, arg ); _ISR_Set_level( 0 ); - _Thread_Dispatch_direct_no_return( _Per_CPU_Get() ); + _Thread_Dispatch_unnest( _Per_CPU_Get() ); + rtems_task_exit(); } -static void ISRDisabledThreadDispatchTask( rtems_task_argument arg ) +static void ISRDisabledDirectThreadDispatchTask( rtems_task_argument arg ) { rtems_interrupt_level level; @@ -177,6 +185,16 @@ static void ISRDisabledThreadDispatchTask( rtems_task_argument arg ) rtems_task_exit(); } +static void ISRDisabledOnDemandThreadDispatchTask( rtems_task_argument arg ) +{ + rtems_interrupt_level level; + + (void) arg; + rtems_interrupt_local_disable( level ); + (void) level; + SetSelfPriority( PRIO_VERY_HIGH ); +} + static void FatalBadThreadDispatchDisableLevel( rtems_fatal_source source, rtems_fatal_code code, @@ -245,7 +263,7 @@ static T_fixture ScoreValFatal_Fixture = { /** * @brief Construct a task with a task body which returns. Check that the - * right fatal error occurs. + * right fatal error occurred. */ static void ScoreValFatal_Action_0( ScoreValFatal_Context *ctx ) { @@ -265,9 +283,10 @@ static void ScoreValFatal_Action_0( ScoreValFatal_Context *ctx ) } /** - * @brief Construct a task which performs a thread dispatch with maskable - * interrupts disabled. Check that the right fatal error occurs or no fatal - * error occurs. + * @brief Construct a task which performs a direct thread dispatch with + * maskable interrupts disabled. Where robust thread dispatching is + * required, check that the right fatal error occurred, otherwise check that + * no fatal error occurred. */ static void ScoreValFatal_Action_1( ScoreValFatal_Context *ctx ) { @@ -278,7 +297,40 @@ static void ScoreValFatal_Action_1( ScoreValFatal_Context *ctx ) SetSelfPriority( PRIO_NORMAL ); counter = ResetFatalInfo( ctx ); id = CreateTask( "BENV", PRIO_HIGH ); - StartTask( id, ISRDisabledThreadDispatchTask, NULL ); + StartTask( id, ISRDisabledDirectThreadDispatchTask, NULL ); + + #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE + if ( rtems_configuration_get_maximum_processors() > 1 ) { + #endif + T_eq_uint( GetFatalCounter( ctx ), counter + 1 ); + T_eq_int( ctx->source, INTERNAL_ERROR_CORE ); + T_eq_ulong( ctx->code, INTERNAL_ERROR_BAD_THREAD_DISPATCH_ENVIRONMENT ); + #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE + } else { + T_eq_uint( GetFatalCounter( ctx ), counter ); + } + #endif + + RestoreRunnerPriority(); + SetFatalHandler( NULL, NULL ); +} + +/** + * @brief Construct a task which performs an on demand thread dispatch with + * maskable interrupts disabled. Where robust thread dispatching is + * required, check that the right fatal error occurred, otherwise check that + * no fatal error occurred. + */ +static void ScoreValFatal_Action_2( ScoreValFatal_Context *ctx ) +{ + rtems_id id; + unsigned int counter; + + SetFatalHandler( FatalBadThreadDispatchEnvironment, ctx ); + SetSelfPriority( PRIO_NORMAL ); + counter = ResetFatalInfo( ctx ); + id = CreateTask( "BENV", PRIO_HIGH ); + StartTask( id, ISRDisabledOnDemandThreadDispatchTask, NULL ); #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE if ( rtems_configuration_get_maximum_processors() > 1 ) { @@ -299,9 +351,9 @@ static void ScoreValFatal_Action_1( ScoreValFatal_Context *ctx ) /** * @brief Construct a task which performs a direct thread dispatch with a * thread dispatch level not equal to one. Check that the right fatal error - * occurs. + * occurred. */ -static void ScoreValFatal_Action_2( ScoreValFatal_Context *ctx ) +static void ScoreValFatal_Action_3( ScoreValFatal_Context *ctx ) { rtems_id id; unsigned int counter; @@ -322,7 +374,7 @@ static void ScoreValFatal_Action_2( ScoreValFatal_Context *ctx ) * @brief Create a mutex and construct a task which produces a deadlock which * involves the allocator mutex. */ -static void ScoreValFatal_Action_3( ScoreValFatal_Context *ctx ) +static void ScoreValFatal_Action_4( ScoreValFatal_Context *ctx ) { rtems_extensions_table extensions; rtems_status_code sc; @@ -374,7 +426,7 @@ static void ScoreValFatal_Action_3( ScoreValFatal_Context *ctx ) * SetFatalHandler() requires an initial extension this validates * CONFIGURE_INITIAL_EXTENSIONS. */ -static void ScoreValFatal_Action_4( ScoreValFatal_Context *ctx ) +static void ScoreValFatal_Action_5( ScoreValFatal_Context *ctx ) { unsigned int counter; @@ -404,6 +456,7 @@ T_TEST_CASE_FIXTURE( ScoreValFatal, &ScoreValFatal_Fixture ) ScoreValFatal_Action_2( ctx ); ScoreValFatal_Action_3( ctx ); ScoreValFatal_Action_4( ctx ); + ScoreValFatal_Action_5( ctx ); } /** @} */ diff --git a/testsuites/validation/tc-score-isr.c b/testsuites/validation/tc-score-isr.c new file mode 100644 index 0000000000..b178541e72 --- /dev/null +++ b/testsuites/validation/tc-score-isr.c @@ -0,0 +1,285 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup ScoreIsrValIsr + */ + +/* + * Copyright (C) 2023 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> +#include <rtems/sysinit.h> +#include <rtems/score/percpu.h> +#include <rtems/score/thread.h> + +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup ScoreIsrValIsr spec:/score/isr/val/isr + * + * @ingroup TestsuitesValidationIntr + * + * @brief Tests general interrupt support behaviour. + * + * This test case performs the following actions: + * + * - Submit an ISR request during system initialization. Check the stack of + * the interrupted context while the ISR request is serviced. Store the + * result of the check in interrupted_stack_at_multitasking_start_is_valid. + * + * - Check that stack of the interrupted context was valid when an interrupt + * was serviced during the multitasking start. + * + * @{ + */ + +static uintptr_t interrupted_stack_at_multitasking_start; + +static bool interrupted_stack_at_multitasking_start_is_valid; + +#if defined(__aarch64__) +void __real_bsp_interrupt_dispatch( void ); + +void __wrap_bsp_interrupt_dispatch( void ); + +void __wrap_bsp_interrupt_dispatch( void ) +{ + if ( interrupted_stack_at_multitasking_start == 0 ) { + uintptr_t sp; + rtems_interrupt_level level; + + rtems_interrupt_local_disable( level ); + __asm__ volatile ( + "msr spsel, #1\n" + "mov %0, sp\n" + "msr spsel, #0" + : "=r" ( sp ) + ); + rtems_interrupt_local_enable( level ); + + interrupted_stack_at_multitasking_start = sp; + } + + __real_bsp_interrupt_dispatch(); +} +#endif + +#if defined(ARM_MULTILIB_ARCH_V4) +void __real_bsp_interrupt_dispatch( void ); + +void __wrap_bsp_interrupt_dispatch( void ); + +void __wrap_bsp_interrupt_dispatch( void ) +{ + register uintptr_t sp __asm__( "9" ); + + if ( interrupted_stack_at_multitasking_start == 0 ) { + interrupted_stack_at_multitasking_start = sp; + } + + __real_bsp_interrupt_dispatch(); +} +#endif + +#if defined(__microblaze__) +void __real_bsp_interrupt_dispatch( uint32_t source ); + +void __wrap_bsp_interrupt_dispatch( uint32_t source ); + +void __wrap_bsp_interrupt_dispatch( uint32_t source ) +{ + register uintptr_t sp __asm__( "1" ); + + if ( interrupted_stack_at_multitasking_start == 0 ) { + interrupted_stack_at_multitasking_start = sp; + } + + __real_bsp_interrupt_dispatch( source ); +} +#endif + +#if defined(__PPC__) || defined(__powerpc64__) +void __real_bsp_interrupt_dispatch( void ); + +void __wrap_bsp_interrupt_dispatch( void ); + +void __wrap_bsp_interrupt_dispatch( void ) +{ + register uintptr_t sp __asm__( "14" ); + + if ( interrupted_stack_at_multitasking_start == 0 ) { + interrupted_stack_at_multitasking_start = sp; + } + + __real_bsp_interrupt_dispatch(); +} +#endif + +#if defined(__riscv) +void __real__RISCV_Interrupt_dispatch( + uintptr_t mcause, + Per_CPU_Control *cpu_self +); + +void __wrap__RISCV_Interrupt_dispatch( + uintptr_t mcause, + Per_CPU_Control *cpu_self +); + +void __wrap__RISCV_Interrupt_dispatch( + uintptr_t mcause, + Per_CPU_Control *cpu_self +) +{ + register uintptr_t sp __asm__( "s1" ); + + if ( interrupted_stack_at_multitasking_start == 0 ) { + interrupted_stack_at_multitasking_start = sp; + } + + __real__RISCV_Interrupt_dispatch( mcause, cpu_self ); +} +#endif + +#if defined(__sparc__) +void __real__SPARC_Interrupt_dispatch( uint32_t irq ); + +static RTEMS_USED void InterruptDispatch( uint32_t irq, uintptr_t sp ) +{ + if ( interrupted_stack_at_multitasking_start == 0 ) { + interrupted_stack_at_multitasking_start = sp; + } + + __real__SPARC_Interrupt_dispatch( irq ); +} + +__asm__ ( + "\t.section\t\".text\"\n" + "\t.align\t4\n" + "\t.globl\t__wrap__SPARC_Interrupt_dispatch\n" + "\t.type\t__wrap__SPARC_Interrupt_dispatch, #function\n" + "__wrap__SPARC_Interrupt_dispatch:\n" + "\tmov\t%fp, %o1\n" + "\tor\t%o7, %g0, %g1\n" + "\tcall\tInterruptDispatch, 0\n" + "\t or\t%g1, %g0, %o7\n" + "\t.previous\n" +); +#endif + +static void ISRHandler( void *arg ) +{ + uintptr_t begin; + uintptr_t end; + + (void) arg; + +#if defined(RTEMS_SMP) && !(defined(__PPC__) || (__powerpc64__)) + Per_CPU_Control *cpu_self; + + cpu_self = _Per_CPU_Get(); + begin = (uintptr_t) &cpu_self->Interrupt_frame; + end = begin + sizeof( cpu_self->Interrupt_frame ); +#else + Thread_Control *executing; + + executing = GetExecuting(); + begin = (uintptr_t) executing->Start.Initial_stack.area; + end = begin + executing->Start.Initial_stack.size; +#endif + + interrupted_stack_at_multitasking_start_is_valid = + ( begin <= interrupted_stack_at_multitasking_start && + interrupted_stack_at_multitasking_start < end ); +} + +static CallWithinISRRequest isr_request = { + .handler = ISRHandler +}; + +static void SubmitISRRequest( void ) +{ + CallWithinISRSubmit( &isr_request ); +} + +RTEMS_SYSINIT_ITEM( + SubmitISRRequest, + RTEMS_SYSINIT_DEVICE_DRIVERS, + RTEMS_SYSINIT_ORDER_LAST +); + +/** + * @brief Submit an ISR request during system initialization. Check the stack + * of the interrupted context while the ISR request is serviced. Store the + * result of the check in interrupted_stack_at_multitasking_start_is_valid. + */ +static void ScoreIsrValIsr_Action_0( void ) +{ + /* + * The actions are performed during system initialization and the + * multitasking start. + */ + + /* + * Check that stack of the interrupted context was valid when an interrupt + * was serviced during the multitasking start. + */ + T_true( interrupted_stack_at_multitasking_start_is_valid ); +} + +/** + * @fn void T_case_body_ScoreIsrValIsr( void ) + */ +T_TEST_CASE( ScoreIsrValIsr ) +{ + ScoreIsrValIsr_Action_0(); +} + +/** @} */ diff --git a/testsuites/validation/tc-score-smp-per-cpu-jobs.c b/testsuites/validation/tc-score-smp-per-cpu-jobs.c index dad4a6a90f..62812279cb 100644 --- a/testsuites/validation/tc-score-smp-per-cpu-jobs.c +++ b/testsuites/validation/tc-score-smp-per-cpu-jobs.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValPerCpuJobs + * @ingroup ScoreSmpValPerCpuJobs */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSmpValPerCpuJobs \ - * spec:/score/smp/val/per-cpu-jobs + * @defgroup ScoreSmpValPerCpuJobs spec:/score/smp/val/per-cpu-jobs * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @brief Tests the processing order of per-processor jobs. * diff --git a/testsuites/validation/tc-score-smp-thread.c b/testsuites/validation/tc-score-smp-thread.c index fc1dd394c2..38d2b26e29 100644 --- a/testsuites/validation/tc-score-smp-thread.c +++ b/testsuites/validation/tc-score-smp-thread.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreThreadValSmp + * @ingroup ScoreThreadValSmp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -63,9 +63,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreThreadValSmp spec:/score/thread/val/smp + * @defgroup ScoreThreadValSmp spec:/score/thread/val/smp * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @brief Tests SMP-specific thread behaviour. * @@ -159,17 +159,21 @@ typedef struct { static ScoreThreadValSmp_Context ScoreThreadValSmp_Instance; -typedef ScoreThreadValSmp_Context Context; +#define EVENT_OBTAIN RTEMS_EVENT_0 + +#define EVENT_RELEASE RTEMS_EVENT_1 + +#define EVENT_COUNT_EARLY RTEMS_EVENT_2 + +#define EVENT_BUSY RTEMS_EVENT_3 -typedef enum { - EVENT_OBTAIN = RTEMS_EVENT_0, - EVENT_RELEASE = RTEMS_EVENT_1, - EVENT_COUNT_EARLY = RTEMS_EVENT_2, - EVENT_BUSY = RTEMS_EVENT_3, - EVENT_COUNT = RTEMS_EVENT_4, - EVENT_LET_WORKER_C_COUNT = RTEMS_EVENT_5, - EVENT_SET_TASK_SWITCH_EXTENSION = RTEMS_EVENT_6 -} Event; +#define EVENT_COUNT RTEMS_EVENT_4 + +#define EVENT_LET_WORKER_C_COUNT RTEMS_EVENT_5 + +#define EVENT_SET_TASK_SWITCH_EXTENSION RTEMS_EVENT_6 + +typedef ScoreThreadValSmp_Context Context; static void TaskSwitchExtension( rtems_tcb *executing, rtems_tcb *heir ) { diff --git a/testsuites/validation/tc-score-thread-smp-one-cpu.c b/testsuites/validation/tc-score-thread-smp-one-cpu.c index 3375f27e1d..b3564d574e 100644 --- a/testsuites/validation/tc-score-thread-smp-one-cpu.c +++ b/testsuites/validation/tc-score-thread-smp-one-cpu.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreThreadValSmpOneCpu + * @ingroup ScoreThreadValSmpOneCpu */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreThreadValSmpOneCpu \ - * spec:/score/thread/val/smp-one-cpu + * @defgroup ScoreThreadValSmpOneCpu spec:/score/thread/val/smp-one-cpu * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOneCpu0 + * @ingroup TestsuitesValidationSmpOneCpu0 * * @brief Tests SMP-specific thread behaviour using only one processor and a * uniprocessor scheduler. @@ -98,11 +97,9 @@ typedef struct { static ScoreThreadValSmpOneCpu_Context ScoreThreadValSmpOneCpu_Instance; -typedef ScoreThreadValSmpOneCpu_Context Context; +#define EVENT_COUNT RTEMS_EVENT_0 -typedef enum { - EVENT_COUNT = RTEMS_EVENT_0 -} Event; +typedef ScoreThreadValSmpOneCpu_Context Context; static void WorkerTask( rtems_task_argument arg ) { diff --git a/testsuites/validation/tc-score-thread-tls-max-zero.c b/testsuites/validation/tc-score-thread-tls-max-zero.c index d0d367437e..6205147865 100644 --- a/testsuites/validation/tc-score-thread-tls-max-zero.c +++ b/testsuites/validation/tc-score-thread-tls-max-zero.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreThreadValTlsMaxZero + * @ingroup ScoreThreadValTlsMaxZero */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreThreadValTlsMaxZero \ - * spec:/score/thread/val/tls-max-zero + * @defgroup ScoreThreadValTlsMaxZero spec:/score/thread/val/tls-max-zero * - * @ingroup RTEMSTestSuiteTestsuitesValidationTls1 + * @ingroup TestsuitesValidationTls1 * * @brief Tests properties of thread-local objects. * diff --git a/testsuites/validation/tc-score-thread-tls.c b/testsuites/validation/tc-score-thread-tls.c index 0676d4249a..54d930d111 100644 --- a/testsuites/validation/tc-score-thread-tls.c +++ b/testsuites/validation/tc-score-thread-tls.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreThreadValTls + * @ingroup ScoreThreadValTls */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreThreadValTls spec:/score/thread/val/tls + * @defgroup ScoreThreadValTls spec:/score/thread/val/tls * - * @ingroup RTEMSTestSuiteTestsuitesValidationTls0 - * @ingroup RTEMSTestSuiteTestsuitesValidationTls1 + * @ingroup TestsuitesValidationTls0 + * @ingroup TestsuitesValidationTls1 * * @brief Tests properties of thread-local objects. * diff --git a/testsuites/validation/tc-score-thread.c b/testsuites/validation/tc-score-thread.c index 53b939e3c5..e065905641 100644 --- a/testsuites/validation/tc-score-thread.c +++ b/testsuites/validation/tc-score-thread.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreThreadValThread + * @ingroup ScoreThreadValThread */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021, 2023 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -56,14 +56,15 @@ #include <rtems/score/statesimpl.h> #include <rtems/score/threadimpl.h> +#include "ts-config.h" #include "tx-support.h" #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreThreadValThread spec:/score/thread/val/thread + * @defgroup ScoreThreadValThread spec:/score/thread/val/thread * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests general thread behaviour. * @@ -86,6 +87,30 @@ * * - Clean up all used resources. * + * - Delete a thread which least recently used the floating point coprocessor. + * + * - Start the worker thread. Let it use the floating point coprocessor. + * + * - Delete the worker thread and free the thread resources. + * + * - Clean up all used resources. + * + * - Validate the global construction. Mark that the test case executed. + * + * - Check that the global constructor was called exactly once. + * + * - Check that the global construction was done by the Classic API user + * initialization task. + * + * - Check that the global constructor was called before the task entry. + * + * - Validate that thread dispatching does not recurse. Issue a couple of + * thread context switches during a thread dispatch. Record the stack + * pointers of the heir threads. + * + * - Check that the thread dispatching did not recurse through the recorded + * stack pointers. + * * @{ */ @@ -102,6 +127,26 @@ typedef struct { * @brief This member contains the killer task identifier. */ rtems_id killer_id; + + /** + * @brief This member contains a floating-point object. + */ + volatile double fp_obj; + + /** + * @brief This member indicates the thread switch state. + */ + int thread_switch_state; + + /** + * @brief This member contain the runner stack pointer at the context switch. + */ + uintptr_t runner_stack[ 2 ]; + + /** + * @brief This member contain the worker stack pointer at the context switch. + */ + uintptr_t worker_stack[ 2 ]; } ScoreThreadValThread_Context; static ScoreThreadValThread_Context @@ -109,6 +154,21 @@ static ScoreThreadValThread_Context typedef ScoreThreadValThread_Context Context; +static bool test_case_executed; + +static bool constructor_test_case_executed; + +static uint32_t constructor_calls; + +static rtems_id constructor_id; + +static __attribute__(( __constructor__ )) void Constructor( void ) +{ + constructor_test_case_executed = test_case_executed; + ++constructor_calls; + constructor_id = rtems_task_self(); +} + static void TaskTerminate( rtems_tcb *executing ) { Context *ctx; @@ -126,6 +186,29 @@ static void WorkerTask( rtems_task_argument arg ) SuspendSelf(); } +static void GoBackToRunner( void *arg ) +{ + Context *ctx; + + ctx = arg; + SetPriority( ctx->worker_id, PRIO_LOW ); +} + +static void FloatingPointTask( rtems_task_argument arg ) +{ + Context *ctx; + + ctx = (Context *) arg; + ctx->fp_obj *= 1.23; + + /* + * We use an interrupt to go back to the runner since on some + * architectures, the floating-point context is only saved during interrupt + * processing and not for synchronous thread switches. + */ + CallWithinISR( GoBackToRunner, ctx ); +} + static void KillerTask( rtems_task_argument arg ) { Context *ctx; @@ -134,6 +217,44 @@ static void KillerTask( rtems_task_argument arg ) DeleteTask( ctx->worker_id ); } +static void TaskSwitch( rtems_tcb *executing, rtems_tcb *heir ) +{ + Context *ctx; + rtems_id worker_id; + int state; + uintptr_t heir_stack; + + ctx = T_fixture_context(); + worker_id = ctx->worker_id; + state = ctx->thread_switch_state; + ctx->thread_switch_state = state + 1; + heir_stack = _CPU_Context_Get_SP( &heir->Registers ); + + switch ( state ) { + case 0: + T_eq_u32( heir->Object.id, worker_id ); + SuspendTask( worker_id ); + ctx->worker_stack[ 0 ] = heir_stack; + break; + case 1: + T_eq_u32( executing->Object.id, worker_id ); + ResumeTask( worker_id ); + ctx->runner_stack[ 0 ] = heir_stack; + break; + case 2: + T_eq_u32( heir->Object.id, worker_id ); + SuspendTask( worker_id ); + ctx->worker_stack[ 1 ] = heir_stack; + break; + case 3: + T_eq_u32( executing->Object.id, worker_id ); + ctx->runner_stack[ 1 ] = heir_stack; + break; + default: + T_unreachable(); + } +} + static T_fixture ScoreThreadValThread_Fixture = { .setup = NULL, .stop = NULL, @@ -217,6 +338,97 @@ static void ScoreThreadValThread_Action_0( ScoreThreadValThread_Context *ctx ) } /** + * @brief Delete a thread which least recently used the floating point + * coprocessor. + */ +static void ScoreThreadValThread_Action_1( ScoreThreadValThread_Context *ctx ) +{ + rtems_status_code sc; + + SetSelfPriority( PRIO_NORMAL ); + sc = rtems_task_create( + rtems_build_name( 'W', 'O', 'R', 'K'), + PRIO_HIGH, + TEST_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_FLOATING_POINT, + &ctx->worker_id + ); + T_rsc_success( sc ); + + /* + * Start the worker thread. Let it use the floating point coprocessor. + */ + StartTask( ctx->worker_id, FloatingPointTask, ctx ); + + /* + * Delete the worker thread and free the thread resources. + */ + DeleteTask( ctx->worker_id ); + KillZombies(); + + /* + * Clean up all used resources. + */ + RestoreRunnerPriority(); +} + +/** + * @brief Validate the global construction. Mark that the test case executed. + */ +static void ScoreThreadValThread_Action_2( ScoreThreadValThread_Context *ctx ) +{ + test_case_executed = true; + + /* + * Check that the global constructor was called exactly once. + */ + T_eq_u32( constructor_calls, 1 ); + + /* + * Check that the global construction was done by the Classic API user + * initialization task. + */ + T_eq_u32( constructor_id, rtems_task_self() ); + + /* + * Check that the global constructor was called before the task entry. + */ + T_false( constructor_test_case_executed ); +} + +/** + * @brief Validate that thread dispatching does not recurse. Issue a couple of + * thread context switches during a thread dispatch. Record the stack + * pointers of the heir threads. + */ +static void ScoreThreadValThread_Action_3( ScoreThreadValThread_Context *ctx ) +{ + SetSelfPriority( PRIO_NORMAL ); + ctx->worker_id = CreateTask( "WORK", PRIO_HIGH ); + StartTask( ctx->worker_id, WorkerTask, NULL ); + + ctx->thread_switch_state = 0; + ctx->runner_stack[ 0 ] = 0; + ctx->runner_stack[ 1 ] = 1; + ctx->worker_stack[ 0 ] = 0; + ctx->worker_stack[ 1 ] = 1; + SetTaskSwitchExtension( TaskSwitch ); + ResumeTask( ctx->worker_id ); + + SetTaskSwitchExtension( NULL ); + DeleteTask( ctx->worker_id ); + RestoreRunnerPriority(); + + /* + * Check that the thread dispatching did not recurse through the recorded + * stack pointers. + */ + T_eq_uptr( ctx->runner_stack[ 0 ], ctx->runner_stack[ 1 ] ); + T_eq_uptr( ctx->worker_stack[ 0 ], ctx->worker_stack[ 1 ] ); +} + +/** * @fn void T_case_body_ScoreThreadValThread( void ) */ T_TEST_CASE_FIXTURE( ScoreThreadValThread, &ScoreThreadValThread_Fixture ) @@ -226,6 +438,9 @@ T_TEST_CASE_FIXTURE( ScoreThreadValThread, &ScoreThreadValThread_Fixture ) ctx = T_fixture_context(); ScoreThreadValThread_Action_0( ctx ); + ScoreThreadValThread_Action_1( ctx ); + ScoreThreadValThread_Action_2( ctx ); + ScoreThreadValThread_Action_3( ctx ); } /** @} */ diff --git a/testsuites/validation/tc-score-tq-smp.c b/testsuites/validation/tc-score-tq-smp.c index 4eff2de3c6..624ad0e7b6 100644 --- a/testsuites/validation/tc-score-tq-smp.c +++ b/testsuites/validation/tc-score-tq-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqValSmp + * @ingroup ScoreTqValSmp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqValSmp spec:/score/tq/val/smp + * @defgroup ScoreTqValSmp spec:/score/tq/val/smp * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @brief Tests SMP-specific thread queue behaviour. * diff --git a/testsuites/validation/tc-score-tq.c b/testsuites/validation/tc-score-tq.c new file mode 100644 index 0000000000..5439d910f5 --- /dev/null +++ b/testsuites/validation/tc-score-tq.c @@ -0,0 +1,190 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup ScoreTqValTq + */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tx-support.h" +#include "tx-thread-queue.h" + +#include <rtems/test.h> + +/** + * @defgroup ScoreTqValTq spec:/score/tq/val/tq + * + * @ingroup TestsuitesValidationNoClock0 + * + * @brief Tests special thread queue behaviour. + * + * This test case performs the following actions: + * + * - Use two worker threads to provoke a deadlock detection involving a thread + * queue with no owner. + * + * - Let blocker A obtain mutex A. + * + * - Let blocker A block on a counting semaphore. + * + * - Let blocker B block on mutex A. The deadlock detection will stop since + * blocker A blocks on the counting semaphore which has no owner. + * + * - Clean up all used resources. + * + * @{ + */ + +/** + * @brief Test context for spec:/score/tq/val/tq test case. + */ +typedef struct { + /** + * @brief This member contains the thread queue test context. + */ + TQContext tq_ctx; +} ScoreTqValTq_Context; + +static ScoreTqValTq_Context + ScoreTqValTq_Instance; + +static void ScoreTqValTq_Setup( ScoreTqValTq_Context *ctx ) +{ + rtems_status_code sc; + + SetSelfPriority( PRIO_NORMAL ); + TQInitialize( &ctx->tq_ctx ); + + /* Replace mutex D with a counting semaphore */ + DeleteMutex( ctx->tq_ctx.mutex_id[ TQ_MUTEX_D ] ); + sc = rtems_semaphore_create( + rtems_build_name( 'C', 'S', 'E', 'M' ), + 0, + RTEMS_COUNTING_SEMAPHORE | RTEMS_PRIORITY, + 0, + &ctx->tq_ctx.mutex_id[ TQ_MUTEX_D ] + ); + T_rsc_success( sc ); +} + +static void ScoreTqValTq_Setup_Wrap( void *arg ) +{ + ScoreTqValTq_Context *ctx; + + ctx = arg; + ScoreTqValTq_Setup( ctx ); +} + +static void ScoreTqValTq_Teardown( ScoreTqValTq_Context *ctx ) +{ + TQDestroy( &ctx->tq_ctx ); + RestoreRunnerPriority(); +} + +static void ScoreTqValTq_Teardown_Wrap( void *arg ) +{ + ScoreTqValTq_Context *ctx; + + ctx = arg; + ScoreTqValTq_Teardown( ctx ); +} + +static T_fixture ScoreTqValTq_Fixture = { + .setup = ScoreTqValTq_Setup_Wrap, + .stop = NULL, + .teardown = ScoreTqValTq_Teardown_Wrap, + .scope = NULL, + .initial_context = &ScoreTqValTq_Instance +}; + +/** + * @brief Use two worker threads to provoke a deadlock detection involving a + * thread queue with no owner. + */ +static void ScoreTqValTq_Action_0( ScoreTqValTq_Context *ctx ) +{ + TQReset( &ctx->tq_ctx ); + + /* + * Let blocker A obtain mutex A. + */ + TQSend( &ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_MUTEX_A_OBTAIN ); + + /* + * Let blocker A block on a counting semaphore. + */ + TQSend( &ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_MUTEX_D_OBTAIN ); + + /* + * Let blocker B block on mutex A. The deadlock detection will stop since + * blocker A blocks on the counting semaphore which has no owner. + */ + TQSend( &ctx->tq_ctx, TQ_BLOCKER_B, TQ_EVENT_MUTEX_A_OBTAIN ); + + /* + * Clean up all used resources. + */ + TQMutexRelease( &ctx->tq_ctx, TQ_MUTEX_D ); + TQSend( &ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_MUTEX_A_RELEASE ); + TQSend( &ctx->tq_ctx, TQ_BLOCKER_B, TQ_EVENT_MUTEX_A_RELEASE ); +} + +/** + * @fn void T_case_body_ScoreTqValTq( void ) + */ +T_TEST_CASE_FIXTURE( ScoreTqValTq, &ScoreTqValTq_Fixture ) +{ + ScoreTqValTq_Context *ctx; + + ctx = T_fixture_context(); + + ScoreTqValTq_Action_0( ctx ); +} + +/** @} */ diff --git a/testsuites/validation/tc-sem-create.c b/testsuites/validation/tc-sem-create.c index 7012c28275..9975cb0778 100644 --- a/testsuites/validation/tc-sem-create.c +++ b/testsuites/validation/tc-sem-create.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemReqCreate + * @ingroup RtemsSemReqCreate */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,9 +62,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemReqCreate spec:/rtems/sem/req/create + * @defgroup RtemsSemReqCreate spec:/rtems/sem/req/create * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -224,15 +224,15 @@ typedef struct { rtems_status_code status; - Semaphore_Variant variant;; + Semaphore_Variant variant; - Semaphore_Discipline discipline;; + Semaphore_Discipline discipline; - uint32_t sem_count;; + uint32_t sem_count; - Thread_Control *executing;; + Thread_Control *executing; - Thread_Control *owner;; + Thread_Control *owner; rtems_name name; diff --git a/testsuites/validation/tc-sem-delete.c b/testsuites/validation/tc-sem-delete.c index 7c31547eba..188b532870 100644 --- a/testsuites/validation/tc-sem-delete.c +++ b/testsuites/validation/tc-sem-delete.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemReqDelete + * @ingroup RtemsSemReqDelete */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemReqDelete spec:/rtems/sem/req/delete + * @defgroup RtemsSemReqDelete spec:/rtems/sem/req/delete * - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ diff --git a/testsuites/validation/tc-sem-flush.c b/testsuites/validation/tc-sem-flush.c index af8f5407cd..4fb2027354 100644 --- a/testsuites/validation/tc-sem-flush.c +++ b/testsuites/validation/tc-sem-flush.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemReqFlush + * @ingroup RtemsSemReqFlush */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -64,9 +64,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemReqFlush spec:/rtems/sem/req/flush + * @defgroup RtemsSemReqFlush spec:/rtems/sem/req/flush * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -118,7 +118,7 @@ typedef struct { /** * @brief This member contains the thread queue test context. */ - TQContext tq_ctx;; + TQContext tq_ctx; /** * @brief This member specifies if the attribute set of the semaphore. @@ -228,12 +228,16 @@ static Status_Control Enqueue( TQContext *tq_ctx, TQWait wait ) return STATUS_BUILD( STATUS_SUCCESSFUL, 0 ); } -static void Flush( TQContext *tq_ctx ) +static uint32_t Flush( TQContext *tq_ctx, uint32_t thread_count, bool all ) { rtems_status_code sc; + (void) all; + sc = rtems_semaphore_flush( tq_ctx->thread_queue_id ); T_rsc_success( sc ); + + return thread_count; } static void RtemsSemReqFlush_Pre_Class_Prepare( @@ -401,16 +405,16 @@ static void RtemsSemReqFlush_Post_Action_Check( case RtemsSemReqFlush_Post_Action_FlushFIFO: { /* * The calling task shall flush the semaphore as specified by - * /score/tq/req/flush-fifo. + * spec:/score/tq/req/flush-fifo. */ - ScoreTqReqFlushFifo_Run( &ctx->tq_ctx ); + ScoreTqReqFlushFifo_Run( &ctx->tq_ctx, false ); break; } case RtemsSemReqFlush_Post_Action_FlushPriority: { /* * The calling task shall flush the semaphore as specified by - * /score/tq/req/flush-priority. + * spec:/score/tq/req/flush-priority. */ ScoreTqReqFlushPriority_Run( &ctx->tq_ctx, true ); break; @@ -419,7 +423,7 @@ static void RtemsSemReqFlush_Post_Action_Check( case RtemsSemReqFlush_Post_Action_FlushPriorityCeiling: { /* * The calling task shall flush the semaphore as specified by - * /score/tq/req/flush-priority. + * spec:/score/tq/req/flush-priority. */ ScoreTqReqFlushPriority_Run( &ctx->tq_ctx, false ); break; @@ -428,7 +432,7 @@ static void RtemsSemReqFlush_Post_Action_Check( case RtemsSemReqFlush_Post_Action_FlushPriorityInherit: { /* * The calling task shall flush the semaphore as specified by - * /score/tq/req/flush-priority-inherit. + * spec:/score/tq/req/flush-priority-inherit. */ ScoreTqReqFlushPriorityInherit_Run( &ctx->tq_ctx ); break; @@ -494,7 +498,9 @@ static void RtemsSemReqFlush_Action( RtemsSemReqFlush_Context *ctx ) static void RtemsSemReqFlush_Cleanup( RtemsSemReqFlush_Context *ctx ) { rtems_status_code sc; - sc = rtems_semaphore_delete( ctx->tq_ctx.thread_queue_id ); T_rsc_success( sc ); + + sc = rtems_semaphore_delete( ctx->tq_ctx.thread_queue_id ); + T_rsc_success( sc ); } static const RtemsSemReqFlush_Entry diff --git a/testsuites/validation/tc-sem-ident.c b/testsuites/validation/tc-sem-ident.c index 3014113189..abeddfa5e2 100644 --- a/testsuites/validation/tc-sem-ident.c +++ b/testsuites/validation/tc-sem-ident.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemValIdent + * @ingroup RtemsSemValIdent */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,16 +57,16 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemValIdent spec:/rtems/sem/val/ident + * @defgroup RtemsSemValIdent spec:/rtems/sem/val/ident * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Test the rtems_semaphore_ident() directive. * * This test case performs the following actions: * * - Run the generic object identification tests for Classic API semaphore - * class objects defined by /rtems/req/ident. + * class objects defined by spec:/rtems/req/ident. * * @{ */ @@ -84,7 +84,7 @@ static rtems_status_code ClassicSemIdentAction( /** * @brief Run the generic object identification tests for Classic API semaphore - * class objects defined by /rtems/req/ident. + * class objects defined by spec:/rtems/req/ident. */ static void RtemsSemValIdent_Action_0( void ) { diff --git a/testsuites/validation/tc-sem-mrsp-obtain.c b/testsuites/validation/tc-sem-mrsp-obtain.c index dcbf7655ab..e7d50c34da 100644 --- a/testsuites/validation/tc-sem-mrsp-obtain.c +++ b/testsuites/validation/tc-sem-mrsp-obtain.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemReqMrspObtain + * @ingroup RtemsSemReqMrspObtain */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -63,9 +63,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemReqMrspObtain spec:/rtems/sem/req/mrsp-obtain + * @defgroup RtemsSemReqMrspObtain spec:/rtems/sem/req/mrsp-obtain * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @{ */ diff --git a/testsuites/validation/tc-sem-obtain.c b/testsuites/validation/tc-sem-obtain.c index b07421f186..10c4475d8c 100644 --- a/testsuites/validation/tc-sem-obtain.c +++ b/testsuites/validation/tc-sem-obtain.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemReqObtain + * @ingroup RtemsSemReqObtain */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -65,9 +65,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemReqObtain spec:/rtems/sem/req/obtain + * @defgroup RtemsSemReqObtain spec:/rtems/sem/req/obtain * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -390,7 +390,7 @@ static void RtemsSemReqObtain_Post_Action_Check( case RtemsSemReqObtain_Post_Action_SemSeizeTry: { /* * The calling task shall try to seize the semaphore as specified by - * /score/sem/req/seize-try. + * spec:/score/sem/req/seize-try. */ ctx->tq_sem_ctx.get_count = TQSemGetCountClassic; ctx->tq_sem_ctx.set_count = TQSemSetCountClassic; @@ -401,7 +401,7 @@ static void RtemsSemReqObtain_Post_Action_Check( case RtemsSemReqObtain_Post_Action_SemSeizeWait: { /* * The calling task shall wait to seize the semaphore as specified by - * /score/sem/req/seize-wait. + * spec:/score/sem/req/seize-wait. */ ctx->tq_sem_ctx.get_count = TQSemGetCountClassic; ctx->tq_sem_ctx.set_count = TQSemSetCountClassic; @@ -412,8 +412,8 @@ static void RtemsSemReqObtain_Post_Action_Check( case RtemsSemReqObtain_Post_Action_MtxSeizeTry: { /* * The calling task shall try to seize the mutex as specified by - * /score/mtx/req/seize-try where an enqueue blocks, a recursive seize is - * allowed, and no locking protocol is used. + * spec:/score/mtx/req/seize-try where an enqueue blocks, a recursive + * seize is allowed, and no locking protocol is used. */ ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_mtx_ctx.protocol = TQ_MTX_NO_PROTOCOL; @@ -426,8 +426,8 @@ static void RtemsSemReqObtain_Post_Action_Check( case RtemsSemReqObtain_Post_Action_MtxSeizeWait: { /* * The calling task shall wait to seize the mutex as specified by - * /score/mtx/req/seize-wait where an enqueue blocks, a recursive seize - * is allowed, and no locking protocol is used. + * spec:/score/mtx/req/seize-wait where an enqueue blocks, a recursive + * seize is allowed, and no locking protocol is used. */ ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_mtx_ctx.protocol = TQ_MTX_NO_PROTOCOL; @@ -440,8 +440,8 @@ static void RtemsSemReqObtain_Post_Action_Check( case RtemsSemReqObtain_Post_Action_InheritMtxSeizeTry: { /* * The calling task shall try to seize the mutex as specified by - * /score/mtx/req/seize-try where an enqueue blocks, a recursive seize is - * allowed, and a priority inheritance protocol is used. + * spec:/score/mtx/req/seize-try where an enqueue blocks, a recursive + * seize is allowed, and a priority inheritance protocol is used. */ ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_mtx_ctx.protocol = TQ_MTX_NO_PROTOCOL; @@ -454,8 +454,8 @@ static void RtemsSemReqObtain_Post_Action_Check( case RtemsSemReqObtain_Post_Action_InheritMtxSeizeWait: { /* * The calling task shall wait to seize the mutex as specified by - * /score/mtx/req/seize-wait where an enqueue blocks, a recursive seize - * is allowed, and a priority inheritance protocol is used. + * spec:/score/mtx/req/seize-wait where an enqueue blocks, a recursive + * seize is allowed, and a priority inheritance protocol is used. */ ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_mtx_ctx.protocol = TQ_MTX_NO_PROTOCOL; @@ -468,8 +468,8 @@ static void RtemsSemReqObtain_Post_Action_Check( case RtemsSemReqObtain_Post_Action_CeilingMtxSeizeTry: { /* * The calling task shall try to seize the mutex as specified by - * /score/mtx/req/seize-try where an enqueue blocks, a recursive seize is - * allowed, and a priority ceiling is used. + * spec:/score/mtx/req/seize-try where an enqueue blocks, a recursive + * seize is allowed, and a priority ceiling is used. */ ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_mtx_ctx.protocol = TQ_MTX_PRIORITY_CEILING; @@ -482,8 +482,8 @@ static void RtemsSemReqObtain_Post_Action_Check( case RtemsSemReqObtain_Post_Action_CeilingMtxSeizeWait: { /* * The calling task shall wait to seize the mutex as specified by - * /score/mtx/req/seize-wait where an enqueue blocks, a recursive seize - * is allowed, and a priority ceiling is used. + * spec:/score/mtx/req/seize-wait where an enqueue blocks, a recursive + * seize is allowed, and a priority ceiling is used. */ ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_mtx_ctx.protocol = TQ_MTX_PRIORITY_CEILING; @@ -496,28 +496,36 @@ static void RtemsSemReqObtain_Post_Action_Check( case RtemsSemReqObtain_Post_Action_MrsPMtxSeizeTry: { /* * The calling task shall try to seize the mutex as specified by - * /score/mtx/req/seize-try where an enqueue is sticky, a recursive seize - * returns an error status, and a priority ceiling is used. + * spec:/score/mtx/req/seize-try where an enqueue is sticky, a recursive + * seize returns an error status, and a priority ceiling is used. */ + #if defined(RTEMS_SMP) ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_STICKY; ctx->tq_mtx_ctx.protocol = TQ_MTX_MRSP; ctx->tq_mtx_ctx.recursive = TQ_MTX_RECURSIVE_DEADLOCK; ctx->tq_mtx_ctx.priority_ceiling = PRIO_VERY_HIGH; ScoreMtxReqSeizeTry_Run( &ctx->tq_mtx_ctx ); + #else + T_unreachable(); + #endif break; } case RtemsSemReqObtain_Post_Action_MrsPMtxSeizeWait: { /* * The calling task shall wait to seize the mutex as specified by - * /score/mtx/req/seize-wait where an enqueue is sticky, a recursive + * spec:/score/mtx/req/seize-wait where an enqueue is sticky, a recursive * seize returns an error status, and a priority ceiling is used. */ + #if defined(RTEMS_SMP) ctx->tq_mtx_ctx.base.enqueue_variant = TQ_ENQUEUE_STICKY; ctx->tq_mtx_ctx.protocol = TQ_MTX_MRSP; ctx->tq_mtx_ctx.recursive = TQ_MTX_RECURSIVE_DEADLOCK; ctx->tq_mtx_ctx.priority_ceiling = PRIO_VERY_HIGH; ScoreMtxReqSeizeWait_Run( &ctx->tq_mtx_ctx ); + #else + T_unreachable(); + #endif break; } @@ -580,6 +588,7 @@ static void RtemsSemReqObtain_Action( RtemsSemReqObtain_Context *ctx ) ); T_rsc_success( sc ); + #if defined(RTEMS_SMP) if ( ( ctx->attribute_set & RTEMS_MULTIPROCESSOR_RESOURCE_SHARING ) != 0 ) { rtems_task_priority prio; @@ -591,6 +600,7 @@ static void RtemsSemReqObtain_Action( RtemsSemReqObtain_Context *ctx ) ); T_rsc_success( sc ); } + #endif } static void RtemsSemReqObtain_Cleanup( RtemsSemReqObtain_Context *ctx ) @@ -606,33 +616,28 @@ RtemsSemReqObtain_Entries[] = { { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_SemSeizeWait }, { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_SemSeizeTry }, { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_MtxSeizeWait }, -#if defined(RTEMS_SMP) - { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_InvId }, -#else - { 1, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_NA }, -#endif { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_MtxSeizeTry }, { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_CeilingMtxSeizeWait }, { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_InheritMtxSeizeWait }, #if defined(RTEMS_SMP) { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_MrsPMtxSeizeWait }, #else - { 1, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_NA }, + { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_CeilingMtxSeizeWait }, #endif { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_CeilingMtxSeizeTry }, { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_InheritMtxSeizeTry }, #if defined(RTEMS_SMP) { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_MrsPMtxSeizeTry } #else - { 1, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_NA } + { 0, 0, 0, 0, 0, RtemsSemReqObtain_Post_Action_CeilingMtxSeizeTry } #endif }; static const uint8_t RtemsSemReqObtain_Map[] = { - 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 6, 4, - 4, 0, 0, 0, 6, 4, 4, 0, 0, 0, 1, 1, 1, 1, 1, 1, 10, 7, 7, 0, 0, 0, 1, 1, 1, - 1, 1, 1, 11, 8, 8, 0, 0, 0, 1, 1, 1, 1, 1, 1, 12, 9, 9, 5, 5, 5 + 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 3, 2, 2, 0, 0, 0, 5, 4, + 4, 0, 0, 0, 5, 4, 4, 0, 0, 0, 1, 1, 1, 1, 1, 1, 9, 6, 6, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 10, 7, 7, 0, 0, 0, 1, 1, 1, 1, 1, 1, 11, 8, 8, 0, 0, 0 }; static size_t RtemsSemReqObtain_Scope( void *arg, char *buf, size_t n ) diff --git a/testsuites/validation/tc-sem-performance.c b/testsuites/validation/tc-sem-performance.c index 5bbff6a587..5861e3ee8e 100644 --- a/testsuites/validation/tc-sem-performance.c +++ b/testsuites/validation/tc-sem-performance.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemValPerf + * @ingroup RtemsSemValPerf */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemValPerf spec:/rtems/sem/val/perf + * @defgroup RtemsSemValPerf spec:/rtems/sem/val/perf * - * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0 + * @ingroup TestsuitesPerformanceNoClock0 * * @brief This test case provides a context to run @ref RTEMSAPIClassicSem * performance tests. @@ -112,15 +112,17 @@ typedef struct { static RtemsSemValPerf_Context RtemsSemValPerf_Instance; -typedef RtemsSemValPerf_Context Context; +#define EVENT_END RTEMS_EVENT_0 + +#define EVENT_OBTAIN RTEMS_EVENT_1 + +#define EVENT_OBTAIN_END RTEMS_EVENT_2 -typedef enum { - EVENT_END = RTEMS_EVENT_0, - EVENT_OBTAIN = RTEMS_EVENT_1, - EVENT_OBTAIN_END = RTEMS_EVENT_2, - EVENT_RELEASE = RTEMS_EVENT_3, - EVENT_RELEASE_END = RTEMS_EVENT_4 -} Event; +#define EVENT_RELEASE RTEMS_EVENT_3 + +#define EVENT_RELEASE_END RTEMS_EVENT_4 + +typedef RtemsSemValPerf_Context Context; static void Send( const Context *ctx, rtems_event_set events ) { @@ -236,6 +238,12 @@ static T_fixture RtemsSemValPerf_Fixture = { }; /** + * @defgroup RtemsSemReqPerfMtxPiObtain spec:/rtems/sem/req/perf-mtx-pi-obtain + * + * @{ + */ + +/** * @brief Obtain the available mutex. */ static void RtemsSemReqPerfMtxPiObtain_Body( RtemsSemValPerf_Context *ctx ) @@ -287,6 +295,15 @@ static bool RtemsSemReqPerfMtxPiObtain_Teardown_Wrap( return RtemsSemReqPerfMtxPiObtain_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + +/** + * @defgroup RtemsSemReqPerfMtxPiRelease \ + * spec:/rtems/sem/req/perf-mtx-pi-release + * + * @{ + */ + /** * @brief Obtain the mutex. */ @@ -349,6 +366,15 @@ static bool RtemsSemReqPerfMtxPiRelease_Teardown_Wrap( return RtemsSemReqPerfMtxPiRelease_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + +/** + * @defgroup RtemsSemReqPerfMtxPiReleaseOne \ + * spec:/rtems/sem/req/perf-mtx-pi-release-one + * + * @{ + */ + /** * @brief Let one task wait on the mutex. */ @@ -356,9 +382,10 @@ static void RtemsSemReqPerfMtxPiReleaseOne_Setup( RtemsSemValPerf_Context *ctx ) { + SetSelfPriority( PRIO_HIGH ); ObtainMutex( ctx->mutex_id ); Send( ctx, EVENT_OBTAIN ); - SetPriority( ctx->worker_id, PRIO_LOW ); + Yield(); Send( ctx, EVENT_RELEASE ); } @@ -375,6 +402,11 @@ static void RtemsSemReqPerfMtxPiReleaseOne_Setup_Wrap( void *arg ) */ static void RtemsSemReqPerfMtxPiReleaseOne_Body( RtemsSemValPerf_Context *ctx ) { + /* + * The release will unblock the worker task which has our priority. The + * scheduler ensures FIFO ordering for ready threads of the same priority, so + * the release will not preempt us. + */ ctx->status = rtems_semaphore_release( ctx->mutex_id ); } @@ -400,7 +432,7 @@ static bool RtemsSemReqPerfMtxPiReleaseOne_Teardown( { T_quiet_rsc( ctx->status, RTEMS_SUCCESSFUL ); - SetPriority( ctx->worker_id, PRIO_HIGH ); + SetSelfPriority( PRIO_NORMAL ); return tic == toc; } @@ -425,8 +457,17 @@ static bool RtemsSemReqPerfMtxPiReleaseOne_Teardown_Wrap( ); } +/** @} */ + #if defined(RTEMS_SMP) /** + * @defgroup RtemsSemReqPerfMtxPiReleaseOtherCpu \ + * spec:/rtems/sem/req/perf-mtx-pi-release-other-cpu + * + * @{ + */ + +/** * @brief Move worker to scheduler B. */ static void RtemsSemReqPerfMtxPiReleaseOtherCpu_Prepare( @@ -524,9 +565,18 @@ static void RtemsSemReqPerfMtxPiReleaseOtherCpu_Cleanup( { SetScheduler( ctx->worker_id, SCHEDULER_A_ID, PRIO_HIGH ); } + +/** @} */ #endif /** + * @defgroup RtemsSemReqPerfMtxPiReleasePreempt \ + * spec:/rtems/sem/req/perf-mtx-pi-release-preempt + * + * @{ + */ + +/** * @brief Let one task wait on the mutex. */ static void RtemsSemReqPerfMtxPiReleasePreempt_Setup( @@ -603,6 +653,14 @@ static bool RtemsSemReqPerfMtxPiReleasePreempt_Teardown_Wrap( ); } +/** @} */ + +/** + * @defgroup RtemsSemReqPerfMtxPiTry spec:/rtems/sem/req/perf-mtx-pi-try + * + * @{ + */ + /** * @brief Make the mutex unavailable. */ @@ -665,6 +723,15 @@ static void RtemsSemReqPerfMtxPiTry_Cleanup( RtemsSemValPerf_Context *ctx ) Send( ctx, EVENT_RELEASE ); } +/** @} */ + +/** + * @defgroup RtemsSemReqPerfMtxPiWaitForever \ + * spec:/rtems/sem/req/perf-mtx-pi-wait-forever + * + * @{ + */ + /** * @brief Make the mutex unavailable. */ @@ -673,7 +740,7 @@ static void RtemsSemReqPerfMtxPiWaitForever_Setup( ) { Send( ctx, EVENT_OBTAIN ); - SetPriority( ctx->worker_id, PRIO_LOW ); + SetSelfPriority( PRIO_VERY_HIGH ); Send( ctx, EVENT_END | EVENT_RELEASE ); } @@ -723,8 +790,8 @@ static bool RtemsSemReqPerfMtxPiWaitForever_Teardown( T_quiet_rsc( ctx->status, RTEMS_SUCCESSFUL ); *delta = ctx->end - ctx->begin; - SetPriority( ctx->worker_id, PRIO_HIGH ); ReleaseMutex( ctx->mutex_id ); + SetSelfPriority( PRIO_NORMAL ); return tic == toc; } @@ -749,13 +816,22 @@ static bool RtemsSemReqPerfMtxPiWaitForever_Teardown_Wrap( ); } +/** @} */ + +/** + * @defgroup RtemsSemReqPerfMtxPiWaitTimed \ + * spec:/rtems/sem/req/perf-mtx-pi-wait-timed + * + * @{ + */ + /** * @brief Make the mutex unavailable. */ static void RtemsSemReqPerfMtxPiWaitTimed_Setup( RtemsSemValPerf_Context *ctx ) { Send( ctx, EVENT_OBTAIN ); - SetPriority( ctx->worker_id, PRIO_LOW ); + SetSelfPriority( PRIO_VERY_HIGH ); Send( ctx, EVENT_END | EVENT_RELEASE ); } @@ -803,8 +879,8 @@ static bool RtemsSemReqPerfMtxPiWaitTimed_Teardown( T_quiet_rsc( ctx->status, RTEMS_SUCCESSFUL ); *delta = ctx->end - ctx->begin; - SetPriority( ctx->worker_id, PRIO_HIGH ); ReleaseMutex( ctx->mutex_id ); + SetSelfPriority( PRIO_NORMAL ); return tic == toc; } @@ -823,6 +899,8 @@ static bool RtemsSemReqPerfMtxPiWaitTimed_Teardown_Wrap( return RtemsSemReqPerfMtxPiWaitTimed_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + /** * @fn void T_case_body_RtemsSemValPerf( void ) */ diff --git a/testsuites/validation/tc-sem-release.c b/testsuites/validation/tc-sem-release.c index cfb5315a2a..1e9c2091c0 100644 --- a/testsuites/validation/tc-sem-release.c +++ b/testsuites/validation/tc-sem-release.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemReqRelease + * @ingroup RtemsSemReqRelease */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -63,9 +63,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemReqRelease spec:/rtems/sem/req/release + * @defgroup RtemsSemReqRelease spec:/rtems/sem/req/release * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -331,7 +331,7 @@ static void RtemsSemReqRelease_Post_Action_Check( case RtemsSemReqRelease_Post_Action_BinarySurrender: { /* * The calling task shall surrender the binary semaphore as specified by - * /score/sem/req/surrender. + * spec:/score/sem/req/surrender. */ ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_ctx.get_owner = NULL; @@ -345,7 +345,7 @@ static void RtemsSemReqRelease_Post_Action_Check( case RtemsSemReqRelease_Post_Action_CountingSurrender: { /* * The calling task shall surrender the counting semaphore as specified - * by /score/sem/req/surrender. + * by spec:/score/sem/req/surrender. */ ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_ctx.get_owner = NULL; @@ -359,8 +359,9 @@ static void RtemsSemReqRelease_Post_Action_Check( case RtemsSemReqRelease_Post_Action_MtxSurrender: { /* * The calling task shall surrender the mutex as specified by - * /score/mtx/req/surrender where an enqueue blocks, a recursive seize is - * allowed, the owner is checked, and no locking protocol is used. + * spec:/score/mtx/req/surrender where an enqueue blocks, a recursive + * seize is allowed, the owner is checked, and no locking protocol is + * used. */ ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_ctx.get_owner = TQGetOwnerClassicSem; @@ -375,9 +376,9 @@ static void RtemsSemReqRelease_Post_Action_Check( case RtemsSemReqRelease_Post_Action_InheritMtxSurrender: { /* * The calling task shall surrender the mutex as specified by - * /score/mtx/req/surrender where an enqueue blocks, a recursive seize is - * allowed, the owner is checked, and a priority inheritance protocol is - * used. + * spec:/score/mtx/req/surrender where an enqueue blocks, a recursive + * seize is allowed, the owner is checked, and a priority inheritance + * protocol is used. */ ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_ctx.get_owner = TQGetOwnerClassicSem; @@ -392,8 +393,9 @@ static void RtemsSemReqRelease_Post_Action_Check( case RtemsSemReqRelease_Post_Action_CeilingMtxSurrender: { /* * The calling task shall surrender the mutex as specified by - * /score/mtx/req/surrender where an enqueue blocks, a recursive seize is - * allowed, the owner is checked, and a priority ceiling is used. + * spec:/score/mtx/req/surrender where an enqueue blocks, a recursive + * seize is allowed, the owner is checked, and a priority ceiling is + * used. */ ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; ctx->tq_ctx.get_owner = TQGetOwnerClassicSem; @@ -408,9 +410,9 @@ static void RtemsSemReqRelease_Post_Action_Check( case RtemsSemReqRelease_Post_Action_MrsPMtxSurrender: { /* * The calling task shall surrender the mutex as specified by - * /score/mtx/req/surrender where an enqueue is sticky, a recursive seize - * returns an error status, the owner is checked, and a priority ceiling - * is used. + * spec:/score/mtx/req/surrender where an enqueue is sticky, a recursive + * seize returns an error status, the owner is checked, and a priority + * ceiling is used. */ ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_STICKY; ctx->tq_ctx.get_owner = TQGetOwnerClassicSem; diff --git a/testsuites/validation/tc-sem-set-priority.c b/testsuites/validation/tc-sem-set-priority.c index d4418ad4de..fc4501b6fa 100644 --- a/testsuites/validation/tc-sem-set-priority.c +++ b/testsuites/validation/tc-sem-set-priority.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemReqSetPriority + * @ingroup RtemsSemReqSetPriority */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemReqSetPriority \ - * spec:/rtems/sem/req/set-priority + * @defgroup RtemsSemReqSetPriority spec:/rtems/sem/req/set-priority * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-sem-smp.c b/testsuites/validation/tc-sem-smp.c index cfe82b3982..5dc3f437a1 100644 --- a/testsuites/validation/tc-sem-smp.c +++ b/testsuites/validation/tc-sem-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemValSmp + * @ingroup RtemsSemValSmp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemValSmp spec:/rtems/sem/val/smp + * @defgroup RtemsSemValSmp spec:/rtems/sem/val/smp * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @brief Tests SMP-specific semaphore behaviour. * @@ -123,12 +123,12 @@ typedef struct { /** * @brief This member contains the mutex identifier. */ - rtems_id mutex_id;; + rtems_id mutex_id; /** * @brief This member contains the second mutex identifier. */ - rtems_id mutex_2_id;; + rtems_id mutex_2_id; /** * @brief If this member is true, then the worker is done. diff --git a/testsuites/validation/tc-sem-timeout.c b/testsuites/validation/tc-sem-timeout.c index 254a6be5db..a150d067d2 100644 --- a/testsuites/validation/tc-sem-timeout.c +++ b/testsuites/validation/tc-sem-timeout.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemReqTimeout + * @ingroup RtemsSemReqTimeout */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,7 +55,6 @@ #include <rtems.h> #include <string.h> -#include "tr-tq-timeout-mrsp.h" #include "tr-tq-timeout-priority-inherit.h" #include "tr-tq-timeout.h" #include "tx-support.h" @@ -64,9 +63,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemReqTimeout spec:/rtems/sem/req/timeout + * @defgroup RtemsSemReqTimeout spec:/rtems/sem/req/timeout * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -108,7 +107,7 @@ typedef struct { /** * @brief This member contains the thread queue test context. */ - TQContext tq_ctx;; + TQContext tq_ctx; /** * @brief This member specifies if the attribute set of the semaphore. @@ -169,6 +168,10 @@ static const char * const * const RtemsSemReqTimeout_PreDesc[] = { NULL }; +#if defined(RTEMS_SMP) +#include "tr-tq-timeout-mrsp.h" +#endif + static void RtemsSemReqTimeout_Pre_Class_Prepare( RtemsSemReqTimeout_Context *ctx, RtemsSemReqTimeout_Pre_Class state @@ -226,7 +229,11 @@ static void RtemsSemReqTimeout_Pre_Class_Prepare( */ ctx->attribute_set |= RTEMS_BINARY_SEMAPHORE | RTEMS_MULTIPROCESSOR_RESOURCE_SHARING; + #if defined(RTEMS_SMP) ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_STICKY; + #else + ctx->tq_ctx.enqueue_variant = TQ_ENQUEUE_BLOCKS; + #endif break; } @@ -273,7 +280,7 @@ static void RtemsSemReqTimeout_Post_Action_Check( case RtemsSemReqTimeout_Post_Action_Timeout: { /* * The semaphore obtain timeout actions shall be done as specified by - * /score/tq/req/timeout. + * spec:/score/tq/req/timeout. */ ctx->tq_ctx.wait = TQ_WAIT_TIMED; ScoreTqReqTimeout_Run( &ctx->tq_ctx ); @@ -283,17 +290,21 @@ static void RtemsSemReqTimeout_Post_Action_Check( case RtemsSemReqTimeout_Post_Action_TimeoutMrsP: { /* * The semaphore obtain timeout actions shall be done as specified by - * /score/tq/req/timeout-mrsp. + * spec:/score/tq/req/timeout-mrsp. */ + #if defined(RTEMS_SMP) ctx->tq_ctx.wait = TQ_WAIT_TIMED; ScoreTqReqTimeoutMrsp_Run( &ctx->tq_ctx ); + #else + T_unreachable(); + #endif break; } case RtemsSemReqTimeout_Post_Action_TimeoutPriorityInherit: { /* * The semaphore obtain timeout actions shall be done as specified by - * /score/tq/req/timeout-priority-inherit. + * spec:/score/tq/req/timeout-priority-inherit. */ ctx->tq_ctx.wait = TQ_WAIT_FOREVER; ScoreTqReqTimeoutPriorityInherit_Run( &ctx->tq_ctx ); @@ -361,8 +372,12 @@ static void RtemsSemReqTimeout_Action( RtemsSemReqTimeout_Context *ctx ) static void RtemsSemReqTimeout_Cleanup( RtemsSemReqTimeout_Context *ctx ) { - if ( ctx->tq_ctx.thread_queue_id != 0 ) { rtems_status_code sc; - sc = rtems_semaphore_delete( ctx->tq_ctx.thread_queue_id ); T_rsc_success( sc ); } + if ( ctx->tq_ctx.thread_queue_id != 0 ) { + rtems_status_code sc; + + sc = rtems_semaphore_delete( ctx->tq_ctx.thread_queue_id ); + T_rsc_success( sc ); + } } static const RtemsSemReqTimeout_Entry @@ -370,10 +385,10 @@ RtemsSemReqTimeout_Entries[] = { { 0, 0, 0, RtemsSemReqTimeout_Post_Action_Timeout }, { 1, 0, 0, RtemsSemReqTimeout_Post_Action_NA }, { 0, 0, 0, RtemsSemReqTimeout_Post_Action_TimeoutPriorityInherit }, -#if !defined(RTEMS_SMP) - { 1, 0, 0, RtemsSemReqTimeout_Post_Action_NA } -#else +#if defined(RTEMS_SMP) { 0, 0, 0, RtemsSemReqTimeout_Post_Action_TimeoutMrsP } +#else + { 0, 0, 0, RtemsSemReqTimeout_Post_Action_Timeout } #endif }; diff --git a/testsuites/validation/tc-sem-uni.c b/testsuites/validation/tc-sem-uni.c index 08c38adb6c..04fec2009c 100644 --- a/testsuites/validation/tc-sem-uni.c +++ b/testsuites/validation/tc-sem-uni.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSemValUni + * @ingroup RtemsSemValUni */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSemValUni spec:/rtems/sem/val/uni + * @defgroup RtemsSemValUni spec:/rtems/sem/val/uni * - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationOneCpu0 * * @brief Tests uniprocessor-specific semaphore behaviour. * diff --git a/testsuites/validation/tc-signal-catch.c b/testsuites/validation/tc-signal-catch.c index 3618290443..7a6439a60f 100644 --- a/testsuites/validation/tc-signal-catch.c +++ b/testsuites/validation/tc-signal-catch.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSignalReqCatch + * @ingroup RtemsSignalReqCatch */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSignalReqCatch spec:/rtems/signal/req/catch + * @defgroup RtemsSignalReqCatch spec:/rtems/signal/req/catch * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ diff --git a/testsuites/validation/tc-signal-send.c b/testsuites/validation/tc-signal-send.c index e6efbfd7cf..aedcec5e47 100644 --- a/testsuites/validation/tc-signal-send.c +++ b/testsuites/validation/tc-signal-send.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSignalReqSend + * @ingroup RtemsSignalReqSend */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSignalReqSend spec:/rtems/signal/req/send + * @defgroup RtemsSignalReqSend spec:/rtems/signal/req/send * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ @@ -154,9 +154,9 @@ typedef struct { rtems_signal_set processed_signal_sets[ 2 ]; - uintptr_t stack_pointers[ 2 ];; + uintptr_t stack_pointers[ 2 ]; - rtems_mode mode;; + rtems_mode mode; rtems_status_code status; diff --git a/testsuites/validation/tc-signals.c b/testsuites/validation/tc-signals.c index 86ae17e018..dc452ecbc0 100644 --- a/testsuites/validation/tc-signals.c +++ b/testsuites/validation/tc-signals.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSignalValSignals + * @ingroup RtemsSignalValSignals */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSignalValSignals spec:/rtems/signal/val/signals + * @defgroup RtemsSignalValSignals spec:/rtems/signal/val/signals * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief This test case collection provides validation test cases for the @ref * RTEMSAPIClassicSignal. diff --git a/testsuites/validation/tc-start-of-optional-processor-failed.c b/testsuites/validation/tc-start-of-optional-processor-failed.c index b033a18bae..826ff3848d 100644 --- a/testsuites/validation/tc-start-of-optional-processor-failed.c +++ b/testsuites/validation/tc-start-of-optional-processor-failed.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValStartOfOptionalProcessorFailed + * @ingroup ScoreSmpValStartOfOptionalProcessorFailed */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSmpValStartOfOptionalProcessorFailed \ + * @defgroup ScoreSmpValStartOfOptionalProcessorFailed \ * spec:/score/smp/val/start-of-optional-processor-failed * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly2 + * @ingroup TestsuitesValidationSmpOnly2 * * @brief Tests the state of an optional processor which failed to start. * diff --git a/testsuites/validation/tc-status-is-equal.c b/testsuites/validation/tc-status-is-equal.c index 6960270420..6981ef84d1 100644 --- a/testsuites/validation/tc-status-is-equal.c +++ b/testsuites/validation/tc-status-is-equal.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsStatusReqIsEqual + * @ingroup RtemsStatusReqIsEqual */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsStatusReqIsEqual spec:/rtems/status/req/is-equal + * @defgroup RtemsStatusReqIsEqual spec:/rtems/status/req/is-equal * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-status-is-successful.c b/testsuites/validation/tc-status-is-successful.c index 9ffe7a7df8..a04a9b4a7f 100644 --- a/testsuites/validation/tc-status-is-successful.c +++ b/testsuites/validation/tc-status-is-successful.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsStatusReqIsSuccessful + * @ingroup RtemsStatusReqIsSuccessful */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsStatusReqIsSuccessful \ - * spec:/rtems/status/req/is-successful + * @defgroup RtemsStatusReqIsSuccessful spec:/rtems/status/req/is-successful * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-status-text.c b/testsuites/validation/tc-status-text.c index dfed1501ed..a877519dd2 100644 --- a/testsuites/validation/tc-status-text.c +++ b/testsuites/validation/tc-status-text.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsStatusReqText + * @ingroup RtemsStatusReqText */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsStatusReqText spec:/rtems/status/req/text + * @defgroup RtemsStatusReqText spec:/rtems/status/req/text * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-status.c b/testsuites/validation/tc-status.c index 6b8c599516..41752a7f7d 100644 --- a/testsuites/validation/tc-status.c +++ b/testsuites/validation/tc-status.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsStatusValStatus + * @ingroup RtemsStatusValStatus */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021, 2023 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsStatusValStatus spec:/rtems/status/val/status + * @defgroup RtemsStatusValStatus spec:/rtems/status/val/status * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests some @ref RTEMSAPIClassicStatus interfaces. * @@ -67,12 +67,16 @@ * * - Validate the status code constants. * - * - Check that RTEMS_STATUS_CODES_FIRST has the expected value and is a + * - Assert that RTEMS_STATUS_CODES_FIRST has the expected value and is a * constant expression. * - * - Check that RTEMS_STATUS_CODES_LAST has the expected value and is a + * - Check that RTEMS_STATUS_CODES_FIRST has the expected value. + * + * - Assert that RTEMS_STATUS_CODES_LAST has the expected value and is a * constant expression. * + * - Check that RTEMS_STATUS_CODES_LAST has the expected value. + * * @{ */ @@ -84,16 +88,26 @@ static void RtemsStatusValStatus_Action_0( void ) /* Nothing to do */ /* - * Check that RTEMS_STATUS_CODES_FIRST has the expected value and is a + * Assert that RTEMS_STATUS_CODES_FIRST has the expected value and is a * constant expression. */ RTEMS_STATIC_ASSERT( RTEMS_STATUS_CODES_FIRST == 0, FIRST ); /* - * Check that RTEMS_STATUS_CODES_LAST has the expected value and is a + * Check that RTEMS_STATUS_CODES_FIRST has the expected value. + */ + T_eq_int( RTEMS_STATUS_CODES_FIRST, 0 ); + + /* + * Assert that RTEMS_STATUS_CODES_LAST has the expected value and is a * constant expression. */ RTEMS_STATIC_ASSERT( RTEMS_STATUS_CODES_LAST == 29, LAST ); + + /* + * Check that RTEMS_STATUS_CODES_LAST has the expected value. + */ + T_eq_int( RTEMS_STATUS_CODES_LAST, 29 ); } /** diff --git a/testsuites/validation/tc-support-is-name-valid.c b/testsuites/validation/tc-support-is-name-valid.c index 589cc4f7f4..2a47d27cd5 100644 --- a/testsuites/validation/tc-support-is-name-valid.c +++ b/testsuites/validation/tc-support-is-name-valid.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSupportReqIsNameValid + * @ingroup RtemsSupportReqIsNameValid */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSupportReqIsNameValid \ - * spec:/rtems/support/req/is-name-valid + * @defgroup RtemsSupportReqIsNameValid spec:/rtems/support/req/is-name-valid * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-support.c b/testsuites/validation/tc-support.c index fc13488d79..3e886c6027 100644 --- a/testsuites/validation/tc-support.c +++ b/testsuites/validation/tc-support.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSupportValSupport + * @ingroup RtemsSupportValSupport */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSupportValSupport \ - * spec:/rtems/support/val/support + * @defgroup RtemsSupportValSupport spec:/rtems/support/val/support * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests some @ref RTEMSAPIClassicSupport directives. * diff --git a/testsuites/validation/tc-sys-lock.c b/testsuites/validation/tc-sys-lock.c index 85b290ab9b..56939a3dba 100644 --- a/testsuites/validation/tc-sys-lock.c +++ b/testsuites/validation/tc-sys-lock.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseNewlibValSysLock + * @ingroup NewlibValSysLock */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -65,9 +65,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseNewlibValSysLock spec:/newlib/val/sys-lock + * @defgroup NewlibValSysLock spec:/newlib/val/sys-lock * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests the <sys/lock.h> mutex directives. * diff --git a/testsuites/validation/tc-task-construct.c b/testsuites/validation/tc-task-construct.c index 2b0c75daa1..5a7ca4f497 100644 --- a/testsuites/validation/tc-task-construct.c +++ b/testsuites/validation/tc-task-construct.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqConstruct + * @ingroup RtemsTaskReqConstruct */ /* - * Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020, 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -64,10 +64,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqConstruct spec:/rtems/task/req/construct + * @defgroup RtemsTaskReqConstruct spec:/rtems/task/req/construct * - * @ingroup RTEMSTestSuiteTestsuitesValidation1 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu1 + * @ingroup TestsuitesValidation1 + * @ingroup TestsuitesValidationOneCpu1 * * @{ */ @@ -291,7 +291,7 @@ typedef struct { * @brief If this member is true, then the zombie thread is ready to get * killed. */ - volatile bool zombie_ready;; + volatile bool zombie_ready; /** * @brief This member contains the actual modes of the constructed task. diff --git a/testsuites/validation/tc-task-create-errors.c b/testsuites/validation/tc-task-create-errors.c index 590fe47cb7..2378e55020 100644 --- a/testsuites/validation/tc-task-create-errors.c +++ b/testsuites/validation/tc-task-create-errors.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqCreateErrors + * @ingroup RtemsTaskReqCreateErrors */ /* - * Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020, 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,11 +62,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqCreateErrors \ - * spec:/rtems/task/req/create-errors + * @defgroup RtemsTaskReqCreateErrors spec:/rtems/task/req/create-errors * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ diff --git a/testsuites/validation/tc-task-delete.c b/testsuites/validation/tc-task-delete.c index a12a060852..d917062d0d 100644 --- a/testsuites/validation/tc-task-delete.c +++ b/testsuites/validation/tc-task-delete.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqDelete + * @ingroup RtemsTaskReqDelete */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,7 +57,6 @@ #include <setjmp.h> #include <rtems/bspIo.h> #include <rtems/test-scheduler.h> -#include <rtems/score/io.h> #include <rtems/score/statesimpl.h> #include <rtems/score/threaddispatch.h> #include <rtems/score/threadimpl.h> @@ -67,9 +66,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqDelete spec:/rtems/task/req/delete + * @defgroup RtemsTaskReqDelete spec:/rtems/task/req/delete * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -94,8 +93,8 @@ typedef enum { } RtemsTaskReqDelete_Pre_ThreadDispatch; typedef enum { - RtemsTaskReqDelete_Pre_CallerPriority_Higher, - RtemsTaskReqDelete_Pre_CallerPriority_LowerEqual, + RtemsTaskReqDelete_Pre_CallerPriority_Vital, + RtemsTaskReqDelete_Pre_CallerPriority_Dispensable, RtemsTaskReqDelete_Pre_CallerPriority_NA } RtemsTaskReqDelete_Pre_CallerPriority; @@ -163,10 +162,10 @@ typedef enum { } RtemsTaskReqDelete_Post_Zombie; typedef enum { - RtemsTaskReqDelete_Post_RealPriority_Raised, - RtemsTaskReqDelete_Post_RealPriority_Nop, - RtemsTaskReqDelete_Post_RealPriority_NA -} RtemsTaskReqDelete_Post_RealPriority; + RtemsTaskReqDelete_Post_TaskPriority_Raise, + RtemsTaskReqDelete_Post_TaskPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_NA +} RtemsTaskReqDelete_Post_TaskPriority; typedef enum { RtemsTaskReqDelete_Post_RestartExtensions_Nop, @@ -238,7 +237,7 @@ typedef struct { uint64_t Post_Status : 3; uint64_t Post_FatalError : 2; uint64_t Post_Zombie : 2; - uint64_t Post_RealPriority : 2; + uint64_t Post_TaskPriority : 2; uint64_t Post_RestartExtensions : 1; uint64_t Post_TerminateExtensions : 2; uint64_t Post_Dormant : 2; @@ -262,7 +261,7 @@ typedef struct { /** * @brief This member provides a jump context to resume a thread dispatch. */ - jmp_buf thread_dispatch_context;; + jmp_buf thread_dispatch_context; /** * @brief This member contains the identifier of the runner scheduler. @@ -310,13 +309,13 @@ typedef struct { * @brief This member contains the worker timer info at the end of the * rtems_task_delete() call. */ - TaskTimerInfo worker_timer_info;; + TaskTimerInfo worker_timer_info; /** * @brief This member contains the worker thread queue at the end of the * rtems_task_delete() call. */ - const Thread_queue_Queue *worker_wait_queue;; + const Thread_queue_Queue *worker_wait_queue; /** * @brief This member contains the worker thread life state at the end of the @@ -358,13 +357,13 @@ typedef struct { /** * @brief This member contains extension calls. */ - ExtensionCalls calls;; + ExtensionCalls calls; /** * @brief This member contains extension calls after the rtems_task_delete() * call. */ - ExtensionCalls calls_after_restart;; + ExtensionCalls calls_after_restart; /** * @brief This member contains the delete counter. @@ -431,10 +430,10 @@ typedef struct { bool timer_active; /** - * @brief If this member is true, then the deleter shall have a higher - * current priority than the real priority of the worker. + * @brief If this member is true, then the deleter shall have a vital + * priority for the worker. */ - bool deleter_has_higher_priority; + bool vital_deleter_priority; /** * @brief If this member is true, then thread dispatching is disabled by the @@ -516,8 +515,8 @@ static const char * const RtemsTaskReqDelete_PreDesc_ThreadDispatch[] = { }; static const char * const RtemsTaskReqDelete_PreDesc_CallerPriority[] = { - "Higher", - "LowerEqual", + "Vital", + "Dispensable", "NA" }; @@ -594,7 +593,7 @@ static void CaptureWorkerState( Context *ctx ) ctx->worker_state = ctx->worker_tcb->current_state; ctx->worker_life_state = ctx->worker_tcb->Life.state; ctx->worker_priority = - SCHEDULER_PRIORITY_UNMAP( ctx->worker_tcb->Real_priority.priority ); + SCHEDULER_PRIORITY_UNMAP( _Thread_Get_priority( ctx->worker_tcb ) ); CopyExtensionCalls( &ctx->calls, &ctx->calls_after_restart ); GetTaskTimerInfoByThread( ctx->worker_tcb, &ctx->worker_timer_info ); } @@ -833,7 +832,7 @@ static void SecondDeleter( rtems_task_argument arg ) ctx = (Context *) arg; if ( ctx != NULL ) { - if ( !ctx->deleter_has_higher_priority ) { + if ( !ctx->vital_deleter_priority ) { SetPriority( ctx->runner_id, PRIO_LOW ); SetSelfPriorityNoYield( PRIO_NORMAL ); } @@ -1038,23 +1037,21 @@ static void RtemsTaskReqDelete_Pre_CallerPriority_Prepare( ) { switch ( state ) { - case RtemsTaskReqDelete_Pre_CallerPriority_Higher: { + case RtemsTaskReqDelete_Pre_CallerPriority_Vital: { /* - * While the current priority of the task calling rtems_task_delete() is - * higher than the real priority of the task specified by the ``id`` - * parameter. + * While at least one priority of the calling task is higher than the + * highest priority of the task specified by the ``id`` parameter. */ - ctx->deleter_has_higher_priority = true; + ctx->vital_deleter_priority = true; break; } - case RtemsTaskReqDelete_Pre_CallerPriority_LowerEqual: { + case RtemsTaskReqDelete_Pre_CallerPriority_Dispensable: { /* - * While the current priority of the task calling rtems_task_delete() is - * lower than or equal to the real priority of the task specified by the - * ``id`` parameter. + * While all priorities of the calling task are lower than or equal to + * the highest priority of the task specified by the ``id`` parameter. */ - ctx->deleter_has_higher_priority = false; + ctx->vital_deleter_priority = false; break; } @@ -1369,32 +1366,32 @@ static void RtemsTaskReqDelete_Post_Zombie_Check( } } -static void RtemsTaskReqDelete_Post_RealPriority_Check( +static void RtemsTaskReqDelete_Post_TaskPriority_Check( RtemsTaskReqDelete_Context *ctx, - RtemsTaskReqDelete_Post_RealPriority state + RtemsTaskReqDelete_Post_TaskPriority state ) { switch ( state ) { - case RtemsTaskReqDelete_Post_RealPriority_Raised: { + case RtemsTaskReqDelete_Post_TaskPriority_Raise: { /* - * The real priority of the task specified by the ``id`` parameter shall - * be raised to the current priority of the caller of - * rtems_task_delete(). + * Each priority of the calling task which is higher than the highest + * priority of the task specified by the ``id`` parameter shall be made + * the highest priority of the task. */ T_eq_u32( ctx->worker_priority, PRIO_ULTRA_HIGH ); break; } - case RtemsTaskReqDelete_Post_RealPriority_Nop: { + case RtemsTaskReqDelete_Post_TaskPriority_Nop: { /* - * The real priority of the task specified by the ``id`` parameter shall - * not be changed by the rtems_task_delete() call. + * The priorities of the task specified by the ``id`` parameter shall not + * be changed by the rtems_task_delete() call. */ T_eq_u32( ctx->worker_priority, PRIO_NORMAL ); break; } - case RtemsTaskReqDelete_Post_RealPriority_NA: + case RtemsTaskReqDelete_Post_TaskPriority_NA: break; } } @@ -1786,7 +1783,7 @@ static const RtemsTaskReqDelete_Entry RtemsTaskReqDelete_Entries[] = { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NA, RtemsTaskReqDelete_Post_FatalError_NA, RtemsTaskReqDelete_Post_Zombie_NA, - RtemsTaskReqDelete_Post_RealPriority_NA, + RtemsTaskReqDelete_Post_TaskPriority_NA, RtemsTaskReqDelete_Post_RestartExtensions_NA, RtemsTaskReqDelete_Post_TerminateExtensions_NA, RtemsTaskReqDelete_Post_Dormant_NA, RtemsTaskReqDelete_Post_Suspended_NA, @@ -1796,7 +1793,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_NA }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, RtemsTaskReqDelete_Post_Status_InvId, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_NA, - RtemsTaskReqDelete_Post_RealPriority_NA, + RtemsTaskReqDelete_Post_TaskPriority_NA, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_NA, RtemsTaskReqDelete_Post_Suspended_NA, @@ -1806,7 +1803,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_NA }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NA, RtemsTaskReqDelete_Post_FatalError_NA, RtemsTaskReqDelete_Post_Zombie_NA, - RtemsTaskReqDelete_Post_RealPriority_NA, + RtemsTaskReqDelete_Post_TaskPriority_NA, RtemsTaskReqDelete_Post_RestartExtensions_NA, RtemsTaskReqDelete_Post_TerminateExtensions_NA, RtemsTaskReqDelete_Post_Dormant_NA, RtemsTaskReqDelete_Post_Suspended_NA, @@ -1816,7 +1813,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_NA }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NA, RtemsTaskReqDelete_Post_FatalError_NA, RtemsTaskReqDelete_Post_Zombie_NA, - RtemsTaskReqDelete_Post_RealPriority_NA, + RtemsTaskReqDelete_Post_TaskPriority_NA, RtemsTaskReqDelete_Post_RestartExtensions_NA, RtemsTaskReqDelete_Post_TerminateExtensions_NA, RtemsTaskReqDelete_Post_Dormant_NA, RtemsTaskReqDelete_Post_Suspended_NA, @@ -1826,7 +1823,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_NA }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NA, RtemsTaskReqDelete_Post_FatalError_NA, RtemsTaskReqDelete_Post_Zombie_NA, - RtemsTaskReqDelete_Post_RealPriority_NA, + RtemsTaskReqDelete_Post_TaskPriority_NA, RtemsTaskReqDelete_Post_RestartExtensions_NA, RtemsTaskReqDelete_Post_TerminateExtensions_NA, RtemsTaskReqDelete_Post_Dormant_NA, RtemsTaskReqDelete_Post_Suspended_NA, @@ -1834,31 +1831,9 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Terminating_NA, RtemsTaskReqDelete_Post_Protected_NA, RtemsTaskReqDelete_Post_State_NA, RtemsTaskReqDelete_Post_Timer_NA }, - { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, - RtemsTaskReqDelete_Post_Status_NoReturn, - RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_Yes, - RtemsTaskReqDelete_Post_RealPriority_Nop, - RtemsTaskReqDelete_Post_RestartExtensions_Nop, - RtemsTaskReqDelete_Post_TerminateExtensions_Nop, - RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_Yes, - RtemsTaskReqDelete_Post_Restarting_No, - RtemsTaskReqDelete_Post_Terminating_Yes, - RtemsTaskReqDelete_Post_Protected_No, RtemsTaskReqDelete_Post_State_Ready, - RtemsTaskReqDelete_Post_Timer_Inactive }, - { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, - RtemsTaskReqDelete_Post_Status_NoReturn, - RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_Yes, - RtemsTaskReqDelete_Post_RealPriority_Nop, - RtemsTaskReqDelete_Post_RestartExtensions_Nop, - RtemsTaskReqDelete_Post_TerminateExtensions_Nop, - RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_No, - RtemsTaskReqDelete_Post_Restarting_No, - RtemsTaskReqDelete_Post_Terminating_Yes, - RtemsTaskReqDelete_Post_Protected_No, RtemsTaskReqDelete_Post_State_Ready, - RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_Yes, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -1868,7 +1843,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_Yes, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_No, @@ -1879,7 +1854,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -1890,7 +1865,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_Yes, RtemsTaskReqDelete_Post_Suspended_No, @@ -1901,7 +1876,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -1912,7 +1887,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -1923,7 +1898,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -1934,7 +1909,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -1944,7 +1919,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -1954,7 +1929,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -1964,7 +1939,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -1974,7 +1949,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -1985,7 +1960,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_Yes, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Yes, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -1996,7 +1971,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_Yes, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Yes, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2007,7 +1982,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2018,7 +1993,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2029,7 +2004,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2040,7 +2015,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2051,7 +2026,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2062,7 +2037,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2073,7 +2048,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2084,7 +2059,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2095,7 +2070,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2106,7 +2081,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2117,7 +2092,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2128,7 +2103,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2139,7 +2114,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2151,7 +2126,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2163,7 +2138,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2174,7 +2149,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2186,7 +2161,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2197,7 +2172,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2209,7 +2184,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2221,7 +2196,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2232,7 +2207,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2244,7 +2219,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2255,7 +2230,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2267,7 +2242,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2279,7 +2254,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2290,7 +2265,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2302,7 +2277,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2313,7 +2288,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2325,7 +2300,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2337,7 +2312,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2348,7 +2323,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2360,7 +2335,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_NoReturn, RtemsTaskReqDelete_Post_FatalError_Yes, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2370,7 +2345,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_State_Blocked, RtemsTaskReqDelete_Post_Timer_Active }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2381,7 +2356,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2392,7 +2367,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Active }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2402,7 +2377,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2413,7 +2388,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2423,7 +2398,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_State_Blocked, RtemsTaskReqDelete_Post_Timer_Active }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2434,7 +2409,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2445,7 +2420,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Active }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2455,7 +2430,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2466,7 +2441,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Raised, + RtemsTaskReqDelete_Post_TaskPriority_Raise, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2476,7 +2451,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_State_Blocked, RtemsTaskReqDelete_Post_Timer_Active }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2487,7 +2462,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2498,7 +2473,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Active }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2508,7 +2483,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2519,7 +2494,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2529,7 +2504,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_State_Blocked, RtemsTaskReqDelete_Post_Timer_Active }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2540,7 +2515,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2551,7 +2526,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Active }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2561,7 +2536,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2572,7 +2547,7 @@ RtemsTaskReqDelete_Entries[] = { RtemsTaskReqDelete_Post_Timer_Inactive }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_Ok, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -2583,7 +2558,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2595,7 +2570,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2607,7 +2582,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2618,7 +2593,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2630,7 +2605,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2641,7 +2616,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2653,7 +2628,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2665,7 +2640,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2676,7 +2651,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2688,7 +2663,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2699,7 +2674,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2711,7 +2686,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2723,7 +2698,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2734,7 +2709,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2746,7 +2721,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2757,7 +2732,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2769,7 +2744,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2781,7 +2756,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2792,7 +2767,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2804,7 +2779,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2815,7 +2790,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2827,7 +2802,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2839,7 +2814,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2850,7 +2825,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2862,7 +2837,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2873,7 +2848,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2885,7 +2860,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2897,7 +2872,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2908,7 +2883,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2920,7 +2895,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2931,7 +2906,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2943,7 +2918,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2955,7 +2930,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2966,7 +2941,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2978,7 +2953,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -2989,7 +2964,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3001,7 +2976,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3013,7 +2988,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3024,7 +2999,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3036,7 +3011,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3047,7 +3022,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3059,7 +3034,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3071,7 +3046,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3082,7 +3057,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3094,7 +3069,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3105,7 +3080,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3117,7 +3092,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3129,7 +3104,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3140,7 +3115,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3152,7 +3127,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3163,7 +3138,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3175,7 +3150,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3187,7 +3162,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3198,7 +3173,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3210,7 +3185,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3221,7 +3196,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3233,7 +3208,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3245,7 +3220,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3256,7 +3231,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3268,7 +3243,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3279,7 +3254,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3291,7 +3266,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3303,7 +3278,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3314,7 +3289,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3326,7 +3301,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3337,7 +3312,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3349,7 +3324,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3361,7 +3336,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3372,7 +3347,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3384,7 +3359,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3395,7 +3370,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3407,7 +3382,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3419,7 +3394,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3430,7 +3405,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3442,7 +3417,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3453,7 +3428,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3465,7 +3440,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3477,7 +3452,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3488,7 +3463,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3500,7 +3475,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3511,7 +3486,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3523,7 +3498,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3535,7 +3510,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3546,7 +3521,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3558,7 +3533,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3569,7 +3544,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3581,7 +3556,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3593,7 +3568,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3604,7 +3579,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3616,7 +3591,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3627,7 +3602,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3639,7 +3614,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3651,7 +3626,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3662,7 +3637,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3674,7 +3649,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3685,7 +3660,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3697,7 +3672,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3709,7 +3684,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3720,7 +3695,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3732,7 +3707,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3743,7 +3718,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3755,7 +3730,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3767,7 +3742,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3778,7 +3753,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3790,7 +3765,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3801,7 +3776,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3813,7 +3788,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3825,7 +3800,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3836,7 +3811,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3848,7 +3823,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3859,7 +3834,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3871,7 +3846,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3883,7 +3858,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3894,7 +3869,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3906,7 +3881,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3917,7 +3892,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3929,7 +3904,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3941,7 +3916,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3952,7 +3927,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3964,7 +3939,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_Yes, @@ -3975,7 +3950,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3987,7 +3962,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -3999,7 +3974,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4010,7 +3985,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4022,7 +3997,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4033,7 +4008,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4045,7 +4020,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4057,7 +4032,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4068,7 +4043,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4080,7 +4055,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4091,7 +4066,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4103,7 +4078,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4115,7 +4090,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4126,7 +4101,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4138,7 +4113,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4149,7 +4124,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4161,7 +4136,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4173,7 +4148,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4184,7 +4159,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4196,7 +4171,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4207,7 +4182,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4219,7 +4194,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4231,7 +4206,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4242,7 +4217,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4254,7 +4229,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4265,7 +4240,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4277,7 +4252,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4289,7 +4264,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4300,7 +4275,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4312,7 +4287,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4323,7 +4298,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4335,7 +4310,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4347,7 +4322,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4358,7 +4333,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4370,7 +4345,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4381,7 +4356,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4393,7 +4368,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4405,7 +4380,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4416,7 +4391,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4428,7 +4403,7 @@ RtemsTaskReqDelete_Entries[] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqDelete_Post_Status_CalledFromISR, RtemsTaskReqDelete_Post_FatalError_Nop, RtemsTaskReqDelete_Post_Zombie_No, - RtemsTaskReqDelete_Post_RealPriority_Nop, + RtemsTaskReqDelete_Post_TaskPriority_Nop, RtemsTaskReqDelete_Post_RestartExtensions_Nop, RtemsTaskReqDelete_Post_TerminateExtensions_Nop, RtemsTaskReqDelete_Post_Dormant_No, RtemsTaskReqDelete_Post_Suspended_No, @@ -4440,52 +4415,52 @@ RtemsTaskReqDelete_Entries[] = { static const uint8_t RtemsTaskReqDelete_Map[] = { + 3, 3, 19, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 21, 4, 3, 3, 3, 3, 22, 4, 3, 3, 3, 3, 21, 4, 3, 3, 3, 3, 22, 4, 3, 3, 3, 3, 23, 4, 3, 3, 3, 3, 24, 4, 3, 3, 3, 3, 23, 4, 3, 3, 3, 3, 24, 4, 3, 3, 3, 3, 25, 4, 3, 3, 3, 3, 26, 4, 3, 3, 3, 3, 25, 4, 3, 3, 3, 3, 26, 4, 3, 3, - 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, 3, 3, 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 21, 4, 3, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 19, 4, 3, 3, 3, + 3, 20, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 21, 4, 3, 3, 3, 3, 22, 4, 3, 3, 3, 3, 21, 4, 3, 3, 3, 3, 22, 4, 3, 3, 3, 3, 23, 4, 3, 3, 3, 3, 24, 4, 3, 3, 3, 3, 23, 4, 3, 3, 3, 3, 24, 4, 3, 3, 3, 3, 25, 4, 3, 3, 3, - 3, 26, 4, 3, 3, 3, 3, 25, 4, 3, 3, 3, 3, 26, 4, 3, 3, 3, 3, 27, 4, 3, 3, 3, - 3, 28, 4, 3, 3, 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 26, 4, 3, 3, 3, 3, 25, 4, 3, 3, 3, 3, 26, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 29, - 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 31, 4, 3, 3, 3, 3, 32, 4, 3, 3, 3, 3, 31, - 4, 3, 3, 3, 3, 32, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 19, - 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 20, - 4, 3, 3, 3, 3, 20, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, 3, 3, 3, 3, 27, + 4, 3, 3, 3, 3, 28, 4, 3, 3, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 29, + 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 17, + 4, 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 18, 4, 3, 3, 3, 3, 18, 4, 3, 3, 3, 3, 18, + 4, 3, 3, 3, 3, 18, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4, - 3, 3, 3, 3, 31, 4, 3, 3, 3, 3, 32, 4, 3, 3, 3, 3, 31, 4, 3, 3, 3, 3, 32, 4, - 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 19, 4, 3, 3, 3, 3, 19, 4, - 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 20, 4, 3, 3, 3, 3, 20, 4, + 2, 2, 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, 3, 3, 3, 3, 27, 4, 3, 3, 3, 3, 28, 4, + 3, 3, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4, 3, 3, 3, 3, 29, 4, 3, 3, 3, 3, 30, 4, + 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 17, 4, 3, 3, 3, 3, 17, 4, + 3, 3, 3, 3, 18, 4, 3, 3, 3, 3, 18, 4, 3, 3, 3, 3, 18, 4, 3, 3, 3, 3, 18, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 73, 74, 75, 4, - 76, 77, 78, 79, 80, 4, 81, 82, 83, 84, 85, 4, 86, 87, 88, 89, 90, 4, 91, 92, - 93, 94, 95, 4, 96, 97, 98, 99, 100, 4, 101, 102, 103, 104, 105, 4, 106, 107, - 108, 109, 110, 4, 111, 112, 113, 114, 115, 4, 116, 117, 118, 119, 120, 4, - 121, 122, 123, 124, 125, 4, 126, 127, 128, 129, 130, 4, 131, 132, 133, 134, - 135, 4, 136, 137, 138, 139, 140, 4, 141, 142, 143, 144, 145, 4, 146, 147, - 148, 149, 150, 4, 151, 152, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 71, 72, 73, 4, + 74, 75, 76, 77, 78, 4, 79, 80, 81, 82, 83, 4, 84, 85, 86, 87, 88, 4, 89, 90, + 91, 92, 93, 4, 94, 95, 96, 97, 98, 4, 99, 100, 101, 102, 103, 4, 104, 105, + 106, 107, 108, 4, 109, 110, 111, 112, 113, 4, 114, 115, 116, 117, 118, 4, + 119, 120, 121, 122, 123, 4, 124, 125, 126, 127, 128, 4, 129, 130, 131, 132, + 133, 4, 134, 135, 136, 137, 138, 4, 139, 140, 141, 142, 143, 4, 144, 145, + 146, 147, 148, 4, 149, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 73, 74, 75, 4, 76, 77, 78, 79, 80, 4, 81, 82, 83, 84, 85, 4, 86, 87, - 88, 89, 90, 4, 91, 92, 93, 94, 95, 4, 96, 97, 98, 99, 100, 4, 101, 102, 103, - 104, 105, 4, 106, 107, 108, 109, 110, 4, 111, 112, 113, 114, 115, 4, 116, - 117, 118, 119, 120, 4, 121, 122, 123, 124, 125, 4, 126, 127, 128, 129, 130, - 4, 131, 132, 133, 134, 135, 4, 136, 137, 138, 139, 140, 4, 141, 142, 143, - 144, 145, 4, 146, 147, 148, 149, 150, 4, 151, 152, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 71, 72, 73, 4, 74, 75, 76, 77, 78, 4, 79, 80, 81, 82, 83, 4, 84, 85, + 86, 87, 88, 4, 89, 90, 91, 92, 93, 4, 94, 95, 96, 97, 98, 4, 99, 100, 101, + 102, 103, 4, 104, 105, 106, 107, 108, 4, 109, 110, 111, 112, 113, 4, 114, + 115, 116, 117, 118, 4, 119, 120, 121, 122, 123, 4, 124, 125, 126, 127, 128, + 4, 129, 130, 131, 132, 133, 4, 134, 135, 136, 137, 138, 4, 139, 140, 141, + 142, 143, 4, 144, 145, 146, 147, 148, 4, 149, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -4504,61 +4479,60 @@ RtemsTaskReqDelete_Map[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 33, 34, 35, 4, 36, 37, 11, 11, 11, 4, 11, 11, 33, 34, 35, 4, 36, 37, - 11, 11, 11, 4, 11, 11, 38, 39, 40, 4, 41, 42, 12, 12, 12, 4, 12, 12, 38, 39, - 40, 4, 41, 42, 12, 12, 12, 4, 12, 12, 33, 34, 35, 4, 36, 37, 11, 11, 11, 4, - 11, 11, 33, 34, 35, 4, 36, 37, 11, 11, 11, 4, 11, 11, 38, 39, 40, 4, 41, 42, - 12, 12, 12, 4, 12, 12, 38, 39, 40, 4, 41, 42, 12, 12, 12, 4, 12, 12, 5, 5, 5, + 0, 0, 0, 31, 32, 33, 4, 34, 35, 9, 9, 9, 4, 9, 9, 31, 32, 33, 4, 34, 35, 9, + 9, 9, 4, 9, 9, 36, 37, 38, 4, 39, 40, 10, 10, 10, 4, 10, 10, 36, 37, 38, 4, + 39, 40, 10, 10, 10, 4, 10, 10, 31, 32, 33, 4, 34, 35, 9, 9, 9, 4, 9, 9, 31, + 32, 33, 4, 34, 35, 9, 9, 9, 4, 9, 9, 36, 37, 38, 4, 39, 40, 10, 10, 10, 4, + 10, 10, 36, 37, 38, 4, 39, 40, 10, 10, 10, 4, 10, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 43, 44, 45, 4, 46, 47, 13, 13, - 13, 4, 13, 13, 43, 44, 45, 4, 46, 47, 13, 13, 13, 4, 13, 13, 48, 49, 50, 4, - 51, 52, 14, 14, 14, 4, 14, 14, 48, 49, 50, 4, 51, 52, 14, 14, 14, 4, 14, 14, - 43, 44, 45, 4, 46, 47, 13, 13, 13, 4, 13, 13, 43, 44, 45, 4, 46, 47, 13, 13, - 13, 4, 13, 13, 48, 49, 50, 4, 51, 52, 14, 14, 14, 4, 14, 14, 48, 49, 50, 4, - 51, 52, 14, 14, 14, 4, 14, 14, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 41, 42, 43, 4, 44, 45, 11, 11, 11, 4, 11, 11, + 41, 42, 43, 4, 44, 45, 11, 11, 11, 4, 11, 11, 46, 47, 48, 4, 49, 50, 12, 12, + 12, 4, 12, 12, 46, 47, 48, 4, 49, 50, 12, 12, 12, 4, 12, 12, 41, 42, 43, 4, + 44, 45, 11, 11, 11, 4, 11, 11, 41, 42, 43, 4, 44, 45, 11, 11, 11, 4, 11, 11, + 46, 47, 48, 4, 49, 50, 12, 12, 12, 4, 12, 12, 46, 47, 48, 4, 49, 50, 12, 12, + 12, 4, 12, 12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 51, 52, + 53, 4, 54, 55, 13, 13, 13, 4, 13, 13, 51, 52, 53, 4, 54, 55, 13, 13, 13, 4, + 13, 13, 56, 57, 58, 4, 59, 60, 14, 14, 14, 4, 14, 14, 56, 57, 58, 4, 59, 60, + 14, 14, 14, 4, 14, 14, 51, 52, 53, 4, 54, 55, 13, 13, 13, 4, 13, 13, 51, 52, + 53, 4, 54, 55, 13, 13, 13, 4, 13, 13, 56, 57, 58, 4, 59, 60, 14, 14, 14, 4, + 14, 14, 56, 57, 58, 4, 59, 60, 14, 14, 14, 4, 14, 14, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 53, 54, 55, 4, 56, 57, 15, 15, 15, 4, 15, 15, 53, 54, 55, 4, 56, 57, - 15, 15, 15, 4, 15, 15, 58, 59, 60, 4, 61, 62, 16, 16, 16, 4, 16, 16, 58, 59, - 60, 4, 61, 62, 16, 16, 16, 4, 16, 16, 53, 54, 55, 4, 56, 57, 15, 15, 15, 4, - 15, 15, 53, 54, 55, 4, 56, 57, 15, 15, 15, 4, 15, 15, 58, 59, 60, 4, 61, 62, - 16, 16, 16, 4, 16, 16, 58, 59, 60, 4, 61, 62, 16, 16, 16, 4, 16, 16, 7, 7, 7, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 61, 62, 63, 4, 64, 65, 15, 15, 15, 4, 15, 15, + 61, 62, 63, 4, 64, 65, 15, 15, 15, 4, 15, 15, 66, 67, 68, 4, 69, 70, 16, 16, + 16, 4, 16, 16, 66, 67, 68, 4, 69, 70, 16, 16, 16, 4, 16, 16, 61, 62, 63, 4, + 64, 65, 15, 15, 15, 4, 15, 15, 61, 62, 63, 4, 64, 65, 15, 15, 15, 4, 15, 15, + 66, 67, 68, 4, 69, 70, 16, 16, 16, 4, 16, 16, 66, 67, 68, 4, 69, 70, 16, 16, + 16, 4, 16, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 151, + 152, 153, 4, 154, 155, 156, 157, 158, 4, 159, 160, 161, 162, 163, 4, 164, + 165, 166, 167, 168, 4, 169, 170, 171, 172, 173, 4, 174, 175, 176, 177, 178, + 4, 179, 180, 181, 182, 183, 4, 184, 185, 186, 187, 188, 4, 189, 190, 191, + 192, 193, 4, 194, 195, 196, 197, 198, 4, 199, 200, 201, 202, 203, 4, 204, + 205, 206, 207, 208, 4, 209, 210, 211, 212, 213, 4, 214, 215, 216, 217, 218, + 4, 219, 220, 221, 222, 223, 4, 224, 225, 226, 227, 228, 4, 229, 230, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 63, 64, 65, 4, 66, 67, 17, 17, - 17, 4, 17, 17, 63, 64, 65, 4, 66, 67, 17, 17, 17, 4, 17, 17, 68, 69, 70, 4, - 71, 72, 18, 18, 18, 4, 18, 18, 68, 69, 70, 4, 71, 72, 18, 18, 18, 4, 18, 18, - 63, 64, 65, 4, 66, 67, 17, 17, 17, 4, 17, 17, 63, 64, 65, 4, 66, 67, 17, 17, - 17, 4, 17, 17, 68, 69, 70, 4, 71, 72, 18, 18, 18, 4, 18, 18, 68, 69, 70, 4, - 71, 72, 18, 18, 18, 4, 18, 18, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 151, 152, 153, 4, 154, 155, 156, + 157, 158, 4, 159, 160, 161, 162, 163, 4, 164, 165, 166, 167, 168, 4, 169, + 170, 171, 172, 173, 4, 174, 175, 176, 177, 178, 4, 179, 180, 181, 182, 183, + 4, 184, 185, 186, 187, 188, 4, 189, 190, 191, 192, 193, 4, 194, 195, 196, + 197, 198, 4, 199, 200, 201, 202, 203, 4, 204, 205, 206, 207, 208, 4, 209, + 210, 211, 212, 213, 4, 214, 215, 216, 217, 218, 4, 219, 220, 221, 222, 223, + 4, 224, 225, 226, 227, 228, 4, 229, 230, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 153, 154, 155, 4, 156, 157, 158, 159, 160, 4, 161, 162, 163, 164, - 165, 4, 166, 167, 168, 169, 170, 4, 171, 172, 173, 174, 175, 4, 176, 177, - 178, 179, 180, 4, 181, 182, 183, 184, 185, 4, 186, 187, 188, 189, 190, 4, - 191, 192, 193, 194, 195, 4, 196, 197, 198, 199, 200, 4, 201, 202, 203, 204, - 205, 4, 206, 207, 208, 209, 210, 4, 211, 212, 213, 214, 215, 4, 216, 217, - 218, 219, 220, 4, 221, 222, 223, 224, 225, 4, 226, 227, 228, 229, 230, 4, - 231, 232, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 153, 154, 155, 4, 156, 157, 158, 159, - 160, 4, 161, 162, 163, 164, 165, 4, 166, 167, 168, 169, 170, 4, 171, 172, - 173, 174, 175, 4, 176, 177, 178, 179, 180, 4, 181, 182, 183, 184, 185, 4, - 186, 187, 188, 189, 190, 4, 191, 192, 193, 194, 195, 4, 196, 197, 198, 199, - 200, 4, 201, 202, 203, 204, 205, 4, 206, 207, 208, 209, 210, 4, 211, 212, - 213, 214, 215, 4, 216, 217, 218, 219, 220, 4, 221, 222, 223, 224, 225, 4, - 226, 227, 228, 229, 230, 4, 231, 232, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4573,7 +4547,6 @@ RtemsTaskReqDelete_Map[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -4617,7 +4590,8 @@ RtemsTaskReqDelete_Map[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4632,7 +4606,7 @@ RtemsTaskReqDelete_Map[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 0, 0 }; static size_t RtemsTaskReqDelete_Scope( void *arg, char *buf, size_t n ) @@ -4746,9 +4720,9 @@ static void RtemsTaskReqDelete_TestVariant( RtemsTaskReqDelete_Context *ctx ) ctx->Map.entry.Post_FatalError ); RtemsTaskReqDelete_Post_Zombie_Check( ctx, ctx->Map.entry.Post_Zombie ); - RtemsTaskReqDelete_Post_RealPriority_Check( + RtemsTaskReqDelete_Post_TaskPriority_Check( ctx, - ctx->Map.entry.Post_RealPriority + ctx->Map.entry.Post_TaskPriority ); RtemsTaskReqDelete_Post_RestartExtensions_Check( ctx, @@ -4806,7 +4780,7 @@ T_TEST_CASE_FIXTURE( RtemsTaskReqDelete, &RtemsTaskReqDelete_Fixture ) ++ctx->Map.pci[ 2 ] ) { for ( - ctx->Map.pci[ 3 ] = RtemsTaskReqDelete_Pre_CallerPriority_Higher; + ctx->Map.pci[ 3 ] = RtemsTaskReqDelete_Pre_CallerPriority_Vital; ctx->Map.pci[ 3 ] < RtemsTaskReqDelete_Pre_CallerPriority_NA; ++ctx->Map.pci[ 3 ] ) { diff --git a/testsuites/validation/tc-task-exit.c b/testsuites/validation/tc-task-exit.c index 6ceaa06bd8..24373f6c47 100644 --- a/testsuites/validation/tc-task-exit.c +++ b/testsuites/validation/tc-task-exit.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqExit + * @ingroup RtemsTaskReqExit */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,6 +55,7 @@ #include <rtems.h> #include <rtems/test-scheduler.h> #include <rtems/score/apimutex.h> +#include <rtems/score/statesimpl.h> #include <rtems/score/threaddispatch.h> #include "tx-support.h" @@ -62,9 +63,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqExit spec:/rtems/task/req/exit + * @defgroup RtemsTaskReqExit spec:/rtems/task/req/exit * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -116,10 +117,10 @@ typedef enum { } RtemsTaskReqExit_Post_TerminateExtensions; typedef enum { - RtemsTaskReqExit_Post_Block_Yes, - RtemsTaskReqExit_Post_Block_Nop, - RtemsTaskReqExit_Post_Block_NA -} RtemsTaskReqExit_Post_Block; + RtemsTaskReqExit_Post_Zombie_Yes, + RtemsTaskReqExit_Post_Zombie_No, + RtemsTaskReqExit_Post_Zombie_NA +} RtemsTaskReqExit_Post_Zombie; typedef enum { RtemsTaskReqExit_Post_ID_Valid, @@ -143,7 +144,7 @@ typedef struct { uint32_t Post_DeleteExtensions : 1; uint32_t Post_RestartExtensions : 1; uint32_t Post_TerminateExtensions : 2; - uint32_t Post_Block : 2; + uint32_t Post_Zombie : 2; uint32_t Post_ID : 2; uint32_t Post_Delete : 2; } RtemsTaskReqExit_Entry; @@ -644,9 +645,9 @@ static void RtemsTaskReqExit_Post_TerminateExtensions_Check( } } -static void RtemsTaskReqExit_Post_Block_Check( - RtemsTaskReqExit_Context *ctx, - RtemsTaskReqExit_Post_Block state +static void RtemsTaskReqExit_Post_Zombie_Check( + RtemsTaskReqExit_Context *ctx, + RtemsTaskReqExit_Post_Zombie state ) { const T_scheduler_event *event; @@ -655,20 +656,28 @@ static void RtemsTaskReqExit_Post_Block_Check( index = 0; switch ( state ) { - case RtemsTaskReqExit_Post_Block_Yes: { + case RtemsTaskReqExit_Post_Zombie_Yes: { /* - * The calling task shall be blocked exactly once by the - * rtems_task_exit() call. + * The thread state of the calling task shall be set to the zombie state + * by the rtems_task_exit() call. */ event = T_scheduler_next_any( &ctx->scheduler_log.header, &index ); T_eq_int( event->operation, T_SCHEDULER_BLOCK ); T_eq_u32( event->thread->Object.id, ctx->worker_id ); + T_eq_u32( event->thread->current_state, STATES_ZOMBIE ); if ( ctx->terminating ) { + /* The thread waiting for the worker exit was unblocked */ event = T_scheduler_next_any( &ctx->scheduler_log.header, &index ); T_eq_int( event->operation, T_SCHEDULER_UNBLOCK ); T_eq_u32( event->thread->Object.id, ctx->deleter_id ); + /* Inherited priority was removed */ + event = T_scheduler_next_any( &ctx->scheduler_log.header, &index ); + T_eq_int( event->operation, T_SCHEDULER_UPDATE_PRIORITY ); + T_eq_u32( event->thread->Object.id, ctx->worker_id ); + + /* The deleter task suspended itself */ event = T_scheduler_next_any( &ctx->scheduler_log.header, &index ); T_eq_int( event->operation, T_SCHEDULER_BLOCK ); T_eq_u32( event->thread->Object.id, ctx->deleter_id ); @@ -679,15 +688,16 @@ static void RtemsTaskReqExit_Post_Block_Check( break; } - case RtemsTaskReqExit_Post_Block_Nop: { + case RtemsTaskReqExit_Post_Zombie_No: { /* - * No task shall be blocked by the rtems_task_exit() call. + * The thread state of the calling task shall be not modified by the + * rtems_task_exit() call. */ T_eq_sz( ctx->scheduler_log.header.recorded, 0 ); break; } - case RtemsTaskReqExit_Post_Block_NA: + case RtemsTaskReqExit_Post_Zombie_NA: break; } } @@ -859,13 +869,13 @@ RtemsTaskReqExit_Entries[] = { RtemsTaskReqExit_Post_DeleteExtensions_Nop, RtemsTaskReqExit_Post_RestartExtensions_Nop, RtemsTaskReqExit_Post_TerminateExtensions_Yes, - RtemsTaskReqExit_Post_Block_Yes, RtemsTaskReqExit_Post_ID_Invalid, + RtemsTaskReqExit_Post_Zombie_Yes, RtemsTaskReqExit_Post_ID_Invalid, RtemsTaskReqExit_Post_Delete_NextAllocate }, { 0, 0, 0, 0, 0, RtemsTaskReqExit_Post_FatalError_Yes, RtemsTaskReqExit_Post_DeleteExtensions_Nop, RtemsTaskReqExit_Post_RestartExtensions_Nop, RtemsTaskReqExit_Post_TerminateExtensions_Nop, - RtemsTaskReqExit_Post_Block_Nop, RtemsTaskReqExit_Post_ID_Valid, + RtemsTaskReqExit_Post_Zombie_No, RtemsTaskReqExit_Post_ID_Valid, RtemsTaskReqExit_Post_Delete_Nop } }; @@ -931,7 +941,7 @@ static void RtemsTaskReqExit_TestVariant( RtemsTaskReqExit_Context *ctx ) ctx, ctx->Map.entry.Post_TerminateExtensions ); - RtemsTaskReqExit_Post_Block_Check( ctx, ctx->Map.entry.Post_Block ); + RtemsTaskReqExit_Post_Zombie_Check( ctx, ctx->Map.entry.Post_Zombie ); RtemsTaskReqExit_Post_ID_Check( ctx, ctx->Map.entry.Post_ID ); RtemsTaskReqExit_Post_Delete_Check( ctx, ctx->Map.entry.Post_Delete ); } diff --git a/testsuites/validation/tc-task-get-affinity.c b/testsuites/validation/tc-task-get-affinity.c index 8200f9f840..54244560df 100644 --- a/testsuites/validation/tc-task-get-affinity.c +++ b/testsuites/validation/tc-task-get-affinity.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqGetAffinity + * @ingroup RtemsTaskReqGetAffinity */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqGetAffinity \ - * spec:/rtems/task/req/get-affinity + * @defgroup RtemsTaskReqGetAffinity spec:/rtems/task/req/get-affinity * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-task-get-priority.c b/testsuites/validation/tc-task-get-priority.c index 83843f4175..83170e8353 100644 --- a/testsuites/validation/tc-task-get-priority.c +++ b/testsuites/validation/tc-task-get-priority.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqGetPriority + * @ingroup RtemsTaskReqGetPriority */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqGetPriority \ - * spec:/rtems/task/req/get-priority + * @defgroup RtemsTaskReqGetPriority spec:/rtems/task/req/get-priority * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-task-get-scheduler.c b/testsuites/validation/tc-task-get-scheduler.c index 1cd907cd09..41e0063b53 100644 --- a/testsuites/validation/tc-task-get-scheduler.c +++ b/testsuites/validation/tc-task-get-scheduler.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqGetScheduler + * @ingroup RtemsTaskReqGetScheduler */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqGetScheduler \ - * spec:/rtems/task/req/get-scheduler + * @defgroup RtemsTaskReqGetScheduler spec:/rtems/task/req/get-scheduler * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-task-ident.c b/testsuites/validation/tc-task-ident.c index c4247f22cf..214e6e99c5 100644 --- a/testsuites/validation/tc-task-ident.c +++ b/testsuites/validation/tc-task-ident.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqIdent + * @ingroup RtemsTaskReqIdent */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,9 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqIdent spec:/rtems/task/req/ident + * @defgroup RtemsTaskReqIdent spec:/rtems/task/req/ident * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -167,7 +167,7 @@ static void RtemsTaskReqIdent_Pre_Name_Prepare( /* * While the ``name`` is not equal to RTEMS_WHO_AM_I or ``id`` parameter * is equal to NULL, the behaviour of rtems_task_ident() shall be - * specified by /rtems/req/ident. + * specified by spec:/rtems/req/ident. */ ctx->id = NULL; /* Preparation performed by RtemsReqIdent_Run() */ diff --git a/testsuites/validation/tc-task-is-suspended.c b/testsuites/validation/tc-task-is-suspended.c index 0897d28f56..d61c14f560 100644 --- a/testsuites/validation/tc-task-is-suspended.c +++ b/testsuites/validation/tc-task-is-suspended.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqIsSuspended + * @ingroup RtemsTaskReqIsSuspended */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqIsSuspended \ - * spec:/rtems/task/req/is-suspended + * @defgroup RtemsTaskReqIsSuspended spec:/rtems/task/req/is-suspended * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-task-mode.c b/testsuites/validation/tc-task-mode.c index f5e225a206..ac045e4176 100644 --- a/testsuites/validation/tc-task-mode.c +++ b/testsuites/validation/tc-task-mode.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqMode + * @ingroup RtemsTaskReqMode */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqMode spec:/rtems/task/req/mode + * @defgroup RtemsTaskReqMode spec:/rtems/task/req/mode * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ diff --git a/testsuites/validation/tc-task-performance.c b/testsuites/validation/tc-task-performance.c index 2900ac6ca0..3fac8f4f4e 100644 --- a/testsuites/validation/tc-task-performance.c +++ b/testsuites/validation/tc-task-performance.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskValPerf + * @ingroup RtemsTaskValPerf */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskValPerf spec:/rtems/task/val/perf + * @defgroup RtemsTaskValPerf spec:/rtems/task/val/perf * - * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0 + * @ingroup TestsuitesPerformanceNoClock0 * * @brief This test case provides a context to run @ref RTEMSAPIClassicTasks * performance tests. @@ -113,13 +113,13 @@ typedef struct { static RtemsTaskValPerf_Context RtemsTaskValPerf_Instance; -typedef RtemsTaskValPerf_Context Context; +#define EVENT_RESTART RTEMS_EVENT_0 + +#define EVENT_SET_END RTEMS_EVENT_1 -enum { - EVENT_RESTART = RTEMS_EVENT_0, - EVENT_SET_END = RTEMS_EVENT_1, - EVENT_BUSY = RTEMS_EVENT_2 -} Event; +#define EVENT_BUSY RTEMS_EVENT_2 + +typedef RtemsTaskValPerf_Context Context; RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char task_storage[ RTEMS_TASK_STORAGE_SIZE( @@ -226,6 +226,12 @@ static T_fixture RtemsTaskValPerf_Fixture = { }; /** + * @defgroup RtemsTaskReqPerfConstruct spec:/rtems/task/req/perf-construct + * + * @{ + */ + +/** * @brief Construct a worker task. */ static void RtemsTaskReqPerfConstruct_Body( RtemsTaskValPerf_Context *ctx ) @@ -274,6 +280,14 @@ static bool RtemsTaskReqPerfConstruct_Teardown_Wrap( return RtemsTaskReqPerfConstruct_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + +/** + * @defgroup RtemsTaskReqPerfRestart spec:/rtems/task/req/perf-restart + * + * @{ + */ + /** * @brief Create and start a worker task. */ @@ -340,6 +354,15 @@ static void RtemsTaskReqPerfRestart_Cleanup( RtemsTaskValPerf_Context *ctx ) DeleteTask( ctx->worker_id ); } +/** @} */ + +/** + * @defgroup RtemsTaskReqPerfRestartPreempt \ + * spec:/rtems/task/req/perf-restart-preempt + * + * @{ + */ + /** * @brief Create and start a worker task. */ @@ -422,6 +445,14 @@ static void RtemsTaskReqPerfRestartPreempt_Cleanup( DeleteTask( ctx->worker_id ); } +/** @} */ + +/** + * @defgroup RtemsTaskReqPerfRestartSelf spec:/rtems/task/req/perf-restart-self + * + * @{ + */ + /** * @brief Create and start a worker task. */ @@ -492,8 +523,17 @@ static void RtemsTaskReqPerfRestartSelf_Cleanup( DeleteTask( ctx->worker_id ); } +/** @} */ + #if defined(RTEMS_SMP) /** + * @defgroup RtemsTaskReqPerfSetSchedulerMove \ + * spec:/rtems/task/req/perf-set-scheduler-move + * + * @{ + */ + +/** * @brief Set the runner affinity. */ static void RtemsTaskReqPerfSetSchedulerMove_Prepare( @@ -572,9 +612,18 @@ static void RtemsTaskReqPerfSetSchedulerMove_Cleanup( { SetSelfAffinityOne( 0 ); } + +/** @} */ #endif /** + * @defgroup RtemsTaskReqPerfSetSchedulerNop \ + * spec:/rtems/task/req/perf-set-scheduler-nop + * + * @{ + */ + +/** * @brief Set the scheduler of the runner. */ static void RtemsTaskReqPerfSetSchedulerNop_Body( @@ -632,8 +681,17 @@ static bool RtemsTaskReqPerfSetSchedulerNop_Teardown_Wrap( ); } +/** @} */ + #if defined(RTEMS_SMP) /** + * @defgroup RtemsTaskReqPerfSetSchedulerOther \ + * spec:/rtems/task/req/perf-set-scheduler-other + * + * @{ + */ + +/** * @brief Create and start a worker task for scheduler B. */ static void RtemsTaskReqPerfSetSchedulerOther_Prepare( @@ -715,10 +773,19 @@ static void RtemsTaskReqPerfSetSchedulerOther_Cleanup( { DeleteTask( ctx->worker_id ); } + +/** @} */ #endif #if defined(RTEMS_SMP) /** + * @defgroup RtemsTaskReqPerfSetSchedulerPreempt \ + * spec:/rtems/task/req/perf-set-scheduler-preempt + * + * @{ + */ + +/** * @brief Create and start two worker tasks for scheduler B. Make the second * worker busy. */ @@ -834,9 +901,17 @@ static void RtemsTaskReqPerfSetSchedulerPreempt_Cleanup( DeleteTask( ctx->worker_2_id ); DeleteTask( ctx->worker_id ); } + +/** @} */ #endif /** + * @defgroup RtemsTaskReqPerfStart spec:/rtems/task/req/perf-start + * + * @{ + */ + +/** * @brief Create a worker task. */ static void RtemsTaskReqPerfStart_Setup( RtemsTaskValPerf_Context *ctx ) @@ -904,6 +979,15 @@ static bool RtemsTaskReqPerfStart_Teardown_Wrap( return RtemsTaskReqPerfStart_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + +/** + * @defgroup RtemsTaskReqPerfStartPreempt \ + * spec:/rtems/task/req/perf-start-preempt + * + * @{ + */ + /** * @brief Create a worker task. */ @@ -975,6 +1059,8 @@ static bool RtemsTaskReqPerfStartPreempt_Teardown_Wrap( return RtemsTaskReqPerfStartPreempt_Teardown( ctx, delta, tic, toc, retry ); } +/** @} */ + /** * @fn void T_case_body_RtemsTaskValPerf( void ) */ diff --git a/testsuites/validation/tc-task-restart.c b/testsuites/validation/tc-task-restart.c index 1c7528e961..c915f01a49 100644 --- a/testsuites/validation/tc-task-restart.c +++ b/testsuites/validation/tc-task-restart.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqRestart + * @ingroup RtemsTaskReqRestart */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -65,9 +65,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqRestart spec:/rtems/task/req/restart + * @defgroup RtemsTaskReqRestart spec:/rtems/task/req/restart * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -251,7 +251,7 @@ typedef struct { /** * @brief This member provides a jump context to resume a thread dispatch. */ - jmp_buf thread_dispatch_context;; + jmp_buf thread_dispatch_context; /** * @brief This member provides the context to wrap thread queue operations. @@ -319,13 +319,13 @@ typedef struct { /** * @brief This member contains extension calls. */ - ExtensionCalls calls;; + ExtensionCalls calls; /** * @brief This member contains extension calls after the rtems_task_restart() * call. */ - ExtensionCalls calls_after_restart;; + ExtensionCalls calls_after_restart; /** * @brief This member contains the actual argument passed to the entry point. @@ -1424,7 +1424,7 @@ static void RtemsTaskReqRestart_Post_State_Check( T_eq_ptr( event->thread, ctx->worker_tcb ); } - if ( !ctx->real_priority_is_initial ) { + if ( !ctx->real_priority_is_initial && !ctx->terminating ) { event = T_scheduler_next_any( &ctx->scheduler_log.header, &index ); T_eq_int( event->operation, T_SCHEDULER_UPDATE_PRIORITY ); T_eq_ptr( event->thread, ctx->worker_tcb ); @@ -1464,7 +1464,7 @@ static void RtemsTaskReqRestart_Post_State_Check( } } - if ( !ctx->real_priority_is_initial ) { + if ( !ctx->real_priority_is_initial && !ctx->terminating ) { event = T_scheduler_next_any( &ctx->scheduler_log.header, &index ); T_eq_int( event->operation, T_SCHEDULER_UPDATE_PRIORITY ); T_eq_ptr( event->thread, ctx->worker_tcb ); @@ -1504,7 +1504,7 @@ static void RtemsTaskReqRestart_Post_State_Check( } } - if ( !ctx->real_priority_is_initial ) { + if ( !ctx->real_priority_is_initial && !ctx->terminating ) { event = T_scheduler_next_any( &ctx->scheduler_log.header, &index ); T_eq_int( event->operation, T_SCHEDULER_UPDATE_PRIORITY ); T_eq_ptr( event->thread, ctx->worker_tcb ); diff --git a/testsuites/validation/tc-task-resume.c b/testsuites/validation/tc-task-resume.c index f7c63234d6..d440b52bd5 100644 --- a/testsuites/validation/tc-task-resume.c +++ b/testsuites/validation/tc-task-resume.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqResume + * @ingroup RtemsTaskReqResume */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqResume spec:/rtems/task/req/resume + * @defgroup RtemsTaskReqResume spec:/rtems/task/req/resume * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-task-set-affinity.c b/testsuites/validation/tc-task-set-affinity.c index ffa40fcf58..9502d009e1 100644 --- a/testsuites/validation/tc-task-set-affinity.c +++ b/testsuites/validation/tc-task-set-affinity.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqSetAffinity + * @ingroup RtemsTaskReqSetAffinity */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,11 +60,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqSetAffinity \ - * spec:/rtems/task/req/set-affinity + * @defgroup RtemsTaskReqSetAffinity spec:/rtems/task/req/set-affinity * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ @@ -132,7 +131,7 @@ typedef struct { /** * @brief This member provides the scheduler operation records. */ - T_scheduler_log_2 scheduler_log;; + T_scheduler_log_2 scheduler_log; /** * @brief This member provides the object referenced by the ``cpuset`` diff --git a/testsuites/validation/tc-task-set-priority.c b/testsuites/validation/tc-task-set-priority.c index cbe4bfda2b..4094aaedfb 100644 --- a/testsuites/validation/tc-task-set-priority.c +++ b/testsuites/validation/tc-task-set-priority.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqSetPriority + * @ingroup RtemsTaskReqSetPriority */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,11 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqSetPriority \ - * spec:/rtems/task/req/set-priority + * @defgroup RtemsTaskReqSetPriority spec:/rtems/task/req/set-priority * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ diff --git a/testsuites/validation/tc-task-set-scheduler.c b/testsuites/validation/tc-task-set-scheduler.c index 018aa2c338..174aa55736 100644 --- a/testsuites/validation/tc-task-set-scheduler.c +++ b/testsuites/validation/tc-task-set-scheduler.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqSetScheduler + * @ingroup RtemsTaskReqSetScheduler */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqSetScheduler \ - * spec:/rtems/task/req/set-scheduler + * @defgroup RtemsTaskReqSetScheduler spec:/rtems/task/req/set-scheduler * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -267,7 +266,7 @@ typedef struct { /** * @brief This member contains the identifier of the new scheduler. */ - rtems_id new_scheduler;; + rtems_id new_scheduler; /** * @brief This member contains the new priorities of the task. diff --git a/testsuites/validation/tc-task-smp.c b/testsuites/validation/tc-task-smp.c index 51165153f5..9bfdc4fd73 100644 --- a/testsuites/validation/tc-task-smp.c +++ b/testsuites/validation/tc-task-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskValSmp + * @ingroup RtemsTaskValSmp */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskValSmp spec:/rtems/task/val/smp + * @defgroup RtemsTaskValSmp spec:/rtems/task/val/smp * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 * * @brief This test case collection provides SMP-specific validation test cases * for requirements of the @ref RTEMSAPIClassicTasks. diff --git a/testsuites/validation/tc-task-start.c b/testsuites/validation/tc-task-start.c index ffb0012439..235d9f0827 100644 --- a/testsuites/validation/tc-task-start.c +++ b/testsuites/validation/tc-task-start.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqStart + * @ingroup RtemsTaskReqStart */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqStart spec:/rtems/task/req/start + * @defgroup RtemsTaskReqStart spec:/rtems/task/req/start * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-task-storage-size.c b/testsuites/validation/tc-task-storage-size.c index 6ad8b72cbe..29ac53c237 100644 --- a/testsuites/validation/tc-task-storage-size.c +++ b/testsuites/validation/tc-task-storage-size.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqStorageSize + * @ingroup RtemsTaskReqStorageSize */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqStorageSize \ - * spec:/rtems/task/req/storage-size + * @defgroup RtemsTaskReqStorageSize spec:/rtems/task/req/storage-size * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-task-suspend.c b/testsuites/validation/tc-task-suspend.c index b56b420120..123e223fb9 100644 --- a/testsuites/validation/tc-task-suspend.c +++ b/testsuites/validation/tc-task-suspend.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqSuspend + * @ingroup RtemsTaskReqSuspend */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqSuspend spec:/rtems/task/req/suspend + * @defgroup RtemsTaskReqSuspend spec:/rtems/task/req/suspend * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-task-wake-after.c b/testsuites/validation/tc-task-wake-after.c index 8966a14648..ba12d21c85 100644 --- a/testsuites/validation/tc-task-wake-after.c +++ b/testsuites/validation/tc-task-wake-after.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqWakeAfter + * @ingroup RtemsTaskReqWakeAfter */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,10 +62,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqWakeAfter spec:/rtems/task/req/wake-after + * @defgroup RtemsTaskReqWakeAfter spec:/rtems/task/req/wake-after * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationOneCpu0 * * @{ */ @@ -122,29 +122,29 @@ typedef struct { /** * @brief This member provides the scheduler operation records. */ - T_scheduler_log_4 scheduler_log;; + T_scheduler_log_4 scheduler_log; /** * @brief This member contains the clock tick value before the * rtems_task_wake_after() call. */ - uint64_t now;; + uint64_t now; /** * @brief This member contains the worker task identifier. */ - rtems_id worker_id;; + rtems_id worker_id; /** * @brief If this member is true, then the worker shall be suspended during * the rtems_task_wake_after() call. */ - bool suspended;; + bool suspended; /** * @brief This member contains the timer information of the worker task. */ - TaskTimerInfo timer_info;; + TaskTimerInfo timer_info; /** * @brief This member contains the return value of the diff --git a/testsuites/validation/tc-task-wake-when.c b/testsuites/validation/tc-task-wake-when.c index 223fbfd55f..bb31fded26 100644 --- a/testsuites/validation/tc-task-wake-when.c +++ b/testsuites/validation/tc-task-wake-when.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskReqWakeWhen + * @ingroup RtemsTaskReqWakeWhen */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,9 +62,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskReqWakeWhen spec:/rtems/task/req/wake-when + * @defgroup RtemsTaskReqWakeWhen spec:/rtems/task/req/wake-when * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -131,23 +131,23 @@ typedef struct { /** * @brief This member provides the scheduler operation records. */ - T_scheduler_log_4 scheduler_log;; + T_scheduler_log_4 scheduler_log; /** * @brief This member contains the CLOCK_REALTIME value before the * rtems_task_wake_when() call. */ - struct timespec now;; + struct timespec now; /** * @brief This member contains the worker task identifier. */ - rtems_id worker_id;; + rtems_id worker_id; /** * @brief This member contains the timer information of the worker task. */ - TaskTimerInfo timer_info;; + TaskTimerInfo timer_info; /** * @brief This member provides the object referenced by the ``time_buffer`` diff --git a/testsuites/validation/tc-task.c b/testsuites/validation/tc-task.c index 11d37e7017..5ab96445ed 100644 --- a/testsuites/validation/tc-task.c +++ b/testsuites/validation/tc-task.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTaskValTask + * @ingroup RtemsTaskValTask */ /* - * Copyright (C) 2021, 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,9 +62,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTaskValTask spec:/rtems/task/val/task + * @defgroup RtemsTaskValTask spec:/rtems/task/val/task * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief This test case collection provides validation test cases for * requirements of the @ref RTEMSAPIClassicTasks. @@ -303,7 +303,7 @@ static void RtemsTaskValTask_Action_8( void ) static void RtemsTaskValTask_Action_9( void ) { rtems_status_code sc; - rtems_status_code id; + rtems_id id; /* * Create a task. Check that the home scheduler of the created task is diff --git a/testsuites/validation/tc-terminate.c b/testsuites/validation/tc-terminate.c index a3f55fcc6c..b533092c19 100644 --- a/testsuites/validation/tc-terminate.c +++ b/testsuites/validation/tc-terminate.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreInterrValTerminate + * @ingroup ScoreInterrValTerminate */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -56,8 +56,8 @@ #include <setjmp.h> #include <string.h> #include <rtems/bspIo.h> +#include <rtems/test-info.h> #include <rtems/score/atomic.h> -#include <rtems/score/io.h> #include <rtems/score/percpu.h> #include <rtems/score/sysstate.h> @@ -66,10 +66,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreInterrValTerminate \ - * spec:/score/interr/val/terminate + * @defgroup ScoreInterrValTerminate spec:/score/interr/val/terminate * - * @ingroup RTEMSTestSuiteTestsuitesTerminate + * @ingroup TestsuitesTerminate * * @brief Tests system termination procedure. * @@ -149,8 +148,8 @@ void __wrap__CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr code ) halt_code = code; longjmp( before_terminate, 1 ); } else { -#if defined(RTEMS_COVERAGE) - _IO_Dump_gcov_info( rtems_put_char, NULL ); +#if defined(RTEMS_GCOV_COVERAGE) + rtems_test_gcov_dump_info(); #endif __real__CPU_Fatal_halt( source, code ); } diff --git a/testsuites/validation/tc-thread-idle-body-no-return.c b/testsuites/validation/tc-thread-idle-body-no-return.c new file mode 100644 index 0000000000..19c86dad99 --- /dev/null +++ b/testsuites/validation/tc-thread-idle-body-no-return.c @@ -0,0 +1,205 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup ScoreThreadValIdleBodyNoReturn + */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <bsp.h> + +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup ScoreThreadValIdleBodyNoReturn \ + * spec:/score/thread/val/idle-body-no-return + * + * @ingroup TestsuitesValidation0 + * + * @brief Tests thread idle body behaviour. + * + * This test case performs the following actions: + * + * - Create threads which execute an thread idle body. Check that the thread + * idle body does not return. If it would return, then an + * INTERNAL_ERROR_THREAD_EXITTED fatal error would occur. + * + * - Check that the CPU port thread idle body does not return. + * + * - Where the BSP provides an idle thread body, check that it does not + * return. + * + * - Clean up all used resources. + * + * @{ + */ + +/** + * @brief Test context for spec:/score/thread/val/idle-body-no-return test + * case. + */ +typedef struct { + /** + * @brief This member contains a counter. + */ + uint32_t counter; +} ScoreThreadValIdleBodyNoReturn_Context; + +static ScoreThreadValIdleBodyNoReturn_Context + ScoreThreadValIdleBodyNoReturn_Instance; + +typedef ScoreThreadValIdleBodyNoReturn_Context Context; + +static void CheckIdleBody( Context *ctx, rtems_task_entry entry ) +{ + rtems_id id; + rtems_interval interval; + rtems_status_code sc; + + ctx->counter = 0; + id = CreateTask( "WORK", PRIO_LOW ); + StartTask( id, entry, ctx ); + + /* + * With optimization disabled, coverage enabled, SMP enabled and a slow + * target, things may take some time. + */ + interval = 1; + while ( ctx->counter == 0 && interval <= 1024 ) { + + sc = rtems_task_wake_after( interval ); + T_rsc_success( sc ); + + interval *= 2; + } + + sc = rtems_task_wake_after( interval ); + T_rsc_success( sc ); + + T_eq_u32( ctx->counter, 1 ); + DeleteTask( id ); +} + +static void CPUThreadIdleBody( rtems_task_argument arg ) +{ + Context *ctx; + + ctx = (Context *) arg; + ++ctx->counter; + + (void) _CPU_Thread_Idle_body( 0 ); +} + +#if defined(BSP_IDLE_TASK_BODY) +static void BSPIdleTaskBody( rtems_task_argument arg ) +{ + Context *ctx; + + ctx = (Context *) arg; + ++ctx->counter; + + (void) BSP_IDLE_TASK_BODY( 0 ); +} +#endif + +static T_fixture ScoreThreadValIdleBodyNoReturn_Fixture = { + .setup = NULL, + .stop = NULL, + .teardown = NULL, + .scope = NULL, + .initial_context = &ScoreThreadValIdleBodyNoReturn_Instance +}; + +/** + * @brief Create threads which execute an thread idle body. Check that the + * thread idle body does not return. If it would return, then an + * INTERNAL_ERROR_THREAD_EXITTED fatal error would occur. + */ +static void ScoreThreadValIdleBodyNoReturn_Action_0( + ScoreThreadValIdleBodyNoReturn_Context *ctx +) +{ + SetSelfPriority( PRIO_NORMAL ); + + /* + * Check that the CPU port thread idle body does not return. + */ + CheckIdleBody( ctx, CPUThreadIdleBody ); + + /* + * Where the BSP provides an idle thread body, check that it does not return. + */ + #if defined(BSP_IDLE_TASK_BODY) + CheckIdleBody( ctx, BSPIdleTaskBody ); + #endif + + /* + * Clean up all used resources. + */ + RestoreRunnerPriority(); +} + +/** + * @fn void T_case_body_ScoreThreadValIdleBodyNoReturn( void ) + */ +T_TEST_CASE_FIXTURE( + ScoreThreadValIdleBodyNoReturn, + &ScoreThreadValIdleBodyNoReturn_Fixture +) +{ + ScoreThreadValIdleBodyNoReturn_Context *ctx; + + ctx = T_fixture_context(); + + ScoreThreadValIdleBodyNoReturn_Action_0( ctx ); +} + +/** @} */ diff --git a/testsuites/validation/tc-timecounter-get-smp.c b/testsuites/validation/tc-timecounter-get-smp.c index 520d532c7b..d8c9f598dd 100644 --- a/testsuites/validation/tc-timecounter-get-smp.c +++ b/testsuites/validation/tc-timecounter-get-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTimecounterValGetSmp + * @ingroup ScoreTimecounterValGetSmp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -63,10 +63,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTimecounterValGetSmp \ - * spec:/score/timecounter/val/get-smp + * @defgroup ScoreTimecounterValGetSmp spec:/score/timecounter/val/get-smp * - * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounterSmp0 + * @ingroup TestsuitesValidationTimecounterSmp0 * * @brief Tests directives to get a time value. * diff --git a/testsuites/validation/tc-timecounter-get.c b/testsuites/validation/tc-timecounter-get.c index 7ab746ab86..cd2464399e 100644 --- a/testsuites/validation/tc-timecounter-get.c +++ b/testsuites/validation/tc-timecounter-get.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTimecounterValGet + * @ingroup ScoreTimecounterValGet */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,10 +62,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTimecounterValGet \ - * spec:/score/timecounter/val/get + * @defgroup ScoreTimecounterValGet spec:/score/timecounter/val/get * - * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounter1 + * @ingroup TestsuitesValidationTimecounter1 * * @brief Tests directives to get a time value. * diff --git a/testsuites/validation/tc-timecounter-install.c b/testsuites/validation/tc-timecounter-install.c index 3189f37a23..14babc5b94 100644 --- a/testsuites/validation/tc-timecounter-install.c +++ b/testsuites/validation/tc-timecounter-install.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTimecounterValInstall + * @ingroup ScoreTimecounterValInstall */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,10 +62,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTimecounterValInstall \ - * spec:/score/timecounter/val/install + * @defgroup ScoreTimecounterValInstall spec:/score/timecounter/val/install * - * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounter0 + * @ingroup TestsuitesValidationTimecounter0 * * @brief Tests timecounter installation related functions and directives of * the Clock Manager. diff --git a/testsuites/validation/tc-timer-cancel.c b/testsuites/validation/tc-timer-cancel.c index 223848fdee..3030045e9c 100644 --- a/testsuites/validation/tc-timer-cancel.c +++ b/testsuites/validation/tc-timer-cancel.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerReqCancel + * @ingroup RtemsTimerReqCancel */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerReqCancel spec:/rtems/timer/req/cancel + * @defgroup RtemsTimerReqCancel spec:/rtems/timer/req/cancel * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-timer-create.c b/testsuites/validation/tc-timer-create.c index dea3a40175..416f5401d0 100644 --- a/testsuites/validation/tc-timer-create.c +++ b/testsuites/validation/tc-timer-create.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerReqCreate + * @ingroup RtemsTimerReqCreate */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerReqCreate spec:/rtems/timer/req/create + * @defgroup RtemsTimerReqCreate spec:/rtems/timer/req/create * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-timer-delete.c b/testsuites/validation/tc-timer-delete.c index 92032c80cf..84999c5ae7 100644 --- a/testsuites/validation/tc-timer-delete.c +++ b/testsuites/validation/tc-timer-delete.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerReqDelete + * @ingroup RtemsTimerReqDelete */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,9 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerReqDelete spec:/rtems/timer/req/delete + * @defgroup RtemsTimerReqDelete spec:/rtems/timer/req/delete * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-timer-fire-after.c b/testsuites/validation/tc-timer-fire-after.c index 980ecdde2d..27c27523cb 100644 --- a/testsuites/validation/tc-timer-fire-after.c +++ b/testsuites/validation/tc-timer-fire-after.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerReqFireAfter + * @ingroup RtemsTimerReqFireAfter */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerReqFireAfter \ - * spec:/rtems/timer/req/fire-after + * @defgroup RtemsTimerReqFireAfter spec:/rtems/timer/req/fire-after * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-timer-fire-when.c b/testsuites/validation/tc-timer-fire-when.c index 8d5584ebf0..92bd505a41 100644 --- a/testsuites/validation/tc-timer-fire-when.c +++ b/testsuites/validation/tc-timer-fire-when.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerReqFireWhen + * @ingroup RtemsTimerReqFireWhen */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerReqFireWhen spec:/rtems/timer/req/fire-when + * @defgroup RtemsTimerReqFireWhen spec:/rtems/timer/req/fire-when * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-timer-ident.c b/testsuites/validation/tc-timer-ident.c index bdee3d89d2..e39ec73b9a 100644 --- a/testsuites/validation/tc-timer-ident.c +++ b/testsuites/validation/tc-timer-ident.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerValIdent + * @ingroup RtemsTimerValIdent */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,16 +57,16 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerValIdent spec:/rtems/timer/val/ident + * @defgroup RtemsTimerValIdent spec:/rtems/timer/val/ident * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Test the rtems_timer_ident() directive. * * This test case performs the following actions: * * - Run the generic object identification tests for Classic API timer class - * objects defined by /rtems/req/ident-local. + * objects defined by spec:/rtems/req/ident-local. * * @{ */ @@ -83,7 +83,7 @@ static rtems_status_code ClassicTimerIdentAction( /** * @brief Run the generic object identification tests for Classic API timer - * class objects defined by /rtems/req/ident-local. + * class objects defined by spec:/rtems/req/ident-local. */ static void RtemsTimerValIdent_Action_0( void ) { diff --git a/testsuites/validation/tc-timer-initiate-server.c b/testsuites/validation/tc-timer-initiate-server.c index 89bb445a6f..7a21a3a10b 100644 --- a/testsuites/validation/tc-timer-initiate-server.c +++ b/testsuites/validation/tc-timer-initiate-server.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerReqInitiateServer + * @ingroup RtemsTimerReqInitiateServer */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerReqInitiateServer \ - * spec:/rtems/timer/req/initiate-server + * @defgroup RtemsTimerReqInitiateServer spec:/rtems/timer/req/initiate-server * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-timer-reset.c b/testsuites/validation/tc-timer-reset.c index 2b87717b43..709b9fe8a5 100644 --- a/testsuites/validation/tc-timer-reset.c +++ b/testsuites/validation/tc-timer-reset.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerReqReset + * @ingroup RtemsTimerReqReset */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerReqReset spec:/rtems/timer/req/reset + * @defgroup RtemsTimerReqReset spec:/rtems/timer/req/reset * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -225,7 +225,7 @@ typedef struct { * @brief This member contains a reference to the user data to be used in the * next call to the Timer Service Routine. */ - void **scheduled_user_data;; + void **scheduled_user_data; /** * @brief This member contains 1 if the Timer Service Routine "A" has been diff --git a/testsuites/validation/tc-timer-server-fire-after.c b/testsuites/validation/tc-timer-server-fire-after.c index 50e639e7c1..3ee91d8461 100644 --- a/testsuites/validation/tc-timer-server-fire-after.c +++ b/testsuites/validation/tc-timer-server-fire-after.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerReqServerFireAfter + * @ingroup RtemsTimerReqServerFireAfter */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerReqServerFireAfter \ + * @defgroup RtemsTimerReqServerFireAfter \ * spec:/rtems/timer/req/server-fire-after * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-timer-server-fire-when.c b/testsuites/validation/tc-timer-server-fire-when.c index a918405058..d9c5ba8221 100644 --- a/testsuites/validation/tc-timer-server-fire-when.c +++ b/testsuites/validation/tc-timer-server-fire-when.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerReqServerFireWhen + * @ingroup RtemsTimerReqServerFireWhen */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerReqServerFireWhen \ - * spec:/rtems/timer/req/server-fire-when + * @defgroup RtemsTimerReqServerFireWhen spec:/rtems/timer/req/server-fire-when * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-timer.c b/testsuites/validation/tc-timer.c index a7a25222bb..d33ad6b440 100644 --- a/testsuites/validation/tc-timer.c +++ b/testsuites/validation/tc-timer.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTimerValTimer + * @ingroup RtemsTimerValTimer */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTimerValTimer spec:/rtems/timer/val/timer + * @defgroup RtemsTimerValTimer spec:/rtems/timer/val/timer * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests general timer behaviour. * diff --git a/testsuites/validation/tc-type.c b/testsuites/validation/tc-type.c index a19048746b..14f9aa1743 100644 --- a/testsuites/validation/tc-type.c +++ b/testsuites/validation/tc-type.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsTypeValType + * @ingroup RtemsTypeValType */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021, 2023 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,9 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsTypeValType spec:/rtems/type/val/type + * @defgroup RtemsTypeValType spec:/rtems/type/val/type * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests some @ref RTEMSAPIClassicTypes interfaces. * @@ -71,6 +71,13 @@ * - Assert that RTEMS_ID_NONE cannot be associated with an object because it * has an object index outside the range of valid object indices. * + * - Validate the RTEMS_NO_TIMEOUT constant. + * + * - Assert that RTEMS_NO_TIMEOUT is a compile time constant which evaluates + * to a value of zero. + * + * - Check that RTEMS_NO_TIMEOUT evaluates to a value of zero. + * * @{ */ @@ -93,11 +100,31 @@ static void RtemsTypeValType_Action_0( void ) } /** + * @brief Validate the RTEMS_NO_TIMEOUT constant. + */ +static void RtemsTypeValType_Action_1( void ) +{ + /* Nothing to do */ + + /* + * Assert that RTEMS_NO_TIMEOUT is a compile time constant which evaluates to + * a value of zero. + */ + RTEMS_STATIC_ASSERT( RTEMS_NO_TIMEOUT == 0, NO_TIMEOUT ); + + /* + * Check that RTEMS_NO_TIMEOUT evaluates to a value of zero. + */ + T_eq_u32( RTEMS_NO_TIMEOUT, 0 ); +} + +/** * @fn void T_case_body_RtemsTypeValType( void ) */ T_TEST_CASE( RtemsTypeValType ) { RtemsTypeValType_Action_0(); + RtemsTypeValType_Action_1(); } /** @} */ diff --git a/testsuites/validation/tc-userext-create.c b/testsuites/validation/tc-userext-create.c index 0ffcd12972..a15ccf6c1a 100644 --- a/testsuites/validation/tc-userext-create.c +++ b/testsuites/validation/tc-userext-create.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsUserextReqCreate + * @ingroup RtemsUserextReqCreate */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsUserextReqCreate spec:/rtems/userext/req/create + * @defgroup RtemsUserextReqCreate spec:/rtems/userext/req/create * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -129,13 +129,13 @@ typedef struct { typedef struct { void *seized_objects; - rtems_extensions_table table_variable;; + rtems_extensions_table table_variable; rtems_id id_value; rtems_name name; - rtems_extensions_table *table;; + rtems_extensions_table *table; rtems_id *id; diff --git a/testsuites/validation/tc-userext-delete.c b/testsuites/validation/tc-userext-delete.c index b264b34792..9827d715bc 100644 --- a/testsuites/validation/tc-userext-delete.c +++ b/testsuites/validation/tc-userext-delete.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsUserextReqDelete + * @ingroup RtemsUserextReqDelete */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,9 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsUserextReqDelete spec:/rtems/userext/req/delete + * @defgroup RtemsUserextReqDelete spec:/rtems/userext/req/delete * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ diff --git a/testsuites/validation/tc-userext-ident.c b/testsuites/validation/tc-userext-ident.c index 2ece528953..24646b6a54 100644 --- a/testsuites/validation/tc-userext-ident.c +++ b/testsuites/validation/tc-userext-ident.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsUserextValIdent + * @ingroup RtemsUserextValIdent */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,16 +57,16 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsUserextValIdent spec:/rtems/userext/val/ident + * @defgroup RtemsUserextValIdent spec:/rtems/userext/val/ident * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Test the rtems_extension_ident() directive. * * This test case performs the following actions: * * - Run the generic object identification tests for Classic API user extension - * class objects defined by /rtems/req/ident-local. + * class objects defined by spec:/rtems/req/ident-local. * * @{ */ @@ -83,7 +83,7 @@ static rtems_status_code ClassicUserExtIdentAction( /** * @brief Run the generic object identification tests for Classic API user - * extension class objects defined by /rtems/req/ident-local. + * extension class objects defined by spec:/rtems/req/ident-local. */ static void RtemsUserextValIdent_Action_0( void ) { diff --git a/testsuites/validation/tc-userext.c b/testsuites/validation/tc-userext.c index 252946e026..192be30669 100644 --- a/testsuites/validation/tc-userext.c +++ b/testsuites/validation/tc-userext.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsUserextValUserext + * @ingroup RtemsUserextValUserext */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,10 +62,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsUserextValUserext \ - * spec:/rtems/userext/val/userext + * @defgroup RtemsUserextValUserext spec:/rtems/userext/val/userext * - * @ingroup RTEMSTestSuiteTestsuitesUserext + * @ingroup TestsuitesUserext * * @brief Tests the thread user extensions. * @@ -160,6 +159,18 @@ * - Check that the thread terminate extension of the extension set deleted * before its turn in the invocation was not invoked. * + * - Create five dynamic extensions. Let an idle thread return from its entry. + * Delete three dynamic extension during the thread exitted invocation. + * Clean up the used resources. + * + * - Check that the thread exitted extensions were invoked in the right + * order. + * + * - Check that the other extensions were not invoked. + * + * - Check that the thread exitted extension of the extension set deleted + * before its turn in the invocation was not invoked. + * * @{ */ @@ -294,7 +305,13 @@ static void Extension( if ( index == 6 && ( kind == THREAD_EXITTED || kind == THREAD_RESTART ) ) { StopTestCase(); - rtems_task_exit(); + + if ( GetExecuting()->is_idle ) { + SetSelfPriority( RTEMS_MAXIMUM_PRIORITY ); + _CPU_Thread_Idle_body( 0 ); + } else { + rtems_task_exit(); + } } if ( index == 0 && kind == THREAD_TERMINATE ) { @@ -517,6 +534,18 @@ static void TerminateWorker( rtems_task_argument arg ) rtems_task_exit(); } +void *IdleBody( uintptr_t arg ) +{ + rtems_event_set events; + + do { + events = PollAnyEvents(); + } while ( events == 0 ); + + (void) StartTestCase( THREAD_EXITTED ); + return (void *) arg; +} + static void RtemsUserextValUserext_Setup( void *ctx ) { SetSelfPriority( PRIO_NORMAL ); @@ -833,6 +862,45 @@ static void RtemsUserextValUserext_Action_6( void ) } /** + * @brief Create five dynamic extensions. Let an idle thread return from its + * entry. Delete three dynamic extension during the thread exitted + * invocation. Clean up the used resources. + */ +static void RtemsUserextValUserext_Action_7( void ) +{ + rtems_tcb *thread; + rtems_id id; + + /* ID of idle thread of processor 0 */ + id = 0x09010001; + thread = GetThread( id ); + SendEvents( id, RTEMS_EVENT_0 ); + SetPriority( id, PRIO_HIGH ); + + /* + * Check that the thread exitted extensions were invoked in the right order. + */ + CheckForward( THREAD_EXITTED, 1, 1, thread, NULL ); + + /* + * Check that the other extensions were not invoked. + */ + CheckForward( THREAD_BEGIN, 0, 0, NULL, NULL ); + CheckForward( THREAD_CREATE, 0, 0, NULL, NULL ); + CheckReverse( THREAD_DELETE, 0, 0, NULL, NULL ); + CheckForward( THREAD_RESTART, 0, 0, NULL, NULL ); + CheckForward( THREAD_START, 0, 0, NULL, NULL ); + CheckForward( THREAD_SWITCH, 0, 0, NULL, NULL ); + CheckReverse( THREAD_TERMINATE, 0, 0, NULL, NULL ); + + /* + * Check that the thread exitted extension of the extension set deleted + * before its turn in the invocation was not invoked. + */ + CheckDeletedNotInvoked( THREAD_EXITTED ); +} + +/** * @fn void T_case_body_RtemsUserextValUserext( void ) */ T_TEST_CASE_FIXTURE( RtemsUserextValUserext, &RtemsUserextValUserext_Fixture ) @@ -844,6 +912,7 @@ T_TEST_CASE_FIXTURE( RtemsUserextValUserext, &RtemsUserextValUserext_Fixture ) RtemsUserextValUserext_Action_4(); RtemsUserextValUserext_Action_5(); RtemsUserextValUserext_Action_6(); + RtemsUserextValUserext_Action_7(); } /** @} */ diff --git a/testsuites/validation/tc-userext.h b/testsuites/validation/tc-userext.h index dbe9e30b67..538180dfd4 100644 --- a/testsuites/validation/tc-userext.h +++ b/testsuites/validation/tc-userext.h @@ -3,13 +3,13 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreInterrValTerminate + * @ingroup ScoreInterrValTerminate * * @brief This header file provides functions used by corresponding test suite. */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/tr-event-constant.c b/testsuites/validation/tr-event-constant.c index 6895fcc821..a0327973de 100644 --- a/testsuites/validation/tr-event-constant.c +++ b/testsuites/validation/tr-event-constant.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsEventValEventConstant + * @ingroup RtemsEventValEventConstant */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsEventValEventConstant \ - * spec:/rtems/event/val/event-constant + * @defgroup RtemsEventValEventConstant spec:/rtems/event/val/event-constant * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests an event constant and number of the Event Manager using the * Classic and system event sets of the executing task. @@ -682,6 +681,11 @@ static void RtemsEventValEventConstant_Action_16( static T_fixture_node RtemsEventValEventConstant_Node; +static T_remark RtemsEventValEventConstant_Remark = { + .next = NULL, + .remark = "RtemsEventValEventConstant" +}; + void RtemsEventValEventConstant_Run( rtems_event_set event, int number ) { RtemsEventValEventConstant_Context *ctx; @@ -715,6 +719,7 @@ void RtemsEventValEventConstant_Run( rtems_event_set event, int number ) RtemsEventValEventConstant_Action_15( ctx ); RtemsEventValEventConstant_Action_16( ctx ); + T_add_remark( &RtemsEventValEventConstant_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-event-constant.h b/testsuites/validation/tr-event-constant.h index b6484874d5..9c57ca2d8a 100644 --- a/testsuites/validation/tr-event-constant.h +++ b/testsuites/validation/tr-event-constant.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsEventValEventConstant + * @ingroup RtemsEventValEventConstant */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseRtemsEventValEventConstant + * @addtogroup RtemsEventValEventConstant * * @{ */ diff --git a/testsuites/validation/tr-event-send-receive.c b/testsuites/validation/tr-event-send-receive.c index e7c48dae70..85d0040615 100644 --- a/testsuites/validation/tr-event-send-receive.c +++ b/testsuites/validation/tr-event-send-receive.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsEventReqSendReceive + * @ingroup RtemsEventReqSendReceive */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsEventReqSendReceive \ - * spec:/rtems/event/req/send-receive + * @defgroup RtemsEventReqSendReceive spec:/rtems/event/req/send-receive * - * @ingroup RTEMSTestSuiteTestsuitesValidation0 + * @ingroup TestsuitesValidation0 * * @{ */ @@ -1251,6 +1250,11 @@ static void RtemsEventReqSendReceive_TestVariant( static T_fixture_node RtemsEventReqSendReceive_Node; +static T_remark RtemsEventReqSendReceive_Remark = { + .next = NULL, + .remark = "RtemsEventReqSendReceive" +}; + void RtemsEventReqSendReceive_Run( rtems_status_code ( *send )( rtems_id, rtems_event_set ), rtems_status_code ( *receive )( rtems_event_set, rtems_option, rtems_interval, rtems_event_set * ), @@ -1310,6 +1314,7 @@ void RtemsEventReqSendReceive_Run( } } + T_add_remark( &RtemsEventReqSendReceive_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-event-send-receive.h b/testsuites/validation/tr-event-send-receive.h index b246a815ed..f6dee4ddca 100644 --- a/testsuites/validation/tr-event-send-receive.h +++ b/testsuites/validation/tr-event-send-receive.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsEventReqSendReceive + * @ingroup RtemsEventReqSendReceive */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,7 +59,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseRtemsEventReqSendReceive + * @addtogroup RtemsEventReqSendReceive * * @{ */ diff --git a/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.c b/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.c index f7cf1e1eb8..d02e2df8b6 100644 --- a/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.c +++ b/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatalBootProcessorNotAssignedToScheduler + * @ingroup ScoreSmpValFatalBootProcessorNotAssignedToScheduler */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSmpValFatalBootProcessorNotAssignedToScheduler \ + * @defgroup ScoreSmpValFatalBootProcessorNotAssignedToScheduler \ * spec:/score/smp/val/fatal-boot-processor-not-assigned-to-scheduler * - * @ingroup RTEMSTestSuiteTestsuitesFatalBootProcessorNotAssignedToScheduler + * @ingroup TestsuitesFatalBootProcessorNotAssignedToScheduler * * @brief Tests a fatal error. * diff --git a/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.h b/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.h index 3cf19f5322..77299a5b39 100644 --- a/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.h +++ b/testsuites/validation/tr-fatal-boot-processor-not-assigned-to-scheduler.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatalBootProcessorNotAssignedToScheduler + * @ingroup ScoreSmpValFatalBootProcessorNotAssignedToScheduler */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreSmpValFatalBootProcessorNotAssignedToScheduler + * @addtogroup ScoreSmpValFatalBootProcessorNotAssignedToScheduler * * @{ */ diff --git a/testsuites/validation/tr-fatal-idle-thread-create-failed.c b/testsuites/validation/tr-fatal-idle-thread-create-failed.c new file mode 100644 index 0000000000..60a400c43d --- /dev/null +++ b/testsuites/validation/tr-fatal-idle-thread-create-failed.c @@ -0,0 +1,158 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup ScoreThreadValFatalIdleThreadCreateFailed + */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> + +#include "tr-fatal-idle-thread-create-failed.h" + +#include <rtems/test.h> + +/** + * @defgroup ScoreThreadValFatalIdleThreadCreateFailed \ + * spec:/score/thread/val/fatal-idle-thread-create-failed + * + * @ingroup TestsuitesFatalIdleThreadCreateFailed + * + * @brief Tests a fatal error caused by a failing task create extension. + * + * This test case performs the following actions: + * + * - The test action is carried out by configuring a task create extension + * which always fails. + * + * - Check that the expected fatal source is present. + * + * - Check that the expected fatal code is present. + * + * @{ + */ + +/** + * @brief Test context for + * spec:/score/thread/val/fatal-idle-thread-create-failed test case. + */ +typedef struct { + /** + * @brief This member contains a copy of the corresponding + * ScoreThreadValFatalIdleThreadCreateFailed_Run() parameter. + */ + rtems_fatal_source source; + + /** + * @brief This member contains a copy of the corresponding + * ScoreThreadValFatalIdleThreadCreateFailed_Run() parameter. + */ + rtems_fatal_code code; +} ScoreThreadValFatalIdleThreadCreateFailed_Context; + +static ScoreThreadValFatalIdleThreadCreateFailed_Context + ScoreThreadValFatalIdleThreadCreateFailed_Instance; + +static T_fixture ScoreThreadValFatalIdleThreadCreateFailed_Fixture = { + .setup = NULL, + .stop = NULL, + .teardown = NULL, + .scope = NULL, + .initial_context = &ScoreThreadValFatalIdleThreadCreateFailed_Instance +}; + +/** + * @brief The test action is carried out by configuring a task create extension + * which always fails. + */ +static void ScoreThreadValFatalIdleThreadCreateFailed_Action_0( + ScoreThreadValFatalIdleThreadCreateFailed_Context *ctx +) +{ + /* Nothing to do */ + + /* + * Check that the expected fatal source is present. + */ + T_step_eq_int( 0, ctx->source, INTERNAL_ERROR_CORE ); + + /* + * Check that the expected fatal code is present. + */ + T_step_eq_ulong( + 1, + ctx->code, + INTERNAL_ERROR_IDLE_THREAD_CREATE_FAILED + ); +} + +void ScoreThreadValFatalIdleThreadCreateFailed_Run( + rtems_fatal_source source, + rtems_fatal_code code +) +{ + ScoreThreadValFatalIdleThreadCreateFailed_Context *ctx; + + ctx = &ScoreThreadValFatalIdleThreadCreateFailed_Instance; + ctx->source = source; + ctx->code = code; + + ctx = T_case_begin( + "ScoreThreadValFatalIdleThreadCreateFailed", + &ScoreThreadValFatalIdleThreadCreateFailed_Fixture + ); + + T_plan( 2 ); + + ScoreThreadValFatalIdleThreadCreateFailed_Action_0( ctx ); + + T_case_end(); +} + +/** @} */ diff --git a/testsuites/validation/tr-fatal-idle-thread-create-failed.h b/testsuites/validation/tr-fatal-idle-thread-create-failed.h new file mode 100644 index 0000000000..d521f3ed29 --- /dev/null +++ b/testsuites/validation/tr-fatal-idle-thread-create-failed.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup ScoreThreadValFatalIdleThreadCreateFailed + */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifndef _TR_FATAL_IDLE_THREAD_CREATE_FAILED_H +#define _TR_FATAL_IDLE_THREAD_CREATE_FAILED_H + +#include <rtems.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup ScoreThreadValFatalIdleThreadCreateFailed + * + * @{ + */ + +/** + * @brief Runs the parameterized test case. + * + * @param source is the fatal source. + * + * @param code is the fatal code. + */ +void ScoreThreadValFatalIdleThreadCreateFailed_Run( + rtems_fatal_source source, + rtems_fatal_code code +); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TR_FATAL_IDLE_THREAD_CREATE_FAILED_H */ diff --git a/testsuites/validation/tr-fatal-idle-thread-stack-too-small.c b/testsuites/validation/tr-fatal-idle-thread-stack-too-small.c new file mode 100644 index 0000000000..34a428c883 --- /dev/null +++ b/testsuites/validation/tr-fatal-idle-thread-stack-too-small.c @@ -0,0 +1,175 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup ScoreThreadValFatalIdleThreadStackTooSmall + */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> + +#include "tr-fatal-idle-thread-stack-too-small.h" + +#include <rtems/test.h> + +/** + * @defgroup ScoreThreadValFatalIdleThreadStackTooSmall \ + * spec:/score/thread/val/fatal-idle-thread-stack-too-small + * + * @ingroup TestsuitesFatalIdleThreadStackTooSmall + * + * @brief Tests a fatal error caused by a too small idle thread stack size. + * + * This test case performs the following actions: + * + * - The test action is carried out by configuring a thread-local storage + * demand which leads to a too small idle thread stack size. + * + * - Check that the expected fatal source is present. + * + * - Check that the expected fatal code is present. + * + * - Check the configured value of CONFIGURE_IDLE_TASK_STORAGE_SIZE. + * + * @{ + */ + +/** + * @brief Test context for + * spec:/score/thread/val/fatal-idle-thread-stack-too-small test case. + */ +typedef struct { + /** + * @brief This member contains a copy of the corresponding + * ScoreThreadValFatalIdleThreadStackTooSmall_Run() parameter. + */ + rtems_fatal_source source; + + /** + * @brief This member contains a copy of the corresponding + * ScoreThreadValFatalIdleThreadStackTooSmall_Run() parameter. + */ + rtems_fatal_code code; +} ScoreThreadValFatalIdleThreadStackTooSmall_Context; + +static ScoreThreadValFatalIdleThreadStackTooSmall_Context + ScoreThreadValFatalIdleThreadStackTooSmall_Instance; + +static T_fixture ScoreThreadValFatalIdleThreadStackTooSmall_Fixture = { + .setup = NULL, + .stop = NULL, + .teardown = NULL, + .scope = NULL, + .initial_context = &ScoreThreadValFatalIdleThreadStackTooSmall_Instance +}; + +/** + * @brief The test action is carried out by configuring a thread-local storage + * demand which leads to a too small idle thread stack size. + */ +static void ScoreThreadValFatalIdleThreadStackTooSmall_Action_0( + ScoreThreadValFatalIdleThreadStackTooSmall_Context *ctx +) +{ + /* Nothing to do */ + + /* + * Check that the expected fatal source is present. + */ + T_step_eq_int( 0, ctx->source, INTERNAL_ERROR_CORE ); + + /* + * Check that the expected fatal code is present. + */ + T_step_eq_ulong( + 1, + ctx->code, + INTERNAL_ERROR_IDLE_THREAD_STACK_TOO_SMALL + ); + + /* + * Check the configured value of CONFIGURE_IDLE_TASK_STORAGE_SIZE. + */ + T_step_eq_sz( + 2, + _Stack_Allocator_allocate_for_idle_storage_size, + RTEMS_ALIGN_UP( + RTEMS_TASK_STORAGE_SIZE( + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_ATTRIBUTES + ), + CPU_INTERRUPT_STACK_ALIGNMENT + ) + ); +} + +void ScoreThreadValFatalIdleThreadStackTooSmall_Run( + rtems_fatal_source source, + rtems_fatal_code code +) +{ + ScoreThreadValFatalIdleThreadStackTooSmall_Context *ctx; + + ctx = &ScoreThreadValFatalIdleThreadStackTooSmall_Instance; + ctx->source = source; + ctx->code = code; + + ctx = T_case_begin( + "ScoreThreadValFatalIdleThreadStackTooSmall", + &ScoreThreadValFatalIdleThreadStackTooSmall_Fixture + ); + + T_plan( 3 ); + + ScoreThreadValFatalIdleThreadStackTooSmall_Action_0( ctx ); + + T_case_end(); +} + +/** @} */ diff --git a/testsuites/validation/tr-fatal-idle-thread-stack-too-small.h b/testsuites/validation/tr-fatal-idle-thread-stack-too-small.h new file mode 100644 index 0000000000..be29df8a39 --- /dev/null +++ b/testsuites/validation/tr-fatal-idle-thread-stack-too-small.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup ScoreThreadValFatalIdleThreadStackTooSmall + */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifndef _TR_FATAL_IDLE_THREAD_STACK_TOO_SMALL_H +#define _TR_FATAL_IDLE_THREAD_STACK_TOO_SMALL_H + +#include <rtems.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup ScoreThreadValFatalIdleThreadStackTooSmall + * + * @{ + */ + +/** + * @brief Runs the parameterized test case. + * + * @param source is the fatal source. + * + * @param code is the fatal code. + */ +void ScoreThreadValFatalIdleThreadStackTooSmall_Run( + rtems_fatal_source source, + rtems_fatal_code code +); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _TR_FATAL_IDLE_THREAD_STACK_TOO_SMALL_H */ diff --git a/testsuites/validation/tr-fatal-init-task-construct-failed.c b/testsuites/validation/tr-fatal-init-task-construct-failed.c index a7ee911f08..2bef7b73d8 100644 --- a/testsuites/validation/tr-fatal-init-task-construct-failed.c +++ b/testsuites/validation/tr-fatal-init-task-construct-failed.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValFatalInitTaskConstructFailed + * @ingroup AcfgValFatalInitTaskConstructFailed */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseAcfgValFatalInitTaskConstructFailed \ + * @defgroup AcfgValFatalInitTaskConstructFailed \ * spec:/acfg/val/fatal-init-task-construct-failed * - * @ingroup RTEMSTestSuiteTestsuitesFatalInitTaskConstructFailed + * @ingroup TestsuitesFatalInitTaskConstructFailed * * @brief Tests a fatal error caused by an invalid application configuration. * diff --git a/testsuites/validation/tr-fatal-init-task-construct-failed.h b/testsuites/validation/tr-fatal-init-task-construct-failed.h index 1685ed567f..9288a7f724 100644 --- a/testsuites/validation/tr-fatal-init-task-construct-failed.h +++ b/testsuites/validation/tr-fatal-init-task-construct-failed.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValFatalInitTaskConstructFailed + * @ingroup AcfgValFatalInitTaskConstructFailed */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseAcfgValFatalInitTaskConstructFailed + * @addtogroup AcfgValFatalInitTaskConstructFailed * * @{ */ diff --git a/testsuites/validation/tr-fatal-mandatory-processor-not-present.c b/testsuites/validation/tr-fatal-mandatory-processor-not-present.c index 0f2435d0d5..00b5678e1c 100644 --- a/testsuites/validation/tr-fatal-mandatory-processor-not-present.c +++ b/testsuites/validation/tr-fatal-mandatory-processor-not-present.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatalMandatoryProcessorNotPresent + * @ingroup ScoreSmpValFatalMandatoryProcessorNotPresent */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSmpValFatalMandatoryProcessorNotPresent \ + * @defgroup ScoreSmpValFatalMandatoryProcessorNotPresent \ * spec:/score/smp/val/fatal-mandatory-processor-not-present * - * @ingroup RTEMSTestSuiteTestsuitesFatalMandatoryProcessorNotPresent + * @ingroup TestsuitesFatalMandatoryProcessorNotPresent * * @brief Tests a fatal error. * diff --git a/testsuites/validation/tr-fatal-mandatory-processor-not-present.h b/testsuites/validation/tr-fatal-mandatory-processor-not-present.h index fd41d1b961..46d1581cc2 100644 --- a/testsuites/validation/tr-fatal-mandatory-processor-not-present.h +++ b/testsuites/validation/tr-fatal-mandatory-processor-not-present.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatalMandatoryProcessorNotPresent + * @ingroup ScoreSmpValFatalMandatoryProcessorNotPresent */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreSmpValFatalMandatoryProcessorNotPresent + * @addtogroup ScoreSmpValFatalMandatoryProcessorNotPresent * * @{ */ diff --git a/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.c b/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.c index aefe76bb31..8ac69193fa 100644 --- a/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.c +++ b/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatalSchedulerRequiresExactlyOneProcessor + * @ingroup ScoreSmpValFatalSchedulerRequiresExactlyOneProcessor */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSmpValFatalSchedulerRequiresExactlyOneProcessor \ + * @defgroup ScoreSmpValFatalSchedulerRequiresExactlyOneProcessor \ * spec:/score/smp/val/fatal-scheduler-requires-exactly-one-processor * - * @ingroup RTEMSTestSuiteTestsuitesFatalSchedulerRequiresExactlyOneProcessor + * @ingroup TestsuitesFatalSchedulerRequiresExactlyOneProcessor * * @brief Tests a fatal error. * diff --git a/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.h b/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.h index 2d0e3f32b2..6bfb18fcfd 100644 --- a/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.h +++ b/testsuites/validation/tr-fatal-scheduler-requires-exactly-one-processor.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatalSchedulerRequiresExactlyOneProcessor + * @ingroup ScoreSmpValFatalSchedulerRequiresExactlyOneProcessor */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreSmpValFatalSchedulerRequiresExactlyOneProcessor + * @addtogroup ScoreSmpValFatalSchedulerRequiresExactlyOneProcessor * * @{ */ diff --git a/testsuites/validation/tr-fatal-smp.c b/testsuites/validation/tr-fatal-smp.c index 425a95ade0..c2369d0ae7 100644 --- a/testsuites/validation/tr-fatal-smp.c +++ b/testsuites/validation/tr-fatal-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatal + * @ingroup ScoreSmpValFatal */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -64,9 +64,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSmpValFatal spec:/score/smp/val/fatal + * @defgroup ScoreSmpValFatal spec:/score/smp/val/fatal * - * @ingroup RTEMSTestSuiteTestsuitesFatalSmp + * @ingroup TestsuitesFatalSmp * * @brief Tests four fatal errors. * diff --git a/testsuites/validation/tr-fatal-smp.h b/testsuites/validation/tr-fatal-smp.h index 5b36498d29..ff7406a47f 100644 --- a/testsuites/validation/tr-fatal-smp.h +++ b/testsuites/validation/tr-fatal-smp.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatal + * @ingroup ScoreSmpValFatal */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreSmpValFatal + * @addtogroup ScoreSmpValFatal * * @{ */ diff --git a/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.c b/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.c index cc0de8c83c..5c1be8271a 100644 --- a/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.c +++ b/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatalStartOfMandatoryProcessorFailed + * @ingroup ScoreSmpValFatalStartOfMandatoryProcessorFailed */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSmpValFatalStartOfMandatoryProcessorFailed \ + * @defgroup ScoreSmpValFatalStartOfMandatoryProcessorFailed \ * spec:/score/smp/val/fatal-start-of-mandatory-processor-failed * - * @ingroup RTEMSTestSuiteTestsuitesFatalStartOfMandatoryProcessorFailed + * @ingroup TestsuitesFatalStartOfMandatoryProcessorFailed * * @brief Tests a fatal error. * diff --git a/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.h b/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.h index c80456bd77..b233ddc00c 100644 --- a/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.h +++ b/testsuites/validation/tr-fatal-start-of-mandatory-processor-failed.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatalStartOfMandatoryProcessorFailed + * @ingroup ScoreSmpValFatalStartOfMandatoryProcessorFailed */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreSmpValFatalStartOfMandatoryProcessorFailed + * @addtogroup ScoreSmpValFatalStartOfMandatoryProcessorFailed * * @{ */ diff --git a/testsuites/validation/tr-fatal-start-on-not-online-processor.c b/testsuites/validation/tr-fatal-start-on-not-online-processor.c index 55081bc25d..2773b00783 100644 --- a/testsuites/validation/tr-fatal-start-on-not-online-processor.c +++ b/testsuites/validation/tr-fatal-start-on-not-online-processor.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatalStartOnNotOnlineProcessor + * @ingroup ScoreSmpValFatalStartOnNotOnlineProcessor */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSmpValFatalStartOnNotOnlineProcessor \ + * @defgroup ScoreSmpValFatalStartOnNotOnlineProcessor \ * spec:/score/smp/val/fatal-start-on-not-online-processor * - * @ingroup RTEMSTestSuiteTestsuitesFatalStartOnNotOnlineProcessor + * @ingroup TestsuitesFatalStartOnNotOnlineProcessor * * @brief Tests a fatal error. * diff --git a/testsuites/validation/tr-fatal-start-on-not-online-processor.h b/testsuites/validation/tr-fatal-start-on-not-online-processor.h index 65a8a308f7..58e9641c4f 100644 --- a/testsuites/validation/tr-fatal-start-on-not-online-processor.h +++ b/testsuites/validation/tr-fatal-start-on-not-online-processor.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSmpValFatalStartOnNotOnlineProcessor + * @ingroup ScoreSmpValFatalStartOnNotOnlineProcessor */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreSmpValFatalStartOnNotOnlineProcessor + * @addtogroup ScoreSmpValFatalStartOnNotOnlineProcessor * * @{ */ diff --git a/testsuites/validation/tr-fatal-too-large-tls-size.c b/testsuites/validation/tr-fatal-too-large-tls-size.c index 12beeaef90..9bf5dcda97 100644 --- a/testsuites/validation/tr-fatal-too-large-tls-size.c +++ b/testsuites/validation/tr-fatal-too-large-tls-size.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValFatalTooLargeTlsSize + * @ingroup AcfgValFatalTooLargeTlsSize */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseAcfgValFatalTooLargeTlsSize \ + * @defgroup AcfgValFatalTooLargeTlsSize \ * spec:/acfg/val/fatal-too-large-tls-size * - * @ingroup RTEMSTestSuiteTestsuitesFatalTooLargeTlsSize + * @ingroup TestsuitesFatalTooLargeTlsSize * * @brief Tests a fatal error. * diff --git a/testsuites/validation/tr-fatal-too-large-tls-size.h b/testsuites/validation/tr-fatal-too-large-tls-size.h index 1b5c24e469..c1504261d2 100644 --- a/testsuites/validation/tr-fatal-too-large-tls-size.h +++ b/testsuites/validation/tr-fatal-too-large-tls-size.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseAcfgValFatalTooLargeTlsSize + * @ingroup AcfgValFatalTooLargeTlsSize */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseAcfgValFatalTooLargeTlsSize + * @addtogroup AcfgValFatalTooLargeTlsSize * * @{ */ diff --git a/testsuites/validation/tr-io-kernel.c b/testsuites/validation/tr-io-kernel.c index c31cf374e0..bbebfe5a26 100644 --- a/testsuites/validation/tr-io-kernel.c +++ b/testsuites/validation/tr-io-kernel.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIoValKernel + * @ingroup RtemsIoValKernel */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,9 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsIoValKernel spec:/rtems/io/val/kernel + * @defgroup RtemsIoValKernel spec:/rtems/io/val/kernel * - * @ingroup RTEMSTestSuiteTestsuitesValidationIoKernel + * @ingroup TestsuitesValidationIoKernel * * @brief Tests the functions referenced by BSP_output_char and BSP_poll_char. * @@ -82,7 +82,9 @@ */ static void RtemsIoValKernel_Action_0( void ) { + T_report_hash_sha256_update( 'X' ); ( *BSP_output_char )( 'X' ); + T_report_hash_sha256_update( '\n' ); ( *BSP_output_char )( '\n' ); } diff --git a/testsuites/validation/tr-io-kernel.h b/testsuites/validation/tr-io-kernel.h index 88b12a0645..ef878982dc 100644 --- a/testsuites/validation/tr-io-kernel.h +++ b/testsuites/validation/tr-io-kernel.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsIoValKernel + * @ingroup RtemsIoValKernel */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -56,7 +56,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseRtemsIoValKernel + * @addtogroup RtemsIoValKernel * * @{ */ diff --git a/testsuites/validation/tr-mtx-seize-try.c b/testsuites/validation/tr-mtx-seize-try.c index 8279780bff..ddc995c2e1 100644 --- a/testsuites/validation/tr-mtx-seize-try.c +++ b/testsuites/validation/tr-mtx-seize-try.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreMtxReqSeizeTry + * @ingroup ScoreMtxReqSeizeTry */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -53,17 +53,13 @@ #endif #include "tr-mtx-seize-try.h" -#include "tr-tq-enqueue-ceiling.h" -#include "tr-tq-enqueue-fifo.h" -#include "tr-tq-enqueue-mrsp.h" -#include "tr-tq-enqueue-priority.h" #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreMtxReqSeizeTry spec:/score/mtx/req/seize-try + * @defgroup ScoreMtxReqSeizeTry spec:/score/mtx/req/seize-try * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -88,19 +84,19 @@ typedef struct { * @brief If this member is true, then the calling thread shall be the owner * of the mutex. */ - bool owner_caller;; + bool owner_caller; /** * @brief If this member is true, then a thread other than the calling thread * shall be the owner of the mutex. */ - bool owner_other;; + bool owner_other; /** * @brief This member contains the current priority of the calling thread * before the directive call. */ - rtems_task_priority priority_before;; + rtems_task_priority priority_before; /** * @brief This member contains the owner of the mutex after the directive @@ -112,7 +108,7 @@ typedef struct { * @brief This member contains the current priority of the calling thread * after the directive call. */ - rtems_task_priority priority_after;; + rtems_task_priority priority_after; /** * @brief This member contains a copy of the corresponding @@ -805,6 +801,11 @@ static void ScoreMtxReqSeizeTry_TestVariant( ScoreMtxReqSeizeTry_Context *ctx ) static T_fixture_node ScoreMtxReqSeizeTry_Node; +static T_remark ScoreMtxReqSeizeTry_Remark = { + .next = NULL, + .remark = "ScoreMtxReqSeizeTry" +}; + void ScoreMtxReqSeizeTry_Run( TQMtxContext *tq_ctx ) { ScoreMtxReqSeizeTry_Context *ctx; @@ -860,6 +861,7 @@ void ScoreMtxReqSeizeTry_Run( TQMtxContext *tq_ctx ) } } + T_add_remark( &ScoreMtxReqSeizeTry_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-mtx-seize-try.h b/testsuites/validation/tr-mtx-seize-try.h index 84e7cd6849..28bac7d25d 100644 --- a/testsuites/validation/tr-mtx-seize-try.h +++ b/testsuites/validation/tr-mtx-seize-try.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreMtxReqSeizeTry + * @ingroup ScoreMtxReqSeizeTry */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreMtxReqSeizeTry + * @addtogroup ScoreMtxReqSeizeTry * * @{ */ diff --git a/testsuites/validation/tr-mtx-seize-wait.c b/testsuites/validation/tr-mtx-seize-wait.c index 367ca0da32..2e2fe9d1ec 100644 --- a/testsuites/validation/tr-mtx-seize-wait.c +++ b/testsuites/validation/tr-mtx-seize-wait.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreMtxReqSeizeWait + * @ingroup ScoreMtxReqSeizeWait */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -56,16 +56,15 @@ #include "tr-tq-enqueue-ceiling.h" #include "tr-tq-enqueue-deadlock.h" #include "tr-tq-enqueue-fifo.h" -#include "tr-tq-enqueue-mrsp.h" #include "tr-tq-enqueue-priority-inherit.h" #include "tr-tq-enqueue-priority.h" #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreMtxReqSeizeWait spec:/score/mtx/req/seize-wait + * @defgroup ScoreMtxReqSeizeWait spec:/score/mtx/req/seize-wait * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -92,24 +91,24 @@ typedef struct { * @brief If this member is true, then the calling thread shall be the owner * of the mutex. */ - bool owner_caller;; + bool owner_caller; /** * @brief If this member is true, then a thread other than the calling thread * shall be the owner of the mutex. */ - bool owner_other;; + bool owner_other; /** * @brief If this member is true, then a deadlock shall occur. */ - bool deadlock;; + bool deadlock; /** * @brief This member contains the current priority of the calling thread * before the directive call. */ - rtems_task_priority priority_before;; + rtems_task_priority priority_before; /** * @brief This member contains the owner of the mutex after the directive @@ -121,7 +120,7 @@ typedef struct { * @brief This member contains the current priority of the calling thread * after the directive call. */ - rtems_task_priority priority_after;; + rtems_task_priority priority_after; /** * @brief This member contains a copy of the corresponding @@ -218,6 +217,10 @@ static const char * const * const ScoreMtxReqSeizeWait_PreDesc[] = { NULL }; +#if defined(RTEMS_SMP) +#include "tr-tq-enqueue-mrsp.h" +#endif + typedef ScoreMtxReqSeizeWait_Context Context; static Status_Control Status( const Context *ctx, Status_Control status ) @@ -707,7 +710,7 @@ static void ScoreMtxReqSeizeWait_Post_Enqueued_Check( case ScoreMtxReqSeizeWait_Post_Enqueued_PriorityInherit: { /* - * The calling thread shall be enqueued in priority order with priorit + * The calling thread shall be enqueued in priority order with priority * inheritance. */ ScoreTqReqEnqueuePriorityInherit_Run( &ctx->tq_ctx->base ); @@ -728,7 +731,11 @@ static void ScoreMtxReqSeizeWait_Post_Enqueued_Check( * The calling thread shall be enqueued in priority order according to * the MrsP locking protocol. */ + #if defined(RTEMS_SMP) ScoreTqReqEnqueueMrsp_Run( &ctx->tq_ctx->base ); + #else + T_unreachable(); + #endif break; } @@ -1072,6 +1079,11 @@ static void ScoreMtxReqSeizeWait_TestVariant( static T_fixture_node ScoreMtxReqSeizeWait_Node; +static T_remark ScoreMtxReqSeizeWait_Remark = { + .next = NULL, + .remark = "ScoreMtxReqSeizeWait" +}; + void ScoreMtxReqSeizeWait_Run( TQMtxContext *tq_ctx ) { ScoreMtxReqSeizeWait_Context *ctx; @@ -1133,6 +1145,7 @@ void ScoreMtxReqSeizeWait_Run( TQMtxContext *tq_ctx ) } } + T_add_remark( &ScoreMtxReqSeizeWait_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-mtx-seize-wait.h b/testsuites/validation/tr-mtx-seize-wait.h index 1ac532b1ce..0d3beeb97b 100644 --- a/testsuites/validation/tr-mtx-seize-wait.h +++ b/testsuites/validation/tr-mtx-seize-wait.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreMtxReqSeizeWait + * @ingroup ScoreMtxReqSeizeWait */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreMtxReqSeizeWait + * @addtogroup ScoreMtxReqSeizeWait * * @{ */ diff --git a/testsuites/validation/tr-mtx-surrender.c b/testsuites/validation/tr-mtx-surrender.c index 6e27ff2bc9..3c60726803 100644 --- a/testsuites/validation/tr-mtx-surrender.c +++ b/testsuites/validation/tr-mtx-surrender.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreMtxReqSurrender + * @ingroup ScoreMtxReqSurrender */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -53,16 +53,15 @@ #endif #include "tr-mtx-surrender.h" -#include "tr-tq-surrender-mrsp.h" #include "tr-tq-surrender-priority-inherit.h" #include "tr-tq-surrender.h" #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreMtxReqSurrender spec:/score/mtx/req/surrender + * @defgroup ScoreMtxReqSurrender spec:/score/mtx/req/surrender * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -252,6 +251,10 @@ static const char * const * const ScoreMtxReqSurrender_PreDesc[] = { NULL }; +#if defined(RTEMS_SMP) +#include "tr-tq-surrender-mrsp.h" +#endif + typedef ScoreMtxReqSurrender_Context Context; static Status_Control Status( const Context *ctx, Status_Control status ) @@ -810,8 +813,12 @@ static void ScoreMtxReqSurrender_Post_Surrender_Check( * The thread queue of the mutex shall be surrendered in priority order * with MrsP. */ + #if defined(RTEMS_SMP) T_eq_u32( ctx->counter, 1 ); ScoreTqReqSurrenderMrsp_Run( &ctx->tq_ctx->base ); + #else + T_unreachable(); + #endif break; } @@ -1154,6 +1161,11 @@ static void ScoreMtxReqSurrender_TestVariant( static T_fixture_node ScoreMtxReqSurrender_Node; +static T_remark ScoreMtxReqSurrender_Remark = { + .next = NULL, + .remark = "ScoreMtxReqSurrender" +}; + void ScoreMtxReqSurrender_Run( TQMtxContext *tq_ctx ) { ScoreMtxReqSurrender_Context *ctx; @@ -1227,6 +1239,7 @@ void ScoreMtxReqSurrender_Run( TQMtxContext *tq_ctx ) } } + T_add_remark( &ScoreMtxReqSurrender_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-mtx-surrender.h b/testsuites/validation/tr-mtx-surrender.h index 79b044d184..1b732d5e73 100644 --- a/testsuites/validation/tr-mtx-surrender.h +++ b/testsuites/validation/tr-mtx-surrender.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreMtxReqSurrender + * @ingroup ScoreMtxReqSurrender */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreMtxReqSurrender + * @addtogroup ScoreMtxReqSurrender * * @{ */ diff --git a/testsuites/validation/tr-object-ident-local.c b/testsuites/validation/tr-object-ident-local.c index 1b3943fdb1..5cf521fbd6 100644 --- a/testsuites/validation/tr-object-ident-local.c +++ b/testsuites/validation/tr-object-ident-local.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsReqIdentLocal + * @ingroup RtemsReqIdentLocal */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsReqIdentLocal spec:/rtems/req/ident-local + * @defgroup RtemsReqIdentLocal spec:/rtems/req/ident-local * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -350,6 +350,11 @@ static void RtemsReqIdentLocal_TestVariant( RtemsReqIdentLocal_Context *ctx ) static T_fixture_node RtemsReqIdentLocal_Node; +static T_remark RtemsReqIdentLocal_Remark = { + .next = NULL, + .remark = "RtemsReqIdentLocal" +}; + void RtemsReqIdentLocal_Run( rtems_id id_local_object, rtems_name name_local_object, @@ -382,6 +387,7 @@ void RtemsReqIdentLocal_Run( } } + T_add_remark( &RtemsReqIdentLocal_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-object-ident-local.h b/testsuites/validation/tr-object-ident-local.h index 83ad7e7416..d3cf1c307a 100644 --- a/testsuites/validation/tr-object-ident-local.h +++ b/testsuites/validation/tr-object-ident-local.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsReqIdentLocal + * @ingroup RtemsReqIdentLocal */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseRtemsReqIdentLocal + * @addtogroup RtemsReqIdentLocal * * @{ */ diff --git a/testsuites/validation/tr-object-ident.c b/testsuites/validation/tr-object-ident.c index 438c1f3333..df66d51437 100644 --- a/testsuites/validation/tr-object-ident.c +++ b/testsuites/validation/tr-object-ident.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsReqIdent + * @ingroup RtemsReqIdent */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsReqIdent spec:/rtems/req/ident + * @defgroup RtemsReqIdent spec:/rtems/req/ident * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -454,6 +454,11 @@ static void RtemsReqIdent_TestVariant( RtemsReqIdent_Context *ctx ) static T_fixture_node RtemsReqIdent_Node; +static T_remark RtemsReqIdent_Remark = { + .next = NULL, + .remark = "RtemsReqIdent" +}; + void RtemsReqIdent_Run( rtems_id id_local_object, rtems_name name_local_object, @@ -492,6 +497,7 @@ void RtemsReqIdent_Run( } } + T_add_remark( &RtemsReqIdent_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-object-ident.h b/testsuites/validation/tr-object-ident.h index 7917562eab..404d56c707 100644 --- a/testsuites/validation/tr-object-ident.h +++ b/testsuites/validation/tr-object-ident.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsReqIdent + * @ingroup RtemsReqIdent */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseRtemsReqIdent + * @addtogroup RtemsReqIdent * * @{ */ diff --git a/testsuites/validation/tr-sem-seize-try.c b/testsuites/validation/tr-sem-seize-try.c index e723230288..3470f832fd 100644 --- a/testsuites/validation/tr-sem-seize-try.c +++ b/testsuites/validation/tr-sem-seize-try.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSemReqSeizeTry + * @ingroup ScoreSemReqSeizeTry */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSemReqSeizeTry spec:/score/sem/req/seize-try + * @defgroup ScoreSemReqSeizeTry spec:/score/sem/req/seize-try * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -294,6 +294,11 @@ static void ScoreSemReqSeizeTry_TestVariant( ScoreSemReqSeizeTry_Context *ctx ) static T_fixture_node ScoreSemReqSeizeTry_Node; +static T_remark ScoreSemReqSeizeTry_Remark = { + .next = NULL, + .remark = "ScoreSemReqSeizeTry" +}; + void ScoreSemReqSeizeTry_Run( TQSemContext *tq_ctx ) { ScoreSemReqSeizeTry_Context *ctx; @@ -317,6 +322,7 @@ void ScoreSemReqSeizeTry_Run( TQSemContext *tq_ctx ) ScoreSemReqSeizeTry_TestVariant( ctx ); } + T_add_remark( &ScoreSemReqSeizeTry_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-sem-seize-try.h b/testsuites/validation/tr-sem-seize-try.h index 155bf59cf8..347c8aa61d 100644 --- a/testsuites/validation/tr-sem-seize-try.h +++ b/testsuites/validation/tr-sem-seize-try.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSemReqSeizeTry + * @ingroup ScoreSemReqSeizeTry */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreSemReqSeizeTry + * @addtogroup ScoreSemReqSeizeTry * * @{ */ diff --git a/testsuites/validation/tr-sem-seize-wait.c b/testsuites/validation/tr-sem-seize-wait.c index b4c4266103..bbc1cfd252 100644 --- a/testsuites/validation/tr-sem-seize-wait.c +++ b/testsuites/validation/tr-sem-seize-wait.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSemReqSeizeWait + * @ingroup ScoreSemReqSeizeWait */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSemReqSeizeWait spec:/score/sem/req/seize-wait + * @defgroup ScoreSemReqSeizeWait spec:/score/sem/req/seize-wait * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -368,6 +368,11 @@ static void ScoreSemReqSeizeWait_TestVariant( static T_fixture_node ScoreSemReqSeizeWait_Node; +static T_remark ScoreSemReqSeizeWait_Remark = { + .next = NULL, + .remark = "ScoreSemReqSeizeWait" +}; + void ScoreSemReqSeizeWait_Run( TQSemContext *tq_ctx ) { ScoreSemReqSeizeWait_Context *ctx; @@ -392,6 +397,7 @@ void ScoreSemReqSeizeWait_Run( TQSemContext *tq_ctx ) ScoreSemReqSeizeWait_TestVariant( ctx ); } + T_add_remark( &ScoreSemReqSeizeWait_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-sem-seize-wait.h b/testsuites/validation/tr-sem-seize-wait.h index 91d1790347..68156abbc7 100644 --- a/testsuites/validation/tr-sem-seize-wait.h +++ b/testsuites/validation/tr-sem-seize-wait.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSemReqSeizeWait + * @ingroup ScoreSemReqSeizeWait */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreSemReqSeizeWait + * @addtogroup ScoreSemReqSeizeWait * * @{ */ diff --git a/testsuites/validation/tr-sem-surrender.c b/testsuites/validation/tr-sem-surrender.c index 8226093dda..d554a33dd2 100644 --- a/testsuites/validation/tr-sem-surrender.c +++ b/testsuites/validation/tr-sem-surrender.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSemReqSurrender + * @ingroup ScoreSemReqSurrender */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,9 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreSemReqSurrender spec:/score/sem/req/surrender + * @defgroup ScoreSemReqSurrender spec:/score/sem/req/surrender * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -528,6 +528,11 @@ static void ScoreSemReqSurrender_TestVariant( static T_fixture_node ScoreSemReqSurrender_Node; +static T_remark ScoreSemReqSurrender_Remark = { + .next = NULL, + .remark = "ScoreSemReqSurrender" +}; + void ScoreSemReqSurrender_Run( TQSemContext *tq_ctx ) { ScoreSemReqSurrender_Context *ctx; @@ -564,6 +569,7 @@ void ScoreSemReqSurrender_Run( TQSemContext *tq_ctx ) } } + T_add_remark( &ScoreSemReqSurrender_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-sem-surrender.h b/testsuites/validation/tr-sem-surrender.h index 06ab4c20c1..d03fe56b54 100644 --- a/testsuites/validation/tr-sem-surrender.h +++ b/testsuites/validation/tr-sem-surrender.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreSemReqSurrender + * @ingroup ScoreSemReqSurrender */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreSemReqSurrender + * @addtogroup ScoreSemReqSurrender * * @{ */ diff --git a/testsuites/validation/tr-signal-constant.c b/testsuites/validation/tr-signal-constant.c index 323f977272..c8aeb463fd 100644 --- a/testsuites/validation/tr-signal-constant.c +++ b/testsuites/validation/tr-signal-constant.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSignalValSignalConstant + * @ingroup RtemsSignalValSignalConstant */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseRtemsSignalValSignalConstant \ + * @defgroup RtemsSignalValSignalConstant \ * spec:/rtems/signal/val/signal-constant * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @brief Tests a signal constant of the @ref RTEMSAPIClassicSignal using the * signal set of the executing task. @@ -176,6 +176,11 @@ static void RtemsSignalValSignalConstant_Action_1( static T_fixture_node RtemsSignalValSignalConstant_Node; +static T_remark RtemsSignalValSignalConstant_Remark = { + .next = NULL, + .remark = "RtemsSignalValSignalConstant" +}; + void RtemsSignalValSignalConstant_Run( rtems_signal_set signal, int number ) { RtemsSignalValSignalConstant_Context *ctx; @@ -194,6 +199,7 @@ void RtemsSignalValSignalConstant_Run( rtems_signal_set signal, int number ) RtemsSignalValSignalConstant_Action_0( ctx ); RtemsSignalValSignalConstant_Action_1( ctx ); + T_add_remark( &RtemsSignalValSignalConstant_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-signal-constant.h b/testsuites/validation/tr-signal-constant.h index 99b43f159b..a957426213 100644 --- a/testsuites/validation/tr-signal-constant.h +++ b/testsuites/validation/tr-signal-constant.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseRtemsSignalValSignalConstant + * @ingroup RtemsSignalValSignalConstant */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseRtemsSignalValSignalConstant + * @addtogroup RtemsSignalValSignalConstant * * @{ */ diff --git a/testsuites/validation/tr-tq-enqueue-ceiling.c b/testsuites/validation/tr-tq-enqueue-ceiling.c index 5309b31260..a0b4077689 100644 --- a/testsuites/validation/tr-tq-enqueue-ceiling.c +++ b/testsuites/validation/tr-tq-enqueue-ceiling.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueueCeiling + * @ingroup ScoreTqReqEnqueueCeiling */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqEnqueueCeiling \ - * spec:/score/tq/req/enqueue-ceiling + * @defgroup ScoreTqReqEnqueueCeiling spec:/score/tq/req/enqueue-ceiling * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -87,7 +86,7 @@ typedef struct { * @brief This member specifies the priority of a thread with an eligible * scheduler equal to an eligible scheduler of the enqueueing thread. */ - rtems_task_priority priority;; + rtems_task_priority priority; /** * @brief If this member is true, then a thread those eligible schedulers are @@ -95,7 +94,7 @@ typedef struct { * thread with an eligible scheduler equal to an eligible scheduler of the * enqueueing thread. */ - size_t other_before;; + size_t other_before; /** * @brief If this member is true, then a thread those eligible schedulers are @@ -103,7 +102,7 @@ typedef struct { * thread with an eligible scheduler equal to an eligible scheduler of the * enqueueing thread. */ - size_t other_after;; + size_t other_after; /** * @brief This member contains a copy of the corresponding @@ -455,7 +454,9 @@ static void ScoreTqReqEnqueueCeiling_Prepare( ScoreTqReqEnqueueCeiling_Context *ctx ) { - ctx->priority = PRIO_PSEUDO_ISR; ctx->other_before = false; ctx->other_after = false; + ctx->priority = PRIO_PSEUDO_ISR; + ctx->other_before = false; + ctx->other_after = false; } static void ScoreTqReqEnqueueCeiling_Action( @@ -644,6 +645,11 @@ static void ScoreTqReqEnqueueCeiling_TestVariant( static T_fixture_node ScoreTqReqEnqueueCeiling_Node; +static T_remark ScoreTqReqEnqueueCeiling_Remark = { + .next = NULL, + .remark = "ScoreTqReqEnqueueCeiling" +}; + void ScoreTqReqEnqueueCeiling_Run( TQContext *tq_ctx ) { ScoreTqReqEnqueueCeiling_Context *ctx; @@ -680,6 +686,7 @@ void ScoreTqReqEnqueueCeiling_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqEnqueueCeiling_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-enqueue-ceiling.h b/testsuites/validation/tr-tq-enqueue-ceiling.h index 3eca5033db..3f61865791 100644 --- a/testsuites/validation/tr-tq-enqueue-ceiling.h +++ b/testsuites/validation/tr-tq-enqueue-ceiling.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueueCeiling + * @ingroup ScoreTqReqEnqueueCeiling */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqEnqueueCeiling + * @addtogroup ScoreTqReqEnqueueCeiling * * @{ */ diff --git a/testsuites/validation/tr-tq-enqueue-deadlock.c b/testsuites/validation/tr-tq-enqueue-deadlock.c index afe4ef864e..7f61cbc444 100644 --- a/testsuites/validation/tr-tq-enqueue-deadlock.c +++ b/testsuites/validation/tr-tq-enqueue-deadlock.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueueDeadlock + * @ingroup ScoreTqReqEnqueueDeadlock */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqEnqueueDeadlock \ - * spec:/score/tq/req/enqueue-deadlock + * @defgroup ScoreTqReqEnqueueDeadlock spec:/score/tq/req/enqueue-deadlock * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -406,6 +405,11 @@ static void ScoreTqReqEnqueueDeadlock_TestVariant( static T_fixture_node ScoreTqReqEnqueueDeadlock_Node; +static T_remark ScoreTqReqEnqueueDeadlock_Remark = { + .next = NULL, + .remark = "ScoreTqReqEnqueueDeadlock" +}; + void ScoreTqReqEnqueueDeadlock_Run( TQContext *tq_ctx ) { ScoreTqReqEnqueueDeadlock_Context *ctx; @@ -436,6 +440,7 @@ void ScoreTqReqEnqueueDeadlock_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqEnqueueDeadlock_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-enqueue-deadlock.h b/testsuites/validation/tr-tq-enqueue-deadlock.h index be23bcf879..1fe580a19c 100644 --- a/testsuites/validation/tr-tq-enqueue-deadlock.h +++ b/testsuites/validation/tr-tq-enqueue-deadlock.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueueDeadlock + * @ingroup ScoreTqReqEnqueueDeadlock */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqEnqueueDeadlock + * @addtogroup ScoreTqReqEnqueueDeadlock * * @{ */ diff --git a/testsuites/validation/tr-tq-enqueue-fifo.c b/testsuites/validation/tr-tq-enqueue-fifo.c index b64a99c0d1..27ac064797 100644 --- a/testsuites/validation/tr-tq-enqueue-fifo.c +++ b/testsuites/validation/tr-tq-enqueue-fifo.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueueFifo + * @ingroup ScoreTqReqEnqueueFifo */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqEnqueueFifo spec:/score/tq/req/enqueue-fifo + * @defgroup ScoreTqReqEnqueueFifo spec:/score/tq/req/enqueue-fifo * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -305,6 +305,11 @@ static void ScoreTqReqEnqueueFifo_TestVariant( static T_fixture_node ScoreTqReqEnqueueFifo_Node; +static T_remark ScoreTqReqEnqueueFifo_Remark = { + .next = NULL, + .remark = "ScoreTqReqEnqueueFifo" +}; + void ScoreTqReqEnqueueFifo_Run( TQContext *tq_ctx ) { ScoreTqReqEnqueueFifo_Context *ctx; @@ -328,6 +333,7 @@ void ScoreTqReqEnqueueFifo_Run( TQContext *tq_ctx ) ScoreTqReqEnqueueFifo_TestVariant( ctx ); } + T_add_remark( &ScoreTqReqEnqueueFifo_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-enqueue-fifo.h b/testsuites/validation/tr-tq-enqueue-fifo.h index 776cded8b9..16a37ecf2b 100644 --- a/testsuites/validation/tr-tq-enqueue-fifo.h +++ b/testsuites/validation/tr-tq-enqueue-fifo.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueueFifo + * @ingroup ScoreTqReqEnqueueFifo */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqEnqueueFifo + * @addtogroup ScoreTqReqEnqueueFifo * * @{ */ diff --git a/testsuites/validation/tr-tq-enqueue-mrsp.c b/testsuites/validation/tr-tq-enqueue-mrsp.c index d48455b2eb..14f1f17713 100644 --- a/testsuites/validation/tr-tq-enqueue-mrsp.c +++ b/testsuites/validation/tr-tq-enqueue-mrsp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueueMrsp + * @ingroup ScoreTqReqEnqueueMrsp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqEnqueueMrsp spec:/score/tq/req/enqueue-mrsp + * @defgroup ScoreTqReqEnqueueMrsp spec:/score/tq/req/enqueue-mrsp * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -88,7 +88,7 @@ typedef struct { * with an eligible scheduler equal to an eligible scheduler of the * enqueueing thread. */ - rtems_task_priority priority;; + rtems_task_priority priority; /** * @brief If this member is true, then a thread those eligible schedulers are @@ -96,7 +96,7 @@ typedef struct { * thread with an eligible scheduler equal to an eligible scheduler of the * enqueueing thread. */ - size_t other_before;; + size_t other_before; /** * @brief If this member is true, then a thread those eligible schedulers are @@ -104,7 +104,7 @@ typedef struct { * thread with an eligible scheduler equal to an eligible scheduler of the * enqueueing thread. */ - size_t other_after;; + size_t other_after; /** * @brief This member contains a copy of the corresponding @@ -611,6 +611,11 @@ static void ScoreTqReqEnqueueMrsp_TestVariant( static T_fixture_node ScoreTqReqEnqueueMrsp_Node; +static T_remark ScoreTqReqEnqueueMrsp_Remark = { + .next = NULL, + .remark = "ScoreTqReqEnqueueMrsp" +}; + void ScoreTqReqEnqueueMrsp_Run( TQContext *tq_ctx ) { ScoreTqReqEnqueueMrsp_Context *ctx; @@ -646,6 +651,7 @@ void ScoreTqReqEnqueueMrsp_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqEnqueueMrsp_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-enqueue-mrsp.h b/testsuites/validation/tr-tq-enqueue-mrsp.h index 98cb8b9883..1c38b4b238 100644 --- a/testsuites/validation/tr-tq-enqueue-mrsp.h +++ b/testsuites/validation/tr-tq-enqueue-mrsp.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueueMrsp + * @ingroup ScoreTqReqEnqueueMrsp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqEnqueueMrsp + * @addtogroup ScoreTqReqEnqueueMrsp * * @{ */ diff --git a/testsuites/validation/tr-tq-enqueue-priority-inherit.c b/testsuites/validation/tr-tq-enqueue-priority-inherit.c index fc9a75e4fa..160e2d7825 100644 --- a/testsuites/validation/tr-tq-enqueue-priority-inherit.c +++ b/testsuites/validation/tr-tq-enqueue-priority-inherit.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit + * @ingroup ScoreTqReqEnqueuePriorityInherit */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit \ + * @defgroup ScoreTqReqEnqueuePriorityInherit \ * spec:/score/tq/req/enqueue-priority-inherit * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -1668,6 +1668,11 @@ static void ScoreTqReqEnqueuePriorityInherit_TestVariant( static T_fixture_node ScoreTqReqEnqueuePriorityInherit_Node; +static T_remark ScoreTqReqEnqueuePriorityInherit_Remark = { + .next = NULL, + .remark = "ScoreTqReqEnqueuePriorityInherit" +}; + void ScoreTqReqEnqueuePriorityInherit_Run( TQContext *tq_ctx ) { ScoreTqReqEnqueuePriorityInherit_Context *ctx; @@ -1730,6 +1735,7 @@ void ScoreTqReqEnqueuePriorityInherit_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqEnqueuePriorityInherit_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-enqueue-priority-inherit.h b/testsuites/validation/tr-tq-enqueue-priority-inherit.h index 526766a981..c2ffa59902 100644 --- a/testsuites/validation/tr-tq-enqueue-priority-inherit.h +++ b/testsuites/validation/tr-tq-enqueue-priority-inherit.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit + * @ingroup ScoreTqReqEnqueuePriorityInherit */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqEnqueuePriorityInherit + * @addtogroup ScoreTqReqEnqueuePriorityInherit * * @{ */ diff --git a/testsuites/validation/tr-tq-enqueue-priority.c b/testsuites/validation/tr-tq-enqueue-priority.c index 6487c13aa2..18818e34cd 100644 --- a/testsuites/validation/tr-tq-enqueue-priority.c +++ b/testsuites/validation/tr-tq-enqueue-priority.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueuePriority + * @ingroup ScoreTqReqEnqueuePriority */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqEnqueuePriority \ - * spec:/score/tq/req/enqueue-priority + * @defgroup ScoreTqReqEnqueuePriority spec:/score/tq/req/enqueue-priority * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -87,7 +86,7 @@ typedef struct { * @brief This member specifies the priority of a thread with an eligible * scheduler equal to an eligible scheduler of the enqueueing thread. */ - rtems_task_priority priority;; + rtems_task_priority priority; /** * @brief If this member is true, then a thread those eligible schedulers are @@ -95,7 +94,7 @@ typedef struct { * thread with an eligible scheduler equal to an eligible scheduler of the * enqueueing thread. */ - size_t other_before;; + size_t other_before; /** * @brief If this member is true, then a thread those eligible schedulers are @@ -103,7 +102,7 @@ typedef struct { * thread with an eligible scheduler equal to an eligible scheduler of the * enqueueing thread. */ - size_t other_after;; + size_t other_after; /** * @brief This member contains a copy of the corresponding @@ -704,6 +703,11 @@ static void ScoreTqReqEnqueuePriority_TestVariant( static T_fixture_node ScoreTqReqEnqueuePriority_Node; +static T_remark ScoreTqReqEnqueuePriority_Remark = { + .next = NULL, + .remark = "ScoreTqReqEnqueuePriority" +}; + void ScoreTqReqEnqueuePriority_Run( TQContext *tq_ctx ) { ScoreTqReqEnqueuePriority_Context *ctx; @@ -740,6 +744,7 @@ void ScoreTqReqEnqueuePriority_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqEnqueuePriority_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-enqueue-priority.h b/testsuites/validation/tr-tq-enqueue-priority.h index 97f5f883de..141c8a122c 100644 --- a/testsuites/validation/tr-tq-enqueue-priority.h +++ b/testsuites/validation/tr-tq-enqueue-priority.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqEnqueuePriority + * @ingroup ScoreTqReqEnqueuePriority */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqEnqueuePriority + * @addtogroup ScoreTqReqEnqueuePriority * * @{ */ diff --git a/testsuites/validation/tr-tq-flush-fifo.c b/testsuites/validation/tr-tq-flush-fifo.c index 9b6821ac27..785d7b37a1 100644 --- a/testsuites/validation/tr-tq-flush-fifo.c +++ b/testsuites/validation/tr-tq-flush-fifo.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqFlushFifo + * @ingroup ScoreTqReqFlushFifo */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,16 +58,19 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqFlushFifo spec:/score/tq/req/flush-fifo + * @defgroup ScoreTqReqFlushFifo spec:/score/tq/req/flush-fifo * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ typedef struct { uint8_t Skip : 1; - uint8_t Pre_Queue_NA : 1; + uint8_t Pre_MayStop_NA : 1; + uint8_t Pre_QueueEmpty_NA : 1; + uint8_t Pre_Stop_NA : 1; + uint8_t Pre_WaitState_NA : 1; uint8_t Post_Operation : 2; } ScoreTqReqFlushFifo_Entry; @@ -76,9 +79,20 @@ typedef struct { */ typedef struct { /** + * @brief If this member is true, then the flush filter shall return NULL. + */ + bool stop; + + /** + * @brief If this member is true, then the least recently enqueued thread + * shall be in the intend to block wait state. + */ + bool intend_to_block; + + /** * @brief This member contains the call within ISR request. */ - CallWithinISRRequest request;; + CallWithinISRRequest request; /** * @brief This member contains a copy of the corresponding @@ -86,11 +100,23 @@ typedef struct { */ TQContext *tq_ctx; + /** + * @brief This member contains a copy of the corresponding + * ScoreTqReqFlushFifo_Run() parameter. + */ + bool may_stop; + struct { /** + * @brief This member defines the pre-condition indices for the next + * action. + */ + size_t pci[ 4 ]; + + /** * @brief This member defines the pre-condition states for the next action. */ - size_t pcs[ 1 ]; + size_t pcs[ 4 ]; /** * @brief If this member is true, then the test action loop is executed. @@ -118,14 +144,35 @@ typedef struct { static ScoreTqReqFlushFifo_Context ScoreTqReqFlushFifo_Instance; -static const char * const ScoreTqReqFlushFifo_PreDesc_Queue[] = { - "Empty", - "NonEmpty", +static const char * const ScoreTqReqFlushFifo_PreDesc_MayStop[] = { + "Yes", + "No", + "NA" +}; + +static const char * const ScoreTqReqFlushFifo_PreDesc_QueueEmpty[] = { + "Yes", + "No", + "NA" +}; + +static const char * const ScoreTqReqFlushFifo_PreDesc_Stop[] = { + "Yes", + "No", + "NA" +}; + +static const char * const ScoreTqReqFlushFifo_PreDesc_WaitState[] = { + "Blocked", + "IntendToBlock", "NA" }; static const char * const * const ScoreTqReqFlushFifo_PreDesc[] = { - ScoreTqReqFlushFifo_PreDesc_Queue, + ScoreTqReqFlushFifo_PreDesc_MayStop, + ScoreTqReqFlushFifo_PreDesc_QueueEmpty, + ScoreTqReqFlushFifo_PreDesc_Stop, + ScoreTqReqFlushFifo_PreDesc_WaitState, NULL }; @@ -141,13 +188,24 @@ static const rtems_tcb *GetTCB( Context *ctx, TQWorkerKind worker ) return ctx->tq_ctx->worker_tcb[ worker ]; } -static void Flush( void *arg ) +static void BlockerAFlush( Context *ctx ) +{ + TQSchedulerRecordStart( ctx->tq_ctx ); + + if ( ctx->stop ) { + TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH_PARTIAL ); + } else { + TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH_ALL ); + } +} + +static void InterruptFlush( void *arg ) { Context *ctx; ctx = arg; TQSchedulerRecordStart( ctx->tq_ctx ); - TQFlush( ctx->tq_ctx ); + TQFlush( ctx->tq_ctx, !ctx->stop ); } static void SchedulerEvent( @@ -164,20 +222,109 @@ static void SchedulerEvent( when == T_SCHEDULER_BEFORE && event->operation == T_SCHEDULER_BLOCK ) { - ctx->request.handler = Flush; - ctx->request.arg = ctx; - CallWithinISRSubmit( &ctx->request ); T_scheduler_set_event_handler( NULL, NULL ); + ctx->request.handler = InterruptFlush; + CallWithinISRSubmit( &ctx->request ); } } -static void ScoreTqReqFlushFifo_Pre_Queue_Prepare( - ScoreTqReqFlushFifo_Context *ctx, - ScoreTqReqFlushFifo_Pre_Queue state +static uint32_t CheckExtractions( Context *ctx ) +{ + uint32_t extracted_threads; + size_t i; + const T_scheduler_event *event; + + extracted_threads = 0; + i = 0; + + if ( !ctx->intend_to_block ) { + /* Event receive */ + T_eq_ptr( GetUnblock( ctx, &i )->thread, GetTCB( ctx, TQ_BLOCKER_A ) ); + } + + event = GetUnblock( ctx, &i ); + + if ( event != &T_scheduler_event_null ) { + if ( ctx->intend_to_block ) { + T_eq_ptr( event->executing, NULL ); + } else { + T_eq_ptr( event->executing, GetTCB( ctx, TQ_BLOCKER_A ) ); + } + + T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_B ) ); + ++extracted_threads; + } + + event = GetUnblock( ctx, &i ); + + if ( event != &T_scheduler_event_null ) { + if ( ctx->intend_to_block ) { + T_eq_ptr( event->executing, NULL ); + } else { + T_eq_ptr( event->executing, GetTCB( ctx, TQ_BLOCKER_A ) ); + } + + T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_C ) ); + ++extracted_threads; + } + + event = GetUnblock( ctx, &i ); + + if ( event != &T_scheduler_event_null ) { + if ( ctx->intend_to_block ) { + T_eq_ptr( event->executing, GetTCB( ctx, TQ_BLOCKER_D ) ); + } else { + T_eq_ptr( event->executing, GetTCB( ctx, TQ_BLOCKER_A ) ); + } + + T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_D ) ); + ++extracted_threads; + } + + T_eq_ptr( GetUnblock( ctx, &i ), &T_scheduler_event_null ); + T_eq_u32( extracted_threads, ctx->tq_ctx->flush_count ); + + return extracted_threads; +} + +static void ScoreTqReqFlushFifo_Pre_MayStop_Prepare( + ScoreTqReqFlushFifo_Context *ctx, + ScoreTqReqFlushFifo_Pre_MayStop state ) { switch ( state ) { - case ScoreTqReqFlushFifo_Pre_Queue_Empty: { + case ScoreTqReqFlushFifo_Pre_MayStop_Yes: { + /* + * Where the flush filter may return NULL. + */ + if ( !ctx->may_stop ) { + ctx->Map.skip = true; + } + break; + } + + case ScoreTqReqFlushFifo_Pre_MayStop_No: { + /* + * Where the flush filter does not return NULL. + */ + if ( ctx->may_stop ) { + ctx->Map.skip = true; + } + break; + } + + case ScoreTqReqFlushFifo_Pre_MayStop_NA: + break; + } +} + +static void ScoreTqReqFlushFifo_Pre_QueueEmpty_Prepare( + ScoreTqReqFlushFifo_Context *ctx, + ScoreTqReqFlushFifo_Pre_QueueEmpty state +) +{ + switch ( state ) { + case ScoreTqReqFlushFifo_Pre_QueueEmpty_Yes: { /* * While the thread queue is empty. */ @@ -185,7 +332,7 @@ static void ScoreTqReqFlushFifo_Pre_Queue_Prepare( break; } - case ScoreTqReqFlushFifo_Pre_Queue_NonEmpty: { + case ScoreTqReqFlushFifo_Pre_QueueEmpty_No: { /* * While the thread queue has at least one enqueued thread. */ @@ -193,7 +340,63 @@ static void ScoreTqReqFlushFifo_Pre_Queue_Prepare( break; } - case ScoreTqReqFlushFifo_Pre_Queue_NA: + case ScoreTqReqFlushFifo_Pre_QueueEmpty_NA: + break; + } +} + +static void ScoreTqReqFlushFifo_Pre_Stop_Prepare( + ScoreTqReqFlushFifo_Context *ctx, + ScoreTqReqFlushFifo_Pre_Stop state +) +{ + switch ( state ) { + case ScoreTqReqFlushFifo_Pre_Stop_Yes: { + /* + * While the flush filter returns NULL for an enqueued thread. + */ + ctx->stop = true; + break; + } + + case ScoreTqReqFlushFifo_Pre_Stop_No: { + /* + * While the flush filter does not return NULL for an enqueued thread. + */ + ctx->stop = false; + break; + } + + case ScoreTqReqFlushFifo_Pre_Stop_NA: + break; + } +} + +static void ScoreTqReqFlushFifo_Pre_WaitState_Prepare( + ScoreTqReqFlushFifo_Context *ctx, + ScoreTqReqFlushFifo_Pre_WaitState state +) +{ + switch ( state ) { + case ScoreTqReqFlushFifo_Pre_WaitState_Blocked: { + /* + * While the least recently enqueued thread on the thread queue is in the + * blocked wait state. + */ + ctx->intend_to_block = false; + break; + } + + case ScoreTqReqFlushFifo_Pre_WaitState_IntendToBlock: { + /* + * While the least recently enqueued thread on the thread queue is in the + * intend to block wait state. + */ + ctx->intend_to_block = true; + break; + } + + case ScoreTqReqFlushFifo_Pre_WaitState_NA: break; } } @@ -203,40 +406,39 @@ static void ScoreTqReqFlushFifo_Post_Operation_Check( ScoreTqReqFlushFifo_Post_Operation state ) { - size_t i; - const T_scheduler_event *event; - - i = 0; + size_t i; + uint32_t extracted_threads; switch ( state ) { case ScoreTqReqFlushFifo_Post_Operation_Nop: { /* - * No operation shall be performed. + * No thread queue extraction operation shall be performed. */ /* Event receive */ + i = 0; T_eq_ptr( GetUnblock( ctx, &i )->thread, GetTCB( ctx, TQ_BLOCKER_A ) ); T_eq_ptr( GetUnblock( ctx, &i ), &T_scheduler_event_null ); break; } - case ScoreTqReqFlushFifo_Post_Operation_TryExtract: { + case ScoreTqReqFlushFifo_Post_Operation_ExtractAll: { /* - * The enqueued threads of the thread queue may be extracted in FIFO + * The enqueued threads shall be extracted from the thread queue in FIFO * order. */ - event = GetUnblock( ctx, &i ); - T_eq_ptr( event->executing, NULL ); - T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_B ) ); - - event = GetUnblock( ctx, &i ); - T_eq_ptr( event->executing, NULL ); - T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_C ) ); - - event = GetUnblock( ctx, &i ); - T_eq_ptr( event->executing, GetTCB( ctx, TQ_BLOCKER_D ) ); - T_eq_ptr( event->thread, GetTCB( ctx, TQ_BLOCKER_D ) ); + extracted_threads = CheckExtractions( ctx ); + T_eq_sz( extracted_threads, ctx->tq_ctx->how_many ); + break; + } - T_eq_ptr( GetUnblock( ctx, &i ), &T_scheduler_event_null ); + case ScoreTqReqFlushFifo_Post_Operation_ExtractPartial: { + /* + * The enqueued threads which precede in FIFO order the enqueued thread + * for which the flush filter returned NULL shall be extracted from the + * thread queue in FIFO order. + */ + extracted_threads = CheckExtractions( ctx ); + T_lt_sz( extracted_threads, ctx->tq_ctx->how_many ); break; } @@ -247,6 +449,7 @@ static void ScoreTqReqFlushFifo_Post_Operation_Check( static void ScoreTqReqFlushFifo_Setup( ScoreTqReqFlushFifo_Context *ctx ) { + ctx->request.arg = ctx; TQReset( ctx->tq_ctx ); TQSetPriority( ctx->tq_ctx, TQ_BLOCKER_A, PRIO_ULTRA_HIGH ); TQSetPriority( ctx->tq_ctx, TQ_BLOCKER_B, PRIO_VERY_HIGH ); @@ -279,31 +482,45 @@ static void ScoreTqReqFlushFifo_Teardown_Wrap( void *arg ) static void ScoreTqReqFlushFifo_Action( ScoreTqReqFlushFifo_Context *ctx ) { + uint32_t flush_count; + TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_ENQUEUE_PREPARE ); if ( ctx->tq_ctx->how_many > 0 ) { TQSend( ctx->tq_ctx, TQ_BLOCKER_B, TQ_EVENT_ENQUEUE ); TQSend( ctx->tq_ctx, TQ_BLOCKER_C, TQ_EVENT_ENQUEUE ); - T_scheduler_set_event_handler( SchedulerEvent, ctx ); + + if ( ctx->intend_to_block ) { + T_scheduler_set_event_handler( SchedulerEvent, ctx ); + } + TQSend( ctx->tq_ctx, TQ_BLOCKER_D, TQ_EVENT_ENQUEUE ); + + if ( !ctx->intend_to_block ) { + BlockerAFlush( ctx ); + } } else { - TQSchedulerRecordStart( ctx->tq_ctx ); - TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH ); + BlockerAFlush( ctx ); } + flush_count = ctx->tq_ctx->flush_count; TQSchedulerRecordStop( ctx->tq_ctx ); + TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH_ALL ); TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_ENQUEUE_DONE ); + ctx->tq_ctx->flush_count = flush_count; } static const ScoreTqReqFlushFifo_Entry ScoreTqReqFlushFifo_Entries[] = { - { 0, 0, ScoreTqReqFlushFifo_Post_Operation_Nop }, - { 0, 0, ScoreTqReqFlushFifo_Post_Operation_TryExtract } + { 0, 0, 0, 1, 1, ScoreTqReqFlushFifo_Post_Operation_Nop }, + { 0, 0, 0, 0, 0, ScoreTqReqFlushFifo_Post_Operation_ExtractAll }, + { 0, 0, 0, 0, 0, ScoreTqReqFlushFifo_Post_Operation_ExtractPartial }, + { 1, 0, 0, 0, 0, ScoreTqReqFlushFifo_Post_Operation_NA } }; static const uint8_t ScoreTqReqFlushFifo_Map[] = { - 0, 1 + 0, 0, 0, 0, 2, 2, 1, 1, 0, 0, 0, 0, 3, 3, 1, 1 }; static size_t ScoreTqReqFlushFifo_Scope( void *arg, char *buf, size_t n ) @@ -327,22 +544,86 @@ static T_fixture ScoreTqReqFlushFifo_Fixture = { .initial_context = &ScoreTqReqFlushFifo_Instance }; +static const uint8_t ScoreTqReqFlushFifo_Weights[] = { + 8, 4, 2, 1 +}; + +static void ScoreTqReqFlushFifo_Skip( + ScoreTqReqFlushFifo_Context *ctx, + size_t index +) +{ + switch ( index + 1 ) { + case 1: + ctx->Map.pci[ 1 ] = ScoreTqReqFlushFifo_Pre_QueueEmpty_NA - 1; + /* Fall through */ + case 2: + ctx->Map.pci[ 2 ] = ScoreTqReqFlushFifo_Pre_Stop_NA - 1; + /* Fall through */ + case 3: + ctx->Map.pci[ 3 ] = ScoreTqReqFlushFifo_Pre_WaitState_NA - 1; + break; + } +} + static inline ScoreTqReqFlushFifo_Entry ScoreTqReqFlushFifo_PopEntry( ScoreTqReqFlushFifo_Context *ctx ) { size_t index; - index = ctx->Map.index; + if ( ctx->Map.skip ) { + size_t i; + + ctx->Map.skip = false; + index = 0; + + for ( i = 0; i < 4; ++i ) { + index += ScoreTqReqFlushFifo_Weights[ i ] * ctx->Map.pci[ i ]; + } + } else { + index = ctx->Map.index; + } + ctx->Map.index = index + 1; + return ScoreTqReqFlushFifo_Entries[ ScoreTqReqFlushFifo_Map[ index ] ]; } +static void ScoreTqReqFlushFifo_SetPreConditionStates( + ScoreTqReqFlushFifo_Context *ctx +) +{ + ctx->Map.pcs[ 0 ] = ctx->Map.pci[ 0 ]; + ctx->Map.pcs[ 1 ] = ctx->Map.pci[ 1 ]; + + if ( ctx->Map.entry.Pre_Stop_NA ) { + ctx->Map.pcs[ 2 ] = ScoreTqReqFlushFifo_Pre_Stop_NA; + } else { + ctx->Map.pcs[ 2 ] = ctx->Map.pci[ 2 ]; + } + + if ( ctx->Map.entry.Pre_WaitState_NA ) { + ctx->Map.pcs[ 3 ] = ScoreTqReqFlushFifo_Pre_WaitState_NA; + } else { + ctx->Map.pcs[ 3 ] = ctx->Map.pci[ 3 ]; + } +} + static void ScoreTqReqFlushFifo_TestVariant( ScoreTqReqFlushFifo_Context *ctx ) { - ScoreTqReqFlushFifo_Pre_Queue_Prepare( ctx, ctx->Map.pcs[ 0 ] ); + ScoreTqReqFlushFifo_Pre_MayStop_Prepare( ctx, ctx->Map.pcs[ 0 ] ); + + if ( ctx->Map.skip ) { + ScoreTqReqFlushFifo_Skip( ctx, 0 ); + return; + } + + ScoreTqReqFlushFifo_Pre_QueueEmpty_Prepare( ctx, ctx->Map.pcs[ 1 ] ); + ScoreTqReqFlushFifo_Pre_Stop_Prepare( ctx, ctx->Map.pcs[ 2 ] ); + ScoreTqReqFlushFifo_Pre_WaitState_Prepare( ctx, ctx->Map.pcs[ 3 ] ); ScoreTqReqFlushFifo_Action( ctx ); ScoreTqReqFlushFifo_Post_Operation_Check( ctx, @@ -352,12 +633,18 @@ static void ScoreTqReqFlushFifo_TestVariant( ScoreTqReqFlushFifo_Context *ctx ) static T_fixture_node ScoreTqReqFlushFifo_Node; -void ScoreTqReqFlushFifo_Run( TQContext *tq_ctx ) +static T_remark ScoreTqReqFlushFifo_Remark = { + .next = NULL, + .remark = "ScoreTqReqFlushFifo" +}; + +void ScoreTqReqFlushFifo_Run( TQContext *tq_ctx, bool may_stop ) { ScoreTqReqFlushFifo_Context *ctx; ctx = &ScoreTqReqFlushFifo_Instance; ctx->tq_ctx = tq_ctx; + ctx->may_stop = may_stop; ctx = T_push_fixture( &ScoreTqReqFlushFifo_Node, @@ -365,16 +652,42 @@ void ScoreTqReqFlushFifo_Run( TQContext *tq_ctx ) ); ctx->Map.in_action_loop = true; ctx->Map.index = 0; + ctx->Map.skip = false; for ( - ctx->Map.pcs[ 0 ] = ScoreTqReqFlushFifo_Pre_Queue_Empty; - ctx->Map.pcs[ 0 ] < ScoreTqReqFlushFifo_Pre_Queue_NA; - ++ctx->Map.pcs[ 0 ] + ctx->Map.pci[ 0 ] = ScoreTqReqFlushFifo_Pre_MayStop_Yes; + ctx->Map.pci[ 0 ] < ScoreTqReqFlushFifo_Pre_MayStop_NA; + ++ctx->Map.pci[ 0 ] ) { - ctx->Map.entry = ScoreTqReqFlushFifo_PopEntry( ctx ); - ScoreTqReqFlushFifo_TestVariant( ctx ); + for ( + ctx->Map.pci[ 1 ] = ScoreTqReqFlushFifo_Pre_QueueEmpty_Yes; + ctx->Map.pci[ 1 ] < ScoreTqReqFlushFifo_Pre_QueueEmpty_NA; + ++ctx->Map.pci[ 1 ] + ) { + for ( + ctx->Map.pci[ 2 ] = ScoreTqReqFlushFifo_Pre_Stop_Yes; + ctx->Map.pci[ 2 ] < ScoreTqReqFlushFifo_Pre_Stop_NA; + ++ctx->Map.pci[ 2 ] + ) { + for ( + ctx->Map.pci[ 3 ] = ScoreTqReqFlushFifo_Pre_WaitState_Blocked; + ctx->Map.pci[ 3 ] < ScoreTqReqFlushFifo_Pre_WaitState_NA; + ++ctx->Map.pci[ 3 ] + ) { + ctx->Map.entry = ScoreTqReqFlushFifo_PopEntry( ctx ); + + if ( ctx->Map.entry.Skip ) { + continue; + } + + ScoreTqReqFlushFifo_SetPreConditionStates( ctx ); + ScoreTqReqFlushFifo_TestVariant( ctx ); + } + } + } } + T_add_remark( &ScoreTqReqFlushFifo_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-flush-fifo.h b/testsuites/validation/tr-tq-flush-fifo.h index dca1444891..8d5bb8b8d6 100644 --- a/testsuites/validation/tr-tq-flush-fifo.h +++ b/testsuites/validation/tr-tq-flush-fifo.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqFlushFifo + * @ingroup ScoreTqReqFlushFifo */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,20 +58,39 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqFlushFifo + * @addtogroup ScoreTqReqFlushFifo * * @{ */ typedef enum { - ScoreTqReqFlushFifo_Pre_Queue_Empty, - ScoreTqReqFlushFifo_Pre_Queue_NonEmpty, - ScoreTqReqFlushFifo_Pre_Queue_NA -} ScoreTqReqFlushFifo_Pre_Queue; + ScoreTqReqFlushFifo_Pre_MayStop_Yes, + ScoreTqReqFlushFifo_Pre_MayStop_No, + ScoreTqReqFlushFifo_Pre_MayStop_NA +} ScoreTqReqFlushFifo_Pre_MayStop; + +typedef enum { + ScoreTqReqFlushFifo_Pre_QueueEmpty_Yes, + ScoreTqReqFlushFifo_Pre_QueueEmpty_No, + ScoreTqReqFlushFifo_Pre_QueueEmpty_NA +} ScoreTqReqFlushFifo_Pre_QueueEmpty; + +typedef enum { + ScoreTqReqFlushFifo_Pre_Stop_Yes, + ScoreTqReqFlushFifo_Pre_Stop_No, + ScoreTqReqFlushFifo_Pre_Stop_NA +} ScoreTqReqFlushFifo_Pre_Stop; + +typedef enum { + ScoreTqReqFlushFifo_Pre_WaitState_Blocked, + ScoreTqReqFlushFifo_Pre_WaitState_IntendToBlock, + ScoreTqReqFlushFifo_Pre_WaitState_NA +} ScoreTqReqFlushFifo_Pre_WaitState; typedef enum { ScoreTqReqFlushFifo_Post_Operation_Nop, - ScoreTqReqFlushFifo_Post_Operation_TryExtract, + ScoreTqReqFlushFifo_Post_Operation_ExtractAll, + ScoreTqReqFlushFifo_Post_Operation_ExtractPartial, ScoreTqReqFlushFifo_Post_Operation_NA } ScoreTqReqFlushFifo_Post_Operation; @@ -79,8 +98,10 @@ typedef enum { * @brief Runs the parameterized test case. * * @param[in,out] tq_ctx is the thread queue test context. + * + * @param may_stop is true, if a partial flush is supported. */ -void ScoreTqReqFlushFifo_Run( TQContext *tq_ctx ); +void ScoreTqReqFlushFifo_Run( TQContext *tq_ctx, bool may_stop ); /** @} */ diff --git a/testsuites/validation/tr-tq-flush-priority-inherit.c b/testsuites/validation/tr-tq-flush-priority-inherit.c index beb48ebbe7..903dc20cf2 100644 --- a/testsuites/validation/tr-tq-flush-priority-inherit.c +++ b/testsuites/validation/tr-tq-flush-priority-inherit.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqFlushPriorityInherit + * @ingroup ScoreTqReqFlushPriorityInherit */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,10 +58,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqFlushPriorityInherit \ + * @defgroup ScoreTqReqFlushPriorityInherit \ * spec:/score/tq/req/flush-priority-inherit * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -81,7 +81,7 @@ typedef struct { /** * @brief This member contains the call within ISR request. */ - CallWithinISRRequest request;; + CallWithinISRRequest request; /** * @brief If this member is true, then a minimum priority of the owner of the @@ -179,7 +179,7 @@ static void Flush( void *arg ) ctx = arg; TQSchedulerRecordStart( ctx->tq_ctx ); - TQFlush( ctx->tq_ctx ); + TQFlush( ctx->tq_ctx, true ); } static void SchedulerEvent( @@ -434,7 +434,7 @@ static void ScoreTqReqFlushPriorityInherit_Action( ); } else { TQSchedulerRecordStart( ctx->tq_ctx ); - TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH ); + TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH_ALL ); } TQSchedulerRecordStop( ctx->tq_ctx ); @@ -535,6 +535,11 @@ static void ScoreTqReqFlushPriorityInherit_TestVariant( static T_fixture_node ScoreTqReqFlushPriorityInherit_Node; +static T_remark ScoreTqReqFlushPriorityInherit_Remark = { + .next = NULL, + .remark = "ScoreTqReqFlushPriorityInherit" +}; + void ScoreTqReqFlushPriorityInherit_Run( TQContext *tq_ctx ) { ScoreTqReqFlushPriorityInherit_Context *ctx; @@ -565,6 +570,7 @@ void ScoreTqReqFlushPriorityInherit_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqFlushPriorityInherit_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-flush-priority-inherit.h b/testsuites/validation/tr-tq-flush-priority-inherit.h index 1b12f1afb0..277084244c 100644 --- a/testsuites/validation/tr-tq-flush-priority-inherit.h +++ b/testsuites/validation/tr-tq-flush-priority-inherit.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqFlushPriorityInherit + * @ingroup ScoreTqReqFlushPriorityInherit */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqFlushPriorityInherit + * @addtogroup ScoreTqReqFlushPriorityInherit * * @{ */ diff --git a/testsuites/validation/tr-tq-flush-priority.c b/testsuites/validation/tr-tq-flush-priority.c index 26e2a7fc3b..b8a06c2340 100644 --- a/testsuites/validation/tr-tq-flush-priority.c +++ b/testsuites/validation/tr-tq-flush-priority.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqFlushPriority + * @ingroup ScoreTqReqFlushPriority */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,10 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqFlushPriority \ - * spec:/score/tq/req/flush-priority + * @defgroup ScoreTqReqFlushPriority spec:/score/tq/req/flush-priority * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -79,7 +78,7 @@ typedef struct { /** * @brief This member contains the call within ISR request. */ - CallWithinISRRequest request;; + CallWithinISRRequest request; /** * @brief This member contains a copy of the corresponding @@ -154,7 +153,7 @@ static void Flush( void *arg ) ctx = arg; TQSchedulerRecordStart( ctx->tq_ctx ); - TQFlush( ctx->tq_ctx ); + TQFlush( ctx->tq_ctx, true ); } static void SchedulerEvent( @@ -315,7 +314,7 @@ static void ScoreTqReqFlushPriority_Action( ); } else { TQSchedulerRecordStart( ctx->tq_ctx ); - TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH ); + TQSend( ctx->tq_ctx, TQ_BLOCKER_A, TQ_EVENT_FLUSH_ALL ); } TQSchedulerRecordStop( ctx->tq_ctx ); @@ -386,6 +385,11 @@ static void ScoreTqReqFlushPriority_TestVariant( static T_fixture_node ScoreTqReqFlushPriority_Node; +static T_remark ScoreTqReqFlushPriority_Remark = { + .next = NULL, + .remark = "ScoreTqReqFlushPriority" +}; + void ScoreTqReqFlushPriority_Run( TQContext *tq_ctx, bool supports_multiple_priority_queues @@ -413,6 +417,7 @@ void ScoreTqReqFlushPriority_Run( ScoreTqReqFlushPriority_TestVariant( ctx ); } + T_add_remark( &ScoreTqReqFlushPriority_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-flush-priority.h b/testsuites/validation/tr-tq-flush-priority.h index 72bc372ca1..ae700ca192 100644 --- a/testsuites/validation/tr-tq-flush-priority.h +++ b/testsuites/validation/tr-tq-flush-priority.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqFlushPriority + * @ingroup ScoreTqReqFlushPriority */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqFlushPriority + * @addtogroup ScoreTqReqFlushPriority * * @{ */ diff --git a/testsuites/validation/tr-tq-surrender-mrsp.c b/testsuites/validation/tr-tq-surrender-mrsp.c index 156d4c4a5b..903146ccbe 100644 --- a/testsuites/validation/tr-tq-surrender-mrsp.c +++ b/testsuites/validation/tr-tq-surrender-mrsp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqSurrenderMrsp + * @ingroup ScoreTqReqSurrenderMrsp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,10 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqSurrenderMrsp \ - * spec:/score/tq/req/surrender-mrsp + * @defgroup ScoreTqReqSurrenderMrsp spec:/score/tq/req/surrender-mrsp * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -354,7 +353,7 @@ static void ScoreTqReqSurrenderMrsp_Pre_Suspended_Prepare( switch ( state ) { case ScoreTqReqSurrenderMrsp_Pre_Suspended_Yes: { /* - * Whiel the new owner is suspended. + * While the new owner is suspended. */ ctx->suspended = true; break; @@ -362,7 +361,7 @@ static void ScoreTqReqSurrenderMrsp_Pre_Suspended_Prepare( case ScoreTqReqSurrenderMrsp_Pre_Suspended_No: { /* - * Whiel the new owner is not suspended. + * While the new owner is not suspended. */ ctx->suspended = false; break; @@ -975,6 +974,11 @@ static void ScoreTqReqSurrenderMrsp_TestVariant( static T_fixture_node ScoreTqReqSurrenderMrsp_Node; +static T_remark ScoreTqReqSurrenderMrsp_Remark = { + .next = NULL, + .remark = "ScoreTqReqSurrenderMrsp" +}; + void ScoreTqReqSurrenderMrsp_Run( TQContext *tq_ctx ) { ScoreTqReqSurrenderMrsp_Context *ctx; @@ -1030,6 +1034,7 @@ void ScoreTqReqSurrenderMrsp_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqSurrenderMrsp_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-surrender-mrsp.h b/testsuites/validation/tr-tq-surrender-mrsp.h index 66be73adbb..eff865e612 100644 --- a/testsuites/validation/tr-tq-surrender-mrsp.h +++ b/testsuites/validation/tr-tq-surrender-mrsp.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqSurrenderMrsp + * @ingroup ScoreTqReqSurrenderMrsp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqSurrenderMrsp + * @addtogroup ScoreTqReqSurrenderMrsp * * @{ */ diff --git a/testsuites/validation/tr-tq-surrender-priority-inherit.c b/testsuites/validation/tr-tq-surrender-priority-inherit.c index 75b93e40d2..d0a580f988 100644 --- a/testsuites/validation/tr-tq-surrender-priority-inherit.c +++ b/testsuites/validation/tr-tq-surrender-priority-inherit.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqSurrenderPriorityInherit + * @ingroup ScoreTqReqSurrenderPriorityInherit */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqSurrenderPriorityInherit \ + * @defgroup ScoreTqReqSurrenderPriorityInherit \ * spec:/score/tq/req/surrender-priority-inherit * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -96,7 +96,7 @@ typedef struct { /** * @brief This member contains the call within ISR request. */ - CallWithinISRRequest request;; + CallWithinISRRequest request; /** * @brief This member contains the barrier to synchronize the runner and the @@ -921,7 +921,7 @@ static void ScoreTqReqSurrenderPriorityInherit_Pre_Suspended_Prepare( switch ( state ) { case ScoreTqReqSurrenderPriorityInherit_Pre_Suspended_Yes: { /* - * Whiel the new owner is suspended. + * While the new owner is suspended. */ ctx->suspended = true; break; @@ -929,7 +929,7 @@ static void ScoreTqReqSurrenderPriorityInherit_Pre_Suspended_Prepare( case ScoreTqReqSurrenderPriorityInherit_Pre_Suspended_No: { /* - * Whiel the new owner is not suspended. + * While the new owner is not suspended. */ ctx->suspended = false; break; @@ -2435,6 +2435,11 @@ static void ScoreTqReqSurrenderPriorityInherit_TestVariant( static T_fixture_node ScoreTqReqSurrenderPriorityInherit_Node; +static T_remark ScoreTqReqSurrenderPriorityInherit_Remark = { + .next = NULL, + .remark = "ScoreTqReqSurrenderPriorityInherit" +}; + void ScoreTqReqSurrenderPriorityInherit_Run( TQContext *tq_ctx ) { ScoreTqReqSurrenderPriorityInherit_Context *ctx; @@ -2510,6 +2515,7 @@ void ScoreTqReqSurrenderPriorityInherit_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqSurrenderPriorityInherit_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-surrender-priority-inherit.h b/testsuites/validation/tr-tq-surrender-priority-inherit.h index b792de1b2e..941e9eb545 100644 --- a/testsuites/validation/tr-tq-surrender-priority-inherit.h +++ b/testsuites/validation/tr-tq-surrender-priority-inherit.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqSurrenderPriorityInherit + * @ingroup ScoreTqReqSurrenderPriorityInherit */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqSurrenderPriorityInherit + * @addtogroup ScoreTqReqSurrenderPriorityInherit * * @{ */ diff --git a/testsuites/validation/tr-tq-surrender.c b/testsuites/validation/tr-tq-surrender.c index 60091c2d0c..ce680d71d2 100644 --- a/testsuites/validation/tr-tq-surrender.c +++ b/testsuites/validation/tr-tq-surrender.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqSurrender + * @ingroup ScoreTqReqSurrender */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqSurrender spec:/score/tq/req/surrender + * @defgroup ScoreTqReqSurrender spec:/score/tq/req/surrender * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -84,7 +84,7 @@ typedef struct { /** * @brief This member contains the call within ISR request. */ - CallWithinISRRequest request;; + CallWithinISRRequest request; /** * @brief This member contains the barrier to synchronize the runner and the @@ -637,6 +637,11 @@ static void ScoreTqReqSurrender_TestVariant( ScoreTqReqSurrender_Context *ctx ) static T_fixture_node ScoreTqReqSurrender_Node; +static T_remark ScoreTqReqSurrender_Remark = { + .next = NULL, + .remark = "ScoreTqReqSurrender" +}; + void ScoreTqReqSurrender_Run( TQContext *tq_ctx ) { ScoreTqReqSurrender_Context *ctx; @@ -678,6 +683,7 @@ void ScoreTqReqSurrender_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqSurrender_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-surrender.h b/testsuites/validation/tr-tq-surrender.h index fd64bbfa02..8155387069 100644 --- a/testsuites/validation/tr-tq-surrender.h +++ b/testsuites/validation/tr-tq-surrender.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqSurrender + * @ingroup ScoreTqReqSurrender */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqSurrender + * @addtogroup ScoreTqReqSurrender * * @{ */ diff --git a/testsuites/validation/tr-tq-timeout-mrsp.c b/testsuites/validation/tr-tq-timeout-mrsp.c index 2ee4960495..7362e1943b 100644 --- a/testsuites/validation/tr-tq-timeout-mrsp.c +++ b/testsuites/validation/tr-tq-timeout-mrsp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqTimeoutMrsp + * @ingroup ScoreTqReqTimeoutMrsp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,9 +61,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqTimeoutMrsp spec:/score/tq/req/timeout-mrsp + * @defgroup ScoreTqReqTimeoutMrsp spec:/score/tq/req/timeout-mrsp * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -439,6 +439,11 @@ static void ScoreTqReqTimeoutMrsp_TestVariant( static T_fixture_node ScoreTqReqTimeoutMrsp_Node; +static T_remark ScoreTqReqTimeoutMrsp_Remark = { + .next = NULL, + .remark = "ScoreTqReqTimeoutMrsp" +}; + void ScoreTqReqTimeoutMrsp_Run( TQContext *tq_ctx ) { ScoreTqReqTimeoutMrsp_Context *ctx; @@ -470,6 +475,7 @@ void ScoreTqReqTimeoutMrsp_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqTimeoutMrsp_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-timeout-mrsp.h b/testsuites/validation/tr-tq-timeout-mrsp.h index a08ef170c5..56df23d88b 100644 --- a/testsuites/validation/tr-tq-timeout-mrsp.h +++ b/testsuites/validation/tr-tq-timeout-mrsp.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqTimeoutMrsp + * @ingroup ScoreTqReqTimeoutMrsp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqTimeoutMrsp + * @addtogroup ScoreTqReqTimeoutMrsp * * @{ */ diff --git a/testsuites/validation/tr-tq-timeout-priority-inherit.c b/testsuites/validation/tr-tq-timeout-priority-inherit.c index 6e744ba7d9..12ac70df90 100644 --- a/testsuites/validation/tr-tq-timeout-priority-inherit.c +++ b/testsuites/validation/tr-tq-timeout-priority-inherit.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqTimeoutPriorityInherit + * @ingroup ScoreTqReqTimeoutPriorityInherit */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,10 +61,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqTimeoutPriorityInherit \ + * @defgroup ScoreTqReqTimeoutPriorityInherit \ * spec:/score/tq/req/timeout-priority-inherit * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -93,7 +93,7 @@ typedef struct { /** * @brief This member contains the call within ISR request. */ - CallWithinISRRequest request;; + CallWithinISRRequest request; /** * @brief This member specifies the scheduler of the thread. @@ -2071,6 +2071,11 @@ static void ScoreTqReqTimeoutPriorityInherit_TestVariant( static T_fixture_node ScoreTqReqTimeoutPriorityInherit_Node; +static T_remark ScoreTqReqTimeoutPriorityInherit_Remark = { + .next = NULL, + .remark = "ScoreTqReqTimeoutPriorityInherit" +}; + void ScoreTqReqTimeoutPriorityInherit_Run( TQContext *tq_ctx ) { ScoreTqReqTimeoutPriorityInherit_Context *ctx; @@ -2148,6 +2153,7 @@ void ScoreTqReqTimeoutPriorityInherit_Run( TQContext *tq_ctx ) } } + T_add_remark( &ScoreTqReqTimeoutPriorityInherit_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-timeout-priority-inherit.h b/testsuites/validation/tr-tq-timeout-priority-inherit.h index a75665f659..149ca69755 100644 --- a/testsuites/validation/tr-tq-timeout-priority-inherit.h +++ b/testsuites/validation/tr-tq-timeout-priority-inherit.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqTimeoutPriorityInherit + * @ingroup ScoreTqReqTimeoutPriorityInherit */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqTimeoutPriorityInherit + * @addtogroup ScoreTqReqTimeoutPriorityInherit * * @{ */ diff --git a/testsuites/validation/tr-tq-timeout.c b/testsuites/validation/tr-tq-timeout.c index 5575abdd57..c9bc13a937 100644 --- a/testsuites/validation/tr-tq-timeout.c +++ b/testsuites/validation/tr-tq-timeout.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqTimeout + * @ingroup ScoreTqReqTimeout */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -60,9 +60,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestCaseScoreTqReqTimeout spec:/score/tq/req/timeout + * @defgroup ScoreTqReqTimeout spec:/score/tq/req/timeout * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 * * @{ */ @@ -81,7 +81,7 @@ typedef struct { /** * @brief This member contains the call within ISR request. */ - CallWithinISRRequest request;; + CallWithinISRRequest request; /** * @brief This member contains a copy of the corresponding @@ -427,6 +427,11 @@ static void ScoreTqReqTimeout_TestVariant( ScoreTqReqTimeout_Context *ctx ) static T_fixture_node ScoreTqReqTimeout_Node; +static T_remark ScoreTqReqTimeout_Remark = { + .next = NULL, + .remark = "ScoreTqReqTimeout" +}; + void ScoreTqReqTimeout_Run( TQContext *tq_ctx ) { ScoreTqReqTimeout_Context *ctx; @@ -447,6 +452,7 @@ void ScoreTqReqTimeout_Run( TQContext *tq_ctx ) ScoreTqReqTimeout_TestVariant( ctx ); } + T_add_remark( &ScoreTqReqTimeout_Remark ); T_pop_fixture(); } diff --git a/testsuites/validation/tr-tq-timeout.h b/testsuites/validation/tr-tq-timeout.h index 487c32743d..825ba798ea 100644 --- a/testsuites/validation/tr-tq-timeout.h +++ b/testsuites/validation/tr-tq-timeout.h @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestCaseScoreTqReqTimeout + * @ingroup ScoreTqReqTimeout */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,7 +58,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestCaseScoreTqReqTimeout + * @addtogroup ScoreTqReqTimeout * * @{ */ diff --git a/testsuites/validation/ts-acfg.h b/testsuites/validation/ts-acfg.h index 3ee9951ebd..60d1833857 100644 --- a/testsuites/validation/ts-acfg.h +++ b/testsuites/validation/ts-acfg.h @@ -3,12 +3,14 @@ /** * @file * + * @ingroup RTEMSTestSuitesValidation + * * @brief This header file provides a validation test suite runner for * validation test cases specific to the application configuration. */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/ts-config.h b/testsuites/validation/ts-config.h index ecdd3b8f8d..f5f46738f0 100644 --- a/testsuites/validation/ts-config.h +++ b/testsuites/validation/ts-config.h @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This header file provides the constants used by the test suite * configuration. */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -44,7 +44,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestSuites + * @addtogroup RTEMSTestSuitesValidation * * @{ */ @@ -65,7 +65,7 @@ extern "C" { #define TEST_SCHEDULER_D_NAME rtems_build_name( 'D', ' ', ' ', ' ' ) -#if defined( __OPTIMIZE__ ) && !defined( RTEMS_COVERAGE ) +#if defined( __OPTIMIZE__ ) && !defined( RTEMS_GCOV_COVERAGE ) #define TEST_BASE_STACK_SIZE RTEMS_MINIMUM_STACK_SIZE #else #define TEST_BASE_STACK_SIZE ( 4 * RTEMS_MINIMUM_STACK_SIZE ) @@ -109,7 +109,7 @@ void *test_task_stack_allocate( size_t size ); void test_task_stack_deallocate( void *stack ); -void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t size ); +void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t *size ); extern rtems_task_argument test_runner_argument; diff --git a/testsuites/validation/ts-default.h b/testsuites/validation/ts-default.h index 9f317abf80..86c0b4e345 100644 --- a/testsuites/validation/ts-default.h +++ b/testsuites/validation/ts-default.h @@ -3,12 +3,14 @@ /** * @file * + * @ingroup RTEMSTestSuitesValidation + * * @brief This header file provides the default validation test suite runner * and application configuration. */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -296,25 +298,38 @@ T_scheduler_operations[ CONFIGURE_MAXIMUM_PROCESSORS ] = { #define SCHEDULER_PRIORITY_ENTRY_POINTS T_SCHEDULER_ENTRY_POINTS -#define CONFIGURE_SCHEDULER_NAME TEST_SCHEDULER_A_NAME - #define CONFIGURE_SCHEDULER_PRIORITY +#if defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES) + +#include <rtems/scheduler.h> + +RTEMS_SCHEDULER_PRIORITY( a, 64 ); + +#else /* CONFIGURE_SCHEDULER_TABLE_ENTRIES */ + +#define CONFIGURE_SCHEDULER_NAME TEST_SCHEDULER_A_NAME + #define CONFIGURE_MAXIMUM_PRIORITY 127 +#endif /* CONFIGURE_SCHEDULER_TABLE_ENTRIES */ + #endif #define CONFIGURE_IDLE_TASK_STACK_SIZE TEST_IDLE_STACK_SIZE static char test_idle_stacks[ CONFIGURE_MAXIMUM_PROCESSORS ][ - ( TEST_IDLE_STACK_SIZE + CPU_IDLE_TASK_IS_FP * CONTEXT_FP_SIZE ) + RTEMS_ALIGN_UP( + MAX_TLS_SIZE + TEST_IDLE_STACK_SIZE + CPU_IDLE_TASK_IS_FP * CONTEXT_FP_SIZE, + CPU_INTERRUPT_STACK_ALIGNMENT + ) ] RTEMS_ALIGNED( CPU_INTERRUPT_STACK_ALIGNMENT ) RTEMS_SECTION( ".rtemsstack.idle" ); -void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t size ) +void *test_idle_task_stack_allocate( uint32_t cpu_index, size_t *size ) { - if ( size > sizeof( test_idle_stacks[ 0 ] ) ) { + if ( *size > sizeof( test_idle_stacks[ 0 ] ) ) { rtems_fatal( RTEMS_FATAL_SOURCE_APPLICATION, 0xABAD1DEA ); } diff --git a/testsuites/validation/ts-fatal-boot-processor-not-assigned-to-scheduler.c b/testsuites/validation/ts-fatal-boot-processor-not-assigned-to-scheduler.c index 1222b26b2e..c983cfd406 100644 --- a/testsuites/validation/ts-fatal-boot-processor-not-assigned-to-scheduler.c +++ b/testsuites/validation/ts-fatal-boot-processor-not-assigned-to-scheduler.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesFatalBootProcessorNotAssignedToScheduler + * @ingroup TestsuitesFatalBootProcessorNotAssignedToScheduler */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,10 +58,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesFatalBootProcessorNotAssignedToScheduler \ + * @defgroup TestsuitesFatalBootProcessorNotAssignedToScheduler \ * spec:/testsuites/fatal-boot-processor-not-assigned-to-scheduler * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite uses an application configuration which * triggers a fatal error during system initialization. @@ -69,7 +69,7 @@ * @{ */ -const char rtems_test_name[] = "FatalBootProcessorNotAssignedToScheduler"; +const char rtems_test_name[] = "TestsuitesFatalBootProcessorNotAssignedToScheduler"; #define FATAL_SYSINIT_RUN \ ScoreSmpValFatalBootProcessorNotAssignedToScheduler_Run diff --git a/testsuites/validation/ts-fatal-idle-thread-create-failed.c b/testsuites/validation/ts-fatal-idle-thread-create-failed.c new file mode 100644 index 0000000000..fb7a36c11a --- /dev/null +++ b/testsuites/validation/ts-fatal-idle-thread-create-failed.c @@ -0,0 +1,90 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup TestsuitesFatalIdleThreadCreateFailed + */ + +/* + * Copyright (C) 2022 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tr-fatal-idle-thread-create-failed.h" + +#include <rtems/test.h> + +/** + * @defgroup TestsuitesFatalIdleThreadCreateFailed \ + * spec:/testsuites/fatal-idle-thread-create-failed + * + * @ingroup RTEMSTestSuitesValidation + * + * @brief This validation test suite contains a test case which is triggered by + * a fatal error during system initialization. + * + * @{ + */ + +const char rtems_test_name[] = "TestsuitesFatalIdleThreadCreateFailed"; + +static bool CreateTask( rtems_tcb *executing, rtems_tcb *created ) +{ + (void) executing; + (void) created; + return false; +} + +#define FATAL_SYSINIT_RUN ScoreThreadValFatalIdleThreadCreateFailed_Run + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION + +#define FATAL_SYSINIT_INITIAL_EXTENSION { .thread_create = CreateTask } + +#include "ts-fatal-sysinit.h" + +/** @} */ diff --git a/testsuites/validation/ts-fatal-idle-thread-stack-too-small.c b/testsuites/validation/ts-fatal-idle-thread-stack-too-small.c new file mode 100644 index 0000000000..ddfe59df13 --- /dev/null +++ b/testsuites/validation/ts-fatal-idle-thread-stack-too-small.c @@ -0,0 +1,97 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup TestsuitesFatalIdleThreadStackTooSmall + */ + +/* + * Copyright (C) 2021 embedded brains GmbH & Co. KG + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "tr-fatal-idle-thread-stack-too-small.h" + +#include <rtems/test.h> + +/** + * @defgroup TestsuitesFatalIdleThreadStackTooSmall \ + * spec:/testsuites/fatal-idle-thread-stack-too-small + * + * @ingroup RTEMSTestSuitesValidation + * + * @brief This validation test suite contains a test case which triggers a + * fatal error during system initialization. + * + * @{ + */ + +const char rtems_test_name[] = "TestsuitesFatalIdleThreadStackTooSmall"; + +#define FATAL_SYSINIT_RUN ScoreThreadValFatalIdleThreadStackTooSmall_Run + +static _Thread_local volatile uint8_t zero[ RTEMS_MINIMUM_STACK_SIZE ]; + +static void Init( rtems_task_argument arg ) +{ + (void) arg; + rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, zero[ 0 ] + 1 ); +} + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE 1 + +#define CONFIGURE_INIT_TASK_PRIORITY 0 + +#define CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#include "ts-fatal-sysinit.h" + +/** @} */ diff --git a/testsuites/validation/ts-fatal-init-task-construct-failed.c b/testsuites/validation/ts-fatal-init-task-construct-failed.c index 8efd2b32ce..d8c87428e8 100644 --- a/testsuites/validation/ts-fatal-init-task-construct-failed.c +++ b/testsuites/validation/ts-fatal-init-task-construct-failed.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesFatalInitTaskConstructFailed + * @ingroup TestsuitesFatalInitTaskConstructFailed */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesFatalInitTaskConstructFailed \ + * @defgroup TestsuitesFatalInitTaskConstructFailed \ * spec:/testsuites/fatal-init-task-construct-failed * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains a test case which triggers a * fatal error during system initialization. @@ -68,7 +68,7 @@ * @{ */ -const char rtems_test_name[] = "FatalInitTaskConstructFailed"; +const char rtems_test_name[] = "TestsuitesFatalInitTaskConstructFailed"; #define FATAL_SYSINIT_RUN AcfgValFatalInitTaskConstructFailed_Run diff --git a/testsuites/validation/ts-fatal-mandatory-processor-not-present.c b/testsuites/validation/ts-fatal-mandatory-processor-not-present.c index 3645313755..f9629d9699 100644 --- a/testsuites/validation/ts-fatal-mandatory-processor-not-present.c +++ b/testsuites/validation/ts-fatal-mandatory-processor-not-present.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesFatalMandatoryProcessorNotPresent + * @ingroup TestsuitesFatalMandatoryProcessorNotPresent */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,10 +58,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesFatalMandatoryProcessorNotPresent \ + * @defgroup TestsuitesFatalMandatoryProcessorNotPresent \ * spec:/testsuites/fatal-mandatory-processor-not-present * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains a test case which triggers a * fatal error during system initialization. @@ -69,7 +69,7 @@ * @{ */ -const char rtems_test_name[] = "FatalMandatoryProcessorNotPresent"; +const char rtems_test_name[] = "TestsuitesFatalMandatoryProcessorNotPresent"; #define FATAL_SYSINIT_RUN ScoreSmpValFatalMandatoryProcessorNotPresent_Run diff --git a/testsuites/validation/ts-fatal-scheduler-requires-exactly-one-processor.c b/testsuites/validation/ts-fatal-scheduler-requires-exactly-one-processor.c index d9eed5b092..d1de45d836 100644 --- a/testsuites/validation/ts-fatal-scheduler-requires-exactly-one-processor.c +++ b/testsuites/validation/ts-fatal-scheduler-requires-exactly-one-processor.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesFatalSchedulerRequiresExactlyOneProcessor + * @ingroup TestsuitesFatalSchedulerRequiresExactlyOneProcessor */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,10 +58,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesFatalSchedulerRequiresExactlyOneProcessor \ + * @defgroup TestsuitesFatalSchedulerRequiresExactlyOneProcessor \ * spec:/testsuites/fatal-scheduler-requires-exactly-one-processor * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite uses an application configuration which * triggers a fatal error during system initialization. @@ -69,7 +69,7 @@ * @{ */ -const char rtems_test_name[] = "FatalSchedulerRequiresExactlyOneProcessor"; +const char rtems_test_name[] = "TestsuitesFatalSchedulerRequiresExactlyOneProcessor"; #define FATAL_SYSINIT_RUN \ ScoreSmpValFatalSchedulerRequiresExactlyOneProcessor_Run diff --git a/testsuites/validation/ts-fatal-smp.c b/testsuites/validation/ts-fatal-smp.c index c1c4844643..ff6fd19d42 100644 --- a/testsuites/validation/ts-fatal-smp.c +++ b/testsuites/validation/ts-fatal-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesFatalSmp + * @ingroup TestsuitesFatalSmp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,9 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesFatalSmp spec:/testsuites/fatal-smp + * @defgroup TestsuitesFatalSmp spec:/testsuites/fatal-smp * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains a test case which triggers * SMP-specific fatal errors. @@ -68,7 +68,7 @@ * @{ */ -const char rtems_test_name[] = "FatalSmp"; +const char rtems_test_name[] = "TestsuitesFatalSmp"; #define FATAL_SYSINIT_RUN ScoreSmpValFatal_Run diff --git a/testsuites/validation/ts-fatal-start-of-mandatory-processor-failed.c b/testsuites/validation/ts-fatal-start-of-mandatory-processor-failed.c index 76e96f50ef..8ab860eea2 100644 --- a/testsuites/validation/ts-fatal-start-of-mandatory-processor-failed.c +++ b/testsuites/validation/ts-fatal-start-of-mandatory-processor-failed.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesFatalStartOfMandatoryProcessorFailed + * @ingroup TestsuitesFatalStartOfMandatoryProcessorFailed */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,10 +58,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesFatalStartOfMandatoryProcessorFailed \ + * @defgroup TestsuitesFatalStartOfMandatoryProcessorFailed \ * spec:/testsuites/fatal-start-of-mandatory-processor-failed * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains a test case which triggers a * fatal error during system initialization. @@ -69,7 +69,7 @@ * @{ */ -const char rtems_test_name[] = "FatalStartOfMandatoryProcessorFailed"; +const char rtems_test_name[] = "TestsuitesFatalStartOfMandatoryProcessorFailed"; #define FATAL_SYSINIT_RUN ScoreSmpValFatalStartOfMandatoryProcessorFailed_Run diff --git a/testsuites/validation/ts-fatal-start-on-not-online-processor.c b/testsuites/validation/ts-fatal-start-on-not-online-processor.c index 9cc981e381..794983823c 100644 --- a/testsuites/validation/ts-fatal-start-on-not-online-processor.c +++ b/testsuites/validation/ts-fatal-start-on-not-online-processor.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesFatalStartOnNotOnlineProcessor + * @ingroup TestsuitesFatalStartOnNotOnlineProcessor */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,10 +58,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesFatalStartOnNotOnlineProcessor \ + * @defgroup TestsuitesFatalStartOnNotOnlineProcessor \ * spec:/testsuites/fatal-start-on-not-online-processor * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains a test case which triggers a * fatal error during system initialization. @@ -69,7 +69,7 @@ * @{ */ -const char rtems_test_name[] = "FatalStartOnNotOnlineProcessor"; +const char rtems_test_name[] = "TestsuitesFatalStartOnNotOnlineProcessor"; #define FATAL_SYSINIT_RUN ScoreSmpValFatalStartOnNotOnlineProcessor_Run diff --git a/testsuites/validation/ts-fatal-sysinit.h b/testsuites/validation/ts-fatal-sysinit.h index 5744bc6fea..0b8f735f54 100644 --- a/testsuites/validation/ts-fatal-sysinit.h +++ b/testsuites/validation/ts-fatal-sysinit.h @@ -3,13 +3,15 @@ /** * @file * + * @ingroup RTEMSTestSuitesValidation + * * @brief This header file provides a configurable validation test suite runner * and application configuration for fatal error tests which occur during * system initialization. */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -122,10 +124,19 @@ RTEMS_SYSINIT_ITEM( #define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM +#ifdef FATAL_SYSINIT_INITIAL_EXTENSION +#define OPTIONAL_FATAL_SYSINIT_INITIAL_EXTENSION FATAL_SYSINIT_INITIAL_EXTENSION, +#else +#define OPTIONAL_FATAL_SYSINIT_INITIAL_EXTENSION +#endif + #define CONFIGURE_INITIAL_EXTENSIONS \ + OPTIONAL_FATAL_SYSINIT_INITIAL_EXTENSION \ { .fatal = FatalInitialExtension }, \ { .fatal = TestSuiteFatalExtension } +#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE + #if !defined(CONFIGURE_RTEMS_INIT_TASKS_TABLE) #define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION diff --git a/testsuites/validation/ts-fatal-too-large-tls-size.c b/testsuites/validation/ts-fatal-too-large-tls-size.c index ba41390680..ba2cc512df 100644 --- a/testsuites/validation/ts-fatal-too-large-tls-size.c +++ b/testsuites/validation/ts-fatal-too-large-tls-size.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesFatalTooLargeTlsSize + * @ingroup TestsuitesFatalTooLargeTlsSize */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesFatalTooLargeTlsSize \ + * @defgroup TestsuitesFatalTooLargeTlsSize \ * spec:/testsuites/fatal-too-large-tls-size * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains a test case which triggers a * fatal error during system initialization. @@ -68,7 +68,7 @@ * @{ */ -const char rtems_test_name[] = "FatalTooLargeTlsSize"; +const char rtems_test_name[] = "TestsuitesFatalTooLargeTlsSize"; #define FATAL_SYSINIT_RUN AcfgValFatalTooLargeTlsSize_Run diff --git a/testsuites/validation/ts-idle.h b/testsuites/validation/ts-idle.h index 071209b5ef..6c4c8955f1 100644 --- a/testsuites/validation/ts-idle.h +++ b/testsuites/validation/ts-idle.h @@ -3,13 +3,15 @@ /** * @file * + * @ingroup RTEMSTestSuitesValidation + * * @brief This header file provides a configurable validation test suite runner * and application configuration for tests which should run within an idle * task without a user initialization task. */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -72,6 +74,10 @@ static const T_config test_config = { #define CONFIGURE_INITIAL_EXTENSIONS \ { .fatal = FatalInitialExtension } +#ifndef CONFIGURE_IDLE_TASK_STORAGE_SIZE +#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE +#endif + #define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION void *IdleBody( uintptr_t ignored ) diff --git a/testsuites/validation/ts-performance-no-clock-0.c b/testsuites/validation/ts-performance-no-clock-0.c index e43b3a6327..b50276a46e 100644 --- a/testsuites/validation/ts-performance-no-clock-0.c +++ b/testsuites/validation/ts-performance-no-clock-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesPerformanceNoClock0 + * @ingroup TestsuitesPerformanceNoClock0 */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesPerformanceNoClock0 \ + * @defgroup TestsuitesPerformanceNoClock0 \ * spec:/testsuites/performance-no-clock-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This general purpose performance test suite provides enough resources * to run basic performance tests for all specified managers and functions. @@ -71,7 +71,7 @@ * @{ */ -const char rtems_test_name[] = "PerformanceNoClock0"; +const char rtems_test_name[] = "TestsuitesPerformanceNoClock0"; #define CONFIGURE_MAXIMUM_PROCESSORS 4 diff --git a/testsuites/validation/ts-terminate.c b/testsuites/validation/ts-terminate.c index 52676db6d9..670c7ec6a2 100644 --- a/testsuites/validation/ts-terminate.c +++ b/testsuites/validation/ts-terminate.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesTerminate + * @ingroup TestsuitesTerminate */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesTerminate spec:/testsuites/terminate + * @defgroup TestsuitesTerminate spec:/testsuites/terminate * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains a test case for the system * termination procedure. @@ -67,7 +67,7 @@ * @{ */ -const char rtems_test_name[] = "Terminate"; +const char rtems_test_name[] = "TestsuitesTerminate"; #define CONFIGURE_MAXIMUM_PROCESSORS 2 diff --git a/testsuites/validation/ts-userext.c b/testsuites/validation/ts-userext.c index 5d41f52093..461a1ddc0e 100644 --- a/testsuites/validation/ts-userext.c +++ b/testsuites/validation/ts-userext.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesUserext + * @ingroup TestsuitesUserext */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,9 +57,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesUserext spec:/testsuites/userext + * @defgroup TestsuitesUserext spec:/testsuites/userext * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains a test cases related to the * invocation of user extensions. @@ -67,7 +67,7 @@ * @{ */ -const char rtems_test_name[] = "Userext"; +const char rtems_test_name[] = "TestsuitesUserext"; #define CONFIGURE_MAXIMUM_PROCESSORS 2 @@ -92,6 +92,8 @@ const char rtems_test_name[] = "Userext"; .thread_terminate = ThreadTerminateExtension1 \ } +#define CONFIGURE_IDLE_TASK_BODY IdleBody + #include "ts-default.h" /** @} */ diff --git a/testsuites/validation/ts-validation-0.c b/testsuites/validation/ts-validation-0.c index b80c09d47f..7f7dfb9215 100644 --- a/testsuites/validation/ts-validation-0.c +++ b/testsuites/validation/ts-validation-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidation0 + * @ingroup TestsuitesValidation0 */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,9 +55,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidation0 spec:/testsuites/validation-0 + * @defgroup TestsuitesValidation0 spec:/testsuites/validation-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This general purpose validation test suite provides enough resources * to run basic tests for all specified managers and functions. @@ -68,7 +68,7 @@ * @{ */ -const char rtems_test_name[] = "Validation0"; +const char rtems_test_name[] = "TestsuitesValidation0"; #define CONFIGURE_MAXIMUM_PROCESSORS 5 diff --git a/testsuites/validation/ts-validation-1.c b/testsuites/validation/ts-validation-1.c index 6f396dc873..a33593afb1 100644 --- a/testsuites/validation/ts-validation-1.c +++ b/testsuites/validation/ts-validation-1.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidation1 + * @ingroup TestsuitesValidation1 */ /* - * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2020 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,9 +55,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidation1 spec:/testsuites/validation-1 + * @defgroup TestsuitesValidation1 spec:/testsuites/validation-1 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This general purpose validation test suite provides enough resources * to run basic tests for all specified managers and functions. @@ -68,7 +68,7 @@ * @{ */ -const char rtems_test_name[] = "Validation1"; +const char rtems_test_name[] = "TestsuitesValidation1"; #define CONFIGURE_MAXIMUM_PROCESSORS 5 diff --git a/testsuites/validation/ts-validation-acfg-0.c b/testsuites/validation/ts-validation-acfg-0.c index e1144dd95d..2afd0dae86 100644 --- a/testsuites/validation/ts-validation-acfg-0.c +++ b/testsuites/validation/ts-validation-acfg-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg0 + * @ingroup TestsuitesValidationAcfg0 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -58,10 +58,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationAcfg0 \ - * spec:/testsuites/validation-acfg-0 + * @defgroup TestsuitesValidationAcfg0 spec:/testsuites/validation-acfg-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite is used to validate the default value of * application configuration options taking the optional BSP provided @@ -70,7 +69,9 @@ * @{ */ -const char rtems_test_name[] = "ValidationAcfg0"; +const char rtems_test_name[] = "TestsuitesValidationAcfg0"; + +#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE #define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION diff --git a/testsuites/validation/ts-validation-acfg-1.c b/testsuites/validation/ts-validation-acfg-1.c index 863a672b23..d1b44cf1ec 100644 --- a/testsuites/validation/ts-validation-acfg-1.c +++ b/testsuites/validation/ts-validation-acfg-1.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg1 + * @ingroup TestsuitesValidationAcfg1 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -59,10 +59,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationAcfg1 \ - * spec:/testsuites/validation-acfg-1 + * @defgroup TestsuitesValidationAcfg1 spec:/testsuites/validation-acfg-1 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite is used to validate the default value of * application configuration options where all optional BSP provided settings @@ -71,7 +70,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationAcfg1"; +const char rtems_test_name[] = "TestsuitesValidationAcfg1"; static void FatalExtension( rtems_fatal_source source, @@ -94,6 +93,8 @@ static void Init( rtems_task_argument arg ) #define CONFIGURE_DISABLE_BSP_SETTINGS +#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE + #define CONFIGURE_MAXIMUM_TASKS 1 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/testsuites/validation/ts-validation-cache.c b/testsuites/validation/ts-validation-cache.c index cbc6a8ddb9..3522c02db7 100644 --- a/testsuites/validation/ts-validation-cache.c +++ b/testsuites/validation/ts-validation-cache.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationCache + * @ingroup TestsuitesValidationCache */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationCache \ - * spec:/testsuites/validation-cache + * @defgroup TestsuitesValidationCache spec:/testsuites/validation-cache * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite provides enough resources to run tests for * the directives of the @ref RTEMSAPIClassicCache. @@ -69,7 +68,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationCache"; +const char rtems_test_name[] = "TestsuitesValidationCache"; #define CONFIGURE_MAXIMUM_PROCESSORS 4 diff --git a/testsuites/validation/ts-validation-intr.c b/testsuites/validation/ts-validation-intr.c index 1a79608f78..74f849441a 100644 --- a/testsuites/validation/ts-validation-intr.c +++ b/testsuites/validation/ts-validation-intr.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationIntr + * @ingroup TestsuitesValidationIntr */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationIntr \ - * spec:/testsuites/validation-intr + * @defgroup TestsuitesValidationIntr spec:/testsuites/validation-intr * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite provides enough resources to run tests for * the interrupt controller related directives of the @ref @@ -70,7 +69,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationIntr"; +const char rtems_test_name[] = "TestsuitesValidationIntr"; #define CONFIGURE_MAXIMUM_PROCESSORS 5 diff --git a/testsuites/validation/ts-validation-io-kernel.c b/testsuites/validation/ts-validation-io-kernel.c index 83234ecfff..35779f6060 100644 --- a/testsuites/validation/ts-validation-io-kernel.c +++ b/testsuites/validation/ts-validation-io-kernel.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationIoKernel + * @ingroup TestsuitesValidationIoKernel */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,10 +62,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationIoKernel \ - * spec:/testsuites/validation-io-kernel + * @defgroup TestsuitesValidationIoKernel spec:/testsuites/validation-io-kernel * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains test cases which test the kernel * character input/output device provided by the BSP before the system @@ -74,7 +73,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationIoKernel"; +const char rtems_test_name[] = "TestsuitesValidationIoKernel"; static char buffer[ 512 ]; @@ -138,6 +137,8 @@ static void *IdleBody( uintptr_t ignored ) #define CONFIGURE_SCHEDULER_TABLE_ENTRIES { } +#define CONFIGURE_IDLE_TASK_STORAGE_SIZE RTEMS_MINIMUM_STACK_SIZE + #define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION #define CONFIGURE_IDLE_TASK_BODY IdleBody diff --git a/testsuites/validation/ts-validation-no-clock-0.c b/testsuites/validation/ts-validation-no-clock-0.c index 5ff630b6c3..1fa610a3b4 100644 --- a/testsuites/validation/ts-validation-no-clock-0.c +++ b/testsuites/validation/ts-validation-no-clock-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationNoClock0 + * @ingroup TestsuitesValidationNoClock0 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationNoClock0 \ + * @defgroup TestsuitesValidationNoClock0 \ * spec:/testsuites/validation-no-clock-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This general purpose validation test suite provides enough resources * to run basic tests without a Clock Driver for all specified managers and @@ -70,7 +70,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationNoClock0"; +const char rtems_test_name[] = "TestsuitesValidationNoClock0"; #define CONFIGURE_MAXIMUM_PROCESSORS 5 diff --git a/testsuites/validation/ts-validation-non-smp.c b/testsuites/validation/ts-validation-non-smp.c index 163223f18b..b7460222b5 100644 --- a/testsuites/validation/ts-validation-non-smp.c +++ b/testsuites/validation/ts-validation-non-smp.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationNonSmp + * @ingroup TestsuitesValidationNonSmp */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationNonSmp \ - * spec:/testsuites/validation-non-smp + * @defgroup TestsuitesValidationNonSmp spec:/testsuites/validation-non-smp * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This test suite for non-SMP test cases provides enough resources to * run basic tests for all specified managers and functions. @@ -66,7 +65,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationNonSMP"; +const char rtems_test_name[] = "TestsuitesValidationNonSmp"; #define CONFIGURE_MAXIMUM_PROCESSORS 1 diff --git a/testsuites/validation/ts-validation-one-cpu-0.c b/testsuites/validation/ts-validation-one-cpu-0.c index d281b59d01..6eefe21b15 100644 --- a/testsuites/validation/ts-validation-one-cpu-0.c +++ b/testsuites/validation/ts-validation-one-cpu-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu0 + * @ingroup TestsuitesValidationOneCpu0 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationOneCpu0 \ - * spec:/testsuites/validation-one-cpu-0 + * @defgroup TestsuitesValidationOneCpu0 spec:/testsuites/validation-one-cpu-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This general purpose validation test suite provides enough resources * to run basic tests with exactly one processor and without a Clock Driver. @@ -69,7 +68,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationOneCpu0"; +const char rtems_test_name[] = "TestsuitesValidationOneCpu0"; #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER diff --git a/testsuites/validation/ts-validation-one-cpu-1.c b/testsuites/validation/ts-validation-one-cpu-1.c index e1be3ddd02..29288686b1 100644 --- a/testsuites/validation/ts-validation-one-cpu-1.c +++ b/testsuites/validation/ts-validation-one-cpu-1.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationOneCpu1 + * @ingroup TestsuitesValidationOneCpu1 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -52,13 +52,14 @@ #include "config.h" #endif +#include "ts-config.h" + #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationOneCpu1 \ - * spec:/testsuites/validation-one-cpu-1 + * @defgroup TestsuitesValidationOneCpu1 spec:/testsuites/validation-one-cpu-1 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This general purpose validation test suite provides enough resources * to run basic tests with exactly one processor and without a Clock Driver. @@ -69,12 +70,15 @@ * @{ */ -const char rtems_test_name[] = "ValidationOneCpu1"; +const char rtems_test_name[] = "TestsuitesValidationOneCpu1"; #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER #define CONFIGURE_MAXIMUM_PROCESSORS 1 +#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \ + RTEMS_SCHEDULER_TABLE_PRIORITY( a, TEST_SCHEDULER_A_NAME ) + #include "ts-default.h" /** @} */ diff --git a/testsuites/validation/ts-validation-smp-one-cpu-0.c b/testsuites/validation/ts-validation-smp-one-cpu-0.c index 88c2370d5c..c5be91fb9e 100644 --- a/testsuites/validation/ts-validation-smp-one-cpu-0.c +++ b/testsuites/validation/ts-validation-smp-one-cpu-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOneCpu0 + * @ingroup TestsuitesValidationSmpOneCpu0 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationSmpOneCpu0 \ + * @defgroup TestsuitesValidationSmpOneCpu0 \ * spec:/testsuites/validation-smp-one-cpu-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This general purpose validation test suite provides enough resources * to run basic tests for all specified managers and functions in a @@ -67,7 +67,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationSmpOneCpu0"; +const char rtems_test_name[] = "TestsuitesValidationSmpOneCpu0"; #define CONFIGURE_MAXIMUM_PROCESSORS 1 diff --git a/testsuites/validation/ts-validation-smp-only-0.c b/testsuites/validation/ts-validation-smp-only-0.c index 9907365cd9..30b1f705ed 100644 --- a/testsuites/validation/ts-validation-smp-only-0.c +++ b/testsuites/validation/ts-validation-smp-only-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 + * @ingroup TestsuitesValidationSmpOnly0 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationSmpOnly0 \ + * @defgroup TestsuitesValidationSmpOnly0 \ * spec:/testsuites/validation-smp-only-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This test suite for SMP-only test cases provides enough resources to * run basic tests for all specified managers and functions. @@ -69,7 +69,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationSMPOnly0"; +const char rtems_test_name[] = "TestsuitesValidationSmpOnly0"; #define CONFIGURE_MAXIMUM_PROCESSORS 5 diff --git a/testsuites/validation/ts-validation-smp-only-2.c b/testsuites/validation/ts-validation-smp-only-2.c index 74cf5e1db8..62f0cd95d6 100644 --- a/testsuites/validation/ts-validation-smp-only-2.c +++ b/testsuites/validation/ts-validation-smp-only-2.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly2 + * @ingroup TestsuitesValidationSmpOnly2 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -57,10 +57,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationSmpOnly2 \ + * @defgroup TestsuitesValidationSmpOnly2 \ * spec:/testsuites/validation-smp-only-2 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This SMP-only test suite validates the clustered scheduler * configuration through an application configuration with a processor @@ -70,7 +70,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationSMPOnly2"; +const char rtems_test_name[] = "TestsuitesValidationSmpOnly2"; bool __wrap__CPU_SMP_Start_processor( uint32_t cpu_index ); diff --git a/testsuites/validation/ts-validation-timecounter-0.c b/testsuites/validation/ts-validation-timecounter-0.c index 9e4abeeab0..7a042c75ae 100644 --- a/testsuites/validation/ts-validation-timecounter-0.c +++ b/testsuites/validation/ts-validation-timecounter-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounter0 + * @ingroup TestsuitesValidationTimecounter0 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationTimecounter0 \ + * @defgroup TestsuitesValidationTimecounter0 \ * spec:/testsuites/validation-timecounter-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite is intended test cases related to the * installation of timecouters. The Clock Driver is disabled. @@ -66,7 +66,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationTimecounter0"; +const char rtems_test_name[] = "TestsuitesValidationTimecounter0"; #define CONFIGURE_MAXIMUM_PROCESSORS 1 diff --git a/testsuites/validation/ts-validation-timecounter-1.c b/testsuites/validation/ts-validation-timecounter-1.c index ec0ff027ee..918d6d093c 100644 --- a/testsuites/validation/ts-validation-timecounter-1.c +++ b/testsuites/validation/ts-validation-timecounter-1.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounter1 + * @ingroup TestsuitesValidationTimecounter1 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationTimecounter1 \ + * @defgroup TestsuitesValidationTimecounter1 \ * spec:/testsuites/validation-timecounter-1 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite is intended test cases related to the use * of timecouters. The Clock Driver is enabled. @@ -66,7 +66,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationTimecounter1"; +const char rtems_test_name[] = "TestsuitesValidationTimecounter1"; #define CONFIGURE_MAXIMUM_PROCESSORS 4 diff --git a/testsuites/validation/ts-validation-timecounter-smp-0.c b/testsuites/validation/ts-validation-timecounter-smp-0.c index 6ae0311b59..849a64d94b 100644 --- a/testsuites/validation/ts-validation-timecounter-smp-0.c +++ b/testsuites/validation/ts-validation-timecounter-smp-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationTimecounterSmp0 + * @ingroup TestsuitesValidationTimecounterSmp0 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,10 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationTimecounterSmp0 \ + * @defgroup TestsuitesValidationTimecounterSmp0 \ * spec:/testsuites/validation-timecounter-smp-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite is intended test cases related to the use * of timecouters. The Clock Driver is disabled. @@ -66,7 +66,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationTimecounterSmp0"; +const char rtems_test_name[] = "TestsuitesValidationTimecounterSmp0"; #define CONFIGURE_MAXIMUM_PROCESSORS 4 diff --git a/testsuites/validation/ts-validation-tls-0.c b/testsuites/validation/ts-validation-tls-0.c index 09e4d2fd2b..fe32bf35bd 100644 --- a/testsuites/validation/ts-validation-tls-0.c +++ b/testsuites/validation/ts-validation-tls-0.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationTls0 + * @ingroup TestsuitesValidationTls0 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationTls0 \ - * spec:/testsuites/validation-tls-0 + * @defgroup TestsuitesValidationTls0 spec:/testsuites/validation-tls-0 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains test cases related to the * thread-local storage support. @@ -66,7 +65,7 @@ * @{ */ -const char rtems_test_name[] = "ValidationTls0"; +const char rtems_test_name[] = "TestsuitesValidationTls0"; #define MAX_TLS_SIZE 1024 diff --git a/testsuites/validation/ts-validation-tls-1.c b/testsuites/validation/ts-validation-tls-1.c index b9b4adc31e..00b74008b2 100644 --- a/testsuites/validation/ts-validation-tls-1.c +++ b/testsuites/validation/ts-validation-tls-1.c @@ -3,11 +3,11 @@ /** * @file * - * @ingroup RTEMSTestSuiteTestsuitesValidationTls1 + * @ingroup TestsuitesValidationTls1 */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -55,10 +55,9 @@ #include <rtems/test.h> /** - * @defgroup RTEMSTestSuiteTestsuitesValidationTls1 \ - * spec:/testsuites/validation-tls-1 + * @defgroup TestsuitesValidationTls1 spec:/testsuites/validation-tls-1 * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This validation test suite contains test cases related to the * thread-local storage support. @@ -66,7 +65,10 @@ * @{ */ -const char rtems_test_name[] = "ValidationTls1"; +const char rtems_test_name[] = "TestsuitesValidationTls1"; + +#define CONFIGURE_IDLE_TASK_STORAGE_SIZE \ + ( RTEMS_MINIMUM_STACK_SIZE + 4096 ) #include "ts-idle.h" diff --git a/testsuites/validation/tx-call-within-isr.c b/testsuites/validation/tx-call-within-isr.c index 3b5d1e139d..8bbe0e7c29 100644 --- a/testsuites/validation/tx-call-within-isr.c +++ b/testsuites/validation/tx-call-within-isr.c @@ -3,14 +3,15 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * - * @brief This source file contains the implementation of CallWithinISR(), + * @brief This source file contains the implementation of CallWithinISRClear(), + * CallWithinISRGetVector(), CallWithinISR(), CallWithinISRRaise(), * CallWithinISRSubmit(), and CallWithinISRWait(). */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021, 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -44,6 +45,7 @@ #include <rtems/score/chainimpl.h> #include <bsp.h> +#include <bsp/irq-generic.h> /* Some target architectures need this variable for <tm27.h> */ uint32_t Interrupt_nest; @@ -64,14 +66,28 @@ static CallWithinISRContext CallWithinISRInstance = { .pending = CHAIN_INITIALIZER_EMPTY( CallWithinISRInstance.pending ) }; -static void CallWithinISRHandler( rtems_vector_number vector ) +void CallWithinISRRaise( void ) +{ + Cause_tm27_intr(); +} + +void CallWithinISRClear( void ) +{ + Clear_tm27_intr(); +} + +#ifdef TM27_USE_VECTOR_HANDLER +static rtems_isr CallWithinISRHandler( rtems_vector_number arg ) +#else +static void CallWithinISRHandler( void *arg ) +#endif { CallWithinISRContext *ctx; - (void) vector; + (void) arg; ctx = &CallWithinISRInstance; - Clear_tm27_intr(); + CallWithinISRClear(); while ( true ) { rtems_interrupt_lock_context lock_context; @@ -114,7 +130,7 @@ void CallWithinISRSubmit( CallWithinISRRequest *request ) _Chain_Append_unprotected( &ctx->pending, &request->node ); rtems_interrupt_lock_release( &ctx->lock, &lock_context ); - Cause_tm27_intr(); + CallWithinISRRaise(); } void CallWithinISRWait( const CallWithinISRRequest *request ) @@ -124,6 +140,82 @@ void CallWithinISRWait( const CallWithinISRRequest *request ) } } +#if !defined( TM27_INTERRUPT_VECTOR_DEFAULT ) +static void CallWithinISRIsHandlerInstalled( + void *arg, + const char *info, + rtems_option option, + rtems_interrupt_handler handler, + void *handler_arg +) +{ + (void) info; + (void) option; + (void) handler_arg; + + if ( handler == CallWithinISRHandler && handler_arg == NULL ) { + *(bool *) arg = true; + } +} +#endif + +rtems_vector_number CallWithinISRGetVector( void ) +{ +#if defined( TM27_INTERRUPT_VECTOR_DEFAULT ) + return TM27_INTERRUPT_VECTOR_DEFAULT; +#else + rtems_vector_number vector; + + for ( vector = 0; vector < BSP_INTERRUPT_VECTOR_COUNT; ++vector ) { + bool installed; + + installed = false; + (void) rtems_interrupt_handler_iterate( + vector, + CallWithinISRIsHandlerInstalled, + &installed + ); + + if ( installed ) { + return vector; + } + } + + return UINT32_MAX; +#endif +} + +rtems_vector_number GetSoftwareInterruptVector( void ) +{ +#if defined( TM27_INTERRUPT_VECTOR_ALTERNATIVE ) + return TM27_INTERRUPT_VECTOR_ALTERNATIVE; +#else + return UINT32_MAX; +#endif +} + +rtems_status_code RaiseSoftwareInterrupt( rtems_vector_number vector ) +{ +#if defined( TM27_INTERRUPT_VECTOR_ALTERNATIVE ) + if ( vector == TM27_INTERRUPT_VECTOR_ALTERNATIVE ) { + return _TM27_Raise_alternative(); + } +#endif + + return rtems_interrupt_raise( vector ); +} + +rtems_status_code ClearSoftwareInterrupt( rtems_vector_number vector ) +{ +#if defined( TM27_INTERRUPT_VECTOR_ALTERNATIVE ) + if ( vector == TM27_INTERRUPT_VECTOR_ALTERNATIVE ) { + return _TM27_Clear_alternative(); + } +#endif + + return rtems_interrupt_clear( vector ); +} + static void CallWithinISRInitialize( void ) { Install_tm27_vector( CallWithinISRHandler ); diff --git a/testsuites/validation/tx-default-task-config.c b/testsuites/validation/tx-default-task-config.c index 59a0fd0ed3..0facc78298 100644 --- a/testsuites/validation/tx-default-task-config.c +++ b/testsuites/validation/tx-default-task-config.c @@ -3,13 +3,13 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This source file contains the definition of ::DefaultTaskConfig. */ /* - * Copyright (C) 2022 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2022 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/tx-interrupt.c b/testsuites/validation/tx-interrupt.c index 16f1e18c47..c5ea4142c2 100644 --- a/testsuites/validation/tx-interrupt.c +++ b/testsuites/validation/tx-interrupt.c @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This source file contains the implementation of * HasInterruptVectorEntriesInstalled(). */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -139,6 +139,10 @@ rtems_vector_number GetTestableInterruptVector( } } + if ( vector == BSP_INTERRUPT_VECTOR_COUNT ) { + vector = GetSoftwareInterruptVector(); + } + return vector; } diff --git a/testsuites/validation/tx-io-relax.c b/testsuites/validation/tx-io-relax.c index 1930c66b19..30cc097b3a 100644 --- a/testsuites/validation/tx-io-relax.c +++ b/testsuites/validation/tx-io-relax.c @@ -3,13 +3,13 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This source file contains the implementation of SetIORelaxHandler(). */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/tx-memory-alloc.c b/testsuites/validation/tx-memory-alloc.c index 82b79bc558..8959dbbdc5 100644 --- a/testsuites/validation/tx-memory-alloc.c +++ b/testsuites/validation/tx-memory-alloc.c @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This source file contains the implementation of * MemoryAllocationFailWhen() and __wrap_rtems_malloc(). */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/tx-preemption-intervention.c b/testsuites/validation/tx-preemption-intervention.c index 612190567e..f66ab839e5 100644 --- a/testsuites/validation/tx-preemption-intervention.c +++ b/testsuites/validation/tx-preemption-intervention.c @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This source file contains the implementation of * SetPreemptionIntervention(). */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/tx-support.c b/testsuites/validation/tx-support.c index f576373eb1..64ebe260f6 100644 --- a/testsuites/validation/tx-support.c +++ b/testsuites/validation/tx-support.c @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This source file contains the implementation of support functions for * the validation test cases. */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/tx-support.h b/testsuites/validation/tx-support.h index 20f74faa2d..378bc4c466 100644 --- a/testsuites/validation/tx-support.h +++ b/testsuites/validation/tx-support.h @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This header file provides the support functions for the validation * test cases. */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -47,7 +47,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestSuites + * @addtogroup RTEMSTestSuitesValidation * * @{ */ @@ -390,6 +390,14 @@ void CallWithinISRSubmit( CallWithinISRRequest *request ); void CallWithinISRWait( const CallWithinISRRequest *request ); +void CallWithinISRRaise( void ); + +void CallWithinISRClear( void ); + +rtems_vector_number CallWithinISRGetVector( void ); + +rtems_vector_number GetSoftwareInterruptVector( void ); + typedef struct { Thread_queue_Operations tq_ops; const Thread_queue_Operations *wrapped_ops; @@ -431,6 +439,10 @@ rtems_vector_number GetTestableInterruptVector( const rtems_interrupt_attributes *required ); +rtems_status_code RaiseSoftwareInterrupt( rtems_vector_number vector ); + +rtems_status_code ClearSoftwareInterrupt( rtems_vector_number vector ); + bool HasInterruptVectorEntriesInstalled( rtems_vector_number vector ); /** diff --git a/testsuites/validation/tx-thread-queue.c b/testsuites/validation/tx-thread-queue.c index 1b0e8665c7..ee9d2cf96d 100644 --- a/testsuites/validation/tx-thread-queue.c +++ b/testsuites/validation/tx-thread-queue.c @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This source file contains the implementation of the thread queue test * support. */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -333,8 +333,12 @@ static void Worker( rtems_task_argument arg, TQWorkerKind worker ) _Thread_Dispatch_direct( cpu_self ); } - if ( ( events & TQ_EVENT_FLUSH ) != 0 ) { - TQFlush( ctx ); + if ( ( events & TQ_EVENT_FLUSH_ALL ) != 0 ) { + TQFlush( ctx, true ); + } + + if ( ( events & TQ_EVENT_FLUSH_PARTIAL ) != 0 ) { + TQFlush( ctx, false ); } if ( ( events & TQ_EVENT_ENQUEUE_DONE ) != 0 ) { @@ -647,9 +651,9 @@ Status_Control TQSurrender( TQContext *ctx ) return ( *ctx->surrender )( ctx ); } -void TQFlush( TQContext *ctx ) +void TQFlush( TQContext *ctx, bool flush_all ) { - ( *ctx->flush )( ctx ); + ctx->flush_count = ( *ctx->flush )( ctx, ctx->how_many, flush_all ); } rtems_tcb *TQGetOwner( TQContext *ctx ) diff --git a/testsuites/validation/tx-thread-queue.h b/testsuites/validation/tx-thread-queue.h index d9a1a4db8d..f95fcb790b 100644 --- a/testsuites/validation/tx-thread-queue.h +++ b/testsuites/validation/tx-thread-queue.h @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This header file provides the functions to test the * @ref RTEMSScoreThreadQueue. */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -50,7 +50,7 @@ extern "C" { #endif /** - * @addtogroup RTEMSTestSuites + * @addtogroup RTEMSTestSuitesValidation * * @{ */ @@ -120,23 +120,24 @@ typedef enum { TQ_EVENT_MUTEX_B_OBTAIN = RTEMS_EVENT_10, TQ_EVENT_MUTEX_B_RELEASE = RTEMS_EVENT_11, TQ_EVENT_BUSY_WAIT = RTEMS_EVENT_12, - TQ_EVENT_FLUSH = RTEMS_EVENT_13, - TQ_EVENT_SCHEDULER_RECORD_START = RTEMS_EVENT_14, - TQ_EVENT_SCHEDULER_RECORD_STOP = RTEMS_EVENT_15, - TQ_EVENT_TIMEOUT = RTEMS_EVENT_16, - TQ_EVENT_MUTEX_NO_PROTOCOL_OBTAIN = RTEMS_EVENT_17, - TQ_EVENT_MUTEX_NO_PROTOCOL_RELEASE = RTEMS_EVENT_18, - TQ_EVENT_ENQUEUE_FATAL = RTEMS_EVENT_19, - TQ_EVENT_MUTEX_C_OBTAIN = RTEMS_EVENT_20, - TQ_EVENT_MUTEX_C_RELEASE = RTEMS_EVENT_21, - TQ_EVENT_MUTEX_FIFO_OBTAIN = RTEMS_EVENT_22, - TQ_EVENT_MUTEX_FIFO_RELEASE = RTEMS_EVENT_23, - TQ_EVENT_ENQUEUE_TIMED = RTEMS_EVENT_24, - TQ_EVENT_MUTEX_D_OBTAIN = RTEMS_EVENT_25, - TQ_EVENT_MUTEX_D_RELEASE = RTEMS_EVENT_26, - TQ_EVENT_PIN = RTEMS_EVENT_27, - TQ_EVENT_UNPIN = RTEMS_EVENT_28, - TQ_EVENT_COUNT = RTEMS_EVENT_29 + TQ_EVENT_FLUSH_ALL = RTEMS_EVENT_13, + TQ_EVENT_FLUSH_PARTIAL = RTEMS_EVENT_14, + TQ_EVENT_SCHEDULER_RECORD_START = RTEMS_EVENT_15, + TQ_EVENT_SCHEDULER_RECORD_STOP = RTEMS_EVENT_16, + TQ_EVENT_TIMEOUT = RTEMS_EVENT_17, + TQ_EVENT_MUTEX_NO_PROTOCOL_OBTAIN = RTEMS_EVENT_18, + TQ_EVENT_MUTEX_NO_PROTOCOL_RELEASE = RTEMS_EVENT_19, + TQ_EVENT_ENQUEUE_FATAL = RTEMS_EVENT_20, + TQ_EVENT_MUTEX_C_OBTAIN = RTEMS_EVENT_21, + TQ_EVENT_MUTEX_C_RELEASE = RTEMS_EVENT_22, + TQ_EVENT_MUTEX_FIFO_OBTAIN = RTEMS_EVENT_23, + TQ_EVENT_MUTEX_FIFO_RELEASE = RTEMS_EVENT_24, + TQ_EVENT_ENQUEUE_TIMED = RTEMS_EVENT_25, + TQ_EVENT_MUTEX_D_OBTAIN = RTEMS_EVENT_26, + TQ_EVENT_MUTEX_D_RELEASE = RTEMS_EVENT_27, + TQ_EVENT_PIN = RTEMS_EVENT_28, + TQ_EVENT_UNPIN = RTEMS_EVENT_29, + TQ_EVENT_COUNT = RTEMS_EVENT_30 } TQEvent; typedef enum { @@ -263,6 +264,12 @@ typedef struct TQContext { uint32_t how_many; /** + * @brief This this member contains the count of the least recently flushed + * threads. + */ + uint32_t flush_count; + + /** * @brief This this member provides a context to jump back to before the * enqueue. */ @@ -290,8 +297,13 @@ typedef struct TQContext { /** * @brief This member provides the thread queue flush handler. + * + * The second parameter specifies the count of enqueued threads. While the + * third parameter is true, all enqueued threads shall be extracted, + * otherwise the thread queue shall be partially flushed. The handler shall + * return the count of flushed threads. */ - void ( *flush )( struct TQContext * ); + uint32_t ( *flush )( struct TQContext *, uint32_t, bool ); /** * @brief This member provides the get owner handler. @@ -390,7 +402,7 @@ void TQEnqueueDone( TQContext *ctx ); Status_Control TQSurrender( TQContext *ctx ); -void TQFlush( TQContext *ctx ); +void TQFlush( TQContext *ctx, bool flush_all ); rtems_tcb *TQGetOwner( TQContext *ctx ); diff --git a/testsuites/validation/tx-timecounter.c b/testsuites/validation/tx-timecounter.c index c6738914a4..01b55f2578 100644 --- a/testsuites/validation/tx-timecounter.c +++ b/testsuites/validation/tx-timecounter.c @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This source file contains the definition of SetGetTimecountHandler(), * GetTimecountCounter(), and SetTimecountCounter(). */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/tx-timer-server.c b/testsuites/validation/tx-timer-server.c index 80ba853fb1..29575eb490 100644 --- a/testsuites/validation/tx-timer-server.c +++ b/testsuites/validation/tx-timer-server.c @@ -3,13 +3,13 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This source file contains the definition of DeleteTimerServer(). */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/testsuites/validation/tx-wrap-thread-queue.c b/testsuites/validation/tx-wrap-thread-queue.c index 93b7b55f37..39d7b38129 100644 --- a/testsuites/validation/tx-wrap-thread-queue.c +++ b/testsuites/validation/tx-wrap-thread-queue.c @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSTestSuites + * @ingroup RTEMSTestSuitesValidation * * @brief This source file contains the implementation of the thread queue * wrapper. */ /* - * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * Copyright (C) 2021 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions |