All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <202603191117.QkPVup2Y-lkp@intel.com>

diff --git a/a/1.txt b/N1/1.txt
index fc2e859..93ff8f3 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,15 +1,6 @@
-BCC: lkp@intel.com
-CC: oe-kbuild-all@lists.linux.dev
-TO: Binbin Zhou <zhoubinbin@loongson.cn>
-CC: Vinod Koul <vkoul@kernel.org>
-CC: Frank Li <Frank.Li@nxp.com>
-CC: Huacai Chen <chenhuacai@loongson.cn>
-
 tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
 head:   8e42d2514a7e8eb8d740d0ba82339dd6c0b6463f
 commit: 1c0028e725f156ebabe68b0025f9c8e7a6170ffd [6322/7246] dmaengine: loongson: New driver for the Loongson Multi-Channel DMA controller
-:::::: branch date: 11 hours ago
-:::::: commit date: 2 days ago
 config: m68k-randconfig-r073-20260318 (https://download.01.org/0day-ci/archive/20260319/202603191117.QkPVup2Y-lkp@intel.com/config)
 compiler: m68k-linux-gcc (GCC) 13.4.0
 smatch: v0.5.0-9004-gb810ac53
@@ -17,7 +8,7 @@ smatch: v0.5.0-9004-gb810ac53
 If you fix the issue in a separate patch/commit (i.e. not just a new version of
 the same patch/commit), kindly add following tags
 | Reported-by: kernel test robot <lkp@intel.com>
-| Reported-by: Dan Carpenter <error27@gmail.com>
+| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
 | Closes: https://lore.kernel.org/r/202603191117.QkPVup2Y-lkp@intel.com/
 
 smatch warnings:
@@ -40,163 +31,29 @@ vim +516 drivers/dma/loongson/loongson2-apb-cmc-dma.c
 1c0028e725f156 Binbin Zhou 2026-03-07  509  
 1c0028e725f156 Binbin Zhou 2026-03-07  510  	scoped_guard(spinlock_irqsave, &lchan->vchan.lock) {
 1c0028e725f156 Binbin Zhou 2026-03-07  511  		vdesc = vchan_find_desc(&lchan->vchan, cookie);
+                                                                                ^^^^^^^^^^^^^
+If lchan->vchan is NULL we are toasted here.
+
 1c0028e725f156 Binbin Zhou 2026-03-07 @512  		if (lchan->desc && cookie == lchan->desc->vdesc.tx.cookie)
+                                                            ^^^^^^^^^^^
+So this NULL check is too late.
+
 1c0028e725f156 Binbin Zhou 2026-03-07  513  			state->residue = loongson2_cmc_dma_desc_residue(lchan, lchan->desc,
 1c0028e725f156 Binbin Zhou 2026-03-07  514  									lchan->next_sg);
 1c0028e725f156 Binbin Zhou 2026-03-07  515  		else if (vdesc)
 1c0028e725f156 Binbin Zhou 2026-03-07 @516  			state->residue = loongson2_cmc_dma_desc_residue(lchan,
+
+loongson2_cmc_dma_desc_residue() also dereferences
+lchan->desc.
+
 1c0028e725f156 Binbin Zhou 2026-03-07  517  									to_lmdma_desc(vdesc), 0);
 1c0028e725f156 Binbin Zhou 2026-03-07  518  	}
 1c0028e725f156 Binbin Zhou 2026-03-07  519  
 1c0028e725f156 Binbin Zhou 2026-03-07  520  	return status;
 1c0028e725f156 Binbin Zhou 2026-03-07  521  }
