Skip to content

Commit f8284e1

Browse files
committed
Merge branch 'freertos_sysview_deadlock_fix_v5.5' into 'release/v5.5'
fix(app_trace): prevent deadlock on sysview start (v5.5) See merge request espressif/esp-idf!39136
2 parents b9e03c3 + a0fc3e6 commit f8284e1

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

components/app_trace/sys_view/Sample/FreeRTOSV10.4/SEGGER_SYSVIEW_FreeRTOS.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ static void _cbSendTaskList(void) {
108108
* Called from SystemView when asked by the host, returns the
109109
* current system time in micro seconds.
110110
*/
111-
static U64 _cbGetTime(void) {
111+
__attribute__((unused)) static U64 _cbGetTime(void) {
112112
U64 Time;
113113

114114
Time = xTaskGetTickCountFromISR();
@@ -260,7 +260,10 @@ void SYSVIEW_SendTaskInfo(U32 TaskID, const char* sName, unsigned Prio, U32 Stac
260260
*/
261261
// Callbacks provided to SYSTEMVIEW by FreeRTOS
262262
const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI = {
263-
_cbGetTime,
263+
/* Callback _cbGetTime locks xKernelLock inside xTaskGetTickCountFromISR, this can cause deadlock on multi-core.
264+
To prevent deadlock, always lock xKernelLock before s_sys_view_lock. Omitting the callback here results in sending
265+
SYSVIEW_EVTID_SYSTIME_CYCLES events instead of SYSVIEW_EVTID_SYSTIME_US */
266+
NULL,
264267
_cbSendTaskList,
265268
};
266269

0 commit comments

Comments
 (0)