[PATCH] rtems: Remove RTEMS_MP_NOT_CONFIGURED error

Chris Johns chrisj at rtems.org
Thu Jun 18 01:43:20 UTC 2020


OK to push this change and the doco patch.

Thanks
Chris

On 16/6/20 3:52 pm, Sebastian Huber wrote:
> Some objects can be created with a local or global scope in a
> multiprocessing network. In non-multiprocessing configurations setting
> the scope to local or global had no effect since such a system can be
> viewed as a multiprocessing network with just one node. One and all
> nodes is the same in such a network. However, if multiprocessing was
> configured, creation of a global object in a single node network
> resulted in an RTEMS_MP_NOT_CONFIGURED error. Remove this error
> condition for symmetry to the non-multiprocessing setup. This is in line
> with the task affinity behaviour in SMP systems.
> 
> Update #4005.
> ---
>  cpukit/rtems/src/msgqcreate.c                 |  8 ++++---
>  cpukit/rtems/src/partcreate.c                 |  6 ++---
>  cpukit/rtems/src/semcreate.c                  |  7 ++----
>  cpukit/rtems/src/taskcreate.c                 | 12 ++++------
>  testsuites/sptests/sp04/init.c                |  2 +-
>  testsuites/sptests/sp12/init.c                |  2 +-
>  testsuites/sptests/sp13/init.c                |  2 +-
>  testsuites/sptests/sp15/init.c                |  2 +-
>  testsuites/sptests/spmsgq_err01/init.c        | 21 ------------------
>  .../sptests/spmsgq_err01/spmsgq_err01.scn     |  1 -
>  testsuites/sptests/sppartition_err01/init.c   | 22 -------------------
>  .../sppartition_err01/sppartition_err01.scn   |  1 -
>  testsuites/sptests/spsem_err01/init.c         | 21 ------------------
>  .../sptests/spsem_err01/spsem_err01.scn       |  1 -
>  testsuites/sptests/sptask_err03/init.c        | 22 -------------------
>  .../sptests/sptask_err03/sptask_err03.scn     |  1 -
>  16 files changed, 18 insertions(+), 113 deletions(-)
> 
> diff --git a/cpukit/rtems/src/msgqcreate.c b/cpukit/rtems/src/msgqcreate.c
> index 9d4e8cdfd6..3741347cc9 100644
> --- a/cpukit/rtems/src/msgqcreate.c
> +++ b/cpukit/rtems/src/msgqcreate.c
> @@ -52,9 +52,11 @@ rtems_status_code rtems_message_queue_create(
>      return RTEMS_INVALID_ADDRESS;
>  
>  #if defined(RTEMS_MULTIPROCESSING)
> -  if ( (is_global = _Attributes_Is_global( attribute_set ) ) &&
> -       !_System_state_Is_multiprocessing )
> -    return RTEMS_MP_NOT_CONFIGURED;
> +  if ( !_System_state_Is_multiprocessing ) {
> +    attribute_set = _Attributes_Clear( attribute_set, RTEMS_GLOBAL );
> +  }
> +
> +  is_global = _Attributes_Is_global( attribute_set );
>  #endif
>  
>    if ( count == 0 )
> diff --git a/cpukit/rtems/src/partcreate.c b/cpukit/rtems/src/partcreate.c
> index 2aefce8067..9aa5e80bf1 100644
> --- a/cpukit/rtems/src/partcreate.c
> +++ b/cpukit/rtems/src/partcreate.c
> @@ -66,9 +66,9 @@ rtems_status_code rtems_partition_create(
>      return RTEMS_INVALID_ADDRESS;
>  
>  #if defined(RTEMS_MULTIPROCESSING)
> -  if ( _Attributes_Is_global( attribute_set ) &&
> -       !_System_state_Is_multiprocessing )
> -    return RTEMS_MP_NOT_CONFIGURED;
> +  if ( !_System_state_Is_multiprocessing ) {
> +    attribute_set = _Attributes_Clear( attribute_set, RTEMS_GLOBAL );
> +  }
>  #endif
>  
>    the_partition = _Partition_Allocate();
> diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c
> index 6cdd877cce..b57b635d85 100644
> --- a/cpukit/rtems/src/semcreate.c
> +++ b/cpukit/rtems/src/semcreate.c
> @@ -57,11 +57,8 @@ rtems_status_code rtems_semaphore_create(
>      return RTEMS_INVALID_ADDRESS;
>  
>  #if defined(RTEMS_MULTIPROCESSING)
> -  if (
> -    _Attributes_Is_global( attribute_set )
> -      && !_System_state_Is_multiprocessing
> -  ) {
> -    return RTEMS_MP_NOT_CONFIGURED;
> +  if ( !_System_state_Is_multiprocessing ) {
> +    attribute_set = _Attributes_Clear( attribute_set, RTEMS_GLOBAL );
>    }
>  #endif
>  
> diff --git a/cpukit/rtems/src/taskcreate.c b/cpukit/rtems/src/taskcreate.c
> index 288eafa5c7..b430d3c705 100644
> --- a/cpukit/rtems/src/taskcreate.c
> +++ b/cpukit/rtems/src/taskcreate.c
> @@ -111,15 +111,11 @@ rtems_status_code rtems_task_create(
>    }
>  
>  #if defined(RTEMS_MULTIPROCESSING)
> -  if ( _Attributes_Is_global( the_attribute_set ) ) {
> -
> -    is_global = true;
> -
> -    if ( !_System_state_Is_multiprocessing )
> -      return RTEMS_MP_NOT_CONFIGURED;
> +  if ( !_System_state_Is_multiprocessing ) {
> +    the_attribute_set = _Attributes_Clear( the_attribute_set, RTEMS_GLOBAL );
> +  }
>  
> -  } else
> -    is_global = false;
> +  is_global = _Attributes_Is_global( the_attribute_set );
>  #endif
>  
>    /*
> diff --git a/testsuites/sptests/sp04/init.c b/testsuites/sptests/sp04/init.c
> index 11aae46ea3..b163aec8ed 100644
> --- a/testsuites/sptests/sp04/init.c
> +++ b/testsuites/sptests/sp04/init.c
> @@ -84,7 +84,7 @@ rtems_task Init(
>       1,
>       RTEMS_MINIMUM_STACK_SIZE * 2,
>       RTEMS_PREEMPT|RTEMS_TIMESLICE,
> -     RTEMS_DEFAULT_ATTRIBUTES,
> +     RTEMS_GLOBAL,
>       &Task_id[ 2 ]
>    );
>    directive_failed( status, "rtems_task_create of TA2" );
> diff --git a/testsuites/sptests/sp12/init.c b/testsuites/sptests/sp12/init.c
> index 789f7e3249..7aa09d3676 100644
> --- a/testsuites/sptests/sp12/init.c
> +++ b/testsuites/sptests/sp12/init.c
> @@ -73,7 +73,7 @@ rtems_task Init(
>    status = rtems_semaphore_create(
>      Semaphore_name[ 3 ],
>      1,
> -    RTEMS_DEFAULT_ATTRIBUTES,
> +    RTEMS_GLOBAL,
>      RTEMS_NO_PRIORITY,
>      &Semaphore_id[ 3 ]
>    );
> diff --git a/testsuites/sptests/sp13/init.c b/testsuites/sptests/sp13/init.c
> index 7ed8dabc53..a23d369001 100644
> --- a/testsuites/sptests/sp13/init.c
> +++ b/testsuites/sptests/sp13/init.c
> @@ -105,7 +105,7 @@ rtems_task Init(
>      Queue_name[ 3 ],
>      100,
>      MESSAGE_SIZE,
> -    RTEMS_DEFAULT_ATTRIBUTES,
> +    RTEMS_GLOBAL,
>      &Queue_id[ 3 ]
>    );
>    directive_failed( status, "rtems_message_queue_create of Q3" );
> diff --git a/testsuites/sptests/sp15/init.c b/testsuites/sptests/sp15/init.c
> index 25be0425e2..2565495a06 100644
> --- a/testsuites/sptests/sp15/init.c
> +++ b/testsuites/sptests/sp15/init.c
> @@ -71,7 +71,7 @@ rtems_task Init(
>      Area_2,
>      274,
>      128,
> -    RTEMS_DEFAULT_ATTRIBUTES,
> +    RTEMS_GLOBAL,
>      &Partition_id[ 2 ]
>    );
>    directive_failed( status, "rtems_partition_create of PT2" );
> diff --git a/testsuites/sptests/spmsgq_err01/init.c b/testsuites/sptests/spmsgq_err01/init.c
> index 24537725dc..1ff8490d1a 100644
> --- a/testsuites/sptests/spmsgq_err01/init.c
> +++ b/testsuites/sptests/spmsgq_err01/init.c
> @@ -98,27 +98,6 @@ rtems_task Init(
>    );
>    puts( "TA1 - rtems_message_queue_create - Q 1 - RTEMS_INVALID_NAME" );
>  
> -  /*
> -   *  The check for an object being global is only made if
> -   *  multiprocessing is enabled.
> -   */
> -
> -#if defined(RTEMS_MULTIPROCESSING)
> -  status = rtems_message_queue_create(
> -    Queue_name[ 1 ],
> -    1,
> -    MESSAGE_SIZE,
> -    RTEMS_GLOBAL,
> -    &Junk_id
> -  );
> -  fatal_directive_status(
> -    status,
> -    RTEMS_MP_NOT_CONFIGURED,
> -    "rtems_message_queue_create of mp not configured"
> -  );
> -#endif
> -  puts( "TA1 - rtems_message_queue_create - Q 1 - RTEMS_MP_NOT_CONFIGURED" );
> -
>    /* not enough memory for messages */
>    status = rtems_message_queue_create(
>      Queue_name[ 1 ],
> diff --git a/testsuites/sptests/spmsgq_err01/spmsgq_err01.scn b/testsuites/sptests/spmsgq_err01/spmsgq_err01.scn
> index 7bd31fc744..26add5eb82 100644
> --- a/testsuites/sptests/spmsgq_err01/spmsgq_err01.scn
> +++ b/testsuites/sptests/spmsgq_err01/spmsgq_err01.scn
> @@ -4,7 +4,6 @@ TA1 - rtems_message_queue_create - NULL Id - RTEMS_INVALID_ADDRESS
>  TA1 - rtems_message_queue_create - count = 0 - RTEMS_INVALID_NUMBER
>  TA1 - rtems_message_queue_create - size = 0 - RTEMS_INVALID_SIZE
>  TA1 - rtems_message_queue_create - Q 1 - RTEMS_INVALID_NAME
> -TA1 - rtems_message_queue_create - Q 1 - RTEMS_MP_NOT_CONFIGURED
>  TA1 - rtems_message_queue_create - Q 2 - RTEMS_UNSATISFIED
>  TA1 - rtems_message_queue_create - Q 2 - RTEMS_UNSATISFIED #2
>  TA1 - rtems_message_queue_create - Q 1 - 2 DEEP - RTEMS_SUCCESSFUL
> diff --git a/testsuites/sptests/sppartition_err01/init.c b/testsuites/sptests/sppartition_err01/init.c
> index 39ee700daa..39373852fb 100644
> --- a/testsuites/sptests/sppartition_err01/init.c
> +++ b/testsuites/sptests/sppartition_err01/init.c
> @@ -126,28 +126,6 @@ void test_partition_errors(void)
>      );
>    }
>  
> -  /*
> -   *  The check for an object being global is only made if
> -   *  multiprocessing is enabled.
> -   */
> -
> -#if defined(RTEMS_MULTIPROCESSING)
> -  status = rtems_partition_create(
> -    Partition_name[ 1 ],
> -    Partition_good_area,
> -    128,
> -    64,
> -    RTEMS_GLOBAL,
> -    &junk_id
> -  );
> -  fatal_directive_status(
> -    status,
> -    RTEMS_MP_NOT_CONFIGURED,
> -    "rtems_partition_create of global"
> -  );
> -#endif
> -  puts( "TA1 - rtems_partition_create - RTEMS_MP_NOT_CONFIGURED" );
> -
>  #if defined(_C3x) || defined(_C4x)
>    puts( "TA1 - rtems_partition_create - RTEMS_INVALID_ADDRESS - SKIPPED" );
>  #else
> diff --git a/testsuites/sptests/sppartition_err01/sppartition_err01.scn b/testsuites/sptests/sppartition_err01/sppartition_err01.scn
> index 2b010ee6d4..01319353e7 100644
> --- a/testsuites/sptests/sppartition_err01/sppartition_err01.scn
> +++ b/testsuites/sptests/sppartition_err01/sppartition_err01.scn
> @@ -4,7 +4,6 @@ TA1 - rtems_partition_create - length - RTEMS_INVALID_SIZE
>  TA1 - rtems_partition_create - buffer size - RTEMS_INVALID_SIZE
>  TA1 - rtems_partition_create - length < buffer size - RTEMS_INVALID_SIZE
>  TA1 - rtems_partition_create - buffer size < overhead - RTEMS_INVALID_SIZE
> -TA1 - rtems_partition_create - RTEMS_MP_NOT_CONFIGURED
>  TA1 - rtems_partition_create - RTEMS_INVALID_ADDRESS
>  TA1 - rtems_partition_create - RTEMS_INVALID_SIZE
>  TA1 - rtems_partition_delete - unknown RTEMS_INVALID_ID
> diff --git a/testsuites/sptests/spsem_err01/init.c b/testsuites/sptests/spsem_err01/init.c
> index 39a366b41a..f1f1592ebf 100644
> --- a/testsuites/sptests/spsem_err01/init.c
> +++ b/testsuites/sptests/spsem_err01/init.c
> @@ -199,27 +199,6 @@ rtems_task Init(
>    );
>    puts( "TA1 - rtems_semaphore_create - RTEMS_INVALID_NUMBER" );
>  
> -  /*
> -   *  The check for an object being global is only made if
> -   *  multiprocessing is enabled.
> -   */
> -
> -#if defined(RTEMS_MULTIPROCESSING)
> -  status = rtems_semaphore_create(
> -    Semaphore_name[ 3 ],
> -    1,
> -    RTEMS_GLOBAL,
> -    RTEMS_NO_PRIORITY,
> -    &Junk_id
> -  );
> -  fatal_directive_status(
> -    status,
> -    RTEMS_MP_NOT_CONFIGURED,
> -    "rtems_semaphore_create of mp not configured"
> -  );
> -#endif
> -  puts( "TA1 - rtems_semaphore_create - RTEMS_MP_NOT_CONFIGURED" );
> -
>    status = rtems_semaphore_delete( 100 );
>    fatal_directive_status(
>      status,
> diff --git a/testsuites/sptests/spsem_err01/spsem_err01.scn b/testsuites/sptests/spsem_err01/spsem_err01.scn
> index b6172196b0..5adf40f865 100644
> --- a/testsuites/sptests/spsem_err01/spsem_err01.scn
> +++ b/testsuites/sptests/spsem_err01/spsem_err01.scn
> @@ -12,7 +12,6 @@ TA1 - rtems_semaphore_create - FIFO and ceiling - RTEMS_NOT_DEFINED
>  TA1 - rtems_semaphore_create - ceiling and inherit - RTEMS_NOT_DEFINED
>  TA1 - rtems_semaphore_create - RTEMS_NOT_DEFINED
>  TA1 - rtems_semaphore_create - RTEMS_INVALID_NUMBER
> -TA1 - rtems_semaphore_create - RTEMS_MP_NOT_CONFIGURED
>  TA1 - rtems_semaphore_delete - RTEMS_INVALID_ID
>  TA1 - rtems_semaphore_delete - local RTEMS_INVALID_ID
>  TA1 - rtems_semaphore_ident - global RTEMS_INVALID_NAME
> diff --git a/testsuites/sptests/sptask_err03/init.c b/testsuites/sptests/sptask_err03/init.c
> index 2ac54b9037..bda2cd4a1f 100644
> --- a/testsuites/sptests/sptask_err03/init.c
> +++ b/testsuites/sptests/sptask_err03/init.c
> @@ -228,27 +228,5 @@ rtems_task Init(
>    );
>    puts( "TA1 - rtems_task_create - 11 - RTEMS_TOO_MANY" );
>  
> -  /*
> -   *  The check for an object being global is only made if
> -   *  multiprocessing is enabled.
> -   */
> -
> -#if defined(RTEMS_MULTIPROCESSING)
> -  status = rtems_task_create(
> -    task_name,
> -    4,
> -    RTEMS_MINIMUM_STACK_SIZE,
> -    RTEMS_DEFAULT_MODES,
> -    RTEMS_GLOBAL,
> -    &Junk_id
> -  );
> -  fatal_directive_status(
> -    status,
> -    RTEMS_MP_NOT_CONFIGURED,
> -    "rtems_task_create of global task in a single cpu system"
> -  );
> -#endif
> -  puts( "TA1 - rtems_task_create - RTEMS_MP_NOT_CONFIGURED" );
> - 
>    TEST_END();
>  }
> diff --git a/testsuites/sptests/sptask_err03/sptask_err03.scn b/testsuites/sptests/sptask_err03/sptask_err03.scn
> index 2787bafba5..e6047e4476 100644
> --- a/testsuites/sptests/sptask_err03/sptask_err03.scn
> +++ b/testsuites/sptests/sptask_err03/sptask_err03.scn
> @@ -14,5 +14,4 @@ TA1 - rtems_task_create - 8 created - RTEMS_SUCCESSFUL
>  TA1 - rtems_task_create - 9 created - RTEMS_SUCCESSFUL
>  TA1 - rtems_task_create - 10 created - RTEMS_SUCCESSFUL
>  TA1 - rtems_task_create - 11 - RTEMS_TOO_MANY
> -TA1 - rtems_task_create - RTEMS_MP_NOT_CONFIGURED
>  *** END TEST TASK ERROR 03 ***
> 


More information about the devel mailing list