summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorSumit Singh <sumsingh@nvidia.com>2014-04-21 15:25:25 +0530
committerMandar Padmawar <mpadmawar@nvidia.com>2014-06-24 04:48:07 -0700
commite482f667f3948efb1cbb8f3d491919f6ebf48236 (patch)
treec2c8470587e18fb0ae4c5082f5cdb97d82619dfc /kernel
parentfc73b874a454561ec98314dfd508e767153fa4d7 (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.c18
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.