zephyr/kernel
Andrew Boie b3eb510f5c kernel: fix atomic ops in user mode on some arches
Most CPUs have instructions like LOCK, LDREX/STREX, etc which
allows for atomic operations without locking interrupts that
can be invoked from user mode without complication. They typically
use compiler builtin atomic operations, or custom assembly
to implement them.

However, some CPUs may lack these kinds of instructions, such
as Cortex-M0 or some ARC. They use these C-based atomic
operation implementations instead. Unfortunately these require
grabbing a spinlock to ensure proper concurrency with other
threads and ISRs. Hence, they will trigger an exception when
called from user mode.

For these platforms, which support user mode but not atomic
operation instructions, the atomic API has been exposed as
system calls.

Some of the implementations in atomic_c.c which can be instead
expressed in terms of other atomic operations have been removed.

The kernel test of atomic operations now runs in user mode to
prove that this works.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-18 09:18:00 -04:00
..
include kernel: userspace: correct documentation for Z_SYSCALL_MEMORY_ macros 2019-03-13 15:36:15 -07:00
atomic_c.c kernel: fix atomic ops in user mode on some arches 2019-03-18 09:18:00 -04:00
CMakeLists.txt
compiler_stack_protect.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
device.c device: Extend device_set_power_state API to support async requests 2019-03-14 14:26:15 +01:00
errno.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
idle.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
init.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
int_latency_bench.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
Kconfig kernel/sched: arch/x86_64: Support synchronous k_thread_abort() in SMP 2019-03-13 19:15:20 +01:00
Kconfig.power_mgmt power: rename CPU_LPS_n power states 2019-02-26 02:30:13 +01:00
mailbox.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
mem_domain.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
mem_slab.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
mempool.c kernel: Make heap smallest object size configurable 2019-03-12 11:56:31 +01:00
msg_q.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
mutex.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
pipes.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
poll.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
queue.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
sched.c kernel/sched: Nonatomic swap workaround update for qemu behavior 2019-03-15 05:50:43 +01:00
sem.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
smp.c kernel/sched: arch/x86_64: Support synchronous k_thread_abort() in SMP 2019-03-13 19:15:20 +01:00
stack.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
system_work_q.c
thread_abort.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
thread.c kernel/spinlock: Fix race in spinlock validation 2019-03-13 19:15:20 +01:00
timeout.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
timer.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
userspace_handler.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
userspace.c all: Update reserved function names 2019-03-11 13:48:42 -04:00
version.c
work_q.c kernel/work_q: Fix locking across multiple queues 2019-03-12 18:37:41 +01:00