diff options
author | Sumit Singh <sumsingh@nvidia.com> | 2014-04-21 15:25:25 +0530 |
---|---|---|
committer | Mandar Padmawar <mpadmawar@nvidia.com> | 2014-06-24 04:48:07 -0700 |
commit | e482f667f3948efb1cbb8f3d491919f6ebf48236 (patch) | |
tree | c2c8470587e18fb0ae4c5082f5cdb97d82619dfc /kernel | |
parent | fc73b874a454561ec98314dfd508e767153fa4d7 (diff) |
sched: defining relaxed version of idle_cpu
Defining relaxed version of idle_cpu, which uses
macro cpu_relaxed_read_long, that will be used to
enhance power efficiency.
bug 1440421
Change-Id: I6ba2185632ad0fba766a2548b0ddac743defb1b9
Signed-off-by: Sumit Singh <sumsingh@nvidia.com>
Reviewed-on: http://git-master/r/426484
Reviewed-by: Sri Krishna Chowdary <schowdary@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Alexander Van Brunt <avanbrunt@nvidia.com>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sched/core.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 3bfa39888f70..181767968d6c 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -81,6 +81,7 @@ #include <asm/tlb.h> #include <asm/irq_regs.h> #include <asm/mutex.h> +#include <asm/relaxed.h> #ifdef CONFIG_PARAVIRT #include <asm/paravirt.h> #endif @@ -3855,6 +3856,23 @@ int idle_cpu(int cpu) return 1; } +int idle_cpu_relaxed(int cpu) +{ + struct rq *rq = cpu_rq(cpu); + + if (cpu_relaxed_read_long(&rq->curr) != rq->idle) + return 0; + + if (cpu_relaxed_read_long(&rq->nr_running)) + return 0; + +#ifdef CONFIG_SMP + if (!llist_empty_relaxed(&rq->wake_list)) + return 0; +#endif + + return 1; +} /** * idle_task - return the idle task for a given cpu. * @cpu: the processor in question. |