All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers-scC8bbJcJLCw5LPnMra/2Q@public.gmane.org>
To: venkatesh.pallipadi-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
Cc: Dave Jones <davej-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	cpufreq-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	kernel-testers-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>,
	"Rafael J. Wysocki" <rjw-KKrjLPT3xs0@public.gmane.org>,
	Dave Young
	<hidave.darkstar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Pekka Enberg <penberg-bbCR+/B0CizivPeTLB3BmA@public.gmane.org>,
	Thomas Renninger <trenn-l3A5Bk7waGM@public.gmane.org>
Subject: Re: [patch 1/4] cpufreq: Eliminate the recent lockdep warnings in cpufreq
Date: Thu, 2 Jul 2009 21:06:50 -0400	[thread overview]
Message-ID: <20090703010650.GA25030@Krystal> (raw)
In-Reply-To: <20090703000923.800507000-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>

* venkatesh.pallipadi-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org (venkatesh.pallipadi-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org) wrote:
> Commit b14893a62c73af0eca414cfed505b8c09efc613c although it was very
> much needed to properly cleanup ondemand timer, opened-up a can of worms
> related to locking dependencies in cpufreq.
> 
> Patch here defines the need for dbs_mutex and cleans up its usage in
> ondemand governor. This also resolves the lockdep warnings reported here
> 
> http://lkml.indiana.edu/hypermail/linux/kernel/0906.1/01925.html
> http://lkml.indiana.edu/hypermail/linux/kernel/0907.0/00820.html
> 
> and few others..
> 
> Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> ---
>  drivers/cpufreq/cpufreq.c              |    4 ++--
>  drivers/cpufreq/cpufreq_conservative.c |   27 +++++++++++----------------
>  drivers/cpufreq/cpufreq_ondemand.c     |   27 +++++++++++----------------
>  3 files changed, 24 insertions(+), 34 deletions(-)
> 
> diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
> index 6e2ec0b..c7fe16e 100644
> --- a/drivers/cpufreq/cpufreq.c
> +++ b/drivers/cpufreq/cpufreq.c
> @@ -1070,8 +1070,6 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
>  	spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
>  #endif
>  
> -	unlock_policy_rwsem_write(cpu);
> -
>  	if (cpufreq_driver->target)
>  		__cpufreq_governor(data, CPUFREQ_GOV_STOP);
>  
> @@ -1088,6 +1086,8 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
>  	if (cpufreq_driver->exit)
>  		cpufreq_driver->exit(data);
>  
> +	unlock_policy_rwsem_write(cpu);
> +
>  	free_cpumask_var(data->related_cpus);
>  	free_cpumask_var(data->cpus);
>  	kfree(data);
> diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
> index 7fc58af..58889f2 100644
> --- a/drivers/cpufreq/cpufreq_conservative.c
> +++ b/drivers/cpufreq/cpufreq_conservative.c
> @@ -70,15 +70,10 @@ static DEFINE_PER_CPU(struct cpu_dbs_info_s, cpu_dbs_info);
>  static unsigned int dbs_enable;	/* number of CPUs using this policy */
>  
>  /*
> - * DEADLOCK ALERT! There is a ordering requirement between cpu_hotplug
> - * lock and dbs_mutex. cpu_hotplug lock should always be held before
> - * dbs_mutex. If any function that can potentially take cpu_hotplug lock
> - * (like __cpufreq_driver_target()) is being called with dbs_mutex taken, then
> - * cpu_hotplug lock should be taken before that. Note that cpu_hotplug lock
> - * is recursive for the same process. -Venki
> - * DEADLOCK ALERT! (2) : do_dbs_timer() must not take the dbs_mutex, because it
> - * would deadlock with cancel_delayed_work_sync(), which is needed for proper
> - * raceless workqueue teardown.
> + * dbs_mutex protects data in dbs_tuners_ins from concurrent changes on
> + * different CPUs. It protects dbs_enable in governor start/stop. It also
> + * serializes governor limit_change with do_dbs_timer. We do not want
> + * do_dbs_timer to run when user is changing the governor or limits.
>   */
>  static DEFINE_MUTEX(dbs_mutex);
>  
> @@ -488,18 +483,17 @@ static void do_dbs_timer(struct work_struct *work)
>  
>  	delay -= jiffies % delay;
>  
> -	if (lock_policy_rwsem_write(cpu) < 0)
> -		return;
> +	mutex_lock(&dbs_mutex);

OK, I now have absolutely no idea what the rwsem mutex is protecting
anymore.

You should probably describe the new world order not just in terms of
what the dbs_mutex is protecting, but also about what the rwsem is
doing. I'm worried that this rwsem is there to protect against more than
what is protected by the dbs_mutex local to the ondemand/conservative
governors.

