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 #ifdef HAVE_CONFIG_H
0043 #include "config.h"
0044 #endif
0045
0046 #include "bdbuf_tests.h"
0047
0048 static rtems_task bdbuf_test3_2_thread1(rtems_task_argument arg);
0049 static rtems_task bdbuf_test3_2_thread2(rtems_task_argument arg);
0050 static rtems_task bdbuf_test3_2_thread3(rtems_task_argument arg);
0051
0052
0053 #define TEST_BLK_NUM_N1 90
0054 #define TEST_BLK_NUM_N2 92
0055 #define TEST_BLK_NUM_N3 94
0056
0057 void
0058 bdbuf_test3_2_main()
0059 {
0060 bdbuf_test_msg msg;
0061
0062 TEST_START("Test 3.2");
0063
0064
0065
0066
0067 SET_THREAD_PRIORITY(2, LOW);
0068 SET_THREAD_PRIORITY(3, HIGH);
0069 START_THREAD(1, bdbuf_test3_2_thread1);
0070 START_THREAD(2, bdbuf_test3_2_thread2);
0071 START_THREAD(3, bdbuf_test3_2_thread3);
0072
0073
0074
0075
0076
0077 WAIT_DRV_MSG(&msg);
0078 SEND_DRV_MSG(0, 0, RTEMS_SUCCESSFUL, 0);
0079
0080 WAIT_THREAD_SYNC(1);
0081
0082
0083
0084
0085
0086 CONTINUE_THREAD(2);
0087 CONTINUE_THREAD(3);
0088
0089
0090 CHECK_THREAD_BLOCKED(2);
0091 CHECK_THREAD_BLOCKED(3);
0092
0093
0094
0095
0096
0097 CONTINUE_THREAD(1);
0098
0099
0100
0101
0102 WAIT_THREAD_SYNC(2);
0103 TEST_CHECK_RESULT("5");
0104
0105 CHECK_THREAD_BLOCKED(3);
0106
0107
0108 CONTINUE_THREAD(2);
0109
0110
0111 WAIT_DRV_MSG_WR(&msg);
0112 SEND_DRV_MSG(0, 0, RTEMS_SUCCESSFUL, 0);
0113
0114
0115 WAIT_THREAD_SYNC(3);
0116
0117
0118 CONTINUE_THREAD(3);
0119
0120
0121 WAIT_DRV_MSG_WR(&msg);
0122 SEND_DRV_MSG(0, 0, RTEMS_SUCCESSFUL, 0);
0123
0124 TEST_STOP();
0125 }
0126
0127 static rtems_task
0128 bdbuf_test3_2_thread1(rtems_task_argument arg)
0129 {
0130 rtems_status_code rc;
0131 rtems_bdbuf_buffer *bd = NULL;
0132
0133
0134
0135
0136
0137 rc = rtems_bdbuf_read(test_dd, TEST_BLK_NUM_N1, &bd);
0138 if (rc != RTEMS_SUCCESSFUL)
0139 {
0140 TEST_FAILED();
0141 }
0142
0143 CONTINUE_MAIN(1);
0144
0145
0146
0147
0148
0149 rc = rtems_bdbuf_release(bd);
0150 if (rc != RTEMS_SUCCESSFUL)
0151 {
0152 TEST_FAILED();
0153 }
0154
0155 THREAD_END();
0156 }
0157
0158 static rtems_task
0159 bdbuf_test3_2_thread2(rtems_task_argument arg)
0160 {
0161 rtems_status_code rc;
0162 rtems_bdbuf_buffer *bd = NULL;
0163
0164 WAIT_MAIN_SYNC(2);
0165
0166
0167
0168
0169
0170 rc = rtems_bdbuf_get(test_dd, TEST_BLK_NUM_N2, &bd);
0171 if (rc != RTEMS_SUCCESSFUL)
0172 {
0173 TEST_FAILED();
0174 }
0175
0176 printf("Thread #2 DEBLOCK\n");
0177 CONTINUE_MAIN(2);
0178
0179 rc = rtems_bdbuf_release_modified(bd);
0180 if (rc != RTEMS_SUCCESSFUL)
0181 {
0182 TEST_FAILED();
0183 }
0184
0185 THREAD_END();
0186 }
0187
0188 static rtems_task
0189 bdbuf_test3_2_thread3(rtems_task_argument arg)
0190 {
0191 rtems_status_code rc;
0192 rtems_bdbuf_buffer *bd = NULL;
0193
0194 WAIT_MAIN_SYNC(3);
0195
0196
0197
0198
0199
0200 rc = rtems_bdbuf_get(test_dd, TEST_BLK_NUM_N3, &bd);
0201 if (rc != RTEMS_SUCCESSFUL)
0202 {
0203 TEST_FAILED();
0204 }
0205
0206 printf("Thread #3 DEBLOCK\n");
0207
0208 CONTINUE_MAIN(3);
0209
0210 rc = rtems_bdbuf_release_modified(bd);
0211 if (rc != RTEMS_SUCCESSFUL)
0212 {
0213 TEST_FAILED();
0214 }
0215
0216 THREAD_END();
0217 }