public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] pm_qos: BKL removal and cleanup
@ 2009-08-06 19:58 Jonathan Corbet
  2009-08-06 19:59 ` [PATCH 1/2] pm_qos: remove BKL Jonathan Corbet
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Jonathan Corbet @ 2009-08-06 19:58 UTC (permalink / raw)
  To: LKML; +Cc: Ingo Molnar, Mark Gross

Here's a pair of patches which removes the BKL from
kernel/pm_qos_params.c and cleans up a minor (but real) race problem I
found therein.

I retired my bkl-removal tree; Ingo, assuming all's well here, can this
hang out in your kill-bkl tree until the merge window opens?

Thanks,

jon

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/2] pm_qos: remove BKL
  2009-08-06 19:58 [PATCH 0/2] pm_qos: BKL removal and cleanup Jonathan Corbet
@ 2009-08-06 19:59 ` Jonathan Corbet
  2009-08-07  2:03   ` Frederic Weisbecker
  2009-08-07  5:54   ` Frederic Weisbecker
  2009-08-06 20:01 ` [PATCH 2/2] pm_qos: clean up racy "name" variable Jonathan Corbet
  2009-08-07  2:05 ` Jonathan Corbet
  2 siblings, 2 replies; 9+ messages in thread
From: Jonathan Corbet @ 2009-08-06 19:59 UTC (permalink / raw)
  To: LKML; +Cc: Ingo Molnar, Mark Gross

pm_qos_power_open got its lock_kernel() calls from the open() pushdown.  A
look at the code shows that the only global resources accessed are
pm_qos_array and "name".  pm_qos_array doesn't change (things pointed to
therein do change, but they are atomics and/or are protected by
pm_qos_lock).  Accesses to "name" are totally unprotected with or without
the BKL; that will be fixed shortly.  The BKL is not helpful here; take it
out.

Signed-off-by: Jonathan Corbet <corbet@lwn.net>
---
 kernel/pm_qos_params.c |    8 +-------
 1 files changed, 1 insertions(+), 7 deletions(-)

diff --git a/kernel/pm_qos_params.c b/kernel/pm_qos_params.c
index dfdec52..d96b83e 100644
--- a/kernel/pm_qos_params.c
+++ b/kernel/pm_qos_params.c
@@ -29,7 +29,6 @@
 
 #include <linux/pm_qos_params.h>
 #include <linux/sched.h>
-#include <linux/smp_lock.h>
 #include <linux/spinlock.h>
 #include <linux/slab.h>
 #include <linux/time.h>
@@ -352,20 +351,15 @@ static int pm_qos_power_open(struct inode *inode, struct file *filp)
 	int ret;
 	long pm_qos_class;
 
-	lock_kernel();
 	pm_qos_class = find_pm_qos_object_by_minor(iminor(inode));
 	if (pm_qos_class >= 0) {
 		filp->private_data = (void *)pm_qos_class;
 		sprintf(name, "process_%d", current->pid);
 		ret = pm_qos_add_requirement(pm_qos_class, name,
 					PM_QOS_DEFAULT_VALUE);
-		if (ret >= 0) {
-			unlock_kernel();
+		if (ret >= 0)
 			return 0;
-		}
 	}
-	unlock_kernel();
-
 	return -EPERM;
 }
 
