Bluetooth: controller: refactor ll_rx_put/sched

Instead of calling both ll_rx_put and ll_rx_sched, combine into one
function

Signed-off-by: Erik Brockhoff <erbr@oticon.com>
This commit is contained in:
Erik Brockhoff 2022-11-15 09:31:44 +01:00 committed by Carles Cufí
commit ddeb0e9f6e
18 changed files with 58 additions and 90 deletions

View file

@ -1733,6 +1733,12 @@ void ll_rx_sched(void)
k_sem_give(sem_recv);
}
void ll_rx_put_sched(memq_link_t *link, void *rx)
{
ll_rx_put(link, rx);
ll_rx_sched();
}
#if defined(CONFIG_BT_CONN)
void *ll_pdu_rx_alloc_peek(uint8_t count)
{
@ -2745,8 +2751,7 @@ static inline int rx_demux_rx(memq_link_t *link, struct node_rx_hdr *rx)
adv = (void *)((struct node_rx_pdu *)rx)->pdu;
if (adv->type != PDU_ADV_TYPE_EXT_IND) {
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
break;
}
@ -2779,8 +2784,7 @@ static inline int rx_demux_rx(memq_link_t *link, struct node_rx_hdr *rx)
case NODE_RX_TYPE_IQ_SAMPLE_REPORT_LLL_RELEASE:
{
(void)memq_dequeue(memq_ull_rx.tail, &memq_ull_rx.head, NULL);
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
}
break;
#endif /* CONFIG_BT_CTLR_DF_SCAN_CTE_RX || CONFIG_BT_CTLR_DF_CONN_CTE_RX */
@ -2805,8 +2809,7 @@ static inline int rx_demux_rx(memq_link_t *link, struct node_rx_hdr *rx)
(void)memq_dequeue(memq_ull_rx.tail, &memq_ull_rx.head, NULL);
if (rx) {
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
}
}
break;
@ -2855,8 +2858,7 @@ static inline int rx_demux_rx(memq_link_t *link, struct node_rx_hdr *rx)
case NODE_RX_TYPE_RELEASE:
{
(void)memq_dequeue(memq_ull_rx.tail, &memq_ull_rx.head, NULL);
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
}
break;
#endif /* CONFIG_BT_OBSERVER ||

View file

@ -2526,8 +2526,7 @@ static void disabled_cb(void *param)
}
#endif /* CONFIG_BT_CTLR_ADV_EXT */
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
}
static void conn_release(struct ll_adv_set *adv)
@ -2697,8 +2696,7 @@ static void ext_disabled_cb(void *param)
/* NOTE: parameters are already populated on disable, just enqueue here
*/
ll_rx_put(rx_hdr->link, rx_hdr);
ll_rx_sched();
ll_rx_put_sched(rx_hdr->link, rx_hdr);
}
#endif /* CONFIG_BT_CTLR_ADV_EXT */

View file

@ -674,8 +674,7 @@ void ull_adv_iso_done_complete(struct node_rx_event_done *done)
rx->handle = lll->handle;
rx->rx_ftr.param = adv_iso;
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
}
void ull_adv_iso_done_terminate(struct node_rx_event_done *done)

View file

@ -952,8 +952,7 @@ void ull_central_setup(struct node_rx_hdr *rx, struct node_rx_ftr *ftr,
}
}
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
ticks_slot_offset = MAX(conn->ull.ticks_active_to_start,
conn->ull.ticks_prepare_to_start);

View file