-1c0028e725f156 Binbin Zhou 2026-03-07  522  
-1c0028e725f156 Binbin Zhou 2026-03-07  523  static void loongson2_cmc_dma_free_chan_resources(struct dma_chan *chan)
-1c0028e725f156 Binbin Zhou 2026-03-07  524  {
-1c0028e725f156 Binbin Zhou 2026-03-07  525  	vchan_free_chan_resources(to_virt_chan(chan));
-1c0028e725f156 Binbin Zhou 2026-03-07  526  }
-1c0028e725f156 Binbin Zhou 2026-03-07  527  
-1c0028e725f156 Binbin Zhou 2026-03-07  528  static void loongson2_cmc_dma_desc_free(struct virt_dma_desc *vdesc)
-1c0028e725f156 Binbin Zhou 2026-03-07  529  {
-1c0028e725f156 Binbin Zhou 2026-03-07  530  	kfree(to_lmdma_desc(vdesc));
-1c0028e725f156 Binbin Zhou 2026-03-07  531  }
-1c0028e725f156 Binbin Zhou 2026-03-07  532  
-1c0028e725f156 Binbin Zhou 2026-03-07  533  static bool loongson2_cmc_dma_acpi_filter(struct dma_chan *chan, void *param)
-1c0028e725f156 Binbin Zhou 2026-03-07  534  {
-1c0028e725f156 Binbin Zhou 2026-03-07  535  	struct loongson2_cmc_dma_chan *lchan = to_lmdma_chan(chan);
-1c0028e725f156 Binbin Zhou 2026-03-07  536  	struct acpi_dma_spec *dma_spec = param;
-1c0028e725f156 Binbin Zhou 2026-03-07  537  
-1c0028e725f156 Binbin Zhou 2026-03-07  538  	memset(&lchan->chan_reg, 0, sizeof(struct loongson2_cmc_dma_chan_reg));
-1c0028e725f156 Binbin Zhou 2026-03-07  539  	lchan->chan_reg.ccr = dma_spec->chan_id & LOONGSON2_CMCDMA_STREAM_MASK;
-1c0028e725f156 Binbin Zhou 2026-03-07  540  
-1c0028e725f156 Binbin Zhou 2026-03-07  541  	return true;
-1c0028e725f156 Binbin Zhou 2026-03-07  542  }
-1c0028e725f156 Binbin Zhou 2026-03-07  543  
-1c0028e725f156 Binbin Zhou 2026-03-07  544  static int loongson2_cmc_dma_acpi_controller_register(struct loongson2_cmc_dma_dev *lddev)
-1c0028e725f156 Binbin Zhou 2026-03-07  545  {
-1c0028e725f156 Binbin Zhou 2026-03-07  546  	struct device *dev = lddev->ddev.dev;
-1c0028e725f156 Binbin Zhou 2026-03-07  547  	struct acpi_dma_filter_info *info;
-1c0028e725f156 Binbin Zhou 2026-03-07  548  
-1c0028e725f156 Binbin Zhou 2026-03-07  549  	if (!is_acpi_node(dev_fwnode(dev)))
-1c0028e725f156 Binbin Zhou 2026-03-07  550  		return 0;
-1c0028e725f156 Binbin Zhou 2026-03-07  551  
-1c0028e725f156 Binbin Zhou 2026-03-07  552  	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
-1c0028e725f156 Binbin Zhou 2026-03-07  553  	if (!info)
-1c0028e725f156 Binbin Zhou 2026-03-07  554  		return -ENOMEM;
-1c0028e725f156 Binbin Zhou 2026-03-07  555  
-1c0028e725f156 Binbin Zhou 2026-03-07  556  	dma_cap_zero(info->dma_cap);
-1c0028e725f156 Binbin Zhou 2026-03-07  557  	info->dma_cap = lddev->ddev.cap_mask;
-1c0028e725f156 Binbin Zhou 2026-03-07  558  	info->filter_fn = loongson2_cmc_dma_acpi_filter;
-1c0028e725f156 Binbin Zhou 2026-03-07  559  
-1c0028e725f156 Binbin Zhou 2026-03-07  560  	return devm_acpi_dma_controller_register(dev, acpi_dma_simple_xlate, info);
-1c0028e725f156 Binbin Zhou 2026-03-07  561  }
-1c0028e725f156 Binbin Zhou 2026-03-07  562  
-1c0028e725f156 Binbin Zhou 2026-03-07  563  static struct dma_chan *loongson2_cmc_dma_of_xlate(struct of_phandle_args *dma_spec,
-1c0028e725f156 Binbin Zhou 2026-03-07  564  						   struct of_dma *ofdma)
-1c0028e725f156 Binbin Zhou 2026-03-07  565  {
-1c0028e725f156 Binbin Zhou 2026-03-07  566  	struct loongson2_cmc_dma_dev *lddev = ofdma->of_dma_data;
-1c0028e725f156 Binbin Zhou 2026-03-07  567  	struct device *dev = lddev->ddev.dev;
-1c0028e725f156 Binbin Zhou 2026-03-07  568  	struct loongson2_cmc_dma_chan *lchan;
-1c0028e725f156 Binbin Zhou 2026-03-07  569  	struct dma_chan *chan;
-1c0028e725f156 Binbin Zhou 2026-03-07  570  
-1c0028e725f156 Binbin Zhou 2026-03-07  571  	if (dma_spec->args_count < 2)
-1c0028e725f156 Binbin Zhou 2026-03-07  572  		return ERR_PTR(-EINVAL);
-1c0028e725f156 Binbin Zhou 2026-03-07  573  
-1c0028e725f156 Binbin Zhou 2026-03-07  574  	if (dma_spec->args[0] >= lddev->nr_channels) {
-1c0028e725f156 Binbin Zhou 2026-03-07  575  		dev_err(dev, "Invalid channel id.\n");
-1c0028e725f156 Binbin Zhou 2026-03-07  576  		return ERR_PTR(-EINVAL);
-1c0028e725f156 Binbin Zhou 2026-03-07  577  	}
-1c0028e725f156 Binbin Zhou 2026-03-07  578  
-1c0028e725f156 Binbin Zhou 2026-03-07  579  	lchan = &lddev->chan[dma_spec->args[0]];
-1c0028e725f156 Binbin Zhou 2026-03-07  580  	chan = dma_get_slave_channel(&lchan->vchan.chan);
-1c0028e725f156 Binbin Zhou 2026-03-07  581  	if (!chan) {
-1c0028e725f156 Binbin Zhou 2026-03-07  582  		dev_err(dev, "No more channels available.\n");
-1c0028e725f156 Binbin Zhou 2026-03-07  583  		return ERR_PTR(-EINVAL);
-1c0028e725f156 Binbin Zhou 2026-03-07  584  	}
-1c0028e725f156 Binbin Zhou 2026-03-07  585  
-1c0028e725f156 Binbin Zhou 2026-03-07  586  	memset(&lchan->chan_reg, 0, sizeof(struct loongson2_cmc_dma_chan_reg));
-1c0028e725f156 Binbin Zhou 2026-03-07  587  	lchan->chan_reg.ccr = dma_spec->args[1] & LOONGSON2_CMCDMA_STREAM_MASK;
-1c0028e725f156 Binbin Zhou 2026-03-07  588  
-1c0028e725f156 Binbin Zhou 2026-03-07  589  	return chan;
-1c0028e725f156 Binbin Zhou 2026-03-07  590  }
-1c0028e725f156 Binbin Zhou 2026-03-07  591  
-1c0028e725f156 Binbin Zhou 2026-03-07  592  static int loongson2_cmc_dma_of_controller_register(struct loongson2_cmc_dma_dev *lddev)
-1c0028e725f156 Binbin Zhou 2026-03-07  593  {
-1c0028e725f156 Binbin Zhou 2026-03-07  594  	struct device *dev = lddev->ddev.dev;
-1c0028e725f156 Binbin Zhou 2026-03-07  595  
-1c0028e725f156 Binbin Zhou 2026-03-07  596  	if (!is_of_node(dev_fwnode(dev)))
-1c0028e725f156 Binbin Zhou 2026-03-07  597  		return 0;
-1c0028e725f156 Binbin Zhou 2026-03-07  598  
-1c0028e725f156 Binbin Zhou 2026-03-07  599  	return of_dma_controller_register(dev->of_node, loongson2_cmc_dma_of_xlate, lddev);
-1c0028e725f156 Binbin Zhou 2026-03-07  600  }
-1c0028e725f156 Binbin Zhou 2026-03-07  601  
-1c0028e725f156 Binbin Zhou 2026-03-07  602  static int loongson2_cmc_dma_probe(struct platform_device *pdev)
-1c0028e725f156 Binbin Zhou 2026-03-07  603  {
-1c0028e725f156 Binbin Zhou 2026-03-07  604  	const struct loongson2_cmc_dma_config *config;
-1c0028e725f156 Binbin Zhou 2026-03-07  605  	struct loongson2_cmc_dma_chan *lchan;
-1c0028e725f156 Binbin Zhou 2026-03-07  606  	struct loongson2_cmc_dma_dev *lddev;
-1c0028e725f156 Binbin Zhou 2026-03-07  607  	struct device *dev = &pdev->dev;
-1c0028e725f156 Binbin Zhou 2026-03-07  608  	struct dma_device *ddev;
-1c0028e725f156 Binbin Zhou 2026-03-07  609  	u32 nr_chans, i;
-1c0028e725f156 Binbin Zhou 2026-03-07  610  	int ret;
-1c0028e725f156 Binbin Zhou 2026-03-07  611  
-1c0028e725f156 Binbin Zhou 2026-03-07  612  	config = (const struct loongson2_cmc_dma_config *)device_get_match_data(dev);
-1c0028e725f156 Binbin Zhou 2026-03-07  613  	if (!config)
-1c0028e725f156 Binbin Zhou 2026-03-07  614  		return -EINVAL;
-1c0028e725f156 Binbin Zhou 2026-03-07  615  
-1c0028e725f156 Binbin Zhou 2026-03-07  616  	ret = device_property_read_u32(dev, "dma-channels", &nr_chans);
-1c0028e725f156 Binbin Zhou 2026-03-07  617  	if (ret || nr_chans > config->max_channels) {
-1c0028e725f156 Binbin Zhou 2026-03-07  618  		dev_err(dev, "missing or invalid dma-channels property\n");
-1c0028e725f156 Binbin Zhou 2026-03-07  619  		nr_chans = config->max_channels;
-1c0028e725f156 Binbin Zhou 2026-03-07  620  	}
-1c0028e725f156 Binbin Zhou 2026-03-07  621  
-1c0028e725f156 Binbin Zhou 2026-03-07  622  	lddev = devm_kzalloc(dev, struct_size(lddev, chan, nr_chans), GFP_KERNEL);
-1c0028e725f156 Binbin Zhou 2026-03-07  623  	if (!lddev)
-1c0028e725f156 Binbin Zhou 2026-03-07  624  		return -ENOMEM;
-1c0028e725f156 Binbin Zhou 2026-03-07  625  
-1c0028e725f156 Binbin Zhou 2026-03-07  626  	lddev->base = devm_platform_ioremap_resource(pdev, 0);
-1c0028e725f156 Binbin Zhou 2026-03-07  627  	if (IS_ERR(lddev->base))
-1c0028e725f156 Binbin Zhou 2026-03-07  628  		return PTR_ERR(lddev->base);
-1c0028e725f156 Binbin Zhou 2026-03-07  629  
-1c0028e725f156 Binbin Zhou 2026-03-07  630  	platform_set_drvdata(pdev, lddev);
-1c0028e725f156 Binbin Zhou 2026-03-07  631  	lddev->nr_channels = nr_chans;
-1c0028e725f156 Binbin Zhou 2026-03-07  632  	lddev->chan_reg_offset = config->chan_reg_offset;
-1c0028e725f156 Binbin Zhou 2026-03-07  633  
-1c0028e725f156 Binbin Zhou 2026-03-07  634  	lddev->dma_clk = devm_clk_get_optional_enabled(dev, NULL);
-1c0028e725f156 Binbin Zhou 2026-03-07  635  	if (IS_ERR(lddev->dma_clk))
-1c0028e725f156 Binbin Zhou 2026-03-07  636  		return dev_err_probe(dev, PTR_ERR(lddev->dma_clk), "Failed to get dma clock\n");
-1c0028e725f156 Binbin Zhou 2026-03-07  637  
-1c0028e725f156 Binbin Zhou 2026-03-07  638  	ddev = &lddev->ddev;
-1c0028e725f156 Binbin Zhou 2026-03-07  639  	ddev->dev = dev;
-1c0028e725f156 Binbin Zhou 2026-03-07  640  
-1c0028e725f156 Binbin Zhou 2026-03-07  641  	dma_cap_zero(ddev->cap_mask);
-1c0028e725f156 Binbin Zhou 2026-03-07  642  	dma_cap_set(DMA_SLAVE, ddev->cap_mask);
-1c0028e725f156 Binbin Zhou 2026-03-07  643  	dma_cap_set(DMA_PRIVATE, ddev->cap_mask);
-1c0028e725f156 Binbin Zhou 2026-03-07  644  	dma_cap_set(DMA_CYCLIC, ddev->cap_mask);
-1c0028e725f156 Binbin Zhou 2026-03-07  645  
-1c0028e725f156 Binbin Zhou 2026-03-07  646  	ddev->device_free_chan_resources = loongson2_cmc_dma_free_chan_resources;
-1c0028e725f156 Binbin Zhou 2026-03-07  647  	ddev->device_config = loongson2_cmc_dma_slave_config;
-1c0028e725f156 Binbin Zhou 2026-03-07  648  	ddev->device_prep_slave_sg = loongson2_cmc_dma_prep_slave_sg;
-1c0028e725f156 Binbin Zhou 2026-03-07  649  	ddev->device_prep_dma_cyclic = loongson2_cmc_dma_prep_dma_cyclic;
-1c0028e725f156 Binbin Zhou 2026-03-07  650  	ddev->device_issue_pending = loongson2_cmc_dma_issue_pending;
-1c0028e725f156 Binbin Zhou 2026-03-07  651  	ddev->device_synchronize = loongson2_cmc_dma_synchronize;
-1c0028e725f156 Binbin Zhou 2026-03-07  652  	ddev->device_tx_status = loongson2_cmc_dma_tx_status;
-1c0028e725f156 Binbin Zhou 2026-03-07  653  	ddev->device_terminate_all = loongson2_cmc_dma_terminate_all;
-1c0028e725f156 Binbin Zhou 2026-03-07  654  
-1c0028e725f156 Binbin Zhou 2026-03-07  655  	ddev->max_sg_burst = LOONSON2_CMCDMA_MAX_DATA_ITEMS;
-1c0028e725f156 Binbin Zhou 2026-03-07  656  	ddev->src_addr_widths = LOONGSON2_CMCDMA_BUSWIDTHS;
-1c0028e725f156 Binbin Zhou 2026-03-07  657  	ddev->dst_addr_widths = LOONGSON2_CMCDMA_BUSWIDTHS;
-1c0028e725f156 Binbin Zhou 2026-03-07  658  	ddev->directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
-1c0028e725f156 Binbin Zhou 2026-03-07  659  	INIT_LIST_HEAD(&ddev->channels);
-1c0028e725f156 Binbin Zhou 2026-03-07  660  
-1c0028e725f156 Binbin Zhou 2026-03-07  661  	for (i = 0; i < nr_chans; i++) {
-1c0028e725f156 Binbin Zhou 2026-03-07  662  		lchan = &lddev->chan[i];
-1c0028e725f156 Binbin Zhou 2026-03-07  663  
-1c0028e725f156 Binbin Zhou 2026-03-07  664  		lchan->id = i;
-1c0028e725f156 Binbin Zhou 2026-03-07  665  		lchan->vchan.desc_free = loongson2_cmc_dma_desc_free;
-1c0028e725f156 Binbin Zhou 2026-03-07  666  		vchan_init(&lchan->vchan, ddev);
-1c0028e725f156 Binbin Zhou 2026-03-07  667  	}
-1c0028e725f156 Binbin Zhou 2026-03-07  668  
+
+[ snip to probe function ]
+
 1c0028e725f156 Binbin Zhou 2026-03-07  669  	ret = dmaenginem_async_device_register(ddev);
 1c0028e725f156 Binbin Zhou 2026-03-07  670  	if (ret)
 1c0028e725f156 Binbin Zhou 2026-03-07  671  		return dev_err_probe(dev, ret, "Failed to register DMA engine device.\n");
@@ -207,6 +64,9 @@ vim +516 drivers/dma/loongson/loongson2-apb-cmc-dma.c
 1c0028e725f156 Binbin Zhou 2026-03-07  676  		lchan->irq = platform_get_irq(pdev, i);
 1c0028e725f156 Binbin Zhou 2026-03-07 @677  		if (lchan->irq < 0)
 1c0028e725f156 Binbin Zhou 2026-03-07  678  			return lchan->irq;
+
+Make lchan->irq an int.  Unsigned breaks error checking.
+
 1c0028e725f156 Binbin Zhou 2026-03-07  679  
 1c0028e725f156 Binbin Zhou 2026-03-07  680  		ret = devm_request_irq(dev, lchan->irq, loongson2_cmc_dma_chan_irq, IRQF_SHARED,
 1c0028e725f156 Binbin Zhou 2026-03-07  681  				       dev_name(chan2dev(lchan)), lchan);
@@ -226,7 +86,6 @@ vim +516 drivers/dma/loongson/loongson2-apb-cmc-dma.c
 1c0028e725f156 Binbin Zhou 2026-03-07  695  
 1c0028e725f156 Binbin Zhou 2026-03-07  696  	return 0;
 1c0028e725f156 Binbin Zhou 2026-03-07  697  }