-- 
1.6.2.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] pm_qos: clean up racy "name" variable
  2009-08-06 19:58 [PATCH 0/2] pm_qos: BKL removal and cleanup Jonathan Corbet
  2009-08-06 19:59 ` [PATCH 1/2] pm_qos: remove BKL Jonathan Corbet
@ 2009-08-06 20:01 ` Jonathan Corbet
  2009-08-07  2:05 ` Jonathan Corbet
  2 siblings, 0 replies; 9+ messages in thread
From: Jonathan Corbet @ 2009-08-06 20:01 UTC (permalink / raw)
  To: LKML; +Cc: Ingo Molnar, Mark Gross

"name" is an awful name for a file-global variable.  It was used in three
different functions, with no mutual exclusion.  But it's just a tiny,
temporary string; let's just move it onto the stack in the functions that
need it.  Also use snprintf() just in case.

Signed-off-by: Jonathan Corbet <corbet@lwn.net>
---
 kernel/pm_qos_params.c |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/kernel/pm_qos_params.c b/kernel/pm_qos_params.c
index d96b83e..3db49b9 100644
--- a/kernel/pm_qos_params.c
+++ b/kernel/pm_qos_params.c
@@ -343,18 +343,18 @@ int pm_qos_remove_notifier(int pm_qos_class, struct notifier_block *notifier)
 }
 EXPORT_SYMBOL_GPL(pm_qos_remove_notifier);
 
-#define PID_NAME_LEN sizeof("process_1234567890")
-static char name[PID_NAME_LEN];
+#define PID_NAME_LEN 32
 
 static int pm_qos_power_open(struct inode *inode, struct file *filp)
 {
 	int ret;
 	long pm_qos_class;
+	char name[PID_NAME_LEN];
 
 	pm_qos_class = find_pm_qos_object_by_minor(iminor(inode));
 	if (pm_qos_class >= 0) {
 		filp->private_data = (void *)pm_qos_class;
-		sprintf(name, "process_%d", current->pid);
+		snprintf(name, PID_NAME_LEN, "process_%d", current->pid);
 		ret = pm_qos_add_requirement(pm_qos_class, name,
 					PM_QOS_DEFAULT_VALUE);
 		if (ret >= 0)
@@ -366,9 +366,10 @@ static int pm_qos_power_open(struct inode *inode, struct file *filp)
 static int pm_qos_power_release(struct inode *inode, struct file *filp)
 {
 	int pm_qos_class;
+	char name[PID_NAME_LEN];
 
 	pm_qos_class = (long)filp->private_data;
-	sprintf(name, "process_%d", current->pid);
+	snprintf(name, PID_NAME_LEN, "process_%d", current->pid);
 	pm_qos_remove_requirement(pm_qos_class, name);
 
 	return 0;
@@ -379,13 +380,14 @@ static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf,
 {
 	s32 value;
 	int pm_qos_class;
+	char name[PID_NAME_LEN];
 
 	pm_qos_class = (long)filp->private_data;
 	if (count != sizeof(s32))
 		return -EINVAL;
 	if (copy_from_user(&value, buf, sizeof(s32)))
 		return -EFAULT;
-	sprintf(name, "process_%d", current->pid);
+	snprintf(name, PID_NAME_LEN, "process_%d", current->pid);
 	pm_qos_update_requirement(pm_qos_class, name, value);
 
 	return  sizeof(s32);
-- 
1.6.2.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] pm_qos: remove BKL
  2009-08-06 19:59 ` [PATCH 1/2] pm_qos: remove BKL Jonathan Corbet
@ 2009-08-07  2:03   ` Frederic Weisbecker
  2009-08-07  5:54   ` Frederic Weisbecker
  1 sibling, 0 replies; 9+ messages in thread
From: Frederic Weisbecker @ 2009-08-07  2:03 UTC (permalink / raw)
  To: Jonathan Corbet; +Cc: LKML, Ingo Molnar, Mark Gross

On Thu, Aug 06, 2009 at 01:59:53PM -0600, Jonathan Corbet wrote:
> pm_qos_power_open got its lock_kernel() calls from the open() pushdown.  A
> look at the code shows that the only global resources accessed are
> pm_qos_array and "name".  pm_qos_array doesn't change (things pointed to
> therein do change, but they are atomics and/or are protected by
> pm_qos_lock).  Accesses to "name" are totally unprotected with or without
> the BKL; that will be fixed shortly.  The BKL is not helpful here; take it
> out.
> 
> Signed-off-by: Jonathan Corbet <corbet@lwn.net>


Is there a 2/2 missing patch in the series, or may be I missed it.
I guess it fixes the racy "name"...