@ -1768,8 +1768,7 @@ void ull_conn_done(struct node_rx_event_done *done)
rx->type = NODE_RX_TYPE_APTO;
/* enqueue apto event into rx queue */
ll_rx_put(rx->link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->link, rx);
} else {
conn->apto_expire = 1U;
}
@ -1845,8 +1844,7 @@ void ull_conn_done(struct node_rx_event_done *done)
pdu_data_rx->rssi = lll->rssi_reported;
/* enqueue connection RSSI structure into queue */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
}
}
#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */
@ -3357,8 +3355,7 @@ static inline int event_conn_upd_prep(struct ll_conn *conn, uint16_t lazy,
rx_hold_put(conn, rx->hdr.link, rx);
#else /* !CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
/* enqueue rx node towards Thread */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
#endif /* !CONFIG_BT_CTLR_RX_ENQUEUE_HOLD */
} else {
@ -3366,8 +3363,7 @@ static inline int event_conn_upd_prep(struct ll_conn *conn, uint16_t lazy,
rx->hdr.type = NODE_RX_TYPE_RELEASE;
/* enqueue rx node towards Thread */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
}
#if defined(CONFIG_BT_CTLR_XTAL_ADVANCED)
@ -3697,8 +3693,7 @@ static inline void event_enc_prep(struct ll_conn *conn)
pdu->llctrl.enc_req.ediv[1] = conn->llcp_enc.ediv[1];
/* enqueue enc req structure into rx queue */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
/* Wait for LTK reply */
conn->llcp.encryption.state = LLCP_ENC_STATE_LTK_WAIT;
@ -3863,8 +3858,7 @@ static inline void event_fex_prep(struct ll_conn *conn)
pdu->llctrl.feature_req.features);
/* enqueue feature rsp structure into rx queue */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
return;
}
@ -3976,8 +3970,7 @@ static inline void event_vex_prep(struct ll_conn *conn)
sys_cpu_to_le16(conn->llcp_version.sub_version_number);
/* enqueue version ind structure into rx queue */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
} else {
/* tx-ed but no rx, and new request placed */
LL_ASSERT(0);
@ -4240,8 +4233,7 @@ static inline void event_conn_param_app_req(struct ll_conn *conn)
p->timeout = sys_cpu_to_le16(conn->llcp_conn_param.timeout);
/* enqueue connection parameter request into rx queue */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
}
static inline void event_conn_param_prep(struct ll_conn *conn,
@ -4552,8 +4544,7 @@ static inline void event_len_prep(struct ll_conn *conn)
#endif /* CONFIG_BT_CTLR_PHY */
/* enqueue rx node towards Thread */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
}
break;
@ -4760,8 +4751,7 @@ static inline void event_phy_upd_ind_prep(struct ll_conn *conn,
upd->rx = lll->phy_rx;
/* Enqueue Rx node */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
}
} else {
struct lll_conn *lll = &conn->lll;
@ -4951,8 +4941,7 @@ static inline void event_phy_upd_ind_prep(struct ll_conn *conn,
rx->hdr.type = NODE_RX_TYPE_RELEASE;
/* enqueue rx node towards Thread */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
return;
}
lll->max_tx_time = eff_tx_time;

View file

@ -277,8 +277,7 @@ void ull_conn_iso_cis_established(struct ll_conn_iso_stream *cis)
est->status = 0;
est->cis_handle = cis->lll.handle;
ll_rx_put(node_rx->hdr.link, node_rx);
ll_rx_sched();
ll_rx_put_sched(node_rx->hdr.link, node_rx);
#endif /* defined(CONFIG_BT_LL_SW_LLCP_LEGACY) */
cis->established = 1;
@ -890,8 +889,7 @@ static void cis_disabled_cb(void *param)
node_terminate->hdr.type = NODE_RX_TYPE_TERMINATE;
*((uint8_t *)node_terminate->pdu) = cis->terminate_reason;
ll_rx_put(node_terminate->hdr.link, node_terminate);
ll_rx_sched();
ll_rx_put_sched(node_terminate->hdr.link, node_terminate);
if (cig->lll.resume_cis == cis->lll.handle) {
/* Resume pending for terminating CIS - stop ticker */

View file

@ -72,6 +72,7 @@ void *ll_rx_alloc(void);
void ll_rx_release(void *node_rx);
void *ll_pdu_rx_alloc_peek(uint8_t count);
void *ll_pdu_rx_alloc(void);
void ll_rx_put_sched(memq_link_t *link, void *rx);
void ll_rx_put(memq_link_t *link, void *rx);
void ll_rx_sched(void);
void ull_ticker_status_give(uint32_t status, void *param);

View file

@ -85,8 +85,7 @@ static void cc_ntf_established(struct ll_conn *conn, struct proc_ctx *ctx)
pdu->status = ctx->data.cis_create.error;
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
#if defined(CONFIG_BT_PERIPHERAL)
@ -212,8 +211,7 @@ static void rp_cc_ntf_create(struct ll_conn *conn, struct proc_ctx *ctx)
ctx->data.cis_create.host_request_to = 0U;
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
static void rp_cc_complete(struct ll_conn *conn, struct proc_ctx *ctx, uint8_t evt, void *param)

View file

@ -412,8 +412,7 @@ static void lp_comm_ntf(struct ll_conn *conn, struct proc_ctx *ctx)
}
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
static void lp_comm_terminate_invalid_pdu(struct ll_conn *conn, struct proc_ctx *ctx)
@ -1187,8 +1186,7 @@ static void rp_comm_ntf(struct ll_conn *conn, struct proc_ctx *ctx)
}
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
#endif /* CONFIG_BT_CTLR_DATA_LENGTH */

View file

@ -304,8 +304,7 @@ static void lp_cu_ntf(struct ll_conn *conn, struct proc_ctx *ctx)
}
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
static void lp_cu_complete(struct ll_conn *conn, struct proc_ctx *ctx)
@ -760,8 +759,7 @@ static void rp_cu_ntf(struct ll_conn *conn, struct proc_ctx *ctx)
pdu->timeout = conn->supervision_timeout;
}
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
#if defined(CONFIG_BT_CTLR_CONN_PARAM_REQ)
@ -781,8 +779,7 @@ static void rp_cu_conn_param_req_ntf(struct ll_conn *conn, struct proc_ctx *ctx)
llcp_pdu_encode_conn_param_req(ctx, pdu);
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
#endif /* CONFIG_BT_CTLR_CONN_PARAM_REQ */

View file