-1c0028e725f156 Binbin Zhou 2026-03-07  698  
 
 -- 
 0-DAY CI Kernel Test Service
diff --git a/a/content_digest b/N1/content_digest
index 35c4128..74100d9 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,23 +1,18 @@
- "From\0kernel test robot <lkp@intel.com>\0"
+ "From\0Dan Carpenter <dan.carpenter@linaro.org>\0"
  "Subject\0[linux-next:master 6322/7246] drivers/dma/loongson/loongson2-apb-cmc-dma.c:516 loongson2_cmc_dma_tx_status() error: we previously assumed 'lchan->desc' could be null (see line 512)\0"
- "Date\0Thu, 19 Mar 2026 12:01:15 +0800\0"
- "To\0oe-kbuild@lists.linux.dev\0"
+ "Date\0Thu, 19 Mar 2026 12:23:57 +0300\0"
+ "To\0oe-kbuild@lists.linux.dev"
+ " Binbin Zhou <zhoubinbin@loongson.cn>\0"
  "Cc\0lkp@intel.com"
- " Dan Carpenter <error27@gmail.com>\0"
+  oe-kbuild-all@lists.linux.dev
+  Vinod Koul <vkoul@kernel.org>
+  Frank Li <Frank.Li@nxp.com>
+ " Huacai Chen <chenhuacai@loongson.cn>\0"
  "\00:1\0"
  "b\0"
