Was already added to arm64, but arch/arm hadn't picked up this feature
yet. Uncovered a few places here or there that wasn't marking code as
float/no-float, but this fixes a problem where newer compilers are
starting to sneak in vector code because they can.
Issue #406
The context switch is now always performed inside the PendSV handler,
which greatly simplifies the code by reducing all switches to a single
path. This should also eliminate any race conditions during the switch.
Because we always enter PendSV for a switch, there is a slight
performance penalty in the case of switching from a non-preempted thread
to another non-preempted thread (~40 cycles longer on an M4, compared to
the previous implementation)
Almost nothing changes here except moving braces to the same line as the
function declaration. Everything else is largely whitespace changes and
a few dangling files with tab indents.
See scripts/codestyle
Ran everything through scripts/codestyle.space, which uses astyle
to generally follow K&R style.
Biggest non whitespace change is pulling brackets down on function
declarations, which I'm pretty ambivalent about, but astyle insists
on taking a stance
At the top of each irq handler, make sure PRIMASK is set to 1, so
that arch_ints_disabled(), which is now used by the spinlock code,
returns the appropriate value. On Cortex-M this is not exactly the
same thing as having irqs disabled, but it's the easiest thing to
query as long as the model of only having one level of irq handler
is maintained.
-in arm start.S, calculate and move the current binary to the proper physical
location before enabling the mmu.
-add arch_chain_load which does the necessary translations from virtual to
physical, tries to gracefully shut the system down, and branches into the loaded binary.
Add generic support for running systick in monotonic mode and providing
current_time() routines.
Platforms may choose not to use this, thus it is moved into an optional
module.
NVIC_SetPriority and friends actually expect values from 0-N where N is
the max priority based on number of implemented bits (usually 7, for 3
bits).
Fix this, which actually fixes a rare bug where the systick interrupt
would preempt a regular irq.
-have the top level ops.h declare static routines
-arch specific ops.h can override with inlines or pass the
call through to hard implementation routines.
-Turn off the dynamic priority calculation so we can much more efficiently
set different levels. All arm-ms support at least 3 bits of priority,
so default to that.