#3060 closed defect (fixed)

ARMv7-M interrupt processing is broken

Reported by: Sebastian Huber Owned by: Sebastian Huber
Priority: normal Milestone: 4.11.2
Component: score Version: 4.11
Severity: normal Keywords:
Cc: Blocked By:
Blocking:

Description

Right after a "msr basepri_max, %[basepri]" instruction an interrupt service may still take place (observed at least on Cortex-M7). However, pendable service calls that are activated during this interrupt service may be delayed until interrupts are enable again. The _ARMV7M_Pendable_service_call() does currently not check that a thread dispatch is allowed. Move this test from _ARMV7M_Interrupt_service_leave() to _ARMV7M_Pendable_service_call().

Change History (4)

comment:1 Changed on Jul 4, 2017 at 1:15:30 PM by Sebastian Huber <sebastian.huber@…>

In 550616e5/rtems:

score: Add assert to _Thread_Dispatch()

Update #3060.

comment:2 Changed on Jul 4, 2017 at 1:16:02 PM by Sebastian Huber <sebastian.huber@…>

In 3e782743/rtems:

arm: Fix ARMv7-M interrupt processing

Right after a "msr basepri_max, %[basepri]" instruction an interrupt
service may still take place (observed at least on Cortex-M7). However,
pendable service calls that are activated during this interrupt service
may be delayed until interrupts are enable again. The
_ARMV7M_Pendable_service_call() did not check that a thread dispatch is
allowed. Move this test from _ARMV7M_Interrupt_service_leave() to
_ARMV7M_Pendable_service_call().

Update #3060.

comment:3 Changed on Jul 7, 2017 at 11:28:26 AM by Sebastian Huber <sebastian.huber@…>

Resolution: fixed
Status: assignedclosed

In 7e91901/rtems:

arm: Fix ARMv7-M interrupt processing

Right after a "msr basepri_max, %[basepri]" instruction an interrupt
service may still take place (observed at least on Cortex-M7). However,
pendable service calls that are activated during this interrupt service
may be delayed until interrupts are enable again. The
_ARMV7M_Pendable_service_call() did not check that a thread dispatch is
allowed. Move this test from _ARMV7M_Interrupt_service_leave() to
_ARMV7M_Pendable_service_call().

Close #3060.

comment:4 Changed on Jul 11, 2017 at 12:53:56 AM by Sebastian Huber <sebastian.huber@…>

In 7e91901/rtems:

arm: Fix ARMv7-M interrupt processing

Right after a "msr basepri_max, %[basepri]" instruction an interrupt
service may still take place (observed at least on Cortex-M7). However,
pendable service calls that are activated during this interrupt service
may be delayed until interrupts are enable again. The
_ARMV7M_Pendable_service_call() did not check that a thread dispatch is
allowed. Move this test from _ARMV7M_Interrupt_service_leave() to
_ARMV7M_Pendable_service_call().

Close #3060.

Note: See TracTickets for help on using tickets.