See below,

>  
>  	if (!dbs_info->enable) {
> -		unlock_policy_rwsem_write(cpu);
> +		mutex_unlock(&dbs_mutex);
>  		return;
>  	}
>  
>  	dbs_check_cpu(dbs_info);
>  
>  	queue_delayed_work_on(cpu, kconservative_wq, &dbs_info->work, delay);
> -	unlock_policy_rwsem_write(cpu);
> +	mutex_unlock(&dbs_mutex);
>  }
>  
>  static inline void dbs_timer_init(struct cpu_dbs_info_s *dbs_info)
> @@ -590,15 +584,16 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
>  					&dbs_cpufreq_notifier_block,
>  					CPUFREQ_TRANSITION_NOTIFIER);
>  		}
> -		dbs_timer_init(this_dbs_info);
> -
>  		mutex_unlock(&dbs_mutex);
>  
> +		dbs_timer_init(this_dbs_info);
> +
>  		break;
>  
>  	case CPUFREQ_GOV_STOP:
> -		mutex_lock(&dbs_mutex);
>  		dbs_timer_exit(this_dbs_info);

So now the only thing that seems to prevent the init and exit to race
with each other is the rwsem. But this does not seem to be described
anywhere.

Mathieu

> +
> +		mutex_lock(&dbs_mutex);
>  		sysfs_remove_group(&policy->kobj, &dbs_attr_group);
>  		dbs_enable--;
>  
> diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
> index 1911d17..246ae14 100644
> --- a/drivers/cpufreq/cpufreq_ondemand.c
> +++ b/drivers/cpufreq/cpufreq_ondemand.c
> @@ -78,15 +78,10 @@ static DEFINE_PER_CPU(struct cpu_dbs_info_s, cpu_dbs_info);
>  static unsigned int dbs_enable;	/* number of CPUs using this policy */
>  
>  /*
> - * DEADLOCK ALERT! There is a ordering requirement between cpu_hotplug
> - * lock and dbs_mutex. cpu_hotplug lock should always be held before
> - * dbs_mutex. If any function that can potentially take cpu_hotplug lock
> - * (like __cpufreq_driver_target()) is being called with dbs_mutex taken, then
> - * cpu_hotplug lock should be taken before that. Note that cpu_hotplug lock
> - * is recursive for the same process. -Venki
> - * DEADLOCK ALERT! (2) : do_dbs_timer() must not take the dbs_mutex, because it
> - * would deadlock with cancel_delayed_work_sync(), which is needed for proper
> - * raceless workqueue teardown.
> + * dbs_mutex protects data in dbs_tuners_ins from concurrent changes on
> + * different CPUs. It protects dbs_enable in governor start/stop. It also
> + * serializes governor limit_change with do_dbs_timer. We do not want
> + * do_dbs_timer to run when user is changing the governor or limits.
>   */
>  static DEFINE_MUTEX(dbs_mutex);
>  
> @@ -494,11 +489,10 @@ static void do_dbs_timer(struct work_struct *work)
>  
>  	delay -= jiffies % delay;
>  
> -	if (lock_policy_rwsem_write(cpu) < 0)
> -		return;
> +	mutex_lock(&dbs_mutex);
>  
>  	if (!dbs_info->enable) {
> -		unlock_policy_rwsem_write(cpu);
> +		mutex_unlock(&dbs_mutex);
>  		return;
>  	}
>  
> @@ -517,7 +511,7 @@ static void do_dbs_timer(struct work_struct *work)
>  			dbs_info->freq_lo, CPUFREQ_RELATION_H);
>  	}
>  	queue_delayed_work_on(cpu, kondemand_wq, &dbs_info->work, delay);
> -	unlock_policy_rwsem_write(cpu);
> +	mutex_unlock(&dbs_mutex);
>  }
>  
>  static inline void dbs_timer_init(struct cpu_dbs_info_s *dbs_info)
> @@ -598,14 +592,15 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
>  				max(min_sampling_rate,
>  				    latency * LATENCY_MULTIPLIER);
>  		}
> -		dbs_timer_init(this_dbs_info);
> -
>  		mutex_unlock(&dbs_mutex);
> +
> +		dbs_timer_init(this_dbs_info);
>  		break;
>  
>  	case CPUFREQ_GOV_STOP:
> -		mutex_lock(&dbs_mutex);
>  		dbs_timer_exit(this_dbs_info);
> +
> +		mutex_lock(&dbs_mutex);
>  		sysfs_remove_group(&policy->kobj, &dbs_attr_group);
>  		dbs_enable--;
>  		mutex_unlock(&dbs_mutex);
> -- 
> 1.6.0.6
> 
> -- 
> 

