zephyr/kernel
Andy Ross 0b2ed3818d kernel/timeout: Cleanup/speedup parallel announce logic
Commit b1182bf83b ("kernel/timeout: Serialize handler callbacks on
SMP") introduced an important fix to timeout handling on
multiprocessor systems, but it did it in a clumsy way by holding a
spinlock across the entire timeout process on all cores (everything
would have to spin until one core finished the list).  The lock also
delays any nested interrupts that might otherwise be delivered, which
breaks our nested_irq_offload case on xtensa+SMP (where contra x86,
the "synchronous" interrupt is sensitive to mask state).

Doing this right turns out not to be so hard: take the timeout lock,
check to see if someone is already iterating
(i.e. "announce_remaining" is non-zero), and if so just increment the
ticks to announce and exit.  The original cpu will then complete the
full timeout list without blocking any others longer than needed to
check the timeout state.

Fixes #44758

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2022-04-13 13:26:14 -07:00
..
include everywhere: fix typos 2022-03-18 13:24:08 -04:00
paging kernel: mmu: z_backing_store* to k_mem_paging_backing_store* 2021-05-28 11:33:22 -04:00
atomic_c.c kernel: atomic: consistently use named type for atomic pointer values 2021-04-19 15:22:13 +02:00
banner.c kernel: init: move banner handling 2020-11-27 20:08:14 -05:00
cache_handlers.c cache: Rename sys_{dcache,icache}_* to sys_{data,instr}_cache_* 2021-05-08 07:00:33 +02:00
CMakeLists.txt kernel: move thread usage routines to own file 2022-01-10 10:38:06 -05:00
compiler_stack_protect.c tests: coverage: exclude the CODE UNREACHABLE of code coverage 2021-01-15 12:42:00 -05:00
condvar.c Tracing: Conditional variable tracing 2021-05-07 22:10:21 -04:00
device.c kernel/device: Remove unknown external pointer 2022-04-08 09:59:00 -04:00
errno.c kernel: support using thread local storage for errno 2020-10-24 10:52:00 -07:00
events.c kernel: add support for event objects 2021-10-16 06:27:10 -04:00
fatal.c kernel: fatal: Avoid thread api access when no multithreading 2021-04-29 14:50:35 +02:00
futex.c futex: Avoid unnecessary lock 2021-07-30 20:21:04 -04:00
idle.c pm: Do not suspend during kernel initialization 2022-01-19 14:14:28 -05:00
init.c kernel: Remove idle thread cpu index on single-core devices 2022-03-30 10:08:48 -04:00
Kconfig kernel: SMP is Symmetric multiprocessing 2022-03-15 11:07:29 -04:00
Kconfig.vm everywhere: fix typos 2022-03-18 13:24:08 -04:00
kheap.c kernel: kheap: make init work with demand paging 2021-08-26 21:16:22 -04:00
mailbox.c kernel: remove @return doc for void functions 2022-01-12 16:02:16 -05:00
main_weak.c kernel: extract __weak main() into independent file 2021-08-28 08:48:03 -04:00
mem_domain.c kernel: mem_domain: k_mem_domain_add_thread to return errors 2021-11-22 12:45:22 -05:00
mem_slab.c kernel: remove @return doc for void functions 2022-01-12 16:02:16 -05:00
mempool.c Tracing: k_free tracing hook heap reference added 2021-11-16 09:45:01 -05:00
mmu.c kernel: mmu: add a log line for z_phys_unmap 2022-02-24 08:38:38 -06:00
msg_q.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
mutex.c everywhere: fix typos 2022-03-18 13:24:08 -04:00
pipes.c kernel: pipes: add pipe flush routines 2022-01-10 12:17:14 -05:00
poll.c everywhere: fix typos 2022-03-14 20:22:24 -04:00
queue.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
sched.c sched: formalize the passing of NULL to z_get_next_switch_handle() 2022-03-18 13:32:49 -04:00
sem.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
smp.c kernel: Refactor SMP cpu initialization a bit 2022-03-01 09:59:15 -05:00
stack.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
system_work_q.c kernel: remove old work queue implementation 2021-03-03 20:06:00 -05:00
thread.c kernel: Reduce strncpy in z_impl_k_thread_name_set by null char 2022-03-10 10:12:48 +01:00
timeout.c kernel/timeout: Cleanup/speedup parallel announce logic 2022-04-13 13:26:14 -07:00
timer.c kernel: remove @return doc for void functions 2022-01-12 16:02:16 -05:00
usage.c kernel: Update CPU runtime stats of non-idle time 2022-01-20 08:22:01 -05:00
userspace.c userspace: plug thread index leak in k_object_alloc() 2022-03-14 19:18:34 -04:00
userspace_handler.c userspace: update k_object API to support immutable objects 2020-09-02 13:48:13 +02:00
version.c zephyr: replace zephyr integer types with C99 types 2020-06-08 08:23:57 -05:00
work.c kernel: work: remove unused if statement 2021-12-13 17:20:56 -05:00
xip.c kernel/init.c: allow for memset/memcpy alternatives during early boot 2022-02-21 21:00:12 -05:00