This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git


The following commit(s) were added to refs/heads/master by this push:
     new e48a0af87 nimble/ll: Prevent BIG event preemption by periodic 
advertising
e48a0af87 is described below

commit e48a0af8740128a76989cc295f6ce27d114a111e
Author: Andrzej Kaczmarek <[email protected]>
AuthorDate: Mon Feb 3 18:52:19 2025 +0100

    nimble/ll: Prevent BIG event preemption by periodic advertising
    
    This update adjusts the scheduling policy for periodic advertising
    to ensure it does not preempt BIG events. This ensures stability
    and performance of audio.
---
 nimble/controller/src/ble_ll_sched.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/nimble/controller/src/ble_ll_sched.c 
b/nimble/controller/src/ble_ll_sched.c
index 8f4599bdf..7f1ac9605 100644
--- a/nimble/controller/src/ble_ll_sched.c
+++ b/nimble/controller/src/ble_ll_sched.c
@@ -114,6 +114,16 @@ preempt_any_except_conn(struct ble_ll_sched_item *sch,
     return ble_ll_conn_is_lru(sch->cb_arg, item->cb_arg);
 }
 
+static int
+preempt_any_except_big(struct ble_ll_sched_item *sch, struct ble_ll_sched_item 
*item)
+{
+    if (item->sched_type == BLE_LL_SCHED_TYPE_BIG) {
+        return 0;
+    }
+
+    return 1;
+}
+
 static inline int
 ble_ll_sched_check_overlap(struct ble_ll_sched_item *sch1,
                            struct ble_ll_sched_item *sch2)
@@ -746,7 +756,7 @@ ble_ll_sched_periodic_adv(struct ble_ll_sched_item *sch, 
bool first_event)
         rc = ble_ll_sched_insert(sch, BLE_LL_SCHED_MAX_DELAY_ANY,
                                  preempt_none);
     } else {
-        rc = ble_ll_sched_insert(sch, 0, preempt_any);
+        rc = ble_ll_sched_insert(sch, 0, preempt_any_except_big);
     }
 
     OS_EXIT_CRITICAL(sr);

Reply via email to