- "BCC: lkp@intel.com\n"
- "CC: oe-kbuild-all@lists.linux.dev\n"
- "TO: Binbin Zhou <zhoubinbin@loongson.cn>\n"
- "CC: Vinod Koul <vkoul@kernel.org>\n"
- "CC: Frank Li <Frank.Li@nxp.com>\n"
- "CC: Huacai Chen <chenhuacai@loongson.cn>\n"
- "\n"
  "tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master\n"
  "head:   8e42d2514a7e8eb8d740d0ba82339dd6c0b6463f\n"
  "commit: 1c0028e725f156ebabe68b0025f9c8e7a6170ffd [6322/7246] dmaengine: loongson: New driver for the Loongson Multi-Channel DMA controller\n"
- ":::::: branch date: 11 hours ago\n"
- ":::::: commit date: 2 days ago\n"
  "config: m68k-randconfig-r073-20260318 (https://download.01.org/0day-ci/archive/20260319/202603191117.QkPVup2Y-lkp@intel.com/config)\n"
  "compiler: m68k-linux-gcc (GCC) 13.4.0\n"
  "smatch: v0.5.0-9004-gb810ac53\n"
@@ -25,7 +20,7 @@
  "If you fix the issue in a separate patch/commit (i.e. not just a new version of\n"
  "the same patch/commit), kindly add following tags\n"
  "| Reported-by: kernel test robot <lkp@intel.com>\n"