-- 
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68

WARNING: multiple messages have this Message-ID (diff)
From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: venkatesh.pallipadi@intel.com
Cc: Dave Jones <davej@redhat.com>,
	linux-kernel@vger.kernel.org, cpufreq@vger.kernel.org,
	kernel-testers@vger.kernel.org, Ingo Molnar <mingo@elte.hu>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	Dave Young <hidave.darkstar@gmail.com>,
	Pekka Enberg <penberg@cs.helsinki.fi>,
	Thomas Renninger <trenn@suse.de>
Subject: Re: [patch 1/4] cpufreq: Eliminate the recent lockdep warnings in cpufreq
Date: Thu, 2 Jul 2009 21:06:50 -0400	[thread overview]
Message-ID: <20090703010650.GA25030@Krystal> (raw)
In-Reply-To: <20090703000923.800507000@intel.com>

* venkatesh.pallipadi@intel.com (venkatesh.pallipadi@intel.com) wrote:
> Commit b14893a62c73af0eca414cfed505b8c09efc613c although it was very
> much needed to properly cleanup ondemand timer, opened-up a can of worms
> related to locking dependencies in cpufreq.
> 
> Patch here defines the need for dbs_mutex and cleans up its usage in
> ondemand governor. This also resolves the lockdep warnings reported here
> 
> http://lkml.indiana.edu/hypermail/linux/kernel/0906.1/01925.html
> http://lkml.indiana.edu/hypermail/linux/kernel/0907.0/00820.html
> 
> and few others..
> 
> Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
> ---
>  drivers/cpufreq/cpufreq.c              |    4 ++--
>  drivers/cpufreq/cpufreq_conservative.c |   27 +++++++++++----------------
>  drivers/cpufreq/cpufreq_ondemand.c     |   27 +++++++++++----------------
>  3 files changed, 24 insertions(+), 34 deletions(-)
> 
> diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
> index 6e2ec0b..c7fe16e 100644
> --- a/drivers/cpufreq/cpufreq.c
> +++ b/drivers/cpufreq/cpufreq.c
> @@ -1070,8 +1070,6 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
>  	spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
>  #endif
>  
> -	unlock_policy_rwsem_write(cpu);
> -
>  	if (cpufreq_driver->target)
>  		__cpufreq_governor(data, CPUFREQ_GOV_STOP);
>  
> @@ -1088,6 +1086,8 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
>  	if (cpufreq_driver->exit)
>  		cpufreq_driver->exit(data);
>  
> +	unlock_policy_rwsem_write(cpu);
> +
>  	free_cpumask_var(data->related_cpus);
>  	free_cpumask_var(data->cpus);
>  	kfree(data);
> diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
> index 7fc58af..58889f2 100644
> --- a/drivers/cpufreq/cpufreq_conservative.c
> +++ b/drivers/cpufreq/cpufreq_conservative.c
> @@ -70,15 +70,10 @@ static DEFINE_PER_CPU(struct cpu_dbs_info_s, cpu_dbs_info);
>  static unsigned int dbs_enable;	/* number of CPUs using this policy */
>  
>  /*
> - * DEADLOCK ALERT! There is a ordering requirement between cpu_hotplug
> - * lock and dbs_mutex. cpu_hotplug lock should always be held before
> - * dbs_mutex. If any function that can potentially take cpu_hotplug lock
> - * (like __cpufreq_driver_target()) is being called with dbs_mutex taken, then
> - * cpu_hotplug lock should be taken before that. Note that cpu_hotplug lock
> - * is recursive for the same process. -Venki
> - * DEADLOCK ALERT! (2) : do_dbs_timer() must not take the dbs_mutex, because it
> - * would deadlock with cancel_delayed_work_sync(), which is needed for proper
> - * raceless workqueue teardown.
> + * dbs_mutex protects data in dbs_tuners_ins from concurrent changes on
> + * different CPUs. It protects dbs_enable in governor start/stop. It also
> + * serializes governor limit_change with do_dbs_timer. We do not want
> + * do_dbs_timer to run when user is changing the governor or limits.
>   */
>  static DEFINE_MUTEX(dbs_mutex);
>  
> @@ -488,18 +483,17 @@ static void do_dbs_timer(struct work_struct *work)
>  
>  	delay -= jiffies % delay;
>  
> -	if (lock_policy_rwsem_write(cpu) < 0)
> -		return;
> +	mutex_lock(&dbs_mutex);

OK, I now have absolutely no idea what the rwsem mutex is protecting
anymore.