> ---
>  kernel/pm_qos_params.c |    8 +-------
>  1 files changed, 1 insertions(+), 7 deletions(-)
> 
> diff --git a/kernel/pm_qos_params.c b/kernel/pm_qos_params.c
> index dfdec52..d96b83e 100644
> --- a/kernel/pm_qos_params.c
> +++ b/kernel/pm_qos_params.c
> @@ -29,7 +29,6 @@
>  
>  #include <linux/pm_qos_params.h>
>  #include <linux/sched.h>
> -#include <linux/smp_lock.h>
>  #include <linux/spinlock.h>
>  #include <linux/slab.h>
>  #include <linux/time.h>
> @@ -352,20 +351,15 @@ static int pm_qos_power_open(struct inode *inode, struct file *filp)
>  	int ret;
>  	long pm_qos_class;
>  
> -	lock_kernel();
>  	pm_qos_class = find_pm_qos_object_by_minor(iminor(inode));
>  	if (pm_qos_class >= 0) {
>  		filp->private_data = (void *)pm_qos_class;
>  		sprintf(name, "process_%d", current->pid);
>  		ret = pm_qos_add_requirement(pm_qos_class, name,
>  					PM_QOS_DEFAULT_VALUE);
> -		if (ret >= 0) {
> -			unlock_kernel();
> +		if (ret >= 0)
>  			return 0;
> -		}
>  	}
> -	unlock_kernel();
> -
>  	return -EPERM;
>  }
>  
> -- 
> 1.6.2.5
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 2/2] pm_qos: clean up racy "name" variable
  2009-08-06 19:58 [PATCH 0/2] pm_qos: BKL removal and cleanup Jonathan Corbet
  2009-08-06 19:59 ` [PATCH 1/2] pm_qos: remove BKL Jonathan Corbet
  2009-08-06 20:01 ` [PATCH 2/2] pm_qos: clean up racy "name" variable Jonathan Corbet
@ 2009-08-07  2:05 ` Jonathan Corbet
  2009-08-07  6:03   ` Frederic Weisbecker
  2 siblings, 1 reply; 9+ messages in thread
From: Jonathan Corbet @ 2009-08-07  2:05 UTC (permalink / raw)
  To: LKML; +Cc: Ingo Molnar, Mark Gross

"name" is an awful name for a file-global variable.  It was used in
three different functions, with no mutual exclusion.  But it's just a
tiny, temporary string; let's just move it onto the stack in the
functions that need it.  Also use snprintf() just in case.

Signed-off-by: Jonathan Corbet <corbet@lwn.net>
---
 kernel/pm_qos_params.c |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/kernel/pm_qos_params.c b/kernel/pm_qos_params.c
index d96b83e..3db49b9 100644
--- a/kernel/pm_qos_params.c
+++ b/kernel/pm_qos_params.c
@@ -343,18 +343,18 @@ int pm_qos_remove_notifier(int pm_qos_class, struct notifier_block *notifier)
 }
 EXPORT_SYMBOL_GPL(pm_qos_remove_notifier);
 
