Skip to content

Commit 87fef23

Browse files
HaavardReirlubos
authored andcommitted
doc: Add known issue for TX processor block
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]>
1 parent 000358d commit 87fef23

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

doc/nrf/releases_and_maturity/known_issues.rst

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,27 @@ KRKNWK-14299: NRPA MAC address cannot be set in Zephyr
189189
Bluetooth LE
190190
============
191191

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.
212+
192213
.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-3 v2-6-2 v2-6-1 v2-6-0
193214

194215
NCSDK-31095: Issues with the :kconfig:option:`CONFIG_SEGGER_SYSVIEW` Kconfig option

0 commit comments

Comments
 (0)