Received: by 10.192.165.156 with SMTP id m28csp176204imm; Thu, 12 Apr 2018 19:24:29 -0700 (PDT) X-Google-Smtp-Source: AIpwx48TW+OkFrUku8UzfVWxvrkdCyR+AcuoyqRcDpRlYG80wYZn8UTuvJm2np7/vq/tRa/yzrLQ X-Received: by 2002:a17:902:6d0f:: with SMTP id s15-v6mr3401437plk.241.1523586269599; Thu, 12 Apr 2018 19:24:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523586269; cv=none; d=google.com; s=arc-20160816; b=rN+l/T02dtoziG1aqzM0lK3a3/IdEbTkMYbc4P85M4EBTI3aROLskXS7JdJQY6avTo 9Ge6eCeuwYICbdBjPYcBAD2VKPNUbGuYhrFPWEvYWym4kKaPCqaPjcawbqP4EQEN+Iz/ UyGRahmvFnL8vZfNuFJEYDHSY0K//AvihQMNZPzTpzSUs9fKv4kFd7bb/zXuqEDfgYET kBwMgBnRm0LE3UvgUCyVLz1g9RP36zjtHpJEKGpaWWD88l95wzBQpJbVZgnEXI49+b54 /nVmh0HTV9mOLJThW/uRbHrFOD/Lj565Gr7lLfkspvfMgBhxG5tGAcu2r+uXhux9J/S/ OJqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:in-reply-to :mime-version:user-agent:date:message-id:from:cc:references:to :subject:dkim-signature:arc-authentication-results; bh=RFlHj0tnwZF7iNdnE3ZGBj/ZyP1eHcAhcYkNG1hBUTI=; b=Wh5j/JBmLmCT7FajbTNGi38MFSSV2y7KCVrIKVVmmxbjoOnXgkwY1ejNugY4pAHsqI sHnkVhv2h3MKkk0w56D0gixFl4ky4sbdIji01lTsiL1+23liUEGOgPEnNuxQu92bffTg XoYK3z4jJBqBLL6PTdX09gL+Pqs0s18S/t39ea/2nJpAQIpRNHZ2Ausg+dJIOyRKirHQ 8N6QxKzwqS/00p2K8ah5YvjdVMMV/sELt9UlXTGIElqiLrIDaX0pzgmX2aoKJVuYOM1m xzBvYwM3pGcNyyWcPAyLsf8gQ0LChbyZotcb58LkyLKQ+QYJ7lA435fdz65l6g+Ao91r zVSg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=pR3EQmkV; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i7si3110439pgq.583.2018.04.12.19.24.15; Thu, 12 Apr 2018 19:24:29 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=pR3EQmkV; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752920AbeDMCPq (ORCPT + 99 others); Thu, 12 Apr 2018 22:15:46 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:39894 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752077AbeDMCPo (ORCPT ); Thu, 12 Apr 2018 22:15:44 -0400 Received: by mail-pg0-f67.google.com with SMTP id b9so1230031pgf.6; Thu, 12 Apr 2018 19:15:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=RFlHj0tnwZF7iNdnE3ZGBj/ZyP1eHcAhcYkNG1hBUTI=; b=pR3EQmkVu+bsvl30uPZwQ4eILDkp1NovHAxeL0GMhSkGj+29l0ajjDh0wd3TFhq8Df W+HMJqAjM0aHaEGQhvdMyP3lZyyCUimXZIp2Jwnpnd19c/Oon7PjeTJU7P+Hc1J+uFlm sZE+oqRtCv479nWIZBLiF2mXKeAZcqpP6P6mq7t2UjZ7HO9dr+rNyZyX8jp+yKPjcPNx GW9FlZb8NQyBv9Iz7PIP+AznMYpoxtfsEHjOwDH22mNB6w2FmMuoJJ4b60pJPNYHZGZ7 IVPqDdvUYapnTEabv0mzKCYzaQErBeOfgHuvGBUydBMrKNSOI8r5DVNEIALyqGUbh/fM f3tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=RFlHj0tnwZF7iNdnE3ZGBj/ZyP1eHcAhcYkNG1hBUTI=; b=fZZQdcIEmAr4UICyhu5yBH0kwN3PLhOBbA4x/G5oX4GPPSe28kFf2ezVKbkiShjspB AY7VYV1HEtABzSJsl7CRpT4Dqnt1aGLToL/lRif1mKlxNCZfl8q+VpFUvFuaA6lbEomo fkeui2HZtqg3fg0wpV3j+woro5sO0vfscbaHk4OFZpLjfwrb/G/rzfi4gwoWHYACTn0H rbjEAvj6b5dN7YrVy1NY1LEMOaz18a6aaqA3r7GsdqBWRLJy0GK3gTC7mjcxLk3Xw8I2 44bIBz2dNJXT6OdmnoC6VOVAqFPw9M3n9tqWg5adqlMzF2uUMjPQ/MhzP6YqJ0z7HbFG leog== X-Gm-Message-State: ALQs6tARb6dOy3Oy5U6eCavZD6XGCA1yR8qbyg2b0hqEr1gOIbVhjv6a fYJPYowB/4p84BiOS5xCRK9z6A== X-Received: by 10.101.75.66 with SMTP id k2mr2545998pgt.66.1523585743951; Thu, 12 Apr 2018 19:15:43 -0700 (PDT) Received: from [192.168.0.102] ([106.51.29.61]) by smtp.gmail.com with ESMTPSA id k73sm9521427pgc.55.2018.04.12.19.15.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Apr 2018 19:15:43 -0700 (PDT) Subject: Re: [PATCH] PM / devfreq: use put_device() instead of kfree() To: Chanwoo Choi , myungjoo.ham@samsung.com, kyungmin.park@samsung.com References: <5AD001C5.2040406@samsung.com> <5AD0041D.2050506@samsung.com> Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org From: arvindY Message-ID: <5AD012CB.7030003@gmail.com> Date: Fri, 13 Apr 2018 07:45:39 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <5AD0041D.2050506@samsung.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Chanwoo, On Friday 13 April 2018 06:43 AM, Chanwoo Choi wrote: > On 2018년 04월 13일 10:03, Chanwoo Choi wrote: >> Hi, >> >> I'm sorry for the late reply. >> >> On 2018년 03월 30일 20:44, Arvind Yadav wrote: >>> Never directly free @dev after calling device_register() or >>> device_unregister(), even if device_register() returned an error. >>> Always use put_device() to give up the reference initialized. >>> >>> Signed-off-by: Arvind Yadav >>> --- >>> drivers/devfreq/devfreq.c | 4 +++- >>> 1 file changed, 3 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c >>> index fe2af6a..a225b94 100644 >>> --- a/drivers/devfreq/devfreq.c >>> +++ b/drivers/devfreq/devfreq.c >>> @@ -625,7 +625,8 @@ struct devfreq *devfreq_add_device(struct device *dev, >>> err = device_register(&devfreq->dev); >>> if (err) { >>> mutex_unlock(&devfreq->lock); >>> - goto err_dev; >>> + put_device(&devfreq->dev); >>> + goto err_out; >> why do you change the goto postion? >> err_out is correct to free the memory of devfreq instance. > Sorry. err_dev is correct instead of err_out. If you will see the comment for device_register(drivers/base/core.c) there is mentioned that 'NOTE: _Never_ directly free @dev after calling this function, even if it returned an error! Always use put_device() to give up the reference initialized in this function instead. Here put_device() will decrement the last reference and then free the memory by calling dev->release. Internally put_device() -> kobject_put() -> kobject_cleanup() which is responsible to call 'dev -> release' and also free other kobject resources. We are releasing devfreq in devfreq_dev_release(). So no need to call kfree() again. It'll be redundant. 'err_out' is correct. > >>> } >>> >>> devfreq->trans_table = devm_kzalloc(&devfreq->dev, >>> @@ -671,6 +672,7 @@ struct devfreq *devfreq_add_device(struct device *dev, >>> mutex_unlock(&devfreq_list_lock); >>> >>> device_unregister(&devfreq->dev); >>> + devfreq = NULL; >> It is wrong. If you initialize the devfreq as NULL, >> never free the 'devfreq' instance. No need to release memory after device_unregister(). driver core will take care of this. It will release memory So no need to call free again. >> >>> err_dev: >>> if (devfreq) >>> kfree(devfreq); >>> >> > ~arvind