diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-12-20 10:31:35 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-12-20 10:33:34 +0100 |
commit | d7c7d6e256e79a83e0a672cb65b0df7070ae995f (patch) | |
tree | ccdb9875b8e9b8da2d572f41efe049fd1d9c280e /rtemsbsd | |
parent | waf: Update to waf-2.0.13. (diff) | |
download | rtems-libbsd-d7c7d6e256e79a83e0a672cb65b0df7070ae995f.tar.bz2 |
Fix locking issue in epoch_sysinit()
The _Watchdog_Per_CPU_insert_ticks() assumes that interrupts are
disabled.
Diffstat (limited to 'rtemsbsd')
-rw-r--r-- | rtemsbsd/rtems/rtems-kernel-epoch.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/rtemsbsd/rtems/rtems-kernel-epoch.c b/rtemsbsd/rtems/rtems-kernel-epoch.c index 063990b1..f88c9853 100644 --- a/rtemsbsd/rtems/rtems-kernel-epoch.c +++ b/rtemsbsd/rtems/rtems-kernel-epoch.c @@ -94,6 +94,7 @@ epoch_watchdog(Watchdog_Control *wdg) 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); @@ -154,13 +155,16 @@ epoch_sysinit(void) for (cpu_index = 0; cpu_index < cpu_count; ++cpu_index) { Per_CPU_Control *cpu; struct epoch_pcpu *epcpu; + ISR_Level level; cpu = _Per_CPU_Get_by_index(cpu_index); epcpu = PER_CPU_DATA_GET(cpu, struct epoch_pcpu, epoch); _Watchdog_Preinitialize(&epcpu->wdg, cpu); _Watchdog_Initialize(&epcpu->wdg, epoch_watchdog); + _ISR_Local_disable(level); _Watchdog_Per_CPU_insert_ticks(&epcpu->wdg, cpu, 1); + _ISR_Local_enable(level); rtems_interrupt_server_request_initialize(cpu_index, &epcpu->irq_srv_req, epoch_call_handler, epcpu); |