Bluetooth: Don't run SMP callbacks on syswq
SMP shall be considered internal TX notify callbacks so they are allowed to be run from TX thread context like the others. Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
parent
5d0c6fe562
commit
ac02b30923
3 changed files with 23 additions and 7 deletions
|
@ -1198,6 +1198,17 @@ int bt_conn_send_cb(struct bt_conn *conn, struct net_buf *buf,
|
||||||
static bool conn_tx_internal(bt_conn_tx_cb_t cb)
|
static bool conn_tx_internal(bt_conn_tx_cb_t cb)
|
||||||
{
|
{
|
||||||
if (cb == att_pdu_sent || cb == att_cfm_sent || cb == att_rsp_sent ||
|
if (cb == att_pdu_sent || cb == att_cfm_sent || cb == att_rsp_sent ||
|
||||||
|
#if defined(CONFIG_BT_SMP)
|
||||||
|
#if defined(CONFIG_BT_PRIVACY)
|
||||||
|
cb == smp_id_sent ||
|
||||||
|
#endif /* CONFIG_BT_PRIVACY */
|
||||||
|
#if defined(CONFIG_BT_SIGNING)
|
||||||
|
cb == smp_sign_info_sent ||
|
||||||
|
#endif /* CONFIG_BT_SIGNING */
|
||||||
|
#if !defined(CONFIG_BT_SMP_SC_PAIR_ONLY)
|
||||||
|
cb == smp_ident_sent ||
|
||||||
|
#endif /* CONFIG_BT_SMP_SC_PAIR_ONLY */
|
||||||
|
#endif /* CONFIG_BT_SMP */
|
||||||
#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)
|
#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)
|
||||||
cb == l2cap_chan_sdu_sent ||
|
cb == l2cap_chan_sdu_sent ||
|
||||||
#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */
|
#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */
|
||||||
|
|
|
@ -695,14 +695,14 @@ static void smp_check_complete(struct bt_conn *conn, u8_t dist_complete)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_BT_PRIVACY)
|
#if defined(CONFIG_BT_PRIVACY)
|
||||||
static void id_sent(struct bt_conn *conn, void *user_data)
|
void smp_id_sent(struct bt_conn *conn, void *user_data)
|
||||||
{
|
{
|
||||||
smp_check_complete(conn, BT_SMP_DIST_ID_KEY);
|
smp_check_complete(conn, BT_SMP_DIST_ID_KEY);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BT_PRIVACY */
|
#endif /* CONFIG_BT_PRIVACY */
|
||||||
|
|
||||||
#if defined(CONFIG_BT_SIGNING)
|
#if defined(CONFIG_BT_SIGNING)
|
||||||
static void sign_info_sent(struct bt_conn *conn, void *user_data)
|
void smp_sign_info_sent(struct bt_conn *conn, void *user_data)
|
||||||
{
|
{
|
||||||
smp_check_complete(conn, BT_SMP_DIST_SIGN);
|
smp_check_complete(conn, BT_SMP_DIST_SIGN);
|
||||||
}
|
}
|
||||||
|
@ -1072,7 +1072,7 @@ static void smp_br_distribute_keys(struct bt_smp_br *smp)
|
||||||
id_addr_info = net_buf_add(buf, sizeof(*id_addr_info));
|
id_addr_info = net_buf_add(buf, sizeof(*id_addr_info));
|
||||||
bt_addr_le_copy(&id_addr_info->addr, &bt_dev.id_addr[conn->id]);
|
bt_addr_le_copy(&id_addr_info->addr, &bt_dev.id_addr[conn->id]);
|
||||||
|
|
||||||
smp_br_send(smp, buf, id_sent);
|
smp_br_send(smp, buf, smp_id_sent);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BT_PRIVACY */
|
#endif /* CONFIG_BT_PRIVACY */
|
||||||
|
|
||||||
|
@ -1856,7 +1856,7 @@ static u8_t smp_send_pairing_confirm(struct bt_smp *smp)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(CONFIG_BT_SMP_SC_PAIR_ONLY)
|
#if !defined(CONFIG_BT_SMP_SC_PAIR_ONLY)
|
||||||
static void ident_sent(struct bt_conn *conn, void *user_data)
|
void smp_ident_sent(struct bt_conn *conn, void *user_data)
|
||||||
{
|
{
|
||||||
smp_check_complete(conn, BT_SMP_DIST_ENC_KEY);
|
smp_check_complete(conn, BT_SMP_DIST_ENC_KEY);
|
||||||
}
|
}
|
||||||
|
@ -1907,7 +1907,7 @@ static void legacy_distribute_keys(struct bt_smp *smp)
|
||||||
memcpy(ident->rand, rand, sizeof(ident->rand));
|
memcpy(ident->rand, rand, sizeof(ident->rand));
|
||||||
memcpy(ident->ediv, ediv, sizeof(ident->ediv));
|
memcpy(ident->ediv, ediv, sizeof(ident->ediv));
|
||||||
|
|
||||||
smp_send(smp, buf, ident_sent, NULL);
|
smp_send(smp, buf, smp_ident_sent, NULL);
|
||||||
|
|
||||||
if (atomic_test_bit(smp->flags, SMP_FLAG_BOND)) {
|
if (atomic_test_bit(smp->flags, SMP_FLAG_BOND)) {
|
||||||
bt_keys_add_type(keys, BT_KEYS_SLAVE_LTK);
|
bt_keys_add_type(keys, BT_KEYS_SLAVE_LTK);
|
||||||
|
@ -1967,7 +1967,7 @@ static u8_t bt_smp_distribute_keys(struct bt_smp *smp)
|
||||||
id_addr_info = net_buf_add(buf, sizeof(*id_addr_info));
|
id_addr_info = net_buf_add(buf, sizeof(*id_addr_info));
|
||||||
bt_addr_le_copy(&id_addr_info->addr, &bt_dev.id_addr[conn->id]);
|
bt_addr_le_copy(&id_addr_info->addr, &bt_dev.id_addr[conn->id]);
|
||||||
|
|
||||||
smp_send(smp, buf, id_sent, NULL);
|
smp_send(smp, buf, smp_id_sent, NULL);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BT_PRIVACY */
|
#endif /* CONFIG_BT_PRIVACY */
|
||||||
|
|
||||||
|
@ -1993,7 +1993,7 @@ static u8_t bt_smp_distribute_keys(struct bt_smp *smp)
|
||||||
keys->local_csrk.cnt = 0U;
|
keys->local_csrk.cnt = 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
smp_send(smp, buf, sign_info_sent, NULL);
|
smp_send(smp, buf, smp_sign_info_sent, NULL);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BT_SIGNING */
|
#endif /* CONFIG_BT_SIGNING */
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,11 @@ int bt_smp_le_oob_get_sc_data(struct bt_conn *conn,
|
||||||
const struct bt_le_oob_sc_data **oobd_local,
|
const struct bt_le_oob_sc_data **oobd_local,
|
||||||
const struct bt_le_oob_sc_data **oobd_remote);
|
const struct bt_le_oob_sc_data **oobd_remote);
|
||||||
|
|
||||||
|
|
||||||
|
void smp_ident_sent(struct bt_conn *conn, void *user_data);
|
||||||
|
void smp_id_sent(struct bt_conn *conn, void *user_data);
|
||||||
|
void smp_sign_info_sent(struct bt_conn *conn, void *user_data);
|
||||||
|
|
||||||
/** brief Verify signed message
|
/** brief Verify signed message
|
||||||
*
|
*
|
||||||
* @param conn Bluetooth connection
|
* @param conn Bluetooth connection
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue