Skip to content
  • Federico's avatar
    e813775f
    Revert commit 2015-12-13 introducing IRQPortableFinishKernelStartup(). · e813775f
    Federico authored
    It was found that the change introduced a subtle bug. The splitting of the
    IRQPortableStartKernel() in two left ctxsave pointing inside the stack frame
    of the first function, which then returned. When IRQPortableFinishKernelStartup()
    was called, if there were pending interrupts, they would be served as soon as
    interrupts were enabled, and the context save on the stack and ctxsave were
    partially overlapped. This caused errors only in a rare occurrence: if the CPU
    has a double precision floating point (Cortex-M7) and floating point operations
    were used before kernel startup. That's why the bug went unnoticed for so long.
    It was decided that since the conditions for splitting kernel startup were no
    longer necessary, the cleaner fix was to revert the change.
    e813775f
    Revert commit 2015-12-13 introducing IRQPortableFinishKernelStartup().
    Federico authored
    It was found that the change introduced a subtle bug. The splitting of the
    IRQPortableStartKernel() in two left ctxsave pointing inside the stack frame
    of the first function, which then returned. When IRQPortableFinishKernelStartup()
    was called, if there were pending interrupts, they would be served as soon as
    interrupts were enabled, and the context save on the stack and ctxsave were
    partially overlapped. This caused errors only in a rare occurrence: if the CPU
    has a double precision floating point (Cortex-M7) and floating point operations
    were used before kernel startup. That's why the bug went unnoticed for so long.
    It was decided that since the conditions for splitting kernel startup were no
    longer necessary, the cleaner fix was to revert the change.
Loading