diff --git a/Documentation/reference/user/01_task_control.rst b/Documentation/reference/user/01_task_control.rst index e673d712776..163030776c3 100644 --- a/Documentation/reference/user/01_task_control.rst +++ b/Documentation/reference/user/01_task_control.rst @@ -78,10 +78,12 @@ Standard ``posix_spawn`` interfaces: - :c:func:`posix_spawnattr_getflags` - :c:func:`posix_spawnattr_getschedparam` - :c:func:`posix_spawnattr_getschedpolicy` + - :c:func:`posix_spawnattr_getpriority` - :c:func:`posix_spawnattr_getsigmask` - :c:func:`posix_spawnattr_setflags` - :c:func:`posix_spawnattr_setschedparam` - :c:func:`posix_spawnattr_setschedpolicy` + - :c:func:`posix_spawnattr_setpriority` - :c:func:`posix_spawnattr_setsigmask` Non-standard task control interfaces inspired by ``posix_spawn``: @@ -735,6 +737,17 @@ Functions :return: On success, this function returns 0; on failure it will return an error number from ```` +.. c:function:: uint8_t posix_spawnattr_getpriority(FAR posix_spawnattr_t *attr) + + The ``posix_spawnattr_getpriority()`` function will obtain + the value of the *spawn-priority* attribute from the attributes object + referenced by ``attr``. + + This is a non-standard helper API. + + :param attr: The address spawn attributes to be queried. + :return: The priority value stored in the attributes object. + .. c:function:: int posix_spawnattr_getsigmask(FAR const posix_spawnattr_t *attr, FAR sigset_t *sigmask) ``posix_spawnattr_getsigdefault()`` function will @@ -779,6 +792,19 @@ Functions :return: On success, this function returns 0; on failure it will return an error number from ```` +.. c:function:: int posix_spawnattr_setpriority(FAR posix_spawnattr_t *attr, uint8_t priority) + + The ``posix_spawnattr_setpriority()`` function will set + the *spawn-priority* attribute in an initialized attributes object + referenced by ``attr``. + + This is a non-standard helper API. + + :param attr: The address spawn attributes to be used. + :param priority: The new priority value to set. + :return: On success, this function returns 0; on failure it + will return an error number from ```` + .. c:function:: int posix_spawnattr_setsigmask(FAR posix_spawnattr_t *attr, FAR const sigset_t *sigmask) The ``posix_spawnattr_setsigmask()`` function will set diff --git a/include/spawn.h b/include/spawn.h index f23c6e4a7c6..64f35c83838 100644 --- a/include/spawn.h +++ b/include/spawn.h @@ -208,7 +208,9 @@ int posix_spawnattr_getstacksize(FAR const posix_spawnattr_t *attr, FAR size_t *stacksize); int posix_spawnattr_setstacksize(FAR posix_spawnattr_t *attr, size_t stacksize); - +int posix_spawnattr_setpriority(FAR posix_spawnattr_t *attr, + uint8_t priority); +uint8_t posix_spawnattr_getpriority(FAR posix_spawnattr_t *attr); #ifndef CONFIG_BUILD_KERNEL int posix_spawnattr_getstackaddr(FAR const posix_spawnattr_t *attr, FAR void **stackaddr); diff --git a/libs/libc/spawn/CMakeLists.txt b/libs/libc/spawn/CMakeLists.txt index 006de7b11c8..ba28b81c4c1 100644 --- a/libs/libc/spawn/CMakeLists.txt +++ b/libs/libc/spawn/CMakeLists.txt @@ -38,6 +38,8 @@ set(SRCS lib_psa_setsigmask.c lib_psa_getstacksize.c lib_psa_setstacksize.c + lib_psa_getpriority.c + lib_psa_setpriority.c lib_psa_destroy.c) if(NOT CONFIG_BUILD_KERNEL) diff --git a/libs/libc/spawn/Make.defs b/libs/libc/spawn/Make.defs index 4d72a305a72..545997e1bbe 100644 --- a/libs/libc/spawn/Make.defs +++ b/libs/libc/spawn/Make.defs @@ -29,6 +29,7 @@ CSRCS += lib_psa_getflags.c lib_psa_getschedparam.c lib_psa_getschedpolicy.c CSRCS += lib_psa_init.c lib_psa_setflags.c lib_psa_setschedparam.c CSRCS += lib_psa_setschedpolicy.c lib_psa_getsigmask.c lib_psa_setsigmask.c CSRCS += lib_psa_getstacksize.c lib_psa_setstacksize.c lib_psa_destroy.c +CSRCS += lib_psa_getpriority.c lib_psa_setpriority.c ifneq ($(CONFIG_BUILD_KERNEL),y) CSRCS += lib_psa_getstackaddr.c lib_psa_setstackaddr.c diff --git a/libs/libc/spawn/lib_psa_getpriority.c b/libs/libc/spawn/lib_psa_getpriority.c new file mode 100644 index 00000000000..aff8dd92415 --- /dev/null +++ b/libs/libc/spawn/lib_psa_getpriority.c @@ -0,0 +1,57 @@ +/**************************************************************************** + * libs/libc/spawn/lib_psa_getpriority.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: posix_spawnattr_getpriority + * + * Description: + * Retrieves the priority attribute from an initialized attributes object + * referenced by attr. + * + * Input Parameters: + * attr - The address of the spawn attributes to be used. + * + * Returned Value: + * The priority value stored in the attributes object. + * + ****************************************************************************/ + +uint8_t posix_spawnattr_getpriority(FAR posix_spawnattr_t *attr) +{ + DEBUGASSERT(attr); + + return attr->priority; +} diff --git a/libs/libc/spawn/lib_psa_setpriority.c b/libs/libc/spawn/lib_psa_setpriority.c new file mode 100644 index 00000000000..1ede796b000 --- /dev/null +++ b/libs/libc/spawn/lib_psa_setpriority.c @@ -0,0 +1,60 @@ +/**************************************************************************** + * libs/libc/spawn/lib_psa_setpriority.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: posix_spawnattr_setpriority + * + * Description: + * Sets the priority attribute in an initialized attributes object + * referenced by attr. + * + * Input Parameters: + * attr - The address of the spawn attributes to be used. + * priority - The new priority to set. + * + * Returned Value: + * On success, returns 0; + * + ****************************************************************************/ + +int posix_spawnattr_setpriority(FAR posix_spawnattr_t *attr, + uint8_t priority) +{ + DEBUGASSERT(attr); + + attr->priority = priority; + return OK; +}