Revert "Bluetooth: Controller: Fix ull_prepare_dequeue for skipped events"

These change are reverted as part of fixing regression
failure in LL/DDI/SCN/BV-21-C and LL/DDI/SCN/BV-25-C.

This reverts commit 0d54ca8761.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2023-09-01 05:11:50 +02:00 committed by Carles Cufí
parent a9750d4fea
commit 91781306e9
2 changed files with 21 additions and 33 deletions

View file

@ -930,8 +930,8 @@ static uint32_t preempt_ticker_start(struct lll_event *first,
TICKER_NULL_REMAINDER, TICKER_NULL_REMAINDER,
TICKER_NULL_LAZY, TICKER_NULL_LAZY,
TICKER_NULL_SLOT, TICKER_NULL_SLOT,
preempt_ticker_cb, first->prepare_param.param, preempt_ticker_cb, first,
ticker_start_op_cb, NULL); ticker_start_op_cb, first);
return ret; return ret;
} }
@ -1007,7 +1007,7 @@ static void preempt(void *param)
} }
/* Preemptor not in pipeline */ /* Preemptor not in pipeline */
if (next->prepare_param.param != param) { if (next != param) {
uint32_t ret; uint32_t ret;
/* Start the preempt timeout */ /* Start the preempt timeout */

View file

@ -2063,8 +2063,6 @@ void *ull_prepare_dequeue_iter(uint8_t *idx)
void ull_prepare_dequeue(uint8_t caller_id) void ull_prepare_dequeue(uint8_t caller_id)
{ {
void *param_normal_head = NULL;
void *param_normal_next = NULL;
void *param_resume_head = NULL; void *param_resume_head = NULL;
void *param_resume_next = NULL; void *param_resume_next = NULL;
struct lll_event *next; struct lll_event *next;
@ -2105,41 +2103,31 @@ void ull_prepare_dequeue(uint8_t caller_id)
/* The prepare element was not a resume event, it would /* The prepare element was not a resume event, it would
* use the radio or was enqueued back into prepare * use the radio or was enqueued back into prepare
* pipeline with a preempt timeout being set. * pipeline with a preempt timeout being set.
*
* Remember the first encountered and the next element
* in the prepare pipeline so that we do not infinitely
* loop through the resume events in prepare pipeline.
*/ */
if (!is_resume) { if (!is_resume) {
if (!param_normal_head) { break;
param_normal_head = param; }
} else if (!param_normal_next) {
param_normal_next = param; /* Remember the first encountered resume and the next
} * resume element in the prepare pipeline so that we do
} else { * not infinitely loop through the resume events in
if (!param_resume_head) { * prepare pipeline.
param_resume_head = param; */
} else if (!param_resume_next) { if (!param_resume_head) {
param_resume_next = param; param_resume_head = param;
} } else if (!param_resume_next) {
param_resume_next = param;
} }
/* Stop traversing the prepare pipeline when we reach /* Stop traversing the prepare pipeline when we reach
* back to the first or next event where we * back to the first or next resume event where we
* initially started processing the prepare pipeline. * initially started processing the prepare pipeline.
*/ */
if (!next->is_aborted && if (next->is_resume &&
((!next->is_resume && ((next->prepare_param.param ==
((next->prepare_param.param == param_resume_head) ||
param_normal_head) || (next->prepare_param.param ==
(next->prepare_param.param == param_resume_next))) {
param_normal_next))) ||
(next->is_resume &&
!param_normal_next &&
((next->prepare_param.param ==
param_resume_head) ||
(next->prepare_param.param ==
param_resume_next))))) {
break; break;
} }
} }