diff options
| -rw-r--r-- | kernel/sched/core.c | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index fe0223121883..9245c56b8f5f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c | |||
| @@ -2876,6 +2876,25 @@ unsigned long long nr_context_switches(void) | |||
| 2876 | } | 2876 | } |
| 2877 | 2877 | ||
| 2878 | /* | 2878 | /* |
| 2879 | * Consumers of these two interfaces, like for example the cpuidle menu | ||
| 2880 | * governor, are using nonsensical data. Preferring shallow idle state selection | ||
| 2881 | * for a CPU that has IO-wait which might not even end up running the task when | ||
| 2882 | * it does become runnable. | ||
| 2883 | */ | ||
| 2884 | |||
| 2885 | unsigned long nr_iowait_cpu(int cpu) | ||
| 2886 | { | ||
| 2887 | return atomic_read(&cpu_rq(cpu)->nr_iowait); | ||
| 2888 | } | ||
| 2889 | |||
| 2890 | void get_iowait_load(unsigned long *nr_waiters, unsigned long *load) | ||
| 2891 | { | ||
| 2892 | struct rq *rq = this_rq(); | ||
| 2893 | *nr_waiters = atomic_read(&rq->nr_iowait); | ||
| 2894 | *load = rq->load.weight; | ||
| 2895 | } | ||
| 2896 | |||
| 2897 | /* | ||
| 2879 | * IO-wait accounting, and how its mostly bollocks (on SMP). | 2898 | * IO-wait accounting, and how its mostly bollocks (on SMP). |
| 2880 | * | 2899 | * |
| 2881 | * The idea behind IO-wait account is to account the idle time that we could | 2900 | * The idea behind IO-wait account is to account the idle time that we could |
| @@ -2910,31 +2929,11 @@ unsigned long nr_iowait(void) | |||
| 2910 | unsigned long i, sum = 0; | 2929 | unsigned long i, sum = 0; |
| 2911 | 2930 | ||
| 2912 | for_each_possible_cpu(i) | 2931 | for_each_possible_cpu(i) |
| 2913 | sum += atomic_read(&cpu_rq(i)->nr_iowait); | 2932 | sum += nr_iowait_cpu(i); |
| 2914 | 2933 | ||
| 2915 | return sum; | 2934 | return sum; |
| 2916 | } | 2935 | } |
| 2917 | 2936 | ||
| 2918 | /* | ||
| 2919 | * Consumers of these two interfaces, like for example the cpuidle menu | ||
| 2920 | * governor, are using nonsensical data. Preferring shallow idle state selection | ||
| 2921 | * for a CPU that has IO-wait which might not even end up running the task when | ||
| 2922 | * it does become runnable. | ||
| 2923 | */ | ||
| 2924 | |||
| 2925 | unsigned long nr_iowait_cpu(int cpu) | ||
| 2926 | { | ||
| 2927 | struct rq *this = cpu_rq(cpu); | ||
| 2928 | return atomic_read(&this->nr_iowait); | ||
| 2929 | } | ||
| 2930 | |||
| 2931 | void get_iowait_load(unsigned long *nr_waiters, unsigned long *load) | ||
| 2932 | { | ||
| 2933 | struct rq *rq = this_rq(); | ||
| 2934 | *nr_waiters = atomic_read(&rq->nr_iowait); | ||
| 2935 | *load = rq->load.weight; | ||
| 2936 | } | ||
| 2937 | |||
| 2938 | #ifdef CONFIG_SMP | 2937 | #ifdef CONFIG_SMP |
| 2939 | 2938 | ||
| 2940 | /* | 2939 | /* |
