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
{
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();
#else
leave_idle();
#endif // portNUM_PROCESSORS == 2
+ portEXIT_CRITICAL_NESTED(state);
ESP_PM_TRACE_EXIT(ISR_HOOK, core_id);
}