Go to file
Andy Ross b4e9ef0691 kernel/sched: Defer IPI sending to schedule points
The original design intent with arch_sched_ipi() was that
interprocessor interrupts were fast and easily sent, so to reduce
latency the scheduler should notify other CPUs synchronously when
scheduler state changes.

This tends to result in "storms" of IPIs in some use cases, though.
For example, SOF will enumerate over all cores doing a k_sem_give() to
notify a worker thread pinned to each, each call causing a separate
IPI.  Add to that the fact that unlike x86's IO-APIC, the intel_adsp
architecture has targeted/non-broadcast IPIs that need to be repeated
for each core, and suddenly we have an O(N^2) scaling problem in the
number of CPUs.

Instead, batch the "pending" IPIs and send them only at known
scheduling points (end-of-interrupt and swap).  This semantically
matches the locations where application code will "expect" to see
other threads run, so arguably is a better choice anyway.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2022-05-02 10:23:13 -05:00
.github ci: Update to Zephyr SDK 0.14.1 2022-04-19 09:15:06 -04:00
arch riscv: pmp: work around a QEMU bug 2022-04-29 15:30:00 +02:00
boards boards: lpcxpresso54114: enable pin control 2022-05-02 09:41:42 -05:00
cmake cmake: Correct PATHS usage 2022-04-29 08:57:21 +02:00
doc doc: add sdhc api to API overview list 2022-04-29 14:21:36 -05:00
drivers drivers: dma: stm32 driver is using the STM32_DMA_STREAM_OFFSET 2022-05-02 10:57:15 +02:00
dts dts: lpc: add pin control nodes for lpc parts 2022-05-02 09:41:42 -05:00
include/zephyr kernel/sched: Defer IPI sending to schedule points 2022-05-02 10:23:13 -05:00
kernel kernel/sched: Defer IPI sending to schedule points 2022-05-02 10:23:13 -05:00
lib sparse: fix all errors 2022-04-28 08:54:21 -04:00
misc cmake: only write devicetree files when there are changes. 2022-02-11 15:47:09 +01:00
modules modules: zcbor: kconfig: Disallow ZCBOR_VERBOSE with MINIMAL_LIBC 2022-04-28 16:18:28 +02:00
samples openamp: Bump to v2022.04.0 2022-05-02 08:44:17 -05:00
scripts scripts: gitlint: block Change-Id tags in commit message 2022-04-20 20:59:33 -04:00
share cmake: zephyr-package: add message mode 2022-03-23 13:24:41 +01:00
soc drivers: pinctrl: update pin control driver for lpc54xxx 2022-05-02 09:41:42 -05:00
submanifests
subsys openamp: Bump to v2022.04.0 2022-05-02 08:44:17 -05:00
tests drivers: disk: remove legacy nxp USDHC driver 2022-04-29 14:21:36 -05:00
.checkpatch.conf checkpatch: Ignore IS_ENABLED_CONFIG warnings 2021-10-18 08:28:01 -04:00
.clang-format
.codecov.yml
.editorconfig editorconfig: Improve verbosity 2022-04-28 08:55:39 -04:00
.gitattributes gitattributes: consider SVG files generated 2021-10-14 12:42:44 -04:00
.gitignore gitignore: add .clangd to the ignore list 2022-04-24 19:47:40 +02:00
.gitlint gitlint: Stop ignoring merge, revert, fixup and squash commits 2022-01-10 08:13:36 -05:00
.mailmap
.uncrustify.cfg uncrustify: force a single EOF newline 2021-11-03 16:14:20 -04:00
CMakeLists.txt sparse: add sparse support 2022-04-28 08:54:21 -04:00
CODE_OF_CONDUCT.md
CODEOWNERS tests: subsys: sd: Add SDMMC subsystem test 2022-04-29 14:21:36 -05:00
CONTRIBUTING.rst
Kconfig
Kconfig.zephyr build: make non zephyr/ include prefix configurable 2022-04-08 19:03:32 +02:00
LICENSE
MAINTAINERS.yml MAINTAINERS: Make myself the disk subsystem maintainer 2022-04-29 11:24:35 -04:00
README.rst readme: make README logo dark-mode aware 2022-02-15 19:47:48 +01:00
VERSION VERSION: bump patchlevel to 99 2022-02-21 19:05:46 -05:00
version.h.in cmake: version.h generation performed at build time 2022-02-08 07:50:24 -05:00
west.yml manifest: hal_nxp: update NXP hal to include new LPC pin control headers 2022-05-02 09:41:42 -05:00
zephyr-env.cmd
zephyr-env.sh everywhere: fix typos 2022-03-18 13:24:08 -04:00

