All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
	Arjan van de Ven <arjan@infradead.org>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	Maxim Levitsky <maximlevitsky@gmail.com>,
	Len Brown <len.brown@intel.com>, Pavel Machek <pavel@ucw.cz>,
	Jiri Slaby <jslaby@suse.cz>,
	linux-pm@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org,
	Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH] sched: Cure nr_iowait_cpu() users
Date: Thu, 1 Jul 2010 11:18:25 +0300	[thread overview]
Message-ID: <20100701081825.GA3982@swordfish.minsk.epam.com> (raw)
In-Reply-To: <1277968037.1868.120.camel@laptop>

[-- Attachment #1: Type: text/plain, Size: 5041 bytes --]

Acked-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> (??)

	Sergey


On (07/01/10 09:07), Peter Zijlstra wrote:
> Subject: [PATCH] sched: Cure nr_iowait_cpu() users
> X-Mailer: Evolution 2.28.3 
> 
> With 0224cf4c5e (sched: Intoduce get_cpu_iowait_time_us()) Arjan broke
> things by not making sure preemption was indeed disabled by the callers
> of nr_iowait_cpu() which took the iowait value of the current cpu.
> 
> This resulted in a heap of preempt warnings. Cure this by making
> nr_iowait_cpu() take a cpu number and fix up the callers to pass in the
> right number.
> 
> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> ---
> Confirmed to work..
> 
>  drivers/cpuidle/governors/menu.c |    4 ++--
>  include/linux/sched.h            |    2 +-
>  kernel/sched.c                   |    4 ++--
>  kernel/time/tick-sched.c         |   16 ++++++++--------
>  4 files changed, 13 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
> index 52ff8aa..1b12870 100644
> --- a/drivers/cpuidle/governors/menu.c
> +++ b/drivers/cpuidle/governors/menu.c
> @@ -143,7 +143,7 @@ static inline int which_bucket(unsigned int duration)
>  	 * This allows us to calculate
>  	 * E(duration)|iowait
>  	 */
> -	if (nr_iowait_cpu())
> +	if (nr_iowait_cpu(smp_processor_id()))
>  		bucket = BUCKETS/2;
>  
>  	if (duration < 10)
> @@ -175,7 +175,7 @@ static inline int performance_multiplier(void)
>  	mult += 2 * get_loadavg();
>  
>  	/* for IO wait tasks (per cpu!) we add 5x each */
> -	mult += 10 * nr_iowait_cpu();
> +	mult += 10 * nr_iowait_cpu(smp_processor_id());
>  
>  	return mult;
>  }
> diff --git a/include/linux/sched.h b/include/linux/sched.h
> index a61c08c..1f25798 100644
> --- a/include/linux/sched.h
> +++ b/include/linux/sched.h
> @@ -139,7 +139,7 @@ extern int nr_processes(void);
>  extern unsigned long nr_running(void);
>  extern unsigned long nr_uninterruptible(void);
>  extern unsigned long nr_iowait(void);
> -extern unsigned long nr_iowait_cpu(void);
> +extern unsigned long nr_iowait_cpu(int cpu);
>  extern unsigned long this_cpu_load(void);
>  
>  
> diff --git a/kernel/sched.c b/kernel/sched.c
> index 71e3dc8..d3c0262 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -2946,9 +2946,9 @@ unsigned long nr_iowait(void)
>  	return sum;
>  }
>  
> -unsigned long nr_iowait_cpu(void)
> +unsigned long nr_iowait_cpu(int cpu)
>  {
> -	struct rq *this = this_rq();
> +	struct rq *this = cpu_rq(cpu);
>  	return atomic_read(&this->nr_iowait);
>  }
>  
> diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
> index e0707ea..17525ca 100644
> --- a/kernel/time/tick-sched.c
> +++ b/kernel/time/tick-sched.c
> @@ -154,14 +154,14 @@ static void tick_nohz_update_jiffies(ktime_t now)
>   * Updates the per cpu time idle statistics counters
>   */
>  static void
> -update_ts_time_stats(struct tick_sched *ts, ktime_t now, u64 *last_update_time)
> +update_ts_time_stats(int cpu, struct tick_sched *ts, ktime_t now, u64 *last_update_time)
>  {
>  	ktime_t delta;
>  
>  	if (ts->idle_active) {
>  		delta = ktime_sub(now, ts->idle_entrytime);
>  		ts->idle_sleeptime = ktime_add(ts->idle_sleeptime, delta);
> -		if (nr_iowait_cpu() > 0)
> +		if (nr_iowait_cpu(cpu) > 0)
>  			ts->iowait_sleeptime = ktime_add(ts->iowait_sleeptime, delta);
>  		ts->idle_entrytime = now;
>  	}
> @@ -175,19 +175,19 @@ static void tick_nohz_stop_idle(int cpu, ktime_t now)
>  {
>  	struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu);
>  
> -	update_ts_time_stats(ts, now, NULL);
> +	update_ts_time_stats(cpu, ts, now, NULL);
>  	ts->idle_active = 0;
>  
>  	sched_clock_idle_wakeup_event(0);
>  }
>  
> -static ktime_t tick_nohz_start_idle(struct tick_sched *ts)
> +static ktime_t tick_nohz_start_idle(int cpu, struct tick_sched *ts)
>  {
>  	ktime_t now;
>  
>  	now = ktime_get();
>  
> -	update_ts_time_stats(ts, now, NULL);
> +	update_ts_time_stats(cpu, ts, now, NULL);
>  
>  	ts->idle_entrytime = now;
>  	ts->idle_active = 1;
> @@ -216,7 +216,7 @@ u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time)
>  	if (!tick_nohz_enabled)
>  		return -1;
>  
> -	update_ts_time_stats(ts, ktime_get(), last_update_time);
> +	update_ts_time_stats(cpu, ts, ktime_get(), last_update_time);
>  
>  	return ktime_to_us(ts->idle_sleeptime);
>  }
> @@ -242,7 +242,7 @@ u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time)
>  	if (!tick_nohz_enabled)
>  		return -1;
>  
> -	update_ts_time_stats(ts, ktime_get(), last_update_time);
> +	update_ts_time_stats(cpu, ts, ktime_get(), last_update_time);
>  
>  	return ktime_to_us(ts->iowait_sleeptime);
>  }
> @@ -284,7 +284,7 @@ void tick_nohz_stop_sched_tick(int inidle)
>  	 */
>  	ts->inidle = 1;
>  
> -	now = tick_nohz_start_idle(ts);
> +	now = tick_nohz_start_idle(cpu, ts);
>  
>  	/*
>  	 * If this cpu is offline and it is the one which updates
> 

[-- Attachment #2: Type: application/pgp-signature, Size: 316 bytes --]

  parent reply	other threads:[~2010-07-01  8:14 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-13 20:33 BUG: using smp_processor_id() in preemptible code: s2disk Sergey Senozhatsky
2010-06-13 20:33 ` Maxim Levitsky
2010-06-13 20:33 ` Maxim Levitsky
2010-06-13 23:36   ` Rafael J. Wysocki
2010-06-13 23:36   ` Rafael J. Wysocki
2010-06-14 14:09     ` Sergey Senozhatsky
2010-06-14 14:23       ` Rafael J. Wysocki
2010-06-14 14:23       ` Rafael J. Wysocki
2010-06-14 14:38       ` Arjan van de Ven
2010-06-14 14:54         ` Sergey Senozhatsky
2010-06-14 15:01           ` Arjan van de Ven
2010-06-14 15:17             ` Sergey Senozhatsky
2010-06-14 15:17             ` Sergey Senozhatsky
2010-06-15  3:40               ` Arjan van de Ven
2010-06-15  3:40               ` Arjan van de Ven
2010-06-15  6:19                 ` [PATCH] avoid using smp_processor_id() in preemptible code (nr_iowait_cpu) Sergey Senozhatsky
2010-06-15 14:24                   ` Arjan van de Ven
2010-06-15 14:50                     ` Sergey Senozhatsky
2010-06-15 15:08                       ` Arjan van de Ven
2010-06-15 15:23                         ` Sergey Senozhatsky
2010-06-15 15:31                           ` Sergey Senozhatsky
2010-06-15 15:31                           ` Sergey Senozhatsky
2010-06-15 15:23                         ` Sergey Senozhatsky
2010-06-15 16:13                         ` Sergey Senozhatsky
2010-06-15 16:13                         ` Sergey Senozhatsky
2010-06-16  6:05                           ` Arjan van de Ven
2010-06-16  9:34                             ` Sergey Senozhatsky
2010-06-16  9:34                             ` Sergey Senozhatsky
2010-06-16  6:05                           ` Arjan van de Ven
2010-06-17  6:29                         ` [PATCH] cpuidle: avoid using smp_processor_id() in preemptible code (nr_iowait_cpu) v4 Sergey Senozhatsky
2010-06-17  6:43                           ` Arjan van de Ven
2010-06-17  6:43                           ` Arjan van de Ven
2010-06-17  6:59                           ` Andrew Morton
2010-06-17  6:59                           ` Andrew Morton
2010-06-17  7:04                             ` Andrew Morton
2010-06-17  7:04                             ` Andrew Morton
2010-06-17  7:34                             ` Sergey Senozhatsky
2010-06-17  7:34                             ` Sergey Senozhatsky
2010-06-25 14:39                           ` Peter Zijlstra
2010-06-25 14:39                           ` Peter Zijlstra
2010-06-30 19:58                             ` Andrew Morton
2010-06-30 19:58                             ` Andrew Morton
2010-07-01  6:17                               ` Sergey Senozhatsky
2010-07-01  6:17                               ` Sergey Senozhatsky
2010-07-01  7:07                               ` [PATCH] sched: Cure nr_iowait_cpu() users Peter Zijlstra
2010-07-01  7:07                                 ` Peter Zijlstra
2010-07-01  8:18                                 ` Sergey Senozhatsky
2010-07-01  8:18                                 ` Sergey Senozhatsky [this message]
2010-07-01  8:45                                 ` [tip:sched/urgent] " tip-bot for Peter Zijlstra
2010-06-17  6:29                         ` [PATCH] cpuidle: avoid using smp_processor_id() in preemptible code (nr_iowait_cpu) v4 Sergey Senozhatsky
2010-06-15 15:08                       ` [PATCH] avoid using smp_processor_id() in preemptible code (nr_iowait_cpu) Arjan van de Ven
2010-06-15 14:50                     ` Sergey Senozhatsky
2010-06-15 14:24                   ` Arjan van de Ven
2010-06-15  6:19                 ` Sergey Senozhatsky
2010-06-14 15:01           ` BUG: using smp_processor_id() in preemptible code: s2disk Arjan van de Ven
2010-06-14 14:54         ` Sergey Senozhatsky
2010-06-14 14:38       ` Arjan van de Ven
2010-06-14 14:09     ` Sergey Senozhatsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100701081825.GA3982@swordfish.minsk.epam.com \
    --to=sergey.senozhatsky@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=arjan@infradead.org \
    --cc=jslaby@suse.cz \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=maximlevitsky@gmail.com \
    --cc=mingo@elte.hu \
    --cc=pavel@ucw.cz \
    --cc=peterz@infradead.org \
    --cc=rjw@sisk.pl \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.