You should probably describe the new world order not just in terms of
what the dbs_mutex is protecting, but also about what the rwsem is
doing. I'm worried that this rwsem is there to protect against more than
what is protected by the dbs_mutex local to the ondemand/conservative
governors.

See below,

>  
>  	if (!dbs_info->enable) {
> -		unlock_policy_rwsem_write(cpu);
> +		mutex_unlock(&dbs_mutex);
>  		return;
>  	}
>  
>  	dbs_check_cpu(dbs_info);
>  
>  	queue_delayed_work_on(cpu, kconservative_wq, &dbs_info->work, delay);
> -	unlock_policy_rwsem_write(cpu);
> +	mutex_unlock(&dbs_mutex);
>  }
>  
>  static inline void dbs_timer_init(struct cpu_dbs_info_s *dbs_info)
> @@ -590,15 +584,16 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
>  					&dbs_cpufreq_notifier_block,
>  					CPUFREQ_TRANSITION_NOTIFIER);
>  		}
> -		dbs_timer_init(this_dbs_info);
> -
>  		mutex_unlock(&dbs_mutex);
>  
> +		dbs_timer_init(this_dbs_info);
> +
>  		break;
>  
>  	case CPUFREQ_GOV_STOP:
> -		mutex_lock(&dbs_mutex);
>  		dbs_timer_exit(this_dbs_info);

So now the only thing that seems to prevent the init and exit to race
with each other is the rwsem. But this does not seem to be described
anywhere.

Mathieu

> +
> +		mutex_lock(&dbs_mutex);
>  		sysfs_remove_group(&policy->kobj, &dbs_attr_group);
>  		dbs_enable--;
>  
> diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
> index 1911d17..246ae14 100644
> --- a/drivers/cpufreq/cpufreq_ondemand.c
> +++ b/drivers/cpufreq/cpufreq_ondemand.c
> @@ -78,15 +78,10 @@ static DEFINE_PER_CPU(struct cpu_dbs_info_s, cpu_dbs_info);
>  static unsigned int dbs_enable;	/* number of CPUs using this policy */
>  
>  /*
> - * DEADLOCK ALERT! There is a ordering requirement between cpu_hotplug
> - * lock and dbs_mutex. cpu_hotplug lock should always be held before
> - * dbs_mutex. If any function that can potentially take cpu_hotplug lock
> - * (like __cpufreq_driver_target()) is being called with dbs_mutex taken, then
> - * cpu_hotplug lock should be taken before that. Note that cpu_hotplug lock
> - * is recursive for the same process. -Venki
> - * DEADLOCK ALERT! (2) : do_dbs_timer() must not take the dbs_mutex, because it
> - * would deadlock with cancel_delayed_work_sync(), which is needed for proper
> - * raceless workqueue teardown.
> + * dbs_mutex protects data in dbs_tuners_ins from concurrent changes on
> + * different CPUs. It protects dbs_enable in governor start/stop. It also
> + * serializes governor limit_change with do_dbs_timer. We do not want
> + * do_dbs_timer to run when user is changing the governor or limits.
>   */
>  static DEFINE_MUTEX(dbs_mutex);
>  
> @@ -494,11 +489,10 @@ static void do_dbs_timer(struct work_struct *work)
>  
>  	delay -= jiffies % delay;
>  
> -	if (lock_policy_rwsem_write(cpu) < 0)
> -		return;
> +	mutex_lock(&dbs_mutex);
>  
>  	if (!dbs_info->enable) {
> -		unlock_policy_rwsem_write(cpu);
> +		mutex_unlock(&dbs_mutex);
>  		return;
>  	}
>  
> @@ -517,7 +511,7 @@ static void do_dbs_timer(struct work_struct *work)
>  			dbs_info->freq_lo, CPUFREQ_RELATION_H);
>  	}
>  	queue_delayed_work_on(cpu, kondemand_wq, &dbs_info->work, delay);
> -	unlock_policy_rwsem_write(cpu);
> +	mutex_unlock(&dbs_mutex);
>  }
>  
>  static inline void dbs_timer_init(struct cpu_dbs_info_s *dbs_info)
> @@ -598,14 +592,15 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
>  				max(min_sampling_rate,
>  				    latency * LATENCY_MULTIPLIER);
>  		}
> -		dbs_timer_init(this_dbs_info);
> -
>  		mutex_unlock(&dbs_mutex);
> +
> +		dbs_timer_init(this_dbs_info);
>  		break;
>  
>  	case CPUFREQ_GOV_STOP:
> -		mutex_lock(&dbs_mutex);
>  		dbs_timer_exit(this_dbs_info);
> +
> +		mutex_lock(&dbs_mutex);
>  		sysfs_remove_group(&policy->kobj, &dbs_attr_group);
>  		dbs_enable--;
>  		mutex_unlock(&dbs_mutex);
> -- 
> 1.6.0.6
> 
> -- 
> 

