All of lore.kernel.org
 help / color / mirror / Atom feed
* [chanwoo:devfreq-testing 2/4] drivers/devfreq/governor_passive.c:346 cpufreq_passive_register_notifier() warn: possible memory leak of 'parent_cpu_data'
@ 2021-12-10 18:23 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-12-10 18:23 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 7080 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Saravana Kannan <skannan@codeaurora.org>
CC: Chanwoo Choi <cw00.choi@samsung.com>
CC: Sibi Sankar <sibis@codeaurora.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git devfreq-testing
head:   5857e3d1820d85e10321ec180ed88e780fd0ec3e
commit: d678890dcdf858c25d2789793a35a81c4311e972 [2/4] PM / devfreq: Add cpu based scaling support to passive governor
:::::: branch date: 12 hours ago
:::::: commit date: 12 hours ago
config: x86_64-randconfig-m001-20211210 (https://download.01.org/0day-ci/archive/20211211/202112110259.0FocPe7i-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
drivers/devfreq/governor_passive.c:346 cpufreq_passive_register_notifier() warn: possible memory leak of 'parent_cpu_data'

vim +/parent_cpu_data +346 drivers/devfreq/governor_passive.c

d678890dcdf858 Saravana Kannan 2021-03-02  269  
d678890dcdf858 Saravana Kannan 2021-03-02  270  static int cpufreq_passive_register_notifier(struct devfreq *devfreq)
d678890dcdf858 Saravana Kannan 2021-03-02  271  {
d678890dcdf858 Saravana Kannan 2021-03-02  272  	struct devfreq_passive_data *p_data
d678890dcdf858 Saravana Kannan 2021-03-02  273  			= (struct devfreq_passive_data *)devfreq->data;
d678890dcdf858 Saravana Kannan 2021-03-02  274  	struct device *dev = devfreq->dev.parent;
d678890dcdf858 Saravana Kannan 2021-03-02  275  	struct opp_table *opp_table = NULL;
d678890dcdf858 Saravana Kannan 2021-03-02  276  	struct devfreq_cpu_data *parent_cpu_data;
d678890dcdf858 Saravana Kannan 2021-03-02  277  	struct cpufreq_policy *policy;
d678890dcdf858 Saravana Kannan 2021-03-02  278  	struct device *cpu_dev;
d678890dcdf858 Saravana Kannan 2021-03-02  279  	unsigned int cpu;
d678890dcdf858 Saravana Kannan 2021-03-02  280  	int ret;
d678890dcdf858 Saravana Kannan 2021-03-02  281  
d678890dcdf858 Saravana Kannan 2021-03-02  282  	p_data->nb.notifier_call = cpufreq_passive_notifier_call;
d678890dcdf858 Saravana Kannan 2021-03-02  283  	ret = cpufreq_register_notifier(&p_data->nb, CPUFREQ_TRANSITION_NOTIFIER);
d678890dcdf858 Saravana Kannan 2021-03-02  284  	if (ret) {
d678890dcdf858 Saravana Kannan 2021-03-02  285  		dev_err(dev, "failed to register cpufreq notifier\n");
d678890dcdf858 Saravana Kannan 2021-03-02  286  		p_data->nb.notifier_call = NULL;
d678890dcdf858 Saravana Kannan 2021-03-02  287  		goto err;
d678890dcdf858 Saravana Kannan 2021-03-02  288  	}
d678890dcdf858 Saravana Kannan 2021-03-02  289  
d678890dcdf858 Saravana Kannan 2021-03-02  290  	for_each_possible_cpu(cpu) {
d678890dcdf858 Saravana Kannan 2021-03-02  291  		if (p_data->cpu_data[cpu])
d678890dcdf858 Saravana Kannan 2021-03-02  292  			continue;
d678890dcdf858 Saravana Kannan 2021-03-02  293  
d678890dcdf858 Saravana Kannan 2021-03-02  294  		policy = cpufreq_cpu_get(cpu);
d678890dcdf858 Saravana Kannan 2021-03-02  295  		if (!policy) {
d678890dcdf858 Saravana Kannan 2021-03-02  296  			ret = -EPROBE_DEFER;
d678890dcdf858 Saravana Kannan 2021-03-02  297  			goto err;
d678890dcdf858 Saravana Kannan 2021-03-02  298  		}
d678890dcdf858 Saravana Kannan 2021-03-02  299  
d678890dcdf858 Saravana Kannan 2021-03-02  300  		parent_cpu_data = kzalloc(sizeof(*parent_cpu_data),
d678890dcdf858 Saravana Kannan 2021-03-02  301  						GFP_KERNEL);
d678890dcdf858 Saravana Kannan 2021-03-02  302  		if (!parent_cpu_data) {
d678890dcdf858 Saravana Kannan 2021-03-02  303  			cpufreq_cpu_put(policy);
d678890dcdf858 Saravana Kannan 2021-03-02  304  			ret = -ENOMEM;
d678890dcdf858 Saravana Kannan 2021-03-02  305  			goto err;
d678890dcdf858 Saravana Kannan 2021-03-02  306  		}
d678890dcdf858 Saravana Kannan 2021-03-02  307  
d678890dcdf858 Saravana Kannan 2021-03-02  308  		cpu_dev = get_cpu_device(cpu);
d678890dcdf858 Saravana Kannan 2021-03-02  309  		if (!cpu_dev) {
d678890dcdf858 Saravana Kannan 2021-03-02  310  			dev_err(dev, "failed to get cpu device\n");
d678890dcdf858 Saravana Kannan 2021-03-02  311  			cpufreq_cpu_put(policy);
d678890dcdf858 Saravana Kannan 2021-03-02  312  			ret = -ENODEV;
d678890dcdf858 Saravana Kannan 2021-03-02  313  			goto err;
d678890dcdf858 Saravana Kannan 2021-03-02  314  		}
d678890dcdf858 Saravana Kannan 2021-03-02  315  
d678890dcdf858 Saravana Kannan 2021-03-02  316  		opp_table = dev_pm_opp_get_opp_table(cpu_dev);
d678890dcdf858 Saravana Kannan 2021-03-02  317  		if (IS_ERR(opp_table)) {
d678890dcdf858 Saravana Kannan 2021-03-02  318  			dev_err(dev, "failed to get opp_table of cpu%d\n", cpu);
d678890dcdf858 Saravana Kannan 2021-03-02  319  			cpufreq_cpu_put(policy);
d678890dcdf858 Saravana Kannan 2021-03-02  320  			ret = PTR_ERR(opp_table);
d678890dcdf858 Saravana Kannan 2021-03-02  321  			goto err;
d678890dcdf858 Saravana Kannan 2021-03-02  322  		}
d678890dcdf858 Saravana Kannan 2021-03-02  323  
d678890dcdf858 Saravana Kannan 2021-03-02  324  		parent_cpu_data->dev = cpu_dev;
d678890dcdf858 Saravana Kannan 2021-03-02  325  		parent_cpu_data->opp_table = opp_table;
d678890dcdf858 Saravana Kannan 2021-03-02  326  		parent_cpu_data->first_cpu = cpumask_first(policy->related_cpus);
d678890dcdf858 Saravana Kannan 2021-03-02  327  		parent_cpu_data->cur_freq = policy->cur;
d678890dcdf858 Saravana Kannan 2021-03-02  328  		parent_cpu_data->min_freq = policy->cpuinfo.min_freq;
d678890dcdf858 Saravana Kannan 2021-03-02  329  		parent_cpu_data->max_freq = policy->cpuinfo.max_freq;
d678890dcdf858 Saravana Kannan 2021-03-02  330  
d678890dcdf858 Saravana Kannan 2021-03-02  331  		p_data->cpu_data[cpu] = parent_cpu_data;
d678890dcdf858 Saravana Kannan 2021-03-02  332  		cpufreq_cpu_put(policy);
d678890dcdf858 Saravana Kannan 2021-03-02  333  	}
d678890dcdf858 Saravana Kannan 2021-03-02  334  
d678890dcdf858 Saravana Kannan 2021-03-02  335  	mutex_lock(&devfreq->lock);
d678890dcdf858 Saravana Kannan 2021-03-02  336  	ret = devfreq_update_target(devfreq, 0L);
d678890dcdf858 Saravana Kannan 2021-03-02  337  	mutex_unlock(&devfreq->lock);
d678890dcdf858 Saravana Kannan 2021-03-02  338  	if (ret)
d678890dcdf858 Saravana Kannan 2021-03-02  339  		dev_err(dev, "failed to update the frequency\n");
d678890dcdf858 Saravana Kannan 2021-03-02  340  
d678890dcdf858 Saravana Kannan 2021-03-02  341  	return ret;
d678890dcdf858 Saravana Kannan 2021-03-02  342  
d678890dcdf858 Saravana Kannan 2021-03-02  343  err:
d678890dcdf858 Saravana Kannan 2021-03-02  344  	WARN_ON(cpufreq_passive_unregister_notifier(devfreq));
d678890dcdf858 Saravana Kannan 2021-03-02  345  
d678890dcdf858 Saravana Kannan 2021-03-02 @346  	return ret;
d678890dcdf858 Saravana Kannan 2021-03-02  347  }
d678890dcdf858 Saravana Kannan 2021-03-02  348  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-12-10 18:23 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-10 18:23 [chanwoo:devfreq-testing 2/4] drivers/devfreq/governor_passive.c:346 cpufreq_passive_register_notifier() warn: possible memory leak of 'parent_cpu_data' kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.