RE: [RFC]cpuidle: disable menu governor if nohz is disabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



this one works, thanks shaohua!

> -----Original Message-----
> From: Li, Shaohua
> Sent: Wednesday, August 31, 2011 9:56 AM
> To: Len Brown
> Cc: Arjan van de Ven; Li, Aubrey; linux acpi
> Subject: [RFC]cpuidle: disable menu governor if nohz is disabled
> 
> Lenb,
> Aubrey is asking me to fix the issue. So either we delete disable nohz code or fix
> cpuidle. if you want to fix cpuidle, here it is.
> 
> Thanks,
> SHaohua
> 
> Subject: cpuidle: disable menu governor if nohz is disabled
> 
> Aubrey is asking why nohz disables C-state. nohz has no dependency with idle,
> but menu governor does. If nohz is disabled, using menu governor is pointless,
> because we never get correct sleep length, so let's use ladder governor just like
> nohz isn't compiled in.
> 
> Frankly, disabling nohz is strange, but in case somebody cares, here is the fix.
> 
> Reported-by: Aubrey Li <aubrey.li@xxxxxxxxx>
> Signed-off-by: Shaohua Li <shaohua.li@xxxxxxxxx>
> 
> diff --git a/drivers/cpuidle/governors/menu.c
> b/drivers/cpuidle/governors/menu.c
> index c47f3d0..cbf9afa 100644
> --- a/drivers/cpuidle/governors/menu.c
> +++ b/drivers/cpuidle/governors/menu.c
> @@ -408,6 +408,8 @@ static struct cpuidle_governor menu_governor = {
>   */
>  static int __init init_menu(void)
>  {
> +	if (!tick_nohz_enabled)
> +		return 0;
>  	return cpuidle_register_governor(&menu_governor);
>  }
> 
> diff --git a/include/linux/tick.h b/include/linux/tick.h index b232ccc..88895c7
> 100644
> --- a/include/linux/tick.h
> +++ b/include/linux/tick.h
> @@ -126,6 +126,7 @@ extern void tick_nohz_restart_sched_tick(void);
>  extern ktime_t tick_nohz_get_sleep_length(void);  extern u64
> get_cpu_idle_time_us(int cpu, u64 *last_update_time);  extern u64
> get_cpu_iowait_time_us(int cpu, u64 *last_update_time);
> +extern int tick_nohz_enabled;
>  # else
>  static inline void tick_nohz_stop_sched_tick(int inidle) { }  static inline void
> tick_nohz_restart_sched_tick(void) { } diff --git a/kernel/time/tick-sched.c
> b/kernel/time/tick-sched.c index d5097c4..6a270fe 100644
> --- a/kernel/time/tick-sched.c
> +++ b/kernel/time/tick-sched.c
> @@ -105,7 +105,7 @@ static ktime_t tick_init_jiffy_update(void)
>  /*
>   * NO HZ enabled ?
>   */
> -static int tick_nohz_enabled __read_mostly  = 1;
> +int tick_nohz_enabled __read_mostly  = 1;
> 
>  /*
>   * Enable / Disable tickless mode
> 

��.n��������+%������w��{.n�����{�����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux