Bluetooth: controller: split: Fix pipeline prepare/resume loop

Fix the pipeline prepare or resume dequeue loop from
overflow. Fixes premature exit of dequeue of done FIFO
which caused the pipeline to overflow due to previously
placed done is not dequeued correctly and next event not
being put back into the pipeline.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2019-07-30 10:30:14 +05:30 committed by Carles Cufí
commit 20ccdab445

View file

@ -1591,9 +1591,10 @@ static inline void rx_demux_event_done(memq_link_t *link,
/* dequeue prepare pipeline */ /* dequeue prepare pipeline */
next = ull_prepare_dequeue_get(); next = ull_prepare_dequeue_get();
while (next) { while (next) {
u8_t is_aborted = next->is_aborted;
u8_t is_resume = next->is_resume; u8_t is_resume = next->is_resume;
if (!next->is_aborted) { if (!is_aborted) {
static memq_link_t link; static memq_link_t link;
static struct mayfly mfy = {0, 0, &link, NULL, static struct mayfly mfy = {0, 0, &link, NULL,
lll_resume}; lll_resume};
@ -1609,7 +1610,7 @@ static inline void rx_demux_event_done(memq_link_t *link,
next = ull_prepare_dequeue_get(); next = ull_prepare_dequeue_get();
if (!next || next->is_resume || !is_resume) { if (!next || (!is_aborted && (!is_resume || next->is_resume))) {
break; break;
} }
} }