-#define PID_NAME_LEN sizeof("process_1234567890")
-static char name[PID_NAME_LEN];
+#define PID_NAME_LEN 32
 
 static int pm_qos_power_open(struct inode *inode, struct file *filp)
 {
 	int ret;
 	long pm_qos_class;
+	char name[PID_NAME_LEN];
 
 	pm_qos_class = find_pm_qos_object_by_minor(iminor(inode));
 	if (pm_qos_class >= 0) {
 		filp->private_data = (void *)pm_qos_class;
-		sprintf(name, "process_%d", current->pid);
+		snprintf(name, PID_NAME_LEN, "process_%d", current->pid);
 		ret = pm_qos_add_requirement(pm_qos_class, name,
 					PM_QOS_DEFAULT_VALUE);
 		if (ret >= 0)
@@ -366,9 +366,10 @@ static int pm_qos_power_open(struct inode *inode, struct file *filp)
 static int pm_qos_power_release(struct inode *inode, struct file *filp)
 {
 	int pm_qos_class;
+	char name[PID_NAME_LEN];
 
 	pm_qos_class = (long)filp->private_data;
-	sprintf(name, "process_%d", current->pid);
+	snprintf(name, PID_NAME_LEN, "process_%d", current->pid);
 	pm_qos_remove_requirement(pm_qos_class, name);
 
 	return 0;
@@ -379,13 +380,14 @@ static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf,
 {
 	s32 value;
 	int pm_qos_class;
+	char name[PID_NAME_LEN];
 
 	pm_qos_class = (long)filp->private_data;
 	if (count != sizeof(s32))
 		return -EINVAL;
 	if (copy_from_user(&value, buf, sizeof(s32)))
 		return -EFAULT;
-	sprintf(name, "process_%d", current->pid);
+	snprintf(name, PID_NAME_LEN, "process_%d", current->pid);
 	pm_qos_update_requirement(pm_qos_class, name, value);
 
 	return  sizeof(s32);
-- 
1.6.2.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] pm_qos: remove BKL
  2009-08-06 19:59 ` [PATCH 1/2] pm_qos: remove BKL Jonathan Corbet
  2009-08-07  2:03   ` Frederic Weisbecker
@ 2009-08-07  5:54   ` Frederic Weisbecker
  2009-08-07 15:08     ` Jonathan Corbet
  1 sibling, 1 reply; 9+ messages in thread
From: Frederic Weisbecker @ 2009-08-07  5:54 UTC (permalink / raw)
  To: Jonathan Corbet; +Cc: LKML, Ingo Molnar, Mark Gross

On Thu, Aug 06, 2009 at 01:59:53PM -0600, Jonathan Corbet wrote:
> pm_qos_power_open got its lock_kernel() calls from the open() pushdown.  A
> look at the code shows that the only global resources accessed are
> pm_qos_array and "name".  pm_qos_array doesn't change (things pointed to
> therein do change, but they are atomics and/or are protected by
> pm_qos_lock).  Accesses to "name" are totally unprotected with or without
> the BKL; that will be fixed shortly.  The BKL is not helpful here; take it
> out.
> 
> Signed-off-by: Jonathan Corbet <corbet@lwn.net>
> ---
>  kernel/pm_qos_params.c |    8 +-------
>  1 files changed, 1 insertions(+), 7 deletions(-)
> 
> diff --git a/kernel/pm_qos_params.c b/kernel/pm_qos_params.c
> index dfdec52..d96b83e 100644
> --- a/kernel/pm_qos_params.c
> +++ b/kernel/pm_qos_params.c
> @@ -29,7 +29,6 @@
>  
>  #include <linux/pm_qos_params.h>
>  #include <linux/sched.h>
> -#include <linux/smp_lock.h>
>  #include <linux/spinlock.h>
>  #include <linux/slab.h>
>  #include <linux/time.h>
> @@ -352,20 +351,15 @@ static int pm_qos_power_open(struct inode *inode, struct file *filp)
>  	int ret;
>  	long pm_qos_class;
>  
> -	lock_kernel();
>  	pm_qos_class = find_pm_qos_object_by_minor(iminor(inode));



Yeah, AFAICS, the pm_qos_array reading doesn't need to be protected.
It is statically defined and the array itself is never changed. And
as you said, its content are atomically changed.

And the field we are reading here is pm_qos_power_miscdev.minor.
It doesn't seem to be changed anywhere.

Well these field are changed but only on init time, through
register_pm_qos_misc(). But the I guess it's not racy against this
open call.



>  	if (pm_qos_class >= 0) {
>  		filp->private_data = (void *)pm_qos_class;
>  		sprintf(name, "process_%d", current->pid);
>  		ret = pm_qos_add_requirement(pm_qos_class, name,
>  					PM_QOS_DEFAULT_VALUE);


The only thing that doesn't seem protected inside
pm_qos_add_requirement is the read of pm_qos_array[pm_qos_class]->default_value

But again, this field seems statically defined and never changed later.

The rest of pm_qos_add_requirement() and update_target() is protected
by pm_qos_lock.

May be the last doubt could be the blocking_notifier_call_chain() call from
update_target(). Not sure if these notifier handlers can expect to be called
concurrently?

Thanks,
Frederic.



> -		if (ret >= 0) {
> -			unlock_kernel();
> +		if (ret >= 0)
>  			return 0;
> -		}
>  	}
> -	unlock_kernel();
> -
>  	return -EPERM;
>  }
>  
> -- 
> 1.6.2.5
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] pm_qos: clean up racy "name" variable
  2009-08-07  2:05 ` Jonathan Corbet
@ 2009-08-07  6:03   ` Frederic Weisbecker
  0 siblings, 0 replies; 9+ messages in thread
