From af9115f35cfb3d0adeb3e105fd608883596f2637 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 6 Oct 2017 10:07:38 +0200 Subject: posix: Simplify POSIX_API_Control Return stack area via pthread_getattr_np(). Simplify * pthread_attr_setaffinity_np(), and * pthread_attr_getaffinity_np() and let the scheduler do the more sophisticated error checks. Make * pthread_setaffinity_np(), * pthread_getaffinity_np(), * pthread_attr_setaffinity_np(), and * pthread_attr_getaffinity_np() available in all configurations. Update #2514. Close #3145. Close #3168. --- testsuites/psxtests/psxgetattrnp01/init.c | 33 ++++++++++++++ .../psxtests/psxgetattrnp01/psxgetattrnp01.scn | 9 +++- testsuites/smptests/smppsxaffinity01/init.c | 53 ++++++++++++---------- .../smptests/smppsxaffinity01/smppsxaffinity01.scn | 16 +++---- 4 files changed, 78 insertions(+), 33 deletions(-) (limited to 'testsuites') diff --git a/testsuites/psxtests/psxgetattrnp01/init.c b/testsuites/psxtests/psxgetattrnp01/init.c index df3e33541d..190e4f498e 100644 --- a/testsuites/psxtests/psxgetattrnp01/init.c +++ b/testsuites/psxtests/psxgetattrnp01/init.c @@ -41,6 +41,9 @@ void *Thread_1( struct sched_param param; int sc; int value; + void *stackaddr; + size_t stacksize; + cpu_set_t set; puts("Thread - pthread_getattr_np - Verify value"); sc = pthread_getattr_np( Thread_id, &attr ); @@ -61,6 +64,24 @@ void *Thread_1( sc = pthread_getattr_np( Thread_id, &attr ); rtems_test_assert( !sc ); + puts("Thread - Verify get stack"); + stackaddr = NULL; + stacksize = 0; + sc = pthread_attr_getstack( &attr, &stackaddr, &stacksize ); + rtems_test_assert( sc == 0 ); + rtems_test_assert( stackaddr != NULL ); + rtems_test_assert( stacksize != 0 ); + + puts("Thread - Verify contention scope"); + sc = pthread_attr_getscope( &attr, &value ); + rtems_test_assert( sc == 0 ); + rtems_test_assert( value == PTHREAD_SCOPE_PROCESS ); + + puts("Thread - Verify explicit scheduler"); + sc = pthread_attr_getinheritsched( &attr, &value ); + rtems_test_assert( sc == 0 ); + rtems_test_assert( value == PTHREAD_EXPLICIT_SCHED ); + puts("Thread - Verify SCHED_FIFO policy"); sc = pthread_attr_getschedpolicy( &attr, &value ); rtems_test_assert( !sc ); @@ -73,8 +94,20 @@ void *Thread_1( puts("Thread - Verify detached"); sc = pthread_attr_getdetachstate( &attr, &value ); + rtems_test_assert( sc == 0 ); rtems_test_assert( value == PTHREAD_CREATE_DETACHED ); + puts("Thread - Verify affinity"); + CPU_ZERO( &set ); + sc = pthread_attr_getaffinity_np( &attr, sizeof( set ), &set ); + rtems_test_assert( sc == 0 ); + rtems_test_assert( CPU_ISSET( 0, &set ) ); + rtems_test_assert( !CPU_ISSET( 1, &set ) ); + + puts("Thread - Destroy"); + sc = pthread_attr_destroy( &attr ); + rtems_test_assert( sc == 0 ); + return NULL; /* just so the compiler thinks we returned something */ } diff --git a/testsuites/psxtests/psxgetattrnp01/psxgetattrnp01.scn b/testsuites/psxtests/psxgetattrnp01/psxgetattrnp01.scn index a3572e048c..ab09630f75 100644 --- a/testsuites/psxtests/psxgetattrnp01/psxgetattrnp01.scn +++ b/testsuites/psxtests/psxgetattrnp01/psxgetattrnp01.scn @@ -1,4 +1,4 @@ -*** POSIX ATTRIBUTE TEST 1 *** +*** BEGIN OF TEST PSXGETATTRNP 1 *** Init - pthread_getattr_np - attr NULL - EINVAL Init - pthread_getattr_np - invalid id - ESRCH Init - pthread_attr_init @@ -16,7 +16,12 @@ Thread - pthread_getattr_np - Verify value Thread - pthread_setschedparam: Setting highest priority SCHED_FIFO Thread - Detach Thread - pthread_getattr_np +Thread - Verify get stack +Thread - Verify contention scope +Thread - Verify explicit scheduler Thread - Verify SCHED_FIFO policy Thread - Verify max priority Thread - Verify detached -*** END OF POSIX ATTRIBUTE TEST 1 *** +Thread - Verify affinity +Thread - Destroy +*** END OF TEST PSXGETATTRNP 1 *** diff --git a/testsuites/smptests/smppsxaffinity01/init.c b/testsuites/smptests/smppsxaffinity01/init.c index c4c4f4f7c3..58e1db5435 100644 --- a/testsuites/smptests/smppsxaffinity01/init.c +++ b/testsuites/smptests/smppsxaffinity01/init.c @@ -38,21 +38,30 @@ void Validate_attrgetaffinity_errors(void) cpu_set_t cpuset; pthread_attr_t attr; + sc = pthread_attr_init( &attr ); + rtems_test_assert( sc == 0 ); + /* Verify pthread_attr_getaffinity_np validates attr */ - puts( "Init - pthread_attr_getaffinity_np - Invalid attr - EFAULT" ); - sc = pthread_attr_getaffinity_np( NULL, sizeof(cpu_set_t), &cpuset ); - rtems_test_assert( sc == EFAULT ); + puts( "Init - pthread_attr_getaffinity_np - Invalid attr - EINVAL" ); + sc = pthread_attr_getaffinity_np( NULL, sizeof( cpuset ), &cpuset ); + rtems_test_assert( sc == EINVAL ); /* Verify pthread_attr_getaffinity_np validates cpuset */ - puts( "Init - pthread_attr_getaffinity_np - Invalid attr - EFAULT" ); - sc = pthread_attr_getaffinity_np( &attr, sizeof(cpu_set_t), NULL ); - rtems_test_assert( sc == EFAULT ); + puts( "Init - pthread_attr_getaffinity_np - Invalid attr - EINVAL" ); + sc = pthread_attr_getaffinity_np( &attr, sizeof( cpuset ), NULL ); + rtems_test_assert( sc == EINVAL ); /* Verify pthread_attr_getaffinity_np validates cpusetsize */ puts( "Init - pthread_attr_getaffinity_np - Invalid cpusetsize - EINVAL" ); - sc = pthread_attr_getaffinity_np( &attr, sizeof(cpu_set_t) * 2 , &cpuset ); + sc = pthread_attr_getaffinity_np( &attr, sizeof( cpuset ) * 2 , &cpuset ); rtems_test_assert( sc == EINVAL ); + sc = pthread_attr_destroy( &attr ); + rtems_test_assert( sc == 0 ); + + puts( "Init - pthread_attr_getaffinity_np - Not initialized attr - EINVAL" ); + sc = pthread_attr_getaffinity_np( &attr, sizeof( cpuset ), &cpuset ); + rtems_test_assert( sc == EINVAL ); } void Validate_attrsetaffinity_errors(void) @@ -61,31 +70,29 @@ void Validate_attrsetaffinity_errors(void) cpu_set_t cpuset; pthread_attr_t attr; + sc = pthread_attr_init( &attr ); + rtems_test_assert( sc == 0 ); + /* Verify pthread_attr_setaffinity_np validates attr. */ - puts( "Init - pthread_attr_setaffinity_np - Invalid attr - EFAULT" ); - sc = pthread_attr_setaffinity_np( NULL, sizeof(cpu_set_t), &cpuset ); - rtems_test_assert( sc == EFAULT ); + puts( "Init - pthread_attr_setaffinity_np - Invalid attr - EINVAL" ); + sc = pthread_attr_setaffinity_np( NULL, sizeof( cpuset ), &cpuset ); + rtems_test_assert( sc == EINVAL ); /* Verify pthread_attr_setaffinity_np validates cpuset */ - puts( "Init - pthread_attr_setaffinity_np - Invalid attr - EFAULT" ); - sc = pthread_attr_setaffinity_np( &attr, sizeof(cpu_set_t), NULL ); - rtems_test_assert( sc == EFAULT ); + puts( "Init - pthread_attr_setaffinity_np - Invalid attr - EINVAL" ); + sc = pthread_attr_setaffinity_np( &attr, sizeof( cpuset ), NULL ); + rtems_test_assert( sc == EINVAL ); /* Verify pthread_attr_setaffinity_np validates cpusetsize */ puts( "Init - pthread_attr_setaffinity_np - Invalid cpusetsize - EINVAL" ); - sc = pthread_attr_setaffinity_np( &attr, sizeof(cpu_set_t) * 2 , &cpuset ); + sc = pthread_attr_setaffinity_np( &attr, sizeof( cpuset ) * 2 , &cpuset ); rtems_test_assert( sc == EINVAL ); - /* Verify pthread_attr_setaffinity_np validates cpuset greater than 0 */ - CPU_ZERO(&cpuset); - puts( "Init - pthread_attr_setaffinity_np - No cpus in cpuset - EINVAL" ); - sc = pthread_attr_setaffinity_np( &attr, sizeof(cpu_set_t) , &cpuset ); - rtems_test_assert( sc == EINVAL ); + sc = pthread_attr_destroy( &attr ); + rtems_test_assert( sc == 0 ); - /* Verify pthread_attr_setaffinity_np validates invalid cpu in cpuset */ - CPU_FILL(&cpuset); - puts( "Init - pthread_attr_setaffinity_np - Too many cpus in cpuset - EINVAL" ); - sc = pthread_attr_setaffinity_np( &attr, sizeof(cpu_set_t) , &cpuset ); + puts( "Init - pthread_attr_setaffinity_np - Not initialized attr - EINVAL" ); + sc = pthread_attr_setaffinity_np( &attr, sizeof( cpuset ), &cpuset ); rtems_test_assert( sc == EINVAL ); } diff --git a/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.scn b/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.scn index 70bd6d31c8..15459e0c2c 100644 --- a/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.scn +++ b/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.scn @@ -1,11 +1,11 @@ -*** SMP POSIX AFFINITY ATTRIBUTE TEST 1 *** -Init - pthread_attr_setaffinity_np - Invalid attr - EFAULT -Init - pthread_attr_setaffinity_np - Invalid attr - EFAULT +*** BEGIN OF TEST SMPPSXAFFINITY 1 *** +Init - pthread_attr_setaffinity_np - Invalid attr - EINVAL +Init - pthread_attr_setaffinity_np - Invalid attr - EINVAL Init - pthread_attr_setaffinity_np - Invalid cpusetsize - EINVAL -Init - pthread_attr_setaffinity_np - No cpus in cpuset - EINVAL -Init - pthread_attr_setaffinity_np - Too many cpus in cpuset - EINVAL -Init - pthread_attr_getaffinity_np - Invalid attr - EFAULT -Init - pthread_attr_getaffinity_np - Invalid attr - EFAULT +Init - pthread_attr_setaffinity_np - Not initialized attr - EINVAL +Init - pthread_attr_getaffinity_np - Invalid attr - EINVAL +Init - pthread_attr_getaffinity_np - Invalid attr - EINVAL Init - pthread_attr_getaffinity_np - Invalid cpusetsize - EINVAL +Init - pthread_attr_getaffinity_np - Not initialized attr - EINVAL Init - Validate pthread_attr_setaffinity_np and pthread_attr_getaffinity_np -*** END OF SMP POSIX AFFINITY ATTRIBUTE TEST 1 *** +*** END OF TEST SMPPSXAFFINITY 1 *** -- cgit v1.2.3