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:[email protected]] 
Sent: 2013年8月30日 20:01
To: Daniel Fu
Cc: [email protected]; [email protected]; 
[email protected]; 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 <[email protected]>
> ---
>  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.

Reply via email to