From: Wang Qing <wangqing@xxxxxxxx> of_find_device_by_node() takes a reference to the embedded struct device which needs to be dropped when error return. Signed-off-by: Wang Qing <wangqing@xxxxxxxx> --- drivers/cpuidle/cpuidle-qcom-spm.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/cpuidle/cpuidle-qcom-spm.c b/drivers/cpuidle/cpuidle-qcom-spm.c index 01e7791..6638c1d --- a/drivers/cpuidle/cpuidle-qcom-spm.c +++ b/drivers/cpuidle/cpuidle-qcom-spm.c @@ -107,12 +107,16 @@ static int spm_cpuidle_register(struct device *cpuidle_dev, int cpu) return -ENODEV; data = devm_kzalloc(cpuidle_dev, sizeof(*data), GFP_KERNEL); - if (!data) + if (!data) { + put_device(&pdev->dev); return -ENOMEM; + } data->spm = dev_get_drvdata(&pdev->dev); - if (!data->spm) + if (!data->spm) { + put_device(&pdev->dev); return -EINVAL; + } data->cpuidle_driver = qcom_spm_idle_driver; data->cpuidle_driver.cpumask = (struct cpumask *)cpumask_of(cpu); -- 2.7.4