@ -216,8 +216,7 @@ static void lp_enc_ntf(struct ll_conn *conn, struct proc_ctx *ctx)
}
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
static void lp_enc_complete(struct ll_conn *conn, struct proc_ctx *ctx, uint8_t evt, void *param)
@ -759,8 +758,7 @@ static void rp_enc_ntf_ltk(struct ll_conn *conn, struct proc_ctx *ctx)
llcp_ntf_encode_enc_req(ctx, pdu);
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
static void rp_enc_ntf(struct ll_conn *conn, struct proc_ctx *ctx)
@ -789,8 +787,7 @@ static void rp_enc_ntf(struct ll_conn *conn, struct proc_ctx *ctx)
}
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
static void rp_enc_send_start_enc_rsp(struct ll_conn *conn, struct proc_ctx *ctx, uint8_t evt,

View file

@ -423,8 +423,7 @@ static void pu_ntf(struct ll_conn *conn, struct proc_ctx *ctx)
pdu->tx = conn->lll.phy_tx;
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
ctx->data.pu.ntf_pu = 0;
}
@ -445,8 +444,7 @@ static void pu_dle_ntf(struct ll_conn *conn, struct proc_ctx *ctx)
llcp_ntf_encode_length_change(conn, pdu);
/* Enqueue notification towards LL */
ll_rx_put(ntf->hdr.link, ntf);
ll_rx_sched();
ll_rx_put_sched(ntf->hdr.link, ntf);
}
#endif

View file

@ -349,8 +349,7 @@ void ull_periph_setup(struct node_rx_hdr *rx, struct node_rx_ftr *ftr,
}
#endif
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
#if defined(CONFIG_BT_CTLR_DATA_LENGTH)
#if defined(CONFIG_BT_CTLR_PHY)
@ -671,8 +670,7 @@ static void invalid_release(struct ull_hdr *hdr, struct lll_conn *lll,
}
/* Enqueue connection or CSA event to be release */
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
}
static void ticker_op_stop_adv_cb(uint32_t status, void *param)

View file

@ -1120,8 +1120,7 @@ static void ext_disabled_cb(void *param)
/* NOTE: parameters are already populated on disable,
* just enqueue here
*/
ll_rx_put(rx_hdr->link, rx_hdr);
ll_rx_sched();
ll_rx_put_sched(rx_hdr->link, rx_hdr);
}
#endif /* CONFIG_BT_CTLR_ADV_EXT */

View file

@ -566,8 +566,7 @@ void ull_scan_aux_setup(memq_link_t *link, struct node_rx_hdr *rx)
sync_lll->lll_aux = lll_aux;
/* In sync context, dispatch immediately */
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
} else {
lll->lll_aux = lll_aux;
}
@ -745,8 +744,7 @@ ull_scan_aux_rx_flush:
LL_ASSERT(sync_lll);
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
sync = HDR_LLL2ULL(sync_lll);
if (unlikely(sync->is_stop && sync_lll->lll_aux)) {
@ -1205,8 +1203,7 @@ static void aux_sync_partial(void *param)
LL_ASSERT(rx);
rx->rx_ftr.aux_sched = 1U;
ll_rx_put(rx->link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->link, rx);
}
static void aux_sync_incomplete(void *param)

View file

@ -951,8 +951,7 @@ void ull_sync_established_report(memq_link_t *link, struct node_rx_hdr *rx)
* setup.
*/
ll_rx_put(rx_establ->hdr.link, rx_establ);
ll_rx_sched();
ll_rx_put_sched(rx_establ->hdr.link, rx_establ);
}
#if defined(CONFIG_BT_CTLR_SYNC_PERIODIC_CTE_TYPE_FILTERING)
@ -976,8 +975,7 @@ void ull_sync_established_report(memq_link_t *link, struct node_rx_hdr *rx)
ull_scan_aux_setup(link, rx);
} else {
rx->type = NODE_RX_TYPE_RELEASE;
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
}
}
@ -1367,8 +1365,7 @@ static void sync_expire(void *param)
/* NOTE: footer param has already been populated during sync setup */
/* Enqueue the sync failed to established towards ULL context */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
}
static void ticker_stop_sync_lost_op_cb(uint32_t status, void *param)
@ -1413,8 +1410,7 @@ static void sync_lost(void *param)
rx->hdr.rx_ftr.param = sync;
/* Enqueue the sync lost towards ULL context */
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
}
#if defined(CONFIG_BT_CTLR_CHECK_SAME_PEER_SYNC)

View file

@ -495,8 +495,7 @@ void ull_sync_iso_estab_done(struct node_rx_event_done *done)
se = (void *)rx->pdu;
se->status = BT_HCI_ERR_SUCCESS;
ll_rx_put(rx->hdr.link, rx);
ll_rx_sched();
ll_rx_put_sched(rx->hdr.link, rx);
ull_sync_iso_done(done);
}
@ -804,6 +803,5 @@ static void disabled_cb(void *param)
rx->hdr.link = NULL;
/* Enqueue the BIG sync lost towards ULL context */
ll_rx_put(link, rx);
ll_rx_sched();
ll_rx_put_sched(link, rx);
}