You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adds a known issue for the TX processor being blocked if a callback is
blocking when run in the system workqueue, and the HCI command buffer
pool is empty.
Signed-off-by: Håvard Reierstad <[email protected]>
Copy file name to clipboardExpand all lines: doc/nrf/releases_and_maturity/known_issues.rst
+21Lines changed: 21 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -189,6 +189,27 @@ KRKNWK-14299: NRPA MAC address cannot be set in Zephyr
189
189
Bluetooth LE
190
190
============
191
191
192
+
.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0
193
+
194
+
NCSDK-31528: Deadlock on system workqueue with ``tx_notify`` in host
195
+
If the :kconfig:option:`CONFIG_BT_HCI_ACL_FLOW_CONTROL` Kconfig option is disabled, blocking of the system workqueue can cause a deadlock in the Bluetooth Host when running out of buffers in the HCI commands pool.
196
+
The Bluetooth Host uses the system workqueue to complete processing of transmitted ACL data.
197
+
Thus, using any blocking API on the system workqueue blocks the Bluetooth Host.
198
+
For the deadlock to occur, the following must happen simultaneously:
199
+
200
+
* The :kconfig:option:`CONFIG_BT_HCI_ACL_FLOW_CONTROL` Kconfig option is disabled.
201
+
* The system workqueue is blocked.
202
+
* The HCI commands pool is empty.
203
+
* A blocking Bluetooth Host API that uses the :c:func:`bt_hci_cmd_send_sync` function is called from any thread (including the system workqueue).
204
+
205
+
An example of blocking the system workqueue is calling the :c:func:`bt_conn_get_tx_power_level` function in a receive callback (called when data is received over the connection).
206
+
Calling such a function can result in a deadlock, since it uses the :c:func:`bt_hci_cmd_send_sync` function to complete its operation.
207
+
208
+
**Workaround:** Do not block the system workqueue.
209
+
Alternatively, increase the value of the :kconfig:option:`CONFIG_BT_BUF_CMD_TX_COUNT` Kconfig option to increase the HCI commands pool.
210
+
This does not guarantee that the problem is solved, as multiple blocking calls may exhaust the buffer pool.
211
+
You can also use the (experimental) :kconfig:option:`CONFIG_BT_CONN_TX_NOTIFY_WQ` Kconfig option to use a separate workqueue for connection TX notify processing.
0 commit comments