kernel: move float operations out of thread.c

Move float operation out and add missing vrfy hook for enabling float.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
Anas Nashif 2024-02-27 08:48:37 -05:00
parent 6c003bdbcf
commit 3dc0c4544b
3 changed files with 48 additions and 30 deletions

View file

@ -57,6 +57,7 @@ list(APPEND kernel_files
init.c
kheap.c
mem_slab.c
float.c
thread.c
version.c
priority_queues.c

47
kernel/float.c Normal file
View file

@ -0,0 +1,47 @@
/*
* Copyright (c) 2010-2014 Wind River Systems, Inc.
* Copyright (c) 2024 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/internal/syscall_handler.h>
#include <kernel_arch_interface.h>
int z_impl_k_float_disable(struct k_thread *thread)
{
#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
return arch_float_disable(thread);
#else
ARG_UNUSED(thread);
return -ENOTSUP;
#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
}
int z_impl_k_float_enable(struct k_thread *thread, unsigned int options)
{
#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
return arch_float_enable(thread, options);
#else
ARG_UNUSED(thread);
ARG_UNUSED(options);
return -ENOTSUP;
#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
}
#ifdef CONFIG_USERSPACE
static inline int z_vrfy_k_float_disable(struct k_thread *thread)
{
K_OOPS(K_SYSCALL_OBJ(thread, K_OBJ_THREAD));
return z_impl_k_float_disable(thread);
}
#include <syscalls/k_float_disable_mrsh.c>
static inline int z_vrfy_k_float_enable(struct k_thread *thread, unsigned int options)
{
K_OOPS(K_SYSCALL_OBJ(thread, K_OBJ_THREAD));
return z_impl_k_float_enable(thread, options);
}
#include <syscalls/k_float_enable_mrsh.c>
#endif /* CONFIG_USERSPACE */

View file

@ -751,36 +751,6 @@ FUNC_NORETURN void k_thread_user_mode_enter(k_thread_entry_t entry,
#endif
}
int z_impl_k_float_disable(struct k_thread *thread)
{
#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
return arch_float_disable(thread);
#else
ARG_UNUSED(thread);
return -ENOTSUP;
#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
}
int z_impl_k_float_enable(struct k_thread *thread, unsigned int options)
{
#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
return arch_float_enable(thread, options);
#else
ARG_UNUSED(thread);
ARG_UNUSED(options);
return -ENOTSUP;
#endif /* CONFIG_FPU && CONFIG_FPU_SHARING */
}
#ifdef CONFIG_USERSPACE
static inline int z_vrfy_k_float_disable(struct k_thread *thread)
{
K_OOPS(K_SYSCALL_OBJ(thread, K_OBJ_THREAD));
return z_impl_k_float_disable(thread);
}
#include <syscalls/k_float_disable_mrsh.c>
#endif /* CONFIG_USERSPACE */
#if defined(CONFIG_INIT_STACKS) && defined(CONFIG_THREAD_STACK_INFO)
#ifdef CONFIG_STACK_GROWS_UP
#error "Unsupported configuration for stack analysis"