All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-stable-rc:linux-4.9.y 9056/9999] drivers/devfreq/rk3399_dmc.c:416:17: sparse: sparse: context imbalance in 'rk3399_dmcfreq_probe' - unexpected unlock
@ 2020-11-13 18:35 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2020-11-13 18:35 UTC (permalink / raw)
  To: kbuild

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

CC: kbuild-all(a)lists.01.org
TO: Chanwoo Choi <cw00.choi@samsung.com>
CC: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
CC: Sasha Levin <alexander.levin@microsoft.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.9.y
head:   6940a98776c9014fdcc806e39ab0ebc8316cf241
commit: c673faa159f76a78170a280b229beed6526b05bc [9056/9999] PM / devfreq: rk3399_dmc: Add COMPILE_TEST and HAVE_ARM_SMCCC dependency
:::::: branch date: 5 months ago
:::::: commit date: 9 months ago
config: arm64-randconfig-s031-20201111 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 7.5.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-107-gaf3512a6-dirty
        # https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git/commit/?id=c673faa159f76a78170a280b229beed6526b05bc
        git remote add linux-stable-rc https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
        git fetch --no-tags linux-stable-rc linux-4.9.y
        git checkout c673faa159f76a78170a280b229beed6526b05bc
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-7.5.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arm64 

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


"sparse warnings: (new ones prefixed by >>)"
>> drivers/devfreq/rk3399_dmc.c:416:17: sparse: sparse: context imbalance in 'rk3399_dmcfreq_probe' - unexpected unlock

vim +/rk3399_dmcfreq_probe +416 drivers/devfreq/rk3399_dmc.c

