kernel: do not export z_thread_priority_set

This function is only being used by a test, so instead of reimplementing
a syscall in the test, provide a Kconfig option to provide the
functionality that only works with tests and remove some of the
duplication and extra code.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
Anas Nashif 2024-02-24 10:37:06 -05:00
parent 3ca50f5060
commit 5e591c38f1
6 changed files with 17 additions and 40 deletions

View file

@ -208,6 +208,13 @@ config THREAD_USERSPACE_LOCAL_DATA
depends on USERSPACE
default y if ERRNO && !ERRNO_IN_TLS && !LIBC_ERRNO
config USERSPACE_THREAD_MAY_RAISE_PRIORITY
bool "Thread can raise own priority"
depends on USERSPACE
depends on TEST # This should only be enabled by tests.
help
Thread can raise its own priority in userspace mode.
config DYNAMIC_THREAD
bool "Support for dynamic threads [EXPERIMENTAL]"
select EXPERIMENTAL

View file

@ -51,7 +51,6 @@ void z_reschedule_irqlock(uint32_t key);
struct k_thread *z_unpend_first_thread(_wait_q_t *wait_q);
void z_unpend_thread(struct k_thread *thread);
int z_unpend_all(_wait_q_t *wait_q);
void z_thread_priority_set(struct k_thread *thread, int prio);
bool z_set_prio(struct k_thread *thread, int prio);
void *z_get_next_switch_handle(void *interrupted);
void idle(void *unused1, void *unused2, void *unused3);

View file

@ -1013,17 +1013,6 @@ bool z_set_prio(struct k_thread *thread, int prio)
return need_sched;
}
void z_thread_priority_set(struct k_thread *thread, int prio)
{
bool need_sched = z_set_prio(thread, prio);
flag_ipi();
if (need_sched && _current->base.sched_locked == 0U) {
z_reschedule_unlocked();
}
}
static inline bool resched(uint32_t key)
{
#ifdef CONFIG_SMP
@ -1286,9 +1275,12 @@ void z_impl_k_thread_priority_set(k_tid_t thread, int prio)
Z_ASSERT_VALID_PRIO(prio, NULL);
__ASSERT(!arch_is_in_isr(), "");
struct k_thread *th = (struct k_thread *)thread;
bool need_sched = z_set_prio((struct k_thread *)thread, prio);
z_thread_priority_set(th, prio);
flag_ipi();
if (need_sched && _current->base.sched_locked == 0U) {
z_reschedule_unlocked();
}
}
#ifdef CONFIG_USERSPACE
@ -1297,10 +1289,11 @@ static inline void z_vrfy_k_thread_priority_set(k_tid_t thread, int prio)
K_OOPS(K_SYSCALL_OBJ(thread, K_OBJ_THREAD));
K_OOPS(K_SYSCALL_VERIFY_MSG(_is_valid_prio(prio, NULL),
"invalid thread priority %d", prio));
#ifndef CONFIG_USERSPACE_THREAD_MAY_RAISE_PRIORITY
K_OOPS(K_SYSCALL_VERIFY_MSG((int8_t)prio >= thread->base.prio,
"thread priority may only be downgraded (%d < %d)",
prio, thread->base.prio));
#endif
z_impl_k_thread_priority_set(thread, prio);
}
#include <syscalls/k_thread_priority_set_mrsh.c>

View file

@ -25,3 +25,4 @@ CONFIG_USERSPACE=y
# Disable time slicing
CONFIG_TIMESLICING=n
CONFIG_USERSPACE_THREAD_MAY_RAISE_PRIORITY=y

View file

@ -78,29 +78,6 @@ K_PIPE_DEFINE(PIPE_BIGBUFF, 4096, 4);
* Custom syscalls
*/
/**
* @brief Change a thread's priority
*
* Unlike the normal k_thread_priority_set(), this custom syscall allows
* a user thread to raise its priority.
*/
void z_impl_test_thread_priority_set(k_tid_t thread, int prio)
{
extern void z_thread_priority_set(struct k_thread *thread, int prio);
z_thread_priority_set((struct k_thread *)thread, prio);
}
#ifdef CONFIG_USERSPACE
static void z_vrfy_test_thread_priority_set(k_tid_t thread, int prio)
{
z_impl_test_thread_priority_set(thread, prio);
}
#include <syscalls/test_thread_priority_set_mrsh.c>
#endif
/**
* @brief Obtain a timestamp
*

View file

@ -115,7 +115,7 @@ void pipe_test(void)
PRINT_STRING("| "
"non-matching sizes (1_TO_N) to lower priority"
" |\n");
test_thread_priority_set(k_current_get(), TaskPrio - 2);
k_thread_priority_set(k_current_get(), TaskPrio - 2);
}
PRINT_STRING(dashline);
PRINT_1_TO_N_HEADER();
@ -136,7 +136,7 @@ void pipe_test(void)
PRINT_1_TO_N();
}
PRINT_STRING(dashline);
test_thread_priority_set(k_current_get(), TaskPrio);
k_thread_priority_set(k_current_get(), TaskPrio);
}
}