-- 
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68

  parent reply	other threads:[~2009-07-03  1:06 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-03  0:08 [patch 0/4] Take care of cpufreq lockdep issues (take 2) venkatesh.pallipadi-ral2JQCrhuEAvxtiuMwx3w
2009-07-03  0:08 ` venkatesh.pallipadi
2009-07-03  0:08 ` [patch 1/4] cpufreq: Eliminate the recent lockdep warnings in cpufreq venkatesh.pallipadi-ral2JQCrhuEAvxtiuMwx3w
2009-07-03  0:08   ` venkatesh.pallipadi
     [not found]   ` <20090703000923.800507000-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2009-07-03  1:06     ` Mathieu Desnoyers [this message]
2009-07-03  1:06       ` Mathieu Desnoyers
2009-07-03  2:04       ` Pallipadi, Venkatesh
2009-07-03  2:04         ` Pallipadi, Venkatesh
     [not found]         ` <7E82351C108FA840AB1866AC776AEC4669BFEF78-osO9UTpF0URqS6EAlXoojrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2009-07-03  2:25           ` Mathieu Desnoyers
2009-07-03  2:25             ` Mathieu Desnoyers
2009-07-03 11:41     ` Thomas Renninger
2009-07-03 11:41       ` Thomas Renninger
     [not found]       ` <200907031341.19141.trenn-l3A5Bk7waGM@public.gmane.org>
2009-07-03 14:28         ` Pallipadi, Venkatesh
2009-07-03 14:28           ` Pallipadi, Venkatesh
     [not found]           ` <7E82351C108FA840AB1866AC776AEC4669BFF050-osO9UTpF0URqS6EAlXoojrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2009-07-06 11:19             ` Thomas Renninger
2009-07-06 11:19               ` Thomas Renninger
2009-07-03  0:08 ` [patch 2/4] cpufreq: Mark policy_rwsem as going static in cpufreq.c wont be exported venkatesh.pallipadi-ral2JQCrhuEAvxtiuMwx3w
2009-07-03  0:08   ` venkatesh.pallipadi
2009-07-03  0:08 ` [patch 3/4] cpufreq: Cleanup locking in ondemand governor venkatesh.pallipadi-ral2JQCrhuEAvxtiuMwx3w
2009-07-03  0:08   ` venkatesh.pallipadi
2009-07-03  0:08 ` [patch 4/4] cpufreq: Cleanup locking in conservative governor venkatesh.pallipadi-ral2JQCrhuEAvxtiuMwx3w
2009-07-03  0:08   ` venkatesh.pallipadi
     [not found] ` <20090703000829.735976000-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2009-07-03  2:23   ` [PATCH] CPUFREQ: fix (utter) cpufreq_add_dev mess v1 Mathieu Desnoyers
2009-07-03  2:23     ` Mathieu Desnoyers
2009-07-03  6:54   ` [patch 0/4] Take care of cpufreq lockdep issues (take 2) Ingo Molnar
2009-07-03  6:54     ` Ingo Molnar
     [not found]     ` <20090703065427.GA32687-X9Un+BFzKDI@public.gmane.org>
2009-07-03 14:06       ` Mathieu Desnoyers
2009-07-03 14:06         ` Mathieu Desnoyers
2009-07-03 14:31       ` Pallipadi, Venkatesh
2009-07-03 14:31         ` Pallipadi, Venkatesh
     [not found]         ` <7E82351C108FA840AB1866AC776AEC4669BFF052-osO9UTpF0URqS6EAlXoojrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2009-07-03 18:48           ` Ingo Molnar
2009-07-03 18:48             ` Ingo Molnar
2009-07-06 18:52   ` Pallipadi, Venkatesh
2009-07-06 18:52     ` Pallipadi, Venkatesh

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=20090703010650.GA25030@Krystal \
    --to=mathieu.desnoyers-scc8bbjcjlcw5lpnmra/2q@public.gmane.org \
    --cc=cpufreq-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=davej-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=hidave.darkstar-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=kernel-testers-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mingo-X9Un+BFzKDI@public.gmane.org \
    --cc=penberg-bbCR+/B0CizivPeTLB3BmA@public.gmane.org \
    --cc=rjw-KKrjLPT3xs0@public.gmane.org \
    --cc=trenn-l3A5Bk7waGM@public.gmane.org \
    --cc=venkatesh.pallipadi-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    /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.