Go to file
Christopher Friedt e6eb0a705b posix: eventfd: revise locking, signaling, and allocation
TL;DR - a complete rewrite.

Previously, the prototypical `eventfd()` usage (one thread
performing a blocking `read()`, followed by another thread
performing a `write()`) would deadlock Zephyr. This shortcoming
has existed in Zephyr's `eventfd()` implementation from the
start and the suggested workaround was to use `poll()`.

However, that is not sufficient for integrating 3rd-party
libraries that may rely on proper `eventfd()` blocking
operations such as `eventfd_read()` and `eventfd_write()`.

The culprit was the per-fdtable-entry `struct k_mutex`.

Here we perform a minor revision of the locking strategy
and employ `k_condvar_broadcast()` and `k_condvar_wait()`
to signal and wait on the holder of a given `struct k_mutex`.

It is important to note, however, that the primary means of
synchronizing the eventfd state is actually the eventfd
spinlock. The fdtable mutex and condition variable are mainly
used for the purposes of blocking io (r,w,close) and are not
used in the code path of non-blocking reads.

The `wait_q` and `k_poll_signal` entries were removed from
`struct eventfd` as they were unnecessary.

Additionally, switch to using a bitarray because it is
possibly faster than linear search for allocating and
deallocating eventfd resources.

Signed-off-by: Christopher Friedt <cfriedt@meta.com>
2023-06-02 18:45:46 -04:00
.github ci: twister: Run on schedule once per week on Sunday 2023-05-31 10:00:31 -04:00
arch riscv: exclude more code when multithreading is disabled 2023-05-31 06:17:10 -04:00
boards boards: xtensa: update rimage and west sign documentation 2023-06-02 15:07:59 -04:00
cmake USB-C: genVIF: Cleanup and add support to pick static data from input 2023-05-26 13:54:43 -04:00
doc doc: smbus: Correct SMBus documentation 2023-06-01 18:04:58 -04:00
drivers drivers: can: mcan: fix IRQ acknowledge 2023-06-02 15:06:40 -04:00
dts drivers: can: mcan: use per-instance message RAM configuration 2023-05-29 14:34:19 -04:00
include/zephyr posix: eventfd: revise locking, signaling, and allocation 2023-06-02 18:45:46 -04:00
kernel pm: Fix cpus active count 2023-06-01 10:05:31 +02:00
lib posix: eventfd: revise locking, signaling, and allocation 2023-06-02 18:45:46 -04:00
misc misc: generated: update configs.c template with <zephyr/...> prefix 2022-05-09 12:45:29 -04:00
modules net: ieee802154: Remove IEEE802154_2015 option usage 2023-06-01 04:53:02 -04:00
samples tests: samples: cleanup test tags, add integration_platforms 2023-06-02 04:47:06 -04:00
scripts scripts: size_report: Use default encoding to process filenames 2023-06-02 15:44:36 -04:00
share sysbuild: generate .config.sysbuild for controlling build settings 2023-05-25 14:57:41 +02:00
snippets snippets: support for EXTRA_DTC_OVERLAY_FILE and EXTRA_CONF_FILE 2023-05-25 13:31:53 +00:00
soc soc: xtensa: cmake: add new WEST_SIGN_OPTS variable 2023-06-02 15:07:59 -04:00
submanifests
subsys net: coap: Validate token length in coap_header_get_token() 2023-06-02 15:13:41 -04:00
tests tests: posix: eventfd: use reopen in test_write_then_read 2023-06-02 18:45:46 -04:00
.checkpatch.conf checkpatch: Remove ext/ from excludes 2022-11-30 12:06:55 -05:00
.clang-format clang-format: flag *_SECTION_FOREACH as for loop 2023-05-26 11:04:54 -05:00
.codecov.yml yamllint: fix all yamllint comments errors 2023-01-04 01:16:45 +09:00
.editorconfig editorconfig: Improve verbosity 2022-04-28 08:55:39 -04:00
.gitattributes
.gitignore tests bsim/net: Separate bsim networking and bluetooth tests. 2023-04-12 22:42:03 +09:00
.gitlint
.mailmap mailmap: sort alphabetically 2023-05-15 13:23:32 -04:00
.yamllint scripts: compliance: add support for YAMLLint 2023-01-04 17:29:23 +01:00
CMakeLists.txt Kconfig.zephyr: add an option for checking build time init priority 2023-05-25 15:40:07 +02:00
CODE_OF_CONDUCT.md
CODEOWNERS CODEOWNERS: Add self as aux display maintainer 2023-05-26 23:05:58 +02:00
CONTRIBUTING.rst
Kconfig
Kconfig.zephyr soc: esp32: MCUboot support 2023-05-25 16:15:54 +02:00
LICENSE
MAINTAINERS.yml MAINTAINERS: Add self as aux display maintainer 2023-05-26 23:05:58 +02:00
README.rst readme: Add support for light/dark modes in the logo 2022-11-18 08:58:59 +01:00
VERSION release: Zephyr 3.4.0-rc1 2023-05-27 22:15:17 -04:00
version.h.in cmake: generalize VERSION infrastructure for better reuse 2023-05-17 13:56:58 +02:00
west.yml manifest: esp32: update hal_espressif 2023-06-01 10:05:20 +02:00
zephyr-env.cmd
zephyr-env.sh

.. raw:: html

   <a href="https://www.zephyrproject.org">
     <p align="center">
       <picture>
         <source media="(prefers-color-scheme: dark)" srcset="doc/_static/images/logo-readme-dark.svg">
         <source media="(prefers-color-scheme: light)" srcset="doc/_static/images/logo-readme-light.svg">
         <img src="doc/_static/images/logo-readme-light.svg">
       </picture>
     </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-A,
Cortex-R, Cortex-M), Intel x86, ARC, Nios II, Tensilica Xtensa, and RISC-V,
SPARC, MIPS, 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/develop/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/develop/getting_started/index.html#asking-for-help