722aeead91
The workaround for nonatomic swap had yet another edge case: it would save off the _current pointer when pending a thread so that the next time slice interrupt could test it to see if the swap had actually happened before assuming that _current could be rescheduled (if it just pended itself, that's impossible). Then it would clear the pending_current pointer so future interrupts wouldn't be confused. BUT: it turns out that qemu, when faced with really rapid timer rates that exceed its (host-based) timing accuracy, is perfectly willing to "stack up" timer interrupts such the one goes pending before the previous one is finished executing. In that case, we can enter the SECOND timer interrupt, to try timeslicing a SECOND time, STILL before the PendSV exception has run to actually effect the context switch. Except this time pending_current has been cleared and we try to reschedule the pended _current thread incorrectly. In theory real hardware could do this too, though it would involve absolutely crazy interrupt latency problems. Work around this by moving the clear to the thread itself, immediately after it wakes up from the pend call it retakes a lock and clears pending_current if it still matches _current. That is not a perfect fix: there remains a 2-3 instruction race at that moment where we return from pend and before we can lock interrupts again where a timer interrupt will see an incorrect pointer. But I hammered at this and couldn't make qemu do that (i.e. return from a timer interrupt but flag a new one in just a cycle or two). Signed-off-by: Andy Ross <andrew.j.ross@intel.com> |
||
---|---|---|
.github/ISSUE_TEMPLATE | ||
.known-issues | ||
arch | ||
boards | ||
cmake | ||
doc | ||
drivers | ||
dts | ||
ext | ||
include | ||
kernel | ||
lib | ||
misc | ||
samples | ||
scripts | ||
soc | ||
subsys | ||
tests | ||
.checkpatch.conf | ||
.clang-format | ||
.codecov.yml | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.gitlint | ||
.mailmap | ||
.shippable.yml | ||
.uncrustify.cfg | ||
CMakeLists.txt | ||
CODE_OF_CONDUCT.md | ||
CODEOWNERS | ||
CONTRIBUTING.rst | ||
Kconfig | ||
Kconfig.zephyr | ||
LICENSE | ||
Makefile | ||
README.rst | ||
VERSION | ||
version.h.in | ||
west.yml | ||
zephyr-env.cmd | ||
zephyr-env.sh |
.. raw:: html <a href="https://www.zephyrproject.org"> <p align="center"> <img src="doc/images/Zephyr-Project.png"> </p> </a> <a href="https://bestpractices.coreinfrastructure.org/projects/74"><img src="https://bestpractices.coreinfrastructure.org/projects/74/badge"></a> <img src="https://api.shippable.com/projects/58ffb2b8baa5e307002e1d79/badge?branch=master"> 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 .. start_include_here Getting Started *************** To start developing Zephyr applications refer to the `Getting Started Guide`_ in the `Zephyr Documentation`_ pages. A brief introduction to Zephyr can be found in the `Zephyr Introduction`_ page. Community Support ***************** The Zephyr Project Developer Community includes developers from member organizations and the general community all joining in the development of software within the Zephyr Project. Members contribute and discuss ideas, submit bugs and bug fixes, and provide training. They also help those in need through the community's forums such as mailing lists and IRC channels. Anyone can join the developer community and the community is always willing to help its members and the User Community to get the most out of the Zephyr Project. Welcome to the Zephyr community! Resources ********* Here's a quick summary of resources to find your way around the Zephyr Project support systems: * **Zephyr Project Website**: The https://zephyrproject.org website is the central source of information about the Zephyr Project. On this site, you'll find background and current information about the project as well as all the relevant links to project material. * **Releases**: Source code for Zephyr kernel releases are available at https://zephyrproject.org/developers/#downloads. On this page, you'll find release information, and links to download or clone source code from our GitHub repository. You'll also find links for the Zephyr SDK, a moderated collection of tools and libraries used to develop your applications. * **Source Code in GitHub**: Zephyr Project source code is maintained on a public GitHub repository at https://github.com/zephyrproject-rtos/zephyr. You'll find information about getting access to the repository and how to contribute to the project in this `Contribution Guide`_ document. * **Samples Code**: In addition to the kernel source code, there are also many documented `Sample and Demo Code Examples`_ that can help show you how to use Zephyr services and subsystems. * **Documentation**: Extensive Project technical documentation is developed along with the Zephyr kernel itself, and can be found at http://docs.zephyrproject.org. Additional documentation is maintained in the `Zephyr GitHub wiki`_. * **Cross-reference**: Source code cross-reference for the Zephyr kernel and samples code is available at https://elixir.bootlin.com/zephyr/latest/source. * **Issue Reporting and Tracking**: Requirements and Issue tracking is done in the Github issues system: https://github.com/zephyrproject-rtos/zephyr/issues. You can browse through the reported issues and submit issues of your own. * **Security-related Issue Reporting and Tracking**: For security-related inquiries or reporting suspected security-related bugs in the Zephyr OS, please send email to vulnerabilities@zephyrproject.org. We will assess and fix flaws according to our security policy outlined in the Zephyr Project `Security Overview`_. Security related issue tracking is done in JIRA. The location of this JIRA is https://zephyrprojectsec.atlassian.net. * **Mailing List**: The `Zephyr Development mailing list`_ is perhaps the most convenient way to track developer discussions and to ask your own support questions to the Zephyr project community. There are also specific `Zephyr mailing list subgroups`_ for announcements, builds, marketing, and Technical Steering Committee notes, for example. You can read through the message archives to follow past posts and discussions, a good thing to do to discover more about the Zephyr project. * **Chatting**: You can chat online with the Zephyr project developer community and other users in two ways: * On `Slack`_: Zephyr has dedicated channels on Slack. To register, use the following `Slack Invite`_. * IRC channel #zephyrproject on the freenode.net IRC server. You can use the http://webchat.freenode.net web client or use a client-side application such as pidgin (Note that all discussions have moved to Slack, although we still have many developers still available on the IRC channel). .. _Slack Invite: https://tinyurl.com/yarkuemx .. _Slack: https://zephyrproject.slack.com .. _supported boards: http://docs.zephyrproject.org/latest/boards .. _Zephyr Documentation: http://docs.zephyrproject.org .. _Zephyr Introduction: 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 Overview: http://docs.zephyrproject.org/latest/security/index.html