.. raw:: html

   <a href="https://www.zephyrproject.org">
     <p align="center">
       <img src="doc/_static/images/logo-readme.svg">
     </p>
   </a>

   <a href="https://bestpractices.coreinfrastructure.org/projects/74"><img
   src="https://bestpractices.coreinfrastructure.org/projects/74/badge"></a>
   <a
   href="https://github.com/zephyrproject-rtos/zephyr/actions/workflows/twister.yaml?query=branch%3Amain">
   <img
   src="https://github.com/zephyrproject-rtos/zephyr/actions/workflows/twister.yaml/badge.svg?event=push"></a>


The Zephyr Project is a scalable real-time operating system (RTOS) supporting
multiple hardware architectures, optimized for resource constrained devices,
and built with security in mind.

The Zephyr OS is based on a small-footprint kernel designed for use on
resource-constrained systems: from simple embedded environmental sensors and
LED wearables to sophisticated smart watches and IoT wireless gateways.

The Zephyr kernel supports multiple architectures, including ARM Cortex-M,
Intel x86, ARC, Nios II, Tensilica Xtensa, and RISC-V, and a large number of
`supported boards`_.

.. below included in doc/introduction/introduction.rst


Getting Started
***************

Welcome to Zephyr! See the `Introduction to Zephyr`_ for a high-level overview,
and the documentation's `Getting Started Guide`_ to start developing.

.. start_include_here

Community Support
*****************

Community support is provided via mailing lists and Discord; see the Resources
below for details.

.. _project-resources:

Resources
*********

Here's a quick summary of resources to help you find your way around:

* **Help**: `Asking for Help Tips`_
* **Documentation**: http://docs.zephyrproject.org (`Getting Started Guide`_)
* **Source Code**: https://github.com/zephyrproject-rtos/zephyr is the main
  repository; https://elixir.bootlin.com/zephyr/latest/source contains a
  searchable index
* **Releases**: https://github.com/zephyrproject-rtos/zephyr/releases
* **Samples and example code**: see `Sample and Demo Code Examples`_
* **Mailing Lists**: users@lists.zephyrproject.org and
  devel@lists.zephyrproject.org are the main user and developer mailing lists,
  respectively. You can join the developer's list and search its archives at
  `Zephyr Development mailing list`_. The other `Zephyr mailing list
  subgroups`_ have their own archives and sign-up pages.
* **Nightly CI Build Status**: https://lists.zephyrproject.org/g/builds
  The builds@lists.zephyrproject.org mailing list archives the CI nightly build results.
* **Chat**: Real-time chat happens in Zephyr's Discord Server. Use
  this `Discord Invite`_ to register.
* **Contributing**: see the `Contribution Guide`_
* **Wiki**: `Zephyr GitHub wiki`_
* **Issues**: https://github.com/zephyrproject-rtos/zephyr/issues
* **Security Issues**: Email vulnerabilities@zephyrproject.org to report
  security issues; also see our `Security`_ documentation. Security issues are
  tracked separately at https://zephyrprojectsec.atlassian.net.
* **Zephyr Project Website**: https://zephyrproject.org

.. _Discord Invite: https://chat.zephyrproject.org
.. _supported boards: http://docs.zephyrproject.org/latest/boards/index.html
.. _Zephyr Documentation: http://docs.zephyrproject.org
.. _Introduction to Zephyr: http://docs.zephyrproject.org/latest/introduction/index.html
.. _Getting Started Guide: http://docs.zephyrproject.org/latest/getting_started/index.html
.. _Contribution Guide: http://docs.zephyrproject.org/latest/contribute/index.html
.. _Zephyr GitHub wiki: https://github.com/zephyrproject-rtos/zephyr/wiki
.. _Zephyr Development mailing list: https://lists.zephyrproject.org/g/devel
.. _Zephyr mailing list subgroups: https://lists.zephyrproject.org/g/main/subgroups
.. _Sample and Demo Code Examples: http://docs.zephyrproject.org/latest/samples/index.html
.. _Security: http://docs.zephyrproject.org/latest/security/index.html
.. _Asking for Help Tips: https://docs.zephyrproject.org/latest/getting_started/index.html#asking-for-help