File indexing completed on 2025-05-11 08:24:32
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 #ifdef HAVE_CONFIG_H
0048 #include "config.h"
0049 #endif
0050
0051 #include "bdbuf_tests.h"
0052
0053 static rtems_task bdbuf_test3_3_thread1(rtems_task_argument arg);
0054 static rtems_task bdbuf_test3_3_thread2(rtems_task_argument arg);
0055 static rtems_task bdbuf_test3_3_thread3(rtems_task_argument arg);
0056
0057
0058 #define TEST_BLK_NUM_N1 96
0059 #define TEST_BLK_NUM_N2 98
0060 #define TEST_BLK_NUM_N3 100
0061
0062 void
0063 bdbuf_test3_3_main()
0064 {
0065 bdbuf_test_msg msg;
0066
0067 TEST_START("Test 3.3");
0068
0069
0070
0071
0072 SET_THREAD_PRIORITY(2, LOW);
0073 SET_THREAD_PRIORITY(3, HIGH);
0074 START_THREAD(1, bdbuf_test3_3_thread1);
0075 START_THREAD(2, bdbuf_test3_3_thread2);
0076 START_THREAD(3, bdbuf_test3_3_thread3);
0077
0078
0079
0080
0081
0082 WAIT_DRV_MSG(&msg);
0083 SEND_DRV_MSG(0, 0, RTEMS_SUCCESSFUL, 0);
0084
0085 WAIT_THREAD_SYNC(1);
0086
0087
0088
0089
0090
0091 CONTINUE_THREAD(2);
0092 CONTINUE_THREAD(3);
0093
0094
0095 CHECK_THREAD_BLOCKED(2);
0096 CHECK_THREAD_BLOCKED(3);
0097
0098
0099
0100
0101
0102 CONTINUE_THREAD(1);
0103
0104
0105 WAIT_DRV_MSG(&msg);
0106 SEND_DRV_MSG(0, 0, RTEMS_SUCCESSFUL, 0);
0107
0108
0109 CHECK_NO_DRV_MSG();
0110
0111
0112
0113
0114 WAIT_THREAD_SYNC(2);
0115 TEST_CHECK_RESULT("5");
0116
0117
0118 CHECK_THREAD_BLOCKED(3);
0119
0120
0121 CONTINUE_THREAD(2);
0122
0123
0124 WAIT_DRV_MSG(&msg);
0125 SEND_DRV_MSG(0, 0, RTEMS_SUCCESSFUL, 0);
0126
0127
0128 WAIT_THREAD_SYNC(3);
0129
0130
0131 CONTINUE_THREAD(3);
0132
0133 CHECK_NO_DRV_MSG();
0134
0135 TEST_STOP();
0136 }
0137
0138 static rtems_task
0139 bdbuf_test3_3_thread1(rtems_task_argument arg)
0140 {
0141 rtems_status_code rc;
0142 rtems_bdbuf_buffer *bd = NULL;
0143
0144
0145
0146
0147
0148 rc = rtems_bdbuf_read(test_dd, TEST_BLK_NUM_N1, &bd);
0149 if (rc != RTEMS_SUCCESSFUL)
0150 {
0151 TEST_FAILED();
0152 }
0153
0154 CONTINUE_MAIN(1);
0155
0156
0157
0158
0159
0160 rc = rtems_bdbuf_release(bd);
0161 if (rc != RTEMS_SUCCESSFUL)
0162 {
0163 TEST_FAILED();
0164 }
0165
0166 THREAD_END();
0167 }
0168
0169 static rtems_task
0170 bdbuf_test3_3_thread2(rtems_task_argument arg)
0171 {
0172 rtems_status_code rc;
0173 rtems_bdbuf_buffer *bd = NULL;
0174
0175 WAIT_MAIN_SYNC(2);
0176
0177
0178
0179
0180
0181 rc = rtems_bdbuf_read(test_dd, TEST_BLK_NUM_N2, &bd);
0182 if (rc != RTEMS_SUCCESSFUL)
0183 {
0184 TEST_FAILED();
0185 }
0186
0187 printf("Thread #2 DEBLOCK\n");
0188 CONTINUE_MAIN(2);
0189
0190 rc = rtems_bdbuf_release(bd);
0191 if (rc != RTEMS_SUCCESSFUL)
0192 {
0193 TEST_FAILED();
0194 }
0195
0196 THREAD_END();
0197 }
0198
0199 static rtems_task
0200 bdbuf_test3_3_thread3(rtems_task_argument arg)
0201 {
0202 rtems_status_code rc;
0203 rtems_bdbuf_buffer *bd = NULL;
0204
0205 WAIT_MAIN_SYNC(3);
0206
0207
0208
0209
0210
0211 rc = rtems_bdbuf_read(test_dd, TEST_BLK_NUM_N3, &bd);
0212 if (rc != RTEMS_SUCCESSFUL)
0213 {
0214 TEST_FAILED();
0215 }
0216
0217 printf("Thread #3 DEBLOCK\n");
0218
0219 CONTINUE_MAIN(3);
0220
0221 rc = rtems_bdbuf_release(bd);
0222 if (rc != RTEMS_SUCCESSFUL)
0223 {
0224 TEST_FAILED();
0225 }
0226
0227 THREAD_END();
0228 }