All of lore.kernel.org
 help / color / mirror / Atom feed
* drivers/dma/ti/k3-udma.c:4236 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
@ 2021-03-26  0:09 kernel test robot
  0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-03-26  0:09 UTC (permalink / raw)
  To: kbuild

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

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Peter Ujfalusi <peter.ujfalusi@ti.com>
CC: Vinod Koul <vkoul@kernel.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   002322402dafd846c424ffa9240a937f49b48c42
commit: 017794739702d444ca48115ff0fcdce19edb5559 dmaengine: ti: k3-udma: Initial support for K3 BCDMA
date:   3 months ago
:::::: branch date: 5 hours ago
:::::: commit date: 3 months ago
config: arm64-randconfig-m031-20210325 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 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>

New smatch warnings:
drivers/dma/ti/k3-udma.c:4236 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()

Old smatch warnings:
drivers/dma/ti/k3-udma.c:4113 udma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4126 udma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4251 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4266 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()

vim +/rm_res +4236 drivers/dma/ti/k3-udma.c

017794739702d4 Peter Ujfalusi 2020-12-08  4169  
017794739702d4 Peter Ujfalusi 2020-12-08  4170  static int bcdma_setup_resources(struct udma_dev *ud)
017794739702d4 Peter Ujfalusi 2020-12-08  4171  {
017794739702d4 Peter Ujfalusi 2020-12-08  4172  	int ret, i, j;
017794739702d4 Peter Ujfalusi 2020-12-08  4173  	struct device *dev = ud->dev;
017794739702d4 Peter Ujfalusi 2020-12-08  4174  	struct ti_sci_resource *rm_res, irq_res;
017794739702d4 Peter Ujfalusi 2020-12-08  4175  	struct udma_tisci_rm *tisci_rm = &ud->tisci_rm;
017794739702d4 Peter Ujfalusi 2020-12-08  4176  	const struct udma_oes_offsets *oes = &ud->soc_data->oes;
017794739702d4 Peter Ujfalusi 2020-12-08  4177  
017794739702d4 Peter Ujfalusi 2020-12-08  4178  	ud->bchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->bchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4179  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4180  	ud->bchans = devm_kcalloc(dev, ud->bchan_cnt, sizeof(*ud->bchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4181  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4182  	ud->tchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->tchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4183  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4184  	ud->tchans = devm_kcalloc(dev, ud->tchan_cnt, sizeof(*ud->tchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4185  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4186  	ud->rchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->rchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4187  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4188  	ud->rchans = devm_kcalloc(dev, ud->rchan_cnt, sizeof(*ud->rchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4189  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4190  	/* BCDMA do not really have flows, but the driver expect it */
017794739702d4 Peter Ujfalusi 2020-12-08  4191  	ud->rflow_in_use = devm_kcalloc(dev, BITS_TO_LONGS(ud->rchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4192  					sizeof(unsigned long),
017794739702d4 Peter Ujfalusi 2020-12-08  4193  					GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4194  	ud->rflows = devm_kcalloc(dev, ud->rchan_cnt, sizeof(*ud->rflows),
017794739702d4 Peter Ujfalusi 2020-12-08  4195  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4196  
017794739702d4 Peter Ujfalusi 2020-12-08  4197  	if (!ud->bchan_map || !ud->tchan_map || !ud->rchan_map ||
017794739702d4 Peter Ujfalusi 2020-12-08  4198  	    !ud->rflow_in_use || !ud->bchans || !ud->tchans || !ud->rchans ||
017794739702d4 Peter Ujfalusi 2020-12-08  4199  	    !ud->rflows)
017794739702d4 Peter Ujfalusi 2020-12-08  4200  		return -ENOMEM;
017794739702d4 Peter Ujfalusi 2020-12-08  4201  
017794739702d4 Peter Ujfalusi 2020-12-08  4202  	/* TPL is not yet supported for BCDMA */
017794739702d4 Peter Ujfalusi 2020-12-08  4203  	ud->tpl_levels = 1;
017794739702d4 Peter Ujfalusi 2020-12-08  4204  
017794739702d4 Peter Ujfalusi 2020-12-08  4205  	/* Get resource ranges from tisci */
017794739702d4 Peter Ujfalusi 2020-12-08  4206  	for (i = 0; i < RM_RANGE_LAST; i++) {
017794739702d4 Peter Ujfalusi 2020-12-08  4207  		if (i == RM_RANGE_RFLOW)
017794739702d4 Peter Ujfalusi 2020-12-08  4208  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4209  		if (i == RM_RANGE_BCHAN && ud->bchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4210  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4211  		if (i == RM_RANGE_TCHAN && ud->tchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4212  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4213  		if (i == RM_RANGE_RCHAN && ud->rchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4214  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4215  
017794739702d4 Peter Ujfalusi 2020-12-08  4216  		tisci_rm->rm_ranges[i] =
017794739702d4 Peter Ujfalusi 2020-12-08  4217  			devm_ti_sci_get_of_resource(tisci_rm->tisci, dev,
017794739702d4 Peter Ujfalusi 2020-12-08  4218  						    tisci_rm->tisci_dev_id,
017794739702d4 Peter Ujfalusi 2020-12-08  4219  						    (char *)range_names[i]);
017794739702d4 Peter Ujfalusi 2020-12-08  4220  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4221  
017794739702d4 Peter Ujfalusi 2020-12-08  4222  	irq_res.sets = 0;
017794739702d4 Peter Ujfalusi 2020-12-08  4223  
017794739702d4 Peter Ujfalusi 2020-12-08  4224  	/* bchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4225  	if (ud->bchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4226  		rm_res = tisci_rm->rm_ranges[RM_RANGE_BCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4227  		if (IS_ERR(rm_res)) {
017794739702d4 Peter Ujfalusi 2020-12-08  4228  			bitmap_zero(ud->bchan_map, ud->bchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4229  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4230  			bitmap_fill(ud->bchan_map, ud->bchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4231  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4232  				udma_mark_resource_ranges(ud, ud->bchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4233  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4234  							  "bchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4235  		}
017794739702d4 Peter Ujfalusi 2020-12-08 @4236  		irq_res.sets += rm_res->sets;
017794739702d4 Peter Ujfalusi 2020-12-08  4237  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4238  
017794739702d4 Peter Ujfalusi 2020-12-08  4239  	/* tchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4240  	if (ud->tchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4241  		rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4242  		if (IS_ERR(rm_res)) {
017794739702d4 Peter Ujfalusi 2020-12-08  4243  			bitmap_zero(ud->tchan_map, ud->tchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4244  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4245  			bitmap_fill(ud->tchan_map, ud->tchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4246  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4247  				udma_mark_resource_ranges(ud, ud->tchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4248  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4249  							  "tchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4250  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4251  		irq_res.sets += rm_res->sets * 2;
017794739702d4 Peter Ujfalusi 2020-12-08  4252  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4253  
017794739702d4 Peter Ujfalusi 2020-12-08  4254  	/* rchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4255  	if (ud->rchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4256  		rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4257  		if (IS_ERR(rm_res)) {
017794739702d4 Peter Ujfalusi 2020-12-08  4258  			bitmap_zero(ud->rchan_map, ud->rchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4259  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4260  			bitmap_fill(ud->rchan_map, ud->rchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4261  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4262  				udma_mark_resource_ranges(ud, ud->rchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4263  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4264  							  "rchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4265  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4266  		irq_res.sets += rm_res->sets * 2;
017794739702d4 Peter Ujfalusi 2020-12-08  4267  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4268  
017794739702d4 Peter Ujfalusi 2020-12-08  4269  	irq_res.desc = kcalloc(irq_res.sets, sizeof(*irq_res.desc), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4270  	if (ud->bchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4271  		rm_res = tisci_rm->rm_ranges[RM_RANGE_BCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4272  		for (i = 0; i < rm_res->sets; i++) {
017794739702d4 Peter Ujfalusi 2020-12-08  4273  			irq_res.desc[i].start = rm_res->desc[i].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4274  						oes->bcdma_bchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4275  			irq_res.desc[i].num = rm_res->desc[i].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4276  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4277  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4278  	if (ud->tchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4279  		rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4280  		for (j = 0; j < rm_res->sets; j++, i += 2) {
017794739702d4 Peter Ujfalusi 2020-12-08  4281  			irq_res.desc[i].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4282  						oes->bcdma_tchan_data;
017794739702d4 Peter Ujfalusi 2020-12-08  4283  			irq_res.desc[i].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4284  
017794739702d4 Peter Ujfalusi 2020-12-08  4285  			irq_res.desc[i + 1].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4286  						oes->bcdma_tchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4287  			irq_res.desc[i + 1].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4288  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4289  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4290  	if (ud->rchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4291  		rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4292  		for (j = 0; j < rm_res->sets; j++, i += 2) {
017794739702d4 Peter Ujfalusi 2020-12-08  4293  			irq_res.desc[i].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4294  						oes->bcdma_rchan_data;
017794739702d4 Peter Ujfalusi 2020-12-08  4295  			irq_res.desc[i].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4296  
017794739702d4 Peter Ujfalusi 2020-12-08  4297  			irq_res.desc[i + 1].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4298  						oes->bcdma_rchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4299  			irq_res.desc[i + 1].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4300  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4301  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4302  
017794739702d4 Peter Ujfalusi 2020-12-08  4303  	ret = ti_sci_inta_msi_domain_alloc_irqs(ud->dev, &irq_res);
017794739702d4 Peter Ujfalusi 2020-12-08  4304  	kfree(irq_res.desc);
017794739702d4 Peter Ujfalusi 2020-12-08  4305  	if (ret) {
017794739702d4 Peter Ujfalusi 2020-12-08  4306  		dev_err(ud->dev, "Failed to allocate MSI interrupts\n");
017794739702d4 Peter Ujfalusi 2020-12-08  4307  		return ret;
017794739702d4 Peter Ujfalusi 2020-12-08  4308  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4309  
017794739702d4 Peter Ujfalusi 2020-12-08  4310  	return 0;
017794739702d4 Peter Ujfalusi 2020-12-08  4311  }
017794739702d4 Peter Ujfalusi 2020-12-08  4312  

---
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: 39816 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* drivers/dma/ti/k3-udma.c:4236 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
@ 2021-03-26  8:25 ` Dan Carpenter
  0 siblings, 0 replies; 4+ messages in thread
From: Dan Carpenter @ 2021-03-26  8:25 UTC (permalink / raw)
  To: kbuild, Peter Ujfalusi; +Cc: lkp, kbuild-all, linux-kernel, Vinod Koul

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   002322402dafd846c424ffa9240a937f49b48c42
commit: 017794739702d444ca48115ff0fcdce19edb5559 dmaengine: ti: k3-udma: Initial support for K3 BCDMA
config: arm64-randconfig-m031-20210325 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 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>

New smatch warnings:
drivers/dma/ti/k3-udma.c:4236 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()

Old smatch warnings:
drivers/dma/ti/k3-udma.c:4113 udma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4126 udma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4251 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4266 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()

vim +/rm_res +4236 drivers/dma/ti/k3-udma.c

017794739702d4 Peter Ujfalusi 2020-12-08  4170  static int bcdma_setup_resources(struct udma_dev *ud)
017794739702d4 Peter Ujfalusi 2020-12-08  4171  {
017794739702d4 Peter Ujfalusi 2020-12-08  4172  	int ret, i, j;
017794739702d4 Peter Ujfalusi 2020-12-08  4173  	struct device *dev = ud->dev;
017794739702d4 Peter Ujfalusi 2020-12-08  4174  	struct ti_sci_resource *rm_res, irq_res;
017794739702d4 Peter Ujfalusi 2020-12-08  4175  	struct udma_tisci_rm *tisci_rm = &ud->tisci_rm;
017794739702d4 Peter Ujfalusi 2020-12-08  4176  	const struct udma_oes_offsets *oes = &ud->soc_data->oes;
017794739702d4 Peter Ujfalusi 2020-12-08  4177  
017794739702d4 Peter Ujfalusi 2020-12-08  4178  	ud->bchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->bchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4179  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4180  	ud->bchans = devm_kcalloc(dev, ud->bchan_cnt, sizeof(*ud->bchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4181  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4182  	ud->tchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->tchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4183  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4184  	ud->tchans = devm_kcalloc(dev, ud->tchan_cnt, sizeof(*ud->tchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4185  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4186  	ud->rchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->rchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4187  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4188  	ud->rchans = devm_kcalloc(dev, ud->rchan_cnt, sizeof(*ud->rchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4189  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4190  	/* BCDMA do not really have flows, but the driver expect it */
017794739702d4 Peter Ujfalusi 2020-12-08  4191  	ud->rflow_in_use = devm_kcalloc(dev, BITS_TO_LONGS(ud->rchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4192  					sizeof(unsigned long),
017794739702d4 Peter Ujfalusi 2020-12-08  4193  					GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4194  	ud->rflows = devm_kcalloc(dev, ud->rchan_cnt, sizeof(*ud->rflows),
017794739702d4 Peter Ujfalusi 2020-12-08  4195  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4196  
017794739702d4 Peter Ujfalusi 2020-12-08  4197  	if (!ud->bchan_map || !ud->tchan_map || !ud->rchan_map ||
017794739702d4 Peter Ujfalusi 2020-12-08  4198  	    !ud->rflow_in_use || !ud->bchans || !ud->tchans || !ud->rchans ||
017794739702d4 Peter Ujfalusi 2020-12-08  4199  	    !ud->rflows)
017794739702d4 Peter Ujfalusi 2020-12-08  4200  		return -ENOMEM;
017794739702d4 Peter Ujfalusi 2020-12-08  4201  
017794739702d4 Peter Ujfalusi 2020-12-08  4202  	/* TPL is not yet supported for BCDMA */
017794739702d4 Peter Ujfalusi 2020-12-08  4203  	ud->tpl_levels = 1;
017794739702d4 Peter Ujfalusi 2020-12-08  4204  
017794739702d4 Peter Ujfalusi 2020-12-08  4205  	/* Get resource ranges from tisci */
017794739702d4 Peter Ujfalusi 2020-12-08  4206  	for (i = 0; i < RM_RANGE_LAST; i++) {
017794739702d4 Peter Ujfalusi 2020-12-08  4207  		if (i == RM_RANGE_RFLOW)
017794739702d4 Peter Ujfalusi 2020-12-08  4208  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4209  		if (i == RM_RANGE_BCHAN && ud->bchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4210  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4211  		if (i == RM_RANGE_TCHAN && ud->tchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4212  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4213  		if (i == RM_RANGE_RCHAN && ud->rchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4214  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4215  
017794739702d4 Peter Ujfalusi 2020-12-08  4216  		tisci_rm->rm_ranges[i] =
017794739702d4 Peter Ujfalusi 2020-12-08  4217  			devm_ti_sci_get_of_resource(tisci_rm->tisci, dev,
017794739702d4 Peter Ujfalusi 2020-12-08  4218  						    tisci_rm->tisci_dev_id,
017794739702d4 Peter Ujfalusi 2020-12-08  4219  						    (char *)range_names[i]);
017794739702d4 Peter Ujfalusi 2020-12-08  4220  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4221  
017794739702d4 Peter Ujfalusi 2020-12-08  4222  	irq_res.sets = 0;
017794739702d4 Peter Ujfalusi 2020-12-08  4223  
017794739702d4 Peter Ujfalusi 2020-12-08  4224  	/* bchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4225  	if (ud->bchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4226  		rm_res = tisci_rm->rm_ranges[RM_RANGE_BCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4227  		if (IS_ERR(rm_res)) {
                                                                           ^^^^^^
This is an error pointer

017794739702d4 Peter Ujfalusi 2020-12-08  4228  			bitmap_zero(ud->bchan_map, ud->bchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4229  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4230  			bitmap_fill(ud->bchan_map, ud->bchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4231  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4232  				udma_mark_resource_ranges(ud, ud->bchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4233  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4234  							  "bchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4235  		}
017794739702d4 Peter Ujfalusi 2020-12-08 @4236  		irq_res.sets += rm_res->sets;
                                                                                ^^^^^^^^^^^^
Boom.  dereference.

017794739702d4 Peter Ujfalusi 2020-12-08  4237  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4238  
017794739702d4 Peter Ujfalusi 2020-12-08  4239  	/* tchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4240  	if (ud->tchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4241  		rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4242  		if (IS_ERR(rm_res)) {
017794739702d4 Peter Ujfalusi 2020-12-08  4243  			bitmap_zero(ud->tchan_map, ud->tchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4244  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4245  			bitmap_fill(ud->tchan_map, ud->tchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4246  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4247  				udma_mark_resource_ranges(ud, ud->tchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4248  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4249  							  "tchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4250  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4251  		irq_res.sets += rm_res->sets * 2;
                                                                                ^^^^^^^^^^^^

017794739702d4 Peter Ujfalusi 2020-12-08  4252  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4253  
017794739702d4 Peter Ujfalusi 2020-12-08  4254  	/* rchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4255  	if (ud->rchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4256  		rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4257  		if (IS_ERR(rm_res)) {
017794739702d4 Peter Ujfalusi 2020-12-08  4258  			bitmap_zero(ud->rchan_map, ud->rchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4259  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4260  			bitmap_fill(ud->rchan_map, ud->rchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4261  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4262  				udma_mark_resource_ranges(ud, ud->rchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4263  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4264  							  "rchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4265  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4266  		irq_res.sets += rm_res->sets * 2;
017794739702d4 Peter Ujfalusi 2020-12-08  4267  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4268  
017794739702d4 Peter Ujfalusi 2020-12-08  4269  	irq_res.desc = kcalloc(irq_res.sets, sizeof(*irq_res.desc), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4270  	if (ud->bchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4271  		rm_res = tisci_rm->rm_ranges[RM_RANGE_BCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4272  		for (i = 0; i < rm_res->sets; i++) {
017794739702d4 Peter Ujfalusi 2020-12-08  4273  			irq_res.desc[i].start = rm_res->desc[i].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4274  						oes->bcdma_bchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4275  			irq_res.desc[i].num = rm_res->desc[i].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4276  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4277  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4278  	if (ud->tchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4279  		rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4280  		for (j = 0; j < rm_res->sets; j++, i += 2) {
017794739702d4 Peter Ujfalusi 2020-12-08  4281  			irq_res.desc[i].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4282  						oes->bcdma_tchan_data;
017794739702d4 Peter Ujfalusi 2020-12-08  4283  			irq_res.desc[i].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4284  
017794739702d4 Peter Ujfalusi 2020-12-08  4285  			irq_res.desc[i + 1].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4286  						oes->bcdma_tchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4287  			irq_res.desc[i + 1].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4288  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4289  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4290  	if (ud->rchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4291  		rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4292  		for (j = 0; j < rm_res->sets; j++, i += 2) {
017794739702d4 Peter Ujfalusi 2020-12-08  4293  			irq_res.desc[i].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4294  						oes->bcdma_rchan_data;
017794739702d4 Peter Ujfalusi 2020-12-08  4295  			irq_res.desc[i].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4296  
017794739702d4 Peter Ujfalusi 2020-12-08  4297  			irq_res.desc[i + 1].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4298  						oes->bcdma_rchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4299  			irq_res.desc[i + 1].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4300  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4301  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4302  
017794739702d4 Peter Ujfalusi 2020-12-08  4303  	ret = ti_sci_inta_msi_domain_alloc_irqs(ud->dev, &irq_res);
017794739702d4 Peter Ujfalusi 2020-12-08  4304  	kfree(irq_res.desc);
017794739702d4 Peter Ujfalusi 2020-12-08  4305  	if (ret) {
017794739702d4 Peter Ujfalusi 2020-12-08  4306  		dev_err(ud->dev, "Failed to allocate MSI interrupts\n");
017794739702d4 Peter Ujfalusi 2020-12-08  4307  		return ret;
017794739702d4 Peter Ujfalusi 2020-12-08  4308  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4309  
017794739702d4 Peter Ujfalusi 2020-12-08  4310  	return 0;
017794739702d4 Peter Ujfalusi 2020-12-08  4311  }

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

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* drivers/dma/ti/k3-udma.c:4236 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
@ 2021-03-26  8:25 ` Dan Carpenter
  0 siblings, 0 replies; 4+ messages in thread
From: Dan Carpenter @ 2021-03-26  8:25 UTC (permalink / raw)
  To: kbuild

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   002322402dafd846c424ffa9240a937f49b48c42
commit: 017794739702d444ca48115ff0fcdce19edb5559 dmaengine: ti: k3-udma: Initial support for K3 BCDMA
config: arm64-randconfig-m031-20210325 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 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>

New smatch warnings:
drivers/dma/ti/k3-udma.c:4236 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()

Old smatch warnings:
drivers/dma/ti/k3-udma.c:4113 udma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4126 udma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4251 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4266 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()

vim +/rm_res +4236 drivers/dma/ti/k3-udma.c

017794739702d4 Peter Ujfalusi 2020-12-08  4170  static int bcdma_setup_resources(struct udma_dev *ud)
017794739702d4 Peter Ujfalusi 2020-12-08  4171  {
017794739702d4 Peter Ujfalusi 2020-12-08  4172  	int ret, i, j;
017794739702d4 Peter Ujfalusi 2020-12-08  4173  	struct device *dev = ud->dev;
017794739702d4 Peter Ujfalusi 2020-12-08  4174  	struct ti_sci_resource *rm_res, irq_res;
017794739702d4 Peter Ujfalusi 2020-12-08  4175  	struct udma_tisci_rm *tisci_rm = &ud->tisci_rm;
017794739702d4 Peter Ujfalusi 2020-12-08  4176  	const struct udma_oes_offsets *oes = &ud->soc_data->oes;
017794739702d4 Peter Ujfalusi 2020-12-08  4177  
017794739702d4 Peter Ujfalusi 2020-12-08  4178  	ud->bchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->bchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4179  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4180  	ud->bchans = devm_kcalloc(dev, ud->bchan_cnt, sizeof(*ud->bchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4181  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4182  	ud->tchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->tchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4183  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4184  	ud->tchans = devm_kcalloc(dev, ud->tchan_cnt, sizeof(*ud->tchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4185  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4186  	ud->rchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->rchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4187  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4188  	ud->rchans = devm_kcalloc(dev, ud->rchan_cnt, sizeof(*ud->rchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4189  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4190  	/* BCDMA do not really have flows, but the driver expect it */
017794739702d4 Peter Ujfalusi 2020-12-08  4191  	ud->rflow_in_use = devm_kcalloc(dev, BITS_TO_LONGS(ud->rchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4192  					sizeof(unsigned long),
017794739702d4 Peter Ujfalusi 2020-12-08  4193  					GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4194  	ud->rflows = devm_kcalloc(dev, ud->rchan_cnt, sizeof(*ud->rflows),
017794739702d4 Peter Ujfalusi 2020-12-08  4195  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4196  
017794739702d4 Peter Ujfalusi 2020-12-08  4197  	if (!ud->bchan_map || !ud->tchan_map || !ud->rchan_map ||
017794739702d4 Peter Ujfalusi 2020-12-08  4198  	    !ud->rflow_in_use || !ud->bchans || !ud->tchans || !ud->rchans ||
017794739702d4 Peter Ujfalusi 2020-12-08  4199  	    !ud->rflows)
017794739702d4 Peter Ujfalusi 2020-12-08  4200  		return -ENOMEM;
017794739702d4 Peter Ujfalusi 2020-12-08  4201  
017794739702d4 Peter Ujfalusi 2020-12-08  4202  	/* TPL is not yet supported for BCDMA */
017794739702d4 Peter Ujfalusi 2020-12-08  4203  	ud->tpl_levels = 1;
017794739702d4 Peter Ujfalusi 2020-12-08  4204  
017794739702d4 Peter Ujfalusi 2020-12-08  4205  	/* Get resource ranges from tisci */
017794739702d4 Peter Ujfalusi 2020-12-08  4206  	for (i = 0; i < RM_RANGE_LAST; i++) {
017794739702d4 Peter Ujfalusi 2020-12-08  4207  		if (i == RM_RANGE_RFLOW)
017794739702d4 Peter Ujfalusi 2020-12-08  4208  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4209  		if (i == RM_RANGE_BCHAN && ud->bchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4210  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4211  		if (i == RM_RANGE_TCHAN && ud->tchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4212  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4213  		if (i == RM_RANGE_RCHAN && ud->rchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4214  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4215  
017794739702d4 Peter Ujfalusi 2020-12-08  4216  		tisci_rm->rm_ranges[i] =
017794739702d4 Peter Ujfalusi 2020-12-08  4217  			devm_ti_sci_get_of_resource(tisci_rm->tisci, dev,
017794739702d4 Peter Ujfalusi 2020-12-08  4218  						    tisci_rm->tisci_dev_id,
017794739702d4 Peter Ujfalusi 2020-12-08  4219  						    (char *)range_names[i]);
017794739702d4 Peter Ujfalusi 2020-12-08  4220  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4221  
017794739702d4 Peter Ujfalusi 2020-12-08  4222  	irq_res.sets = 0;
017794739702d4 Peter Ujfalusi 2020-12-08  4223  
017794739702d4 Peter Ujfalusi 2020-12-08  4224  	/* bchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4225  	if (ud->bchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4226  		rm_res = tisci_rm->rm_ranges[RM_RANGE_BCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4227  		if (IS_ERR(rm_res)) {
                                                                           ^^^^^^
This is an error pointer

017794739702d4 Peter Ujfalusi 2020-12-08  4228  			bitmap_zero(ud->bchan_map, ud->bchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4229  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4230  			bitmap_fill(ud->bchan_map, ud->bchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4231  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4232  				udma_mark_resource_ranges(ud, ud->bchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4233  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4234  							  "bchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4235  		}
017794739702d4 Peter Ujfalusi 2020-12-08 @4236  		irq_res.sets += rm_res->sets;
                                                                                ^^^^^^^^^^^^
Boom.  dereference.

017794739702d4 Peter Ujfalusi 2020-12-08  4237  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4238  
017794739702d4 Peter Ujfalusi 2020-12-08  4239  	/* tchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4240  	if (ud->tchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4241  		rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4242  		if (IS_ERR(rm_res)) {
017794739702d4 Peter Ujfalusi 2020-12-08  4243  			bitmap_zero(ud->tchan_map, ud->tchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4244  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4245  			bitmap_fill(ud->tchan_map, ud->tchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4246  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4247  				udma_mark_resource_ranges(ud, ud->tchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4248  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4249  							  "tchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4250  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4251  		irq_res.sets += rm_res->sets * 2;
                                                                                ^^^^^^^^^^^^

017794739702d4 Peter Ujfalusi 2020-12-08  4252  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4253  
017794739702d4 Peter Ujfalusi 2020-12-08  4254  	/* rchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4255  	if (ud->rchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4256  		rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4257  		if (IS_ERR(rm_res)) {
017794739702d4 Peter Ujfalusi 2020-12-08  4258  			bitmap_zero(ud->rchan_map, ud->rchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4259  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4260  			bitmap_fill(ud->rchan_map, ud->rchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4261  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4262  				udma_mark_resource_ranges(ud, ud->rchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4263  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4264  							  "rchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4265  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4266  		irq_res.sets += rm_res->sets * 2;
017794739702d4 Peter Ujfalusi 2020-12-08  4267  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4268  
017794739702d4 Peter Ujfalusi 2020-12-08  4269  	irq_res.desc = kcalloc(irq_res.sets, sizeof(*irq_res.desc), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4270  	if (ud->bchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4271  		rm_res = tisci_rm->rm_ranges[RM_RANGE_BCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4272  		for (i = 0; i < rm_res->sets; i++) {
017794739702d4 Peter Ujfalusi 2020-12-08  4273  			irq_res.desc[i].start = rm_res->desc[i].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4274  						oes->bcdma_bchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4275  			irq_res.desc[i].num = rm_res->desc[i].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4276  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4277  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4278  	if (ud->tchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4279  		rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4280  		for (j = 0; j < rm_res->sets; j++, i += 2) {
017794739702d4 Peter Ujfalusi 2020-12-08  4281  			irq_res.desc[i].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4282  						oes->bcdma_tchan_data;
017794739702d4 Peter Ujfalusi 2020-12-08  4283  			irq_res.desc[i].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4284  
017794739702d4 Peter Ujfalusi 2020-12-08  4285  			irq_res.desc[i + 1].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4286  						oes->bcdma_tchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4287  			irq_res.desc[i + 1].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4288  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4289  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4290  	if (ud->rchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4291  		rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4292  		for (j = 0; j < rm_res->sets; j++, i += 2) {
017794739702d4 Peter Ujfalusi 2020-12-08  4293  			irq_res.desc[i].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4294  						oes->bcdma_rchan_data;
017794739702d4 Peter Ujfalusi 2020-12-08  4295  			irq_res.desc[i].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4296  
017794739702d4 Peter Ujfalusi 2020-12-08  4297  			irq_res.desc[i + 1].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4298  						oes->bcdma_rchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4299  			irq_res.desc[i + 1].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4300  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4301  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4302  
017794739702d4 Peter Ujfalusi 2020-12-08  4303  	ret = ti_sci_inta_msi_domain_alloc_irqs(ud->dev, &irq_res);
017794739702d4 Peter Ujfalusi 2020-12-08  4304  	kfree(irq_res.desc);
017794739702d4 Peter Ujfalusi 2020-12-08  4305  	if (ret) {
017794739702d4 Peter Ujfalusi 2020-12-08  4306  		dev_err(ud->dev, "Failed to allocate MSI interrupts\n");
017794739702d4 Peter Ujfalusi 2020-12-08  4307  		return ret;
017794739702d4 Peter Ujfalusi 2020-12-08  4308  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4309  
017794739702d4 Peter Ujfalusi 2020-12-08  4310  	return 0;
017794739702d4 Peter Ujfalusi 2020-12-08  4311  }

---
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: 39816 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* drivers/dma/ti/k3-udma.c:4236 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
@ 2021-03-26  8:25 ` Dan Carpenter
  0 siblings, 0 replies; 4+ messages in thread
From: Dan Carpenter @ 2021-03-26  8:25 UTC (permalink / raw)
  To: kbuild-all

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   002322402dafd846c424ffa9240a937f49b48c42
commit: 017794739702d444ca48115ff0fcdce19edb5559 dmaengine: ti: k3-udma: Initial support for K3 BCDMA
config: arm64-randconfig-m031-20210325 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 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>

New smatch warnings:
drivers/dma/ti/k3-udma.c:4236 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()

Old smatch warnings:
drivers/dma/ti/k3-udma.c:4113 udma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4126 udma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4251 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()
drivers/dma/ti/k3-udma.c:4266 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR()

vim +/rm_res +4236 drivers/dma/ti/k3-udma.c

017794739702d4 Peter Ujfalusi 2020-12-08  4170  static int bcdma_setup_resources(struct udma_dev *ud)
017794739702d4 Peter Ujfalusi 2020-12-08  4171  {
017794739702d4 Peter Ujfalusi 2020-12-08  4172  	int ret, i, j;
017794739702d4 Peter Ujfalusi 2020-12-08  4173  	struct device *dev = ud->dev;
017794739702d4 Peter Ujfalusi 2020-12-08  4174  	struct ti_sci_resource *rm_res, irq_res;
017794739702d4 Peter Ujfalusi 2020-12-08  4175  	struct udma_tisci_rm *tisci_rm = &ud->tisci_rm;
017794739702d4 Peter Ujfalusi 2020-12-08  4176  	const struct udma_oes_offsets *oes = &ud->soc_data->oes;
017794739702d4 Peter Ujfalusi 2020-12-08  4177  
017794739702d4 Peter Ujfalusi 2020-12-08  4178  	ud->bchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->bchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4179  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4180  	ud->bchans = devm_kcalloc(dev, ud->bchan_cnt, sizeof(*ud->bchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4181  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4182  	ud->tchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->tchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4183  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4184  	ud->tchans = devm_kcalloc(dev, ud->tchan_cnt, sizeof(*ud->tchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4185  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4186  	ud->rchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->rchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4187  					   sizeof(unsigned long), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4188  	ud->rchans = devm_kcalloc(dev, ud->rchan_cnt, sizeof(*ud->rchans),
017794739702d4 Peter Ujfalusi 2020-12-08  4189  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4190  	/* BCDMA do not really have flows, but the driver expect it */
017794739702d4 Peter Ujfalusi 2020-12-08  4191  	ud->rflow_in_use = devm_kcalloc(dev, BITS_TO_LONGS(ud->rchan_cnt),
017794739702d4 Peter Ujfalusi 2020-12-08  4192  					sizeof(unsigned long),
017794739702d4 Peter Ujfalusi 2020-12-08  4193  					GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4194  	ud->rflows = devm_kcalloc(dev, ud->rchan_cnt, sizeof(*ud->rflows),
017794739702d4 Peter Ujfalusi 2020-12-08  4195  				  GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4196  
017794739702d4 Peter Ujfalusi 2020-12-08  4197  	if (!ud->bchan_map || !ud->tchan_map || !ud->rchan_map ||
017794739702d4 Peter Ujfalusi 2020-12-08  4198  	    !ud->rflow_in_use || !ud->bchans || !ud->tchans || !ud->rchans ||
017794739702d4 Peter Ujfalusi 2020-12-08  4199  	    !ud->rflows)
017794739702d4 Peter Ujfalusi 2020-12-08  4200  		return -ENOMEM;
017794739702d4 Peter Ujfalusi 2020-12-08  4201  
017794739702d4 Peter Ujfalusi 2020-12-08  4202  	/* TPL is not yet supported for BCDMA */
017794739702d4 Peter Ujfalusi 2020-12-08  4203  	ud->tpl_levels = 1;
017794739702d4 Peter Ujfalusi 2020-12-08  4204  
017794739702d4 Peter Ujfalusi 2020-12-08  4205  	/* Get resource ranges from tisci */
017794739702d4 Peter Ujfalusi 2020-12-08  4206  	for (i = 0; i < RM_RANGE_LAST; i++) {
017794739702d4 Peter Ujfalusi 2020-12-08  4207  		if (i == RM_RANGE_RFLOW)
017794739702d4 Peter Ujfalusi 2020-12-08  4208  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4209  		if (i == RM_RANGE_BCHAN && ud->bchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4210  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4211  		if (i == RM_RANGE_TCHAN && ud->tchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4212  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4213  		if (i == RM_RANGE_RCHAN && ud->rchan_cnt == 0)
017794739702d4 Peter Ujfalusi 2020-12-08  4214  			continue;
017794739702d4 Peter Ujfalusi 2020-12-08  4215  
017794739702d4 Peter Ujfalusi 2020-12-08  4216  		tisci_rm->rm_ranges[i] =
017794739702d4 Peter Ujfalusi 2020-12-08  4217  			devm_ti_sci_get_of_resource(tisci_rm->tisci, dev,
017794739702d4 Peter Ujfalusi 2020-12-08  4218  						    tisci_rm->tisci_dev_id,
017794739702d4 Peter Ujfalusi 2020-12-08  4219  						    (char *)range_names[i]);
017794739702d4 Peter Ujfalusi 2020-12-08  4220  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4221  
017794739702d4 Peter Ujfalusi 2020-12-08  4222  	irq_res.sets = 0;
017794739702d4 Peter Ujfalusi 2020-12-08  4223  
017794739702d4 Peter Ujfalusi 2020-12-08  4224  	/* bchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4225  	if (ud->bchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4226  		rm_res = tisci_rm->rm_ranges[RM_RANGE_BCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4227  		if (IS_ERR(rm_res)) {
                                                                           ^^^^^^
This is an error pointer

017794739702d4 Peter Ujfalusi 2020-12-08  4228  			bitmap_zero(ud->bchan_map, ud->bchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4229  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4230  			bitmap_fill(ud->bchan_map, ud->bchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4231  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4232  				udma_mark_resource_ranges(ud, ud->bchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4233  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4234  							  "bchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4235  		}
017794739702d4 Peter Ujfalusi 2020-12-08 @4236  		irq_res.sets += rm_res->sets;
                                                                                ^^^^^^^^^^^^
Boom.  dereference.

017794739702d4 Peter Ujfalusi 2020-12-08  4237  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4238  
017794739702d4 Peter Ujfalusi 2020-12-08  4239  	/* tchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4240  	if (ud->tchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4241  		rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4242  		if (IS_ERR(rm_res)) {
017794739702d4 Peter Ujfalusi 2020-12-08  4243  			bitmap_zero(ud->tchan_map, ud->tchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4244  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4245  			bitmap_fill(ud->tchan_map, ud->tchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4246  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4247  				udma_mark_resource_ranges(ud, ud->tchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4248  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4249  							  "tchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4250  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4251  		irq_res.sets += rm_res->sets * 2;
                                                                                ^^^^^^^^^^^^

017794739702d4 Peter Ujfalusi 2020-12-08  4252  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4253  
017794739702d4 Peter Ujfalusi 2020-12-08  4254  	/* rchan ranges */
017794739702d4 Peter Ujfalusi 2020-12-08  4255  	if (ud->rchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4256  		rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4257  		if (IS_ERR(rm_res)) {
017794739702d4 Peter Ujfalusi 2020-12-08  4258  			bitmap_zero(ud->rchan_map, ud->rchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4259  		} else {
017794739702d4 Peter Ujfalusi 2020-12-08  4260  			bitmap_fill(ud->rchan_map, ud->rchan_cnt);
017794739702d4 Peter Ujfalusi 2020-12-08  4261  			for (i = 0; i < rm_res->sets; i++)
017794739702d4 Peter Ujfalusi 2020-12-08  4262  				udma_mark_resource_ranges(ud, ud->rchan_map,
017794739702d4 Peter Ujfalusi 2020-12-08  4263  							  &rm_res->desc[i],
017794739702d4 Peter Ujfalusi 2020-12-08  4264  							  "rchan");
017794739702d4 Peter Ujfalusi 2020-12-08  4265  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4266  		irq_res.sets += rm_res->sets * 2;
017794739702d4 Peter Ujfalusi 2020-12-08  4267  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4268  
017794739702d4 Peter Ujfalusi 2020-12-08  4269  	irq_res.desc = kcalloc(irq_res.sets, sizeof(*irq_res.desc), GFP_KERNEL);
017794739702d4 Peter Ujfalusi 2020-12-08  4270  	if (ud->bchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4271  		rm_res = tisci_rm->rm_ranges[RM_RANGE_BCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4272  		for (i = 0; i < rm_res->sets; i++) {
017794739702d4 Peter Ujfalusi 2020-12-08  4273  			irq_res.desc[i].start = rm_res->desc[i].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4274  						oes->bcdma_bchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4275  			irq_res.desc[i].num = rm_res->desc[i].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4276  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4277  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4278  	if (ud->tchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4279  		rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4280  		for (j = 0; j < rm_res->sets; j++, i += 2) {
017794739702d4 Peter Ujfalusi 2020-12-08  4281  			irq_res.desc[i].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4282  						oes->bcdma_tchan_data;
017794739702d4 Peter Ujfalusi 2020-12-08  4283  			irq_res.desc[i].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4284  
017794739702d4 Peter Ujfalusi 2020-12-08  4285  			irq_res.desc[i + 1].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4286  						oes->bcdma_tchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4287  			irq_res.desc[i + 1].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4288  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4289  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4290  	if (ud->rchan_cnt) {
017794739702d4 Peter Ujfalusi 2020-12-08  4291  		rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
017794739702d4 Peter Ujfalusi 2020-12-08  4292  		for (j = 0; j < rm_res->sets; j++, i += 2) {
017794739702d4 Peter Ujfalusi 2020-12-08  4293  			irq_res.desc[i].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4294  						oes->bcdma_rchan_data;
017794739702d4 Peter Ujfalusi 2020-12-08  4295  			irq_res.desc[i].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4296  
017794739702d4 Peter Ujfalusi 2020-12-08  4297  			irq_res.desc[i + 1].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08  4298  						oes->bcdma_rchan_ring;
017794739702d4 Peter Ujfalusi 2020-12-08  4299  			irq_res.desc[i + 1].num = rm_res->desc[j].num;
017794739702d4 Peter Ujfalusi 2020-12-08  4300  		}
017794739702d4 Peter Ujfalusi 2020-12-08  4301  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4302  
017794739702d4 Peter Ujfalusi 2020-12-08  4303  	ret = ti_sci_inta_msi_domain_alloc_irqs(ud->dev, &irq_res);
017794739702d4 Peter Ujfalusi 2020-12-08  4304  	kfree(irq_res.desc);
017794739702d4 Peter Ujfalusi 2020-12-08  4305  	if (ret) {
017794739702d4 Peter Ujfalusi 2020-12-08  4306  		dev_err(ud->dev, "Failed to allocate MSI interrupts\n");
017794739702d4 Peter Ujfalusi 2020-12-08  4307  		return ret;
017794739702d4 Peter Ujfalusi 2020-12-08  4308  	}
017794739702d4 Peter Ujfalusi 2020-12-08  4309  
017794739702d4 Peter Ujfalusi 2020-12-08  4310  	return 0;
017794739702d4 Peter Ujfalusi 2020-12-08  4311  }

---
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: 39816 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-03-26  8:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-26  0:09 drivers/dma/ti/k3-udma.c:4236 bcdma_setup_resources() error: 'rm_res' dereferencing possible ERR_PTR() kernel test robot
2021-03-26  8:25 Dan Carpenter
2021-03-26  8:25 ` Dan Carpenter
2021-03-26  8:25 ` Dan Carpenter

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.