raspberrypi / pico-sdk

BSD 3-Clause "New" or "Revised" License
3.27k stars 844 forks source link

Freertos background threadsafe can end up trying to trying to acquire a semaphore in an interrupt #1590

Closed peterharperuk closed 5 months ago

peterharperuk commented 7 months ago

It looks as if when IPV6 is enabled it can make an ioctl call which then explodes...

1 0x10017866 in __assert_func (file=file@entry=0x1005ab58 "/home/peterh/source/pico/freertos/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040/port.c",

line=line@entry=1101, func=func@entry=0x1005ac9c <__func__.1> "xPortLockInternalSpinUnlockWithBestEffortWaitOrTimeout", 
failedexpr=failedexpr@entry=0x1005ac04 "!( { uint32_t ulIPSR; __asm volatile ( \"mrs %0, IPSR\" : \"=r\" ( ulIPSR )::); ( ( uint8_t ) ulIPSR ) > 0; } )")
at /home/peterh/source/pico/pico-sdk/src/rp2_common/pico_runtime/runtime.c:271

2 0x1001a29c in xPortLockInternalSpinUnlockWithBestEffortWaitOrTimeout (pxLock=pxLock@entry=0x20000fac <async_context+60>, ulSave=0, uxUntil=...)

at /home/peterh/source/pico/freertos/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040/port.c:1101

3 0x20000266 in sem_acquire_block_until (sem=0x20000fac <async_context+60>, until=...) at /home/peterh/source/pico/pico-sdk/src/common/pico_sync/sem.c:54

4 0x10006b04 in async_context_threadsafe_background_wait_for_work_until (self_base=, until=...)

at /home/peterh/source/pico/pico-sdk/src/rp2_common/pico_async_context/async_context_threadsafe_background.c:310

5 0x100062a0 in async_context_wait_for_work_until (until=..., context=0x20000f70 )

at /home/peterh/source/pico/pico-sdk/src/rp2_common/pico_async_context/include/pico/async_context.h:424

6 cyw43_await_background_or_timeout_us (timeout_us=timeout_us@entry=1000) at /home/peterh/source/pico/pico-sdk/src/rp2_common/pico_cyw43_driver/cyw43_driver.c:167

7 0x100023b8 in cyw43_do_ioctl (self=self@entry=0x200013cc , kind=kind@entry=0, cmd=cmd@entry=262, len=len@entry=75,

buf=buf@entry=0x20001410 <cyw43_state+68> "mcast_list", iface=iface@entry=0) at /home/peterh/source/pico/pico-sdk/lib/cyw43-driver/src/cyw43_ll.c:1207

8 0x10002c28 in cyw43_ll_wifi_update_multicast_filter (self_in=self_in@entry=0x200013cc ,

addr=addr@entry=0x20041ec8 "33\377\a\206\367\001\020", <incomplete sequence \350>, add=add@entry=true)
at /home/peterh/source/pico/pico-sdk/lib/cyw43-driver/src/cyw43_ll.c:1951

9 0x10003b94 in cyw43_wifi_update_multicast_filter (self=0x200013cc ,

addr=addr@entry=0x20041ec8 "33\377\a\206\367\001\020", <incomplete sequence \350>, add=add@entry=true)
at /home/peterh/source/pico/pico-sdk/lib/cyw43-driver/src/cyw43_ctrl.c:540

10 0x100032ac in cyw43_macfilter (netif=0x20001cb0 <cyw43_state+2276>, group=, action=)

at /home/peterh/source/pico/pico-sdk/lib/cyw43-driver/src/cyw43_lwip.c:128

11 0x100143ce in mld6_joingroup_netif (netif=0x20001cb0 <cyw43_state+2276>, groupaddr=groupaddr@entry=0x2000e808 )

at /home/peterh/source/pico/pico-sdk/lib/lwip/src/core/ipv6/mld6.c:377

12 0x10016fd0 in nd6_adjust_mld_membership (netif=, addr_idx=, new_state=new_state@entry=9 '\t')

at /home/peterh/source/pico/pico-sdk/lib/lwip/src/core/ipv6/nd6.c:2456

13 0x10008c34 in netif_ip6_addr_set_state (netif=netif@entry=0x20001cb0 <cyw43_state+2276>, addr_idx=addr_idx@entry=0 '\000', state=)

at /home/peterh/source/pico/pico-sdk/lib/lwip/src/core/netif.c:1464

14 0x10016b7c in nd6_tmr () at /home/peterh/source/pico/pico-sdk/lib/lwip/src/core/ipv6/nd6.c:1145

15 0x1000db9c in lwip_cyclic_timer (arg=0x1005919c <lwip_cyclic_timers+48>) at /home/peterh/source/pico/pico-sdk/lib/lwip/src/core/timeouts.c:241

16 0x1000dcda in sys_check_timeouts () at /home/peterh/source/pico/pico-sdk/lib/lwip/src/core/timeouts.c:390

17 0x10006e00 in lwip_timeout_reached (context=, worker=) at /home/peterh/source/pico/pico-sdk/src/rp2_common/pico_lwip/lwip_nosys.c:25

18 0x100067da in async_context_base_execute_once (self=self@entry=0x20000f70 )

at /home/peterh/source/pico/pico-sdk/src/rp2_common/pico_async_context/async_context_base.c:96

19 0x1000695a in process_under_lock (self=self@entry=0x20000f70 )

at /home/peterh/source/pico/pico-sdk/src/rp2_common/pico_async_context/async_context_threadsafe_background.c:251

20 0x10006ae6 in low_priority_irq_handler () at /home/peterh/source/pico/pico-sdk/src/rp2_common/pico_async_context/async_context_threadsafe_background.c:293

21

22 prvPassiveIdleTask (pvParameters=) at /home/peterh/source/pico/freertos/FreeRTOS-Kernel/tasks.c:5653

23 0x10019de8 in xPortPendSVHandler () at /home/peterh/source/pico/freertos/FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040/port.c:640

daveythacher commented 6 months ago

xPortLockInternalSpinUnlockWithBestEffortWaitOrTimeout - Is the SDK committed to this?