From: Frederic Weisbecker @ 2009-08-07  6:03 UTC (permalink / raw)
  To: Jonathan Corbet; +Cc: LKML, Ingo Molnar, Mark Gross

On Thu, Aug 06, 2009 at 08:05:09PM -0600, Jonathan Corbet wrote:
> "name" is an awful name for a file-global variable.  It was used in
> three different functions, with no mutual exclusion.  But it's just a
> tiny, temporary string; let's just move it onto the stack in the
> functions that need it.  Also use snprintf() just in case.
> 
> Signed-off-by: Jonathan Corbet <corbet@lwn.net>
> ---
>  kernel/pm_qos_params.c |   12 +++++++-----
>  1 files changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/kernel/pm_qos_params.c b/kernel/pm_qos_params.c
> index d96b83e..3db49b9 100644
> --- a/kernel/pm_qos_params.c
> +++ b/kernel/pm_qos_params.c
> @@ -343,18 +343,18 @@ int pm_qos_remove_notifier(int pm_qos_class, struct notifier_block *notifier)
>  }
>  EXPORT_SYMBOL_GPL(pm_qos_remove_notifier);
>  
> -#define PID_NAME_LEN sizeof("process_1234567890")
> -static char name[PID_NAME_LEN];
> +#define PID_NAME_LEN 32
>  
>  static int pm_qos_power_open(struct inode *inode, struct file *filp)
>  {
>  	int ret;
>  	long pm_qos_class;
> +	char name[PID_NAME_LEN];
>  
>  	pm_qos_class = find_pm_qos_object_by_minor(iminor(inode));
>  	if (pm_qos_class >= 0) {
>  		filp->private_data = (void *)pm_qos_class;
> -		sprintf(name, "process_%d", current->pid);
> +		snprintf(name, PID_NAME_LEN, "process_%d", current->pid);
>  		ret = pm_qos_add_requirement(pm_qos_class, name,
>  					PM_QOS_DEFAULT_VALUE);
>  		if (ret >= 0)
> @@ -366,9 +366,10 @@ static int pm_qos_power_open(struct inode *inode, struct file *filp)
>  static int pm_qos_power_release(struct inode *inode, struct file *filp)
>  {
>  	int pm_qos_class;
> +	char name[PID_NAME_LEN];
>  
>  	pm_qos_class = (long)filp->private_data;
> -	sprintf(name, "process_%d", current->pid);
> +	snprintf(name, PID_NAME_LEN, "process_%d", current->pid);
>  	pm_qos_remove_requirement(pm_qos_class, name);
>  
>  	return 0;
> @@ -379,13 +380,14 @@ static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf,
>  {
>  	s32 value;
>  	int pm_qos_class;
> +	char name[PID_NAME_LEN];
>  
>  	pm_qos_class = (long)filp->private_data;
>  	if (count != sizeof(s32))
>  		return -EINVAL;
>  	if (copy_from_user(&value, buf, sizeof(s32)))
>  		return -EFAULT;
> -	sprintf(name, "process_%d", current->pid);
> +	snprintf(name, PID_NAME_LEN, "process_%d", current->pid);
>  	pm_qos_update_requirement(pm_qos_class, name, value);
>  
>  	return  sizeof(s32);


Oh, and nothing was protecting this string between open/write/release...
So, double effect, bkl killing, and race condition fixed!

Reviewed-by: Frederic Weisbecker <fweisbec@gmail.com> (if that matters, I
don't know much this file...)


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] pm_qos: remove BKL
  2009-08-07  5:54   ` Frederic Weisbecker
@ 2009-08-07 15:08     ` Jonathan Corbet
  2009-08-08  0:31       ` Frederic Weisbecker
  0 siblings, 1 reply; 9+ messages in thread
From: Jonathan Corbet @ 2009-08-07 15:08 UTC (permalink / raw)
  To: Frederic Weisbecker; +Cc: LKML, Ingo Molnar, Mark Gross

On Fri, 7 Aug 2009 07:54:13 +0200
Frederic Weisbecker <fweisbec@gmail.com> wrote:

> May be the last doubt could be the blocking_notifier_call_chain() call from
> update_target(). Not sure if these notifier handlers can expect to be called
> concurrently?

I will confess that I hadn't audited the notifiers.  One could easily
argue that concurrent calls to update_target() are entirely possible
with the current code (only one of the callers had BKL protection),
but, then, I'm supposed to be trying to make things better.

The notifier call chain is already protected against concurrent
modification, but, since an rwsem is used, concurrent calls to the
notifiers themselves are possible.  A quick grep shows that, in 2.6.31-rc5,
there is exactly one notifier registered.  It's in
drivers/cpuidle/cpuidle.c; here's the whole thing:

static void smp_callback(void *v)
{
	/* we already woke the CPU up, nothing more to do */
}

After deep meditation on possible race condition scenarios, I am force to
conclude that this particular notifier already has all of the protection it
needs, and that any extra locking is likely to be superfluous.

Thanks for looking at the patch,

jon

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] pm_qos: remove BKL
  2009-08-07 15:08     ` Jonathan Corbet
@ 2009-08-08  0:31       ` Frederic Weisbecker
  0 siblings, 0 replies; 9+ messages in thread
From: Frederic Weisbecker @ 2009-08-08  0:31 UTC (permalink / raw)
  To: Jonathan Corbet, Ingo Molnar; +Cc: LKML, Mark Gross

On Fri, Aug 07, 2009 at 09:08:18AM -0600, Jonathan Corbet wrote:
> On Fri, 7 Aug 2009 07:54:13 +0200
> Frederic Weisbecker <fweisbec@gmail.com> wrote:
> 
> > May be the last doubt could be the blocking_notifier_call_chain() call from
> > update_target(). Not sure if these notifier handlers can expect to be called
> > concurrently?
> 
> I will confess that I hadn't audited the notifiers.  One could easily
> argue that concurrent calls to update_target() are entirely possible
> with the current code (only one of the callers had BKL protection),
> but, then, I'm supposed to be trying to make things better.
> 
> The notifier call chain is already protected against concurrent
> modification, but, since an rwsem is used, concurrent calls to the
> notifiers themselves are possible.  A quick grep shows that, in 2.6.31-rc5,
> there is exactly one notifier registered.  It's in
> drivers/cpuidle/cpuidle.c; here's the whole thing:
> 
> static void smp_callback(void *v)
> {
> 	/* we already woke the CPU up, nothing more to do */
> }
> 
> After deep meditation on possible race condition scenarios, I am force to
> conclude that this particular notifier already has all of the protection it
> needs, and that any extra locking is likely to be superfluous.


Hehe :-)

So it would be nice to apply these patches.
Ingo?

 
> Thanks for looking at the patch,
> 
> jon


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-08-08  0:31 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-06 19:58 [PATCH 0/2] pm_qos: BKL removal and cleanup Jonathan Corbet
2009-08-06 19:59 ` [PATCH 1/2] pm_qos: remove BKL Jonathan Corbet
2009-08-07  2:03   ` Frederic Weisbecker
2009-08-07  5:54   ` Frederic Weisbecker
2009-08-07 15:08     ` Jonathan Corbet
2009-08-08  0:31       ` Frederic Weisbecker
2009-08-06 20:01 ` [PATCH 2/2] pm_qos: clean up racy "name" variable Jonathan Corbet
2009-08-07  2:05 ` Jonathan Corbet
2009-08-07  6:03   ` Frederic Weisbecker

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox