rtems_task Init( rtems_task_argument ignored ) { rtems_event_set out; int resets; puts( "\n\n*** TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); puts( "Init - Test may not be able to detect case is hit reliably" ); puts( "Init - Trying to generate event send from ISR while blocking" ); puts( "Init - Variation is: " TEST_STRING ); Main_task = rtems_task_self(); interrupt_critical_section_test_support_initialize( test_release_from_isr ); for (resets=0 ; resets< 2 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; (void) rtems_event_receive( EVENTS_TO_RECEIVE, RTEMS_EVENT_ANY, 1, &out ); } puts( "*** END OF TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code sc; rtems_event_set out; int resets; puts( "\n\n*** TEST INTERRUPT CRITICAL SECTION 10 ***" ); puts( "Init - Test may not be able to detect case is hit reliably" ); puts( "Init - Trying to generate timeout while blocking on event" ); Main_task = rtems_task_self(); interrupt_critical_section_test_support_initialize( NULL ); for (resets=0 ; resets< 2 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; sc = rtems_event_receive( 0x01, RTEMS_DEFAULT_OPTIONS, 1, &out ); fatal_directive_status( sc, RTEMS_TIMEOUT, "event_receive timeout" ); } puts( "*** END OF TEST INTERRUPT CRITICAL SECTION 10 ***" ); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code sc; int resets; puts( "\n\n*** TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***\n" "Init - Trying to generate timeout of a thread while another is blocking\n" "Init - on the same thread queue\n" "Init - There is no way for the test to know if it hits the case" ); puts( "Init - rtems_semaphore_create - OK" ); sc = rtems_semaphore_create( rtems_build_name( 'S', 'M', '1', ' ' ), 0, RTEMS_DEFAULT_ATTRIBUTES, RTEMS_NO_PRIORITY, &Semaphore ); directive_failed( sc, "rtems_semaphore_create of SM1" ); puts( "Init - rtems_task_create - OK" ); sc = rtems_task_create( rtems_build_name( 'B', 'L', 'C', 'K' ), BLOCKER_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_NO_PREEMPT, RTEMS_DEFAULT_ATTRIBUTES, &Secondary_task_id ); directive_failed( sc, "rtems_task_create" ); sc = rtems_task_start( Secondary_task_id, Secondary_task, 0 ); directive_failed( sc, "rtems_task_start" ); Main_task = rtems_task_self(); interrupt_critical_section_test_support_initialize( NULL ); for (resets=0 ; resets<10 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; sc = rtems_task_restart( Secondary_task_id, 1 ); directive_failed( sc, "rtems_task_restart" ); sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 1 ); fatal_directive_status( sc, RTEMS_TIMEOUT, "rtems_semaphore_obtain" ); } puts( "*** END OF TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code status; int resets; puts( "\n\n*** TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); puts( "Init - Trying to generate semaphore release from ISR while blocking" ); puts( "Init - There is no way for the test to know if it hits the case" ); puts( "Init - Variation is: " TEST_STRING ); status = rtems_semaphore_create( rtems_build_name( 'S', 'M', '1', ' ' ), 0, SEMAPHORE_ATTRIBUTES, RTEMS_NO_PRIORITY, &Semaphore ); directive_failed( status, "rtems_semaphore_create of SM1" ); status = rtems_task_create( rtems_build_name( 'B', 'L', 'C', 'K' ), BLOCKER_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_NO_PREEMPT, RTEMS_DEFAULT_ATTRIBUTES, &Secondary_task_id ); directive_failed( status, "rtems_task_create" ); status = rtems_task_start( Secondary_task_id, Secondary_task, 0 ); directive_failed( status, "rtems_task_start" ); interrupt_critical_section_test_support_initialize( test_release_from_isr ); for (resets=0 ; resets< 2 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; status = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, SEMAPHORE_OBTAIN_TIMEOUT ); } puts( "*** END OF TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code sc; int resets; puts( "\n\n*** TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***\n" "Init - Trying to generate timeout of a thread that had its blocking\n" "Init - request satisfied while blocking but before time timeout" ); puts( "Init - rtems_semaphore_create - OK" ); sc = rtems_semaphore_create( rtems_build_name( 'S', 'M', '1', ' ' ), 0, RTEMS_DEFAULT_ATTRIBUTES, RTEMS_NO_PRIORITY, &Semaphore ); directive_failed( sc, "rtems_semaphore_create of SM1" ); Main_task = rtems_task_self(); Main_TCB = _Thread_Get_executing(); interrupt_critical_section_test_support_initialize( test_release_from_isr ); case_hit = false; for (resets=0 ; !case_hit && resets<10 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 2 ); if ( sc == RTEMS_SUCCESSFUL ) break; fatal_directive_status( sc, RTEMS_TIMEOUT, "rtems_semaphore_obtain" ); } if ( case_hit ) { puts( "Init - Case hit" ); puts( "*** END OF TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); } else puts( "Init - Case not hit - ran too long" ); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument ignored ) { int sc; int resets; puts( "\n\n*** TEST POSIX INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); puts( "Init - Trying to generate timer fire from ISR while firing" ); puts( "Init - Variation is: " TEST_STRING ); puts( "Init - There is no way for the test to know if it hits the case" ); /* create POSIX Timer */ sc = timer_create (CLOCK_REALTIME, NULL, &Timer); if ( sc == -1 ) { perror ("Error in timer creation\n"); rtems_test_exit(0); } Main_task = rtems_task_self(); /* we don't care if it ever fires */ TimerParams.it_interval.tv_sec = 10; TimerParams.it_interval.tv_nsec = 0; TimerParams.it_value.tv_sec = 10; TimerParams.it_value.tv_nsec = 0; interrupt_critical_section_test_support_initialize( test_release_from_isr ); for (resets=0 ; resets<10 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; sc = timer_settime(Timer, POSIX_TIMER_RELATIVE, &TimerParams, NULL); if ( sc == -1 ) { perror ("Error in timer setting\n"); rtems_test_exit(0); } } puts( "*** END OF TEST POSIX INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); rtems_test_exit(0); }
static void trigger_callback(rtems_id timer_id, void *arg) { rtems_status_code sc = RTEMS_SUCCESSFUL; if (case_hit) { puts("*** END OF INTERRUPT CRITICAL SECTION 17 ***"); rtems_test_exit(0); } else if (interrupt_critical_section_test_support_delay()) { puts("test case not hit, give up"); rtems_test_exit(0); } sc = rtems_timer_reset(timer [TIMER_TRIGGER]); directive_failed(sc, "rtems_timer_reset"); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code sc; int resets; puts( "\n\n*** TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); puts( "Init - Trying to generate timer fire from ISR while firing" ); puts( "Init - Variation is: " TEST_STRING ); puts( "Init - There is no way for the test to know if it hits the case" ); #if defined(SERVER_FIRE_AFTER) /* initiate timer server */ sc = rtems_timer_initiate_server( RTEMS_MINIMUM_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_ATTRIBUTES ); directive_failed( sc, "rtems_timer_initiate_server" ); #endif puts( "Init - rtems_timer_create - OK" ); sc = rtems_timer_create( rtems_build_name( 'P', 'E', 'R', '1' ), &Timer); directive_failed( sc, "rtems_timer_create" ); Main_task = rtems_task_self(); interrupt_critical_section_test_support_initialize( test_release_from_isr ); for (resets=0 ; resets<10 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; sc = TEST_DIRECTIVE( Timer, 10, TimerMethod, NULL ); directive_failed( sc, "rtems_timer_fire_after"); } puts( "*** END OF TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code sc; int resets; TEST_BEGIN(); puts( "Init - Trying to generate period ending while blocking" ); puts( "Init - rtems_rate_monotonic_create - OK" ); sc = rtems_rate_monotonic_create( rtems_build_name( 'P', 'E', 'R', '1' ), &Period ); directive_failed( sc, "rtems_rate_monotonic_create" ); Main_task = rtems_task_self(); interrupt_critical_section_test_support_initialize( test_release_from_isr ); case_hit = false; for (resets=0 ; case_hit == false && resets< 2 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; sc = rtems_rate_monotonic_period( Period, 1 ); if ( sc == RTEMS_TIMEOUT ) continue; directive_failed( sc, "rtems_monotonic_period"); } if ( case_hit ) { puts( "Init - It appears the case has been hit" ); TEST_END(); } else puts( "Init - Case not hit - ran too long" ); rtems_test_exit(0); }