- "| Reported-by: Dan Carpenter <error27@gmail.com>\n"
+ "| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>\n"
  "| Closes: https://lore.kernel.org/r/202603191117.QkPVup2Y-lkp@intel.com/\n"
  "\n"
  "smatch warnings:\n"
@@ -48,163 +43,29 @@
  "1c0028e725f156 Binbin Zhou 2026-03-07  509  \n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  510  \tscoped_guard(spinlock_irqsave, &lchan->vchan.lock) {\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  511  \t\tvdesc = vchan_find_desc(&lchan->vchan, cookie);\n"
+ "                                                                                ^^^^^^^^^^^^^\n"
+ "If lchan->vchan is NULL we are toasted here.\n"
+ "\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07 @512  \t\tif (lchan->desc && cookie == lchan->desc->vdesc.tx.cookie)\n"
+ "                                                            ^^^^^^^^^^^\n"
+ "So this NULL check is too late.\n"
+ "\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  513  \t\t\tstate->residue = loongson2_cmc_dma_desc_residue(lchan, lchan->desc,\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  514  \t\t\t\t\t\t\t\t\tlchan->next_sg);\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  515  \t\telse if (vdesc)\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07 @516  \t\t\tstate->residue = loongson2_cmc_dma_desc_residue(lchan,\n"
+ "\n"
+ "loongson2_cmc_dma_desc_residue() also dereferences\n"
+ "lchan->desc.\n"
+ "\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  517  \t\t\t\t\t\t\t\t\tto_lmdma_desc(vdesc), 0);\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  518  \t}\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  519  \n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  520  \treturn status;\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  521  }\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  522  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  523  static void loongson2_cmc_dma_free_chan_resources(struct dma_chan *chan)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  524  {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  525  \tvchan_free_chan_resources(to_virt_chan(chan));\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  526  }\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  527  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  528  static void loongson2_cmc_dma_desc_free(struct virt_dma_desc *vdesc)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  529  {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  530  \tkfree(to_lmdma_desc(vdesc));\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  531  }\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  532  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  533  static bool loongson2_cmc_dma_acpi_filter(struct dma_chan *chan, void *param)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  534  {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  535  \tstruct loongson2_cmc_dma_chan *lchan = to_lmdma_chan(chan);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  536  \tstruct acpi_dma_spec *dma_spec = param;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  537  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  538  \tmemset(&lchan->chan_reg, 0, sizeof(struct loongson2_cmc_dma_chan_reg));\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  539  \tlchan->chan_reg.ccr = dma_spec->chan_id & LOONGSON2_CMCDMA_STREAM_MASK;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  540  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  541  \treturn true;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  542  }\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  543  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  544  static int loongson2_cmc_dma_acpi_controller_register(struct loongson2_cmc_dma_dev *lddev)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  545  {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  546  \tstruct device *dev = lddev->ddev.dev;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  547  \tstruct acpi_dma_filter_info *info;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  548  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  549  \tif (!is_acpi_node(dev_fwnode(dev)))\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  550  \t\treturn 0;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  551  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  552  \tinfo = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  553  \tif (!info)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  554  \t\treturn -ENOMEM;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  555  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  556  \tdma_cap_zero(info->dma_cap);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  557  \tinfo->dma_cap = lddev->ddev.cap_mask;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  558  \tinfo->filter_fn = loongson2_cmc_dma_acpi_filter;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  559  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  560  \treturn devm_acpi_dma_controller_register(dev, acpi_dma_simple_xlate, info);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  561  }\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  562  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  563  static struct dma_chan *loongson2_cmc_dma_of_xlate(struct of_phandle_args *dma_spec,\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  564  \t\t\t\t\t\t   struct of_dma *ofdma)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  565  {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  566  \tstruct loongson2_cmc_dma_dev *lddev = ofdma->of_dma_data;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  567  \tstruct device *dev = lddev->ddev.dev;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  568  \tstruct loongson2_cmc_dma_chan *lchan;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  569  \tstruct dma_chan *chan;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  570  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  571  \tif (dma_spec->args_count < 2)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  572  \t\treturn ERR_PTR(-EINVAL);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  573  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  574  \tif (dma_spec->args[0] >= lddev->nr_channels) {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  575  \t\tdev_err(dev, \"Invalid channel id.\\n\");\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  576  \t\treturn ERR_PTR(-EINVAL);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  577  \t}\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  578  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  579  \tlchan = &lddev->chan[dma_spec->args[0]];\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  580  \tchan = dma_get_slave_channel(&lchan->vchan.chan);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  581  \tif (!chan) {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  582  \t\tdev_err(dev, \"No more channels available.\\n\");\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  583  \t\treturn ERR_PTR(-EINVAL);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  584  \t}\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  585  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  586  \tmemset(&lchan->chan_reg, 0, sizeof(struct loongson2_cmc_dma_chan_reg));\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  587  \tlchan->chan_reg.ccr = dma_spec->args[1] & LOONGSON2_CMCDMA_STREAM_MASK;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  588  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  589  \treturn chan;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  590  }\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  591  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  592  static int loongson2_cmc_dma_of_controller_register(struct loongson2_cmc_dma_dev *lddev)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  593  {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  594  \tstruct device *dev = lddev->ddev.dev;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  595  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  596  \tif (!is_of_node(dev_fwnode(dev)))\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  597  \t\treturn 0;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  598  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  599  \treturn of_dma_controller_register(dev->of_node, loongson2_cmc_dma_of_xlate, lddev);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  600  }\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  601  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  602  static int loongson2_cmc_dma_probe(struct platform_device *pdev)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  603  {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  604  \tconst struct loongson2_cmc_dma_config *config;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  605  \tstruct loongson2_cmc_dma_chan *lchan;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  606  \tstruct loongson2_cmc_dma_dev *lddev;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  607  \tstruct device *dev = &pdev->dev;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  608  \tstruct dma_device *ddev;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  609  \tu32 nr_chans, i;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  610  \tint ret;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  611  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  612  \tconfig = (const struct loongson2_cmc_dma_config *)device_get_match_data(dev);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  613  \tif (!config)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  614  \t\treturn -EINVAL;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  615  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  616  \tret = device_property_read_u32(dev, \"dma-channels\", &nr_chans);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  617  \tif (ret || nr_chans > config->max_channels) {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  618  \t\tdev_err(dev, \"missing or invalid dma-channels property\\n\");\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  619  \t\tnr_chans = config->max_channels;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  620  \t}\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  621  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  622  \tlddev = devm_kzalloc(dev, struct_size(lddev, chan, nr_chans), GFP_KERNEL);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  623  \tif (!lddev)\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  624  \t\treturn -ENOMEM;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  625  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  626  \tlddev->base = devm_platform_ioremap_resource(pdev, 0);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  627  \tif (IS_ERR(lddev->base))\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  628  \t\treturn PTR_ERR(lddev->base);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  629  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  630  \tplatform_set_drvdata(pdev, lddev);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  631  \tlddev->nr_channels = nr_chans;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  632  \tlddev->chan_reg_offset = config->chan_reg_offset;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  633  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  634  \tlddev->dma_clk = devm_clk_get_optional_enabled(dev, NULL);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  635  \tif (IS_ERR(lddev->dma_clk))\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  636  \t\treturn dev_err_probe(dev, PTR_ERR(lddev->dma_clk), \"Failed to get dma clock\\n\");\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  637  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  638  \tddev = &lddev->ddev;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  639  \tddev->dev = dev;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  640  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  641  \tdma_cap_zero(ddev->cap_mask);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  642  \tdma_cap_set(DMA_SLAVE, ddev->cap_mask);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  643  \tdma_cap_set(DMA_PRIVATE, ddev->cap_mask);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  644  \tdma_cap_set(DMA_CYCLIC, ddev->cap_mask);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  645  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  646  \tddev->device_free_chan_resources = loongson2_cmc_dma_free_chan_resources;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  647  \tddev->device_config = loongson2_cmc_dma_slave_config;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  648  \tddev->device_prep_slave_sg = loongson2_cmc_dma_prep_slave_sg;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  649  \tddev->device_prep_dma_cyclic = loongson2_cmc_dma_prep_dma_cyclic;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  650  \tddev->device_issue_pending = loongson2_cmc_dma_issue_pending;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  651  \tddev->device_synchronize = loongson2_cmc_dma_synchronize;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  652  \tddev->device_tx_status = loongson2_cmc_dma_tx_status;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  653  \tddev->device_terminate_all = loongson2_cmc_dma_terminate_all;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  654  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  655  \tddev->max_sg_burst = LOONSON2_CMCDMA_MAX_DATA_ITEMS;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  656  \tddev->src_addr_widths = LOONGSON2_CMCDMA_BUSWIDTHS;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  657  \tddev->dst_addr_widths = LOONGSON2_CMCDMA_BUSWIDTHS;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  658  \tddev->directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  659  \tINIT_LIST_HEAD(&ddev->channels);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  660  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  661  \tfor (i = 0; i < nr_chans; i++) {\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  662  \t\tlchan = &lddev->chan[i];\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  663  \n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  664  \t\tlchan->id = i;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  665  \t\tlchan->vchan.desc_free = loongson2_cmc_dma_desc_free;\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  666  \t\tvchan_init(&lchan->vchan, ddev);\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  667  \t}\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  668  \n"
+ "\n"
+ "[ snip to probe function ]\n"
+ "\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  669  \tret = dmaenginem_async_device_register(ddev);\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  670  \tif (ret)\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  671  \t\treturn dev_err_probe(dev, ret, \"Failed to register DMA engine device.\\n\");\n"
@@ -215,6 +76,9 @@
  "1c0028e725f156 Binbin Zhou 2026-03-07  676  \t\tlchan->irq = platform_get_irq(pdev, i);\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07 @677  \t\tif (lchan->irq < 0)\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  678  \t\t\treturn lchan->irq;\n"
+ "\n"
+ "Make lchan->irq an int.  Unsigned breaks error checking.\n"
+ "\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  679  \n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  680  \t\tret = devm_request_irq(dev, lchan->irq, loongson2_cmc_dma_chan_irq, IRQF_SHARED,\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  681  \t\t\t\t       dev_name(chan2dev(lchan)), lchan);\n"
@@ -234,10 +98,9 @@
  "1c0028e725f156 Binbin Zhou 2026-03-07  695  \n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  696  \treturn 0;\n"
  "1c0028e725f156 Binbin Zhou 2026-03-07  697  }\n"
- "1c0028e725f156 Binbin Zhou 2026-03-07  698  \n"
  "\n"
  "-- \n"
  "0-DAY CI Kernel Test Service\n"
  https://github.com/intel/lkp-tests/wiki
 
-10db52a55098555d4c873ecdb235ecd2bb79f18ff9aedbd14fbad8f0d39c6788
+34417e91242ad71617e1a70d650fb3aa3da8a410037a648be89f96e448a01258

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.