lkml.org 
[lkml]   [2013]   [Aug]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Date
SubjectRE: [PATCH] cpuidle: Check cpuidle driver before add refcount
X-NVConfidentiality: public

In SMP, When doing the cpuidle driver registration. There maybe only 1 cpu have register cpuidle(CPU0),
but In the process of registration cpuidle driver, the scheduler maybe schedule the process to the other CPU (eg. CPU0 have heay load, migrate to CPU1)
cpuidle_get_driver() --> get_cpu() , will get CPU1, if CPU1 didn't register cpuidle driver, Will get NULL.

I know we should prevent the registration migrate to the other CPU, but we should check drv before add refcount to prevent kernel panic at least, Right?

Best Regards,
Daniel

-----Original Message-----
From: Rafael J. Wysocki [mailto:rjw@sisk.pl]
Sent: 2013年8月30日 20:01
To: Daniel Fu
Cc: daniel.lezcano@linaro.org; linux-pm@vger.kernel.org; linux-kernel@vger.kernel.org; Johnny Qiu
Subject: Re: [PATCH] cpuidle: Check cpuidle driver before add refcount

On Friday, August 30, 2013 07:48:22 PM Daniel Fu wrote:
> If the current CPU has no cpuidle driver, drv will be NULL.
> Check if we get drv successfully before add refount to prevent Kernel
> panic.

What is the actual scenario that may lead to this panic?

Rafael


> Signed-off-by: Daniel Fu <danifu@nvidia.com>
> ---
> drivers/cpuidle/driver.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c index
> 3ac499d..6e11701 100644
> --- a/drivers/cpuidle/driver.c
> +++ b/drivers/cpuidle/driver.c
> @@ -331,7 +331,8 @@ struct cpuidle_driver *cpuidle_driver_ref(void)
> spin_lock(&cpuidle_driver_lock);
>
> drv = cpuidle_get_driver();
> - drv->refcnt++;
> + if (drv)
> + drv->refcnt++;
>
> spin_unlock(&cpuidle_driver_lock);
> return drv;
>
--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
\
 
 \ /
  Last update: 2013-08-30 14:41    [W:0.054 / U:0.464 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site