5a893e31a636cca Lin Huang 2016-09-05  332  
5a893e31a636cca Lin Huang 2016-09-05  333  static int rk3399_dmcfreq_probe(struct platform_device *pdev)
5a893e31a636cca Lin Huang 2016-09-05  334  {
5a893e31a636cca Lin Huang 2016-09-05  335  	struct arm_smccc_res res;
5a893e31a636cca Lin Huang 2016-09-05  336  	struct device *dev = &pdev->dev;
5a893e31a636cca Lin Huang 2016-09-05  337  	struct device_node *np = pdev->dev.of_node;
5a893e31a636cca Lin Huang 2016-09-05  338  	struct rk3399_dmcfreq *data;
5a893e31a636cca Lin Huang 2016-09-05  339  	int ret, irq, index, size;
5a893e31a636cca Lin Huang 2016-09-05  340  	uint32_t *timing;
5a893e31a636cca Lin Huang 2016-09-05  341  	struct dev_pm_opp *opp;
5a893e31a636cca Lin Huang 2016-09-05  342  
5a893e31a636cca Lin Huang 2016-09-05  343  	irq = platform_get_irq(pdev, 0);
5a893e31a636cca Lin Huang 2016-09-05  344  	if (irq < 0) {
5a893e31a636cca Lin Huang 2016-09-05  345  		dev_err(&pdev->dev, "Cannot get the dmc interrupt resource\n");
5a893e31a636cca Lin Huang 2016-09-05  346  		return -EINVAL;
5a893e31a636cca Lin Huang 2016-09-05  347  	}
5a893e31a636cca Lin Huang 2016-09-05  348  	data = devm_kzalloc(dev, sizeof(struct rk3399_dmcfreq), GFP_KERNEL);
5a893e31a636cca Lin Huang 2016-09-05  349  	if (!data)
5a893e31a636cca Lin Huang 2016-09-05  350  		return -ENOMEM;
5a893e31a636cca Lin Huang 2016-09-05  351  
5a893e31a636cca Lin Huang 2016-09-05  352  	mutex_init(&data->lock);
5a893e31a636cca Lin Huang 2016-09-05  353  
5a893e31a636cca Lin Huang 2016-09-05  354  	data->vdd_center = devm_regulator_get(dev, "center");
5a893e31a636cca Lin Huang 2016-09-05  355  	if (IS_ERR(data->vdd_center)) {
5a893e31a636cca Lin Huang 2016-09-05  356  		dev_err(dev, "Cannot get the regulator \"center\"\n");
5a893e31a636cca Lin Huang 2016-09-05  357  		return PTR_ERR(data->vdd_center);
5a893e31a636cca Lin Huang 2016-09-05  358  	}
5a893e31a636cca Lin Huang 2016-09-05  359  
5a893e31a636cca Lin Huang 2016-09-05  360  	data->dmc_clk = devm_clk_get(dev, "dmc_clk");
5a893e31a636cca Lin Huang 2016-09-05  361  	if (IS_ERR(data->dmc_clk)) {
5a893e31a636cca Lin Huang 2016-09-05  362  		dev_err(dev, "Cannot get the clk dmc_clk\n");
5a893e31a636cca Lin Huang 2016-09-05  363  		return PTR_ERR(data->dmc_clk);
5a893e31a636cca Lin Huang 2016-09-05  364  	};
5a893e31a636cca Lin Huang 2016-09-05  365  
5a893e31a636cca Lin Huang 2016-09-05  366  	data->irq = irq;
5a893e31a636cca Lin Huang 2016-09-05  367  	ret = devm_request_irq(dev, irq, rk3399_dmc_irq, 0,
5a893e31a636cca Lin Huang 2016-09-05  368  			       dev_name(dev), data);
5a893e31a636cca Lin Huang 2016-09-05  369  	if (ret) {
5a893e31a636cca Lin Huang 2016-09-05  370  		dev_err(dev, "Failed to request dmc irq: %d\n", ret);
5a893e31a636cca Lin Huang 2016-09-05  371  		return ret;
5a893e31a636cca Lin Huang 2016-09-05  372  	}
5a893e31a636cca Lin Huang 2016-09-05  373  
5a893e31a636cca Lin Huang 2016-09-05  374  	init_waitqueue_head(&data->wait_dcf_queue);
5a893e31a636cca Lin Huang 2016-09-05  375  	data->wait_dcf_flag = 0;
5a893e31a636cca Lin Huang 2016-09-05  376  
5a893e31a636cca Lin Huang 2016-09-05  377  	data->edev = devfreq_event_get_edev_by_phandle(dev, 0);
5a893e31a636cca Lin Huang 2016-09-05  378  	if (IS_ERR(data->edev))
5a893e31a636cca Lin Huang 2016-09-05  379  		return -EPROBE_DEFER;
5a893e31a636cca Lin Huang 2016-09-05  380  
5a893e31a636cca Lin Huang 2016-09-05  381  	ret = devfreq_event_enable_edev(data->edev);
5a893e31a636cca Lin Huang 2016-09-05  382  	if (ret < 0) {
5a893e31a636cca Lin Huang 2016-09-05  383  		dev_err(dev, "failed to enable devfreq-event devices\n");
5a893e31a636cca Lin Huang 2016-09-05  384  		return ret;
5a893e31a636cca Lin Huang 2016-09-05  385  	}
5a893e31a636cca Lin Huang 2016-09-05  386  
5a893e31a636cca Lin Huang 2016-09-05  387  	/*
5a893e31a636cca Lin Huang 2016-09-05  388  	 * Get dram timing and pass it to arm trust firmware,
5a893e31a636cca Lin Huang 2016-09-05  389  	 * the dram drvier in arm trust firmware will get these
5a893e31a636cca Lin Huang 2016-09-05  390  	 * timing and to do dram initial.
5a893e31a636cca Lin Huang 2016-09-05  391  	 */
5a893e31a636cca Lin Huang 2016-09-05  392  	if (!of_get_ddr_timings(&data->timing, np)) {
5a893e31a636cca Lin Huang 2016-09-05  393  		timing = &data->timing.ddr3_speed_bin;
5a893e31a636cca Lin Huang 2016-09-05  394  		size = sizeof(struct dram_timing) / 4;
5a893e31a636cca Lin Huang 2016-09-05  395  		for (index = 0; index < size; index++) {
5a893e31a636cca Lin Huang 2016-09-05  396  			arm_smccc_smc(ROCKCHIP_SIP_DRAM_FREQ, *timing++, index,
5a893e31a636cca Lin Huang 2016-09-05  397  				      ROCKCHIP_SIP_CONFIG_DRAM_SET_PARAM,
5a893e31a636cca Lin Huang 2016-09-05  398  				      0, 0, 0, 0, &res);
5a893e31a636cca Lin Huang 2016-09-05  399  			if (res.a0) {
5a893e31a636cca Lin Huang 2016-09-05  400  				dev_err(dev, "Failed to set dram param: %ld\n",
5a893e31a636cca Lin Huang 2016-09-05  401  					res.a0);
5a893e31a636cca Lin Huang 2016-09-05  402  				return -EINVAL;
5a893e31a636cca Lin Huang 2016-09-05  403  			}
5a893e31a636cca Lin Huang 2016-09-05  404  		}
5a893e31a636cca Lin Huang 2016-09-05  405  	}
5a893e31a636cca Lin Huang 2016-09-05  406  
5a893e31a636cca Lin Huang 2016-09-05  407  	arm_smccc_smc(ROCKCHIP_SIP_DRAM_FREQ, 0, 0,
5a893e31a636cca Lin Huang 2016-09-05  408  		      ROCKCHIP_SIP_CONFIG_DRAM_INIT,
5a893e31a636cca Lin Huang 2016-09-05  409  		      0, 0, 0, 0, &res);
5a893e31a636cca Lin Huang 2016-09-05  410  
5a893e31a636cca Lin Huang 2016-09-05  411  	/*
5a893e31a636cca Lin Huang 2016-09-05  412  	 * We add a devfreq driver to our parent since it has a device tree node
5a893e31a636cca Lin Huang 2016-09-05  413  	 * with operating points.
5a893e31a636cca Lin Huang 2016-09-05  414  	 */
5a893e31a636cca Lin Huang 2016-09-05  415  	if (dev_pm_opp_of_add_table(dev)) {
5a893e31a636cca Lin Huang 2016-09-05 @416  		dev_err(dev, "Invalid operating-points in device tree.\n");
5a893e31a636cca Lin Huang 2016-09-05  417  		rcu_read_unlock();
5a893e31a636cca Lin Huang 2016-09-05  418  		return -EINVAL;
5a893e31a636cca Lin Huang 2016-09-05  419  	}
5a893e31a636cca Lin Huang 2016-09-05  420  
5a893e31a636cca Lin Huang 2016-09-05  421  	of_property_read_u32(np, "upthreshold",
5a893e31a636cca Lin Huang 2016-09-05  422  			     &data->ondemand_data.upthreshold);
5a893e31a636cca Lin Huang 2016-09-05  423  	of_property_read_u32(np, "downdifferential",
5a893e31a636cca Lin Huang 2016-09-05  424  			     &data->ondemand_data.downdifferential);
5a893e31a636cca Lin Huang 2016-09-05  425  
5a893e31a636cca Lin Huang 2016-09-05  426  	data->rate = clk_get_rate(data->dmc_clk);
5a893e31a636cca Lin Huang 2016-09-05  427  
5a893e31a636cca Lin Huang 2016-09-05  428  	rcu_read_lock();
5a893e31a636cca Lin Huang 2016-09-05  429  	opp = devfreq_recommended_opp(dev, &data->rate, 0);
5a893e31a636cca Lin Huang 2016-09-05  430  	if (IS_ERR(opp)) {
5a893e31a636cca Lin Huang 2016-09-05  431  		rcu_read_unlock();
5a893e31a636cca Lin Huang 2016-09-05  432  		return PTR_ERR(opp);
5a893e31a636cca Lin Huang 2016-09-05  433  	}
5a893e31a636cca Lin Huang 2016-09-05  434  	rcu_read_unlock();
5a893e31a636cca Lin Huang 2016-09-05  435  	data->curr_opp = opp;
5a893e31a636cca Lin Huang 2016-09-05  436  
5a893e31a636cca Lin Huang 2016-09-05  437  	rk3399_devfreq_dmc_profile.initial_freq = data->rate;
5a893e31a636cca Lin Huang 2016-09-05  438  
5a893e31a636cca Lin Huang 2016-09-05  439  	data->devfreq = devfreq_add_device(dev,
5a893e31a636cca Lin Huang 2016-09-05  440  					   &rk3399_devfreq_dmc_profile,
5a893e31a636cca Lin Huang 2016-09-05  441  					   "simple_ondemand",
5a893e31a636cca Lin Huang 2016-09-05  442  					   &data->ondemand_data);
5a893e31a636cca Lin Huang 2016-09-05  443  	if (IS_ERR(data->devfreq))
5a893e31a636cca Lin Huang 2016-09-05  444  		return PTR_ERR(data->devfreq);
5a893e31a636cca Lin Huang 2016-09-05  445  	devm_devfreq_register_opp_notifier(dev, data->devfreq);
5a893e31a636cca Lin Huang 2016-09-05  446  
5a893e31a636cca Lin Huang 2016-09-05  447  	data->dev = dev;
5a893e31a636cca Lin Huang 2016-09-05  448  	platform_set_drvdata(pdev, data);
5a893e31a636cca Lin Huang 2016-09-05  449  
5a893e31a636cca Lin Huang 2016-09-05  450  	return 0;
5a893e31a636cca Lin Huang 2016-09-05  451  }
5a893e31a636cca Lin Huang 2016-09-05  452  

:::::: The code at line 416 was first introduced by commit
:::::: 5a893e31a636cca3798af2db5aee8d3d144b1e1e PM / devfreq: rockchip: add devfreq driver for rk3399 dmc

:::::: TO: Lin Huang <hl@rock-chips.com>
:::::: CC: MyungJoo Ham <myungjoo.ham@samsung.com>

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

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 29735 bytes --]

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

only message in thread, other threads:[~2020-11-13 18:35 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-13 18:35 [linux-stable-rc:linux-4.9.y 9056/9999] drivers/devfreq/rk3399_dmc.c:416:17: sparse: sparse: context imbalance in 'rk3399_dmcfreq_probe' - unexpected unlock 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.