File tree Expand file tree Collapse file tree 1 file changed +6
-0
lines changed
Expand file tree Collapse file tree 1 file changed +6
-0
lines changed Original file line number Diff line number Diff line change 109109#endif
110110
111111static portMUX_TYPE s_switch_lock = portMUX_INITIALIZER_UNLOCKED ;
112+ static portMUX_TYPE s_cpu_freq_switch_lock [CONFIG_FREERTOS_NUMBER_OF_CORES ] = {
113+ [0 ... (CONFIG_FREERTOS_NUMBER_OF_CORES - 1 )] = portMUX_INITIALIZER_UNLOCKED
114+ };
112115/* The following state variables are protected using s_switch_lock: */
113116/* Current sleep mode; When switching, contains old mode until switch is complete */
114117static pm_mode_t s_mode = PM_MODE_CPU_MAX ;
@@ -626,6 +629,7 @@ static void IRAM_ATTR do_switch(pm_mode_t new_mode)
626629 }
627630#ifdef CONFIG_FREERTOS_SYSTICK_USES_CCOUNT
628631 if (s_need_update_ccompare [core_id ]) {
632+ update_ccompare ();
629633 s_need_update_ccompare [core_id ] = false;
630634 }
631635#endif
@@ -638,6 +642,7 @@ static void IRAM_ATTR do_switch(pm_mode_t new_mode)
638642 s_is_switching = true;
639643 bool config_changed = s_config_changed ;
640644 s_config_changed = false;
645+ portENTER_CRITICAL_ISR (& s_cpu_freq_switch_lock [core_id ]);
641646 portEXIT_CRITICAL_ISR (& s_switch_lock );
642647
643648 rtc_cpu_freq_config_t new_config = s_cpu_freq_by_mode [new_mode ];
@@ -677,6 +682,7 @@ static void IRAM_ATTR do_switch(pm_mode_t new_mode)
677682 }
678683
679684 portENTER_CRITICAL_ISR (& s_switch_lock );
685+ portEXIT_CRITICAL_ISR (& s_cpu_freq_switch_lock [core_id ]);
680686 s_mode = new_mode ;
681687 s_is_switching = false;
682688 portEXIT_CRITICAL_ISR (& s_switch_lock );
You can’t perform that action at this time.
0 commit comments