No description
The ARM Cortex-M early boot was using a custom stack at the end of the SRAM instead of the interrupt stack. This works as long as no static data that needs a known initial value occupies that stack space. This has probably not been an issue because the .noinit section is at the very end of the image, but it was still wrong to use that region of memory for that initial stack. To be able to use the interrupt stack during early boot, the stack has to be released before an interrupt can happen. Since ARM Cortex-M uses PendSV as a very low priority exception for context switching, if a device driver installs and enables an interrupt during the PRE_KERNEL initialization points, an interrupt could take precedence over PendSV while the initial dummy thread has not yet been context switched of and thus released the interrupt stack. To address this, rather than using _Swap() and thus triggering PendSV, the initialization logic switches to the main stack and branches to _main() directly instead. Fixes ZEP-1309 Change-Id: If0b62cc66470b45b601e63826b5b3306e6a25ae9 Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com> |
||
---|---|---|
.known-issues | ||
arch | ||
boards | ||
doc | ||
drivers | ||
ext | ||
include | ||
kernel | ||
lib | ||
misc | ||
net | ||
samples | ||
scripts | ||
subsys | ||
tests | ||
.checkpatch.conf | ||
.gitattributes | ||
.gitignore | ||
.gitreview | ||
.mailmap | ||
defaults.tc | ||
Kbuild | ||
Kconfig | ||
Kconfig.zephyr | ||
LICENSE | ||
LICENSING.rst | ||
MAINTAINERS | ||
Makefile | ||
Makefile.inc | ||
zephyr-env.sh |