diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-11-15 08:23:17 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-11-15 08:26:49 +0100 |
commit | 9f2c3ceebe191c008f004bd8dba39ebc56df51ee (patch) | |
tree | 02d60534ebde2e4b4f40d795e2f864c841550345 /rtemsbsd/rtems | |
parent | Include missing <sys/types.h> (diff) | |
download | rtems-libbsd-9f2c3ceebe191c008f004bd8dba39ebc56df51ee.tar.bz2 |
Fix locking issue in epoch_watchdog()
The _Watchdog_Per_CPU_insert_ticks() assumes that interrupts are
disabled.
Diffstat (limited to 'rtemsbsd/rtems')
-rw-r--r-- | rtemsbsd/rtems/rtems-kernel-epoch.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/rtemsbsd/rtems/rtems-kernel-epoch.c b/rtemsbsd/rtems/rtems-kernel-epoch.c index 7d42bf32..063990b1 100644 --- a/rtemsbsd/rtems/rtems-kernel-epoch.c +++ b/rtemsbsd/rtems/rtems-kernel-epoch.c @@ -91,10 +91,13 @@ static void epoch_watchdog(Watchdog_Control *wdg) { struct epoch_pcpu *epcpu; + ISR_Level level; epcpu = __containerof(wdg, struct epoch_pcpu, wdg); + _ISR_Local_disable(level); _Watchdog_Per_CPU_insert_ticks(&epcpu->wdg, _Watchdog_Get_CPU(&epcpu->wdg), 1); + _ISR_Local_enable(level); if (RTEMS_PREDICT_FALSE(epcpu->cb_count != 0)) { rtems_interrupt_server_request_submit(&epcpu->irq_srv_req); |