From 19810b4e1538f9e3994c65d20e1a8709f3e4e538 Mon Sep 17 00:00:00 2001 From: Bjoern Brandenburg Date: Sun, 9 Aug 2015 13:18:51 +0200 Subject: Integrate SRP ceiling blocking callback with Linux scheduler Check whether a suspension is required at end of schedule(). --- kernel/sched/core.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index cbf2995d3871..8c23af255271 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -87,6 +87,8 @@ #include "../workqueue_internal.h" #include "../smpboot.h" +#include +#include #include #include @@ -2858,6 +2860,8 @@ asmlinkage __visible void __sched schedule(void) do { __schedule(); } while (need_resched()); + + srp_ceiling_block(); } EXPORT_SYMBOL(schedule); @@ -2889,6 +2893,7 @@ void __sched schedule_preempt_disabled(void) { sched_preempt_enable_no_resched(); schedule(); + srp_ceiling_block(); preempt_disable(); } @@ -2905,6 +2910,7 @@ static void __sched notrace preempt_schedule_common(void) */ barrier(); } while (need_resched()); + srp_ceiling_block(); } #ifdef CONFIG_PREEMPT @@ -2963,6 +2969,7 @@ asmlinkage __visible void __sched notrace preempt_schedule_context(void) __preempt_count_sub(PREEMPT_ACTIVE); barrier(); } while (need_resched()); + srp_ceiling_block(); } EXPORT_SYMBOL_GPL(preempt_schedule_context); #endif /* CONFIG_CONTEXT_TRACKING */ @@ -2988,6 +2995,7 @@ asmlinkage __visible void __sched preempt_schedule_irq(void) __preempt_count_add(PREEMPT_ACTIVE); local_irq_enable(); __schedule(); + srp_ceiling_block(); local_irq_disable(); __preempt_count_sub(PREEMPT_ACTIVE); -- cgit v1.2.2