mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
pm: prevent interrupt nesting during esp_pm_impl_isr_hook
Follows the approach proposed in https://github.com/espressif/esp-idf/pull/3110, but masks the interrupts during the entire ISR hook, not only during leave_idle. Interrupt nesting during update_ccompare may also cause issues. Closes https://github.com/espressif/esp-idf/issues/3057
This commit is contained in:
parent
d91272f280
commit
84d16f970e
@ -453,6 +453,10 @@ void IRAM_ATTR esp_pm_impl_isr_hook()
|
||||
{
|
||||
int core_id = xPortGetCoreID();
|
||||
ESP_PM_TRACE_ENTER(ISR_HOOK, core_id);
|
||||
/* Prevent higher level interrupts (than the one this function was called from)
|
||||
* from happening in this section, since they will also call into esp_pm_impl_isr_hook.
|
||||
*/
|
||||
uint32_t state = portENTER_CRITICAL_NESTED();
|
||||
#if portNUM_PROCESSORS == 2
|
||||
if (s_need_update_ccompare[core_id]) {
|
||||
update_ccompare();
|
||||
@ -463,6 +467,7 @@ void IRAM_ATTR esp_pm_impl_isr_hook()
|
||||
#else
|
||||
leave_idle();
|
||||
#endif // portNUM_PROCESSORS == 2
|
||||
portEXIT_CRITICAL_NESTED(state);
|
||||
ESP_PM_TRACE_EXIT(ISR_HOOK, core_id);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user