Hi Xianwei,

kernel test robot noticed the following build warnings:

url:    
https://github.com/intel-lab-lkp/linux/commits/Xianwei-Zhao-via-B4-Relay/dt-bindings-dma-Add-Amlogic-A9-SoC-DMA/20260227-152743
base:   6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
patch link:    
https://lore.kernel.org/r/20260227-amlogic-dma-v4-2-f25e4614e9b7%40amlogic.com
patch subject: [PATCH v4 2/3] dma: amlogic: Add general DMA driver for A9
config: arm-randconfig-r073-20260228 
(https://download.01.org/0day-ci/archive/20260302/[email protected]/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 
6009708b4367171ccdbf4b5905cb6a803753fe18)
smatch version: v0.5.0-8994-gd50c5a4c

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 <[email protected]>
| Reported-by: Dan Carpenter <[email protected]>
| Closes: https://lore.kernel.org/r/[email protected]/

New smatch warnings:
drivers/dma/amlogic-dma.c:354 aml_dma_interrupt_handler() warn: variable 
dereferenced before check 'aml_chan' (see line 353)
drivers/dma/amlogic-dma.c:483 aml_dma_probe() warn: passing zero to 'PTR_ERR'

Old smatch warnings:
drivers/dma/amlogic-dma.c:384 aml_dma_interrupt_handler() warn: variable 
dereferenced before check 'aml_chan' (see line 383)

vim +/aml_chan +354 drivers/dma/amlogic-dma.c

c01d15789f1d15b Xianwei Zhao 2026-02-27  335  static irqreturn_t 
aml_dma_interrupt_handler(int irq, void *dev_id)
c01d15789f1d15b Xianwei Zhao 2026-02-27  336  {
c01d15789f1d15b Xianwei Zhao 2026-02-27  337    struct aml_dma_dev *aml_dma = 
dev_id;
c01d15789f1d15b Xianwei Zhao 2026-02-27  338    struct aml_dma_chan *aml_chan;
c01d15789f1d15b Xianwei Zhao 2026-02-27  339    u32 done, eoc_done, err, err_l, 
end;
c01d15789f1d15b Xianwei Zhao 2026-02-27  340    int i = 0;
c01d15789f1d15b Xianwei Zhao 2026-02-27  341  
c01d15789f1d15b Xianwei Zhao 2026-02-27  342    /* deal with rch normal 
complete and error */
c01d15789f1d15b Xianwei Zhao 2026-02-27  343    regmap_read(aml_dma->regmap, 
RCH_DONE, &done);
c01d15789f1d15b Xianwei Zhao 2026-02-27  344    regmap_read(aml_dma->regmap, 
RCH_ERR, &err);
c01d15789f1d15b Xianwei Zhao 2026-02-27  345    regmap_read(aml_dma->regmap, 
RCH_LEN_ERR, &err_l);
c01d15789f1d15b Xianwei Zhao 2026-02-27  346    err = err | err_l;
c01d15789f1d15b Xianwei Zhao 2026-02-27  347  
c01d15789f1d15b Xianwei Zhao 2026-02-27  348    done = done | err;
c01d15789f1d15b Xianwei Zhao 2026-02-27  349  
c01d15789f1d15b Xianwei Zhao 2026-02-27  350    while (done) {
c01d15789f1d15b Xianwei Zhao 2026-02-27  351            i = ffs(done) - 1;
c01d15789f1d15b Xianwei Zhao 2026-02-27  352            aml_chan = 
aml_dma->aml_rch[i];
c01d15789f1d15b Xianwei Zhao 2026-02-27 @353            
regmap_write(aml_dma->regmap, CLEAR_RCH, BIT(aml_chan->chan_id));
                                                                                
                     ^^^^^^^^^^^^^^^^^^
Move this dereference

c01d15789f1d15b Xianwei Zhao 2026-02-27 @354            if (!aml_chan) {
                                                             ^^^^^^^^
after this NULL check?

c01d15789f1d15b Xianwei Zhao 2026-02-27  355                    
dev_err(aml_dma->dma_device.dev, "idx %d rch not initialized\n", i);
c01d15789f1d15b Xianwei Zhao 2026-02-27  356                    done &= ~BIT(i);
c01d15789f1d15b Xianwei Zhao 2026-02-27  357                    continue;
c01d15789f1d15b Xianwei Zhao 2026-02-27  358            }
c01d15789f1d15b Xianwei Zhao 2026-02-27  359            aml_chan->status = (err 
& (1 << i)) ? DMA_ERROR : DMA_COMPLETE;
c01d15789f1d15b Xianwei Zhao 2026-02-27  360            
dma_cookie_complete(&aml_chan->desc);
c01d15789f1d15b Xianwei Zhao 2026-02-27  361            
dmaengine_desc_get_callback_invoke(&aml_chan->desc, NULL);
c01d15789f1d15b Xianwei Zhao 2026-02-27  362            done &= ~BIT(i);
c01d15789f1d15b Xianwei Zhao 2026-02-27  363    }
c01d15789f1d15b Xianwei Zhao 2026-02-27  364  
c01d15789f1d15b Xianwei Zhao 2026-02-27  365    /* deal with wch normal 
complete and error */
c01d15789f1d15b Xianwei Zhao 2026-02-27  366    regmap_read(aml_dma->regmap, 
DMA_BATCH_END, &end);
c01d15789f1d15b Xianwei Zhao 2026-02-27  367    if (end)
c01d15789f1d15b Xianwei Zhao 2026-02-27  368            
regmap_write(aml_dma->regmap, CLEAR_W_BATCH, end);
c01d15789f1d15b Xianwei Zhao 2026-02-27  369  
c01d15789f1d15b Xianwei Zhao 2026-02-27  370    regmap_read(aml_dma->regmap, 
WCH_DONE, &done);
c01d15789f1d15b Xianwei Zhao 2026-02-27  371    regmap_read(aml_dma->regmap, 
WCH_EOC_DONE, &eoc_done);
c01d15789f1d15b Xianwei Zhao 2026-02-27  372    done = done | eoc_done;
c01d15789f1d15b Xianwei Zhao 2026-02-27  373  
c01d15789f1d15b Xianwei Zhao 2026-02-27  374    regmap_read(aml_dma->regmap, 
WCH_ERR, &err);
c01d15789f1d15b Xianwei Zhao 2026-02-27  375    regmap_read(aml_dma->regmap, 
WDMA_RESP_ERR, &err_l);
c01d15789f1d15b Xianwei Zhao 2026-02-27  376    err = err | err_l;
c01d15789f1d15b Xianwei Zhao 2026-02-27  377  
c01d15789f1d15b Xianwei Zhao 2026-02-27  378    done = done | err;
c01d15789f1d15b Xianwei Zhao 2026-02-27  379    i = 0;
c01d15789f1d15b Xianwei Zhao 2026-02-27  380    while (done) {
c01d15789f1d15b Xianwei Zhao 2026-02-27  381            i = ffs(done) - 1;
c01d15789f1d15b Xianwei Zhao 2026-02-27  382            aml_chan = 
aml_dma->aml_wch[i];
c01d15789f1d15b Xianwei Zhao 2026-02-27  383            
regmap_write(aml_dma->regmap, CLEAR_WCH, BIT(aml_chan->chan_id));
c01d15789f1d15b Xianwei Zhao 2026-02-27  384            if (!aml_chan) {

Same.

c01d15789f1d15b Xianwei Zhao 2026-02-27  385                    
dev_err(aml_dma->dma_device.dev, "idx %d wch not initialized\n", i);
c01d15789f1d15b Xianwei Zhao 2026-02-27  386                    done &= ~BIT(i);
c01d15789f1d15b Xianwei Zhao 2026-02-27  387                    continue;
c01d15789f1d15b Xianwei Zhao 2026-02-27  388            }
c01d15789f1d15b Xianwei Zhao 2026-02-27  389            aml_chan->status = (err 
& (1 << i)) ? DMA_ERROR : DMA_COMPLETE;
c01d15789f1d15b Xianwei Zhao 2026-02-27  390            
dma_cookie_complete(&aml_chan->desc);
c01d15789f1d15b Xianwei Zhao 2026-02-27  391            
dmaengine_desc_get_callback_invoke(&aml_chan->desc, NULL);
c01d15789f1d15b Xianwei Zhao 2026-02-27  392            done &= ~BIT(i);
c01d15789f1d15b Xianwei Zhao 2026-02-27  393    }
c01d15789f1d15b Xianwei Zhao 2026-02-27  394  
c01d15789f1d15b Xianwei Zhao 2026-02-27  395    return IRQ_HANDLED;
c01d15789f1d15b Xianwei Zhao 2026-02-27  396  }

[ snip ]

c01d15789f1d15b Xianwei Zhao 2026-02-27  450  static int aml_dma_probe(struct 
platform_device *pdev)
c01d15789f1d15b Xianwei Zhao 2026-02-27  451  {
c01d15789f1d15b Xianwei Zhao 2026-02-27  452    struct device_node *np = 
pdev->dev.of_node;
c01d15789f1d15b Xianwei Zhao 2026-02-27  453    struct dma_device *dma_dev;
c01d15789f1d15b Xianwei Zhao 2026-02-27  454    struct aml_dma_dev *aml_dma;
c01d15789f1d15b Xianwei Zhao 2026-02-27  455    int ret, i, len;
c01d15789f1d15b Xianwei Zhao 2026-02-27  456    u32 chan_nr;
c01d15789f1d15b Xianwei Zhao 2026-02-27  457  
c01d15789f1d15b Xianwei Zhao 2026-02-27  458    const struct regmap_config 
aml_regmap_config = {
c01d15789f1d15b Xianwei Zhao 2026-02-27  459            .reg_bits = 32,
c01d15789f1d15b Xianwei Zhao 2026-02-27  460            .val_bits = 32,
c01d15789f1d15b Xianwei Zhao 2026-02-27  461            .reg_stride = 4,
c01d15789f1d15b Xianwei Zhao 2026-02-27  462            .max_register = 0x3000,
c01d15789f1d15b Xianwei Zhao 2026-02-27  463    };
c01d15789f1d15b Xianwei Zhao 2026-02-27  464  
c01d15789f1d15b Xianwei Zhao 2026-02-27  465    ret = of_property_read_u32(np, 
"dma-channels", &chan_nr);
c01d15789f1d15b Xianwei Zhao 2026-02-27  466    if (ret)
c01d15789f1d15b Xianwei Zhao 2026-02-27  467            return 
dev_err_probe(&pdev->dev, ret, "failed to read dma-channels\n");
c01d15789f1d15b Xianwei Zhao 2026-02-27  468  
c01d15789f1d15b Xianwei Zhao 2026-02-27  469    len = sizeof(struct 
aml_dma_dev) + sizeof(struct aml_dma_chan) * chan_nr;
c01d15789f1d15b Xianwei Zhao 2026-02-27  470    aml_dma = 
devm_kzalloc(&pdev->dev, len, GFP_KERNEL);
c01d15789f1d15b Xianwei Zhao 2026-02-27  471    if (!aml_dma)
c01d15789f1d15b Xianwei Zhao 2026-02-27  472            return -ENOMEM;
c01d15789f1d15b Xianwei Zhao 2026-02-27  473  
c01d15789f1d15b Xianwei Zhao 2026-02-27  474    aml_dma->chan_nr = chan_nr;
c01d15789f1d15b Xianwei Zhao 2026-02-27  475  
c01d15789f1d15b Xianwei Zhao 2026-02-27  476    aml_dma->base = 
devm_platform_ioremap_resource(pdev, 0);
c01d15789f1d15b Xianwei Zhao 2026-02-27  477    if (IS_ERR(aml_dma->base))
c01d15789f1d15b Xianwei Zhao 2026-02-27  478            return 
PTR_ERR(aml_dma->base);
c01d15789f1d15b Xianwei Zhao 2026-02-27  479  
c01d15789f1d15b Xianwei Zhao 2026-02-27  480    aml_dma->regmap = 
devm_regmap_init_mmio(&pdev->dev, aml_dma->base,
c01d15789f1d15b Xianwei Zhao 2026-02-27  481                                    
        &aml_regmap_config);
c01d15789f1d15b Xianwei Zhao 2026-02-27  482    if 
(IS_ERR_OR_NULL(aml_dma->regmap))

This should just be if (IS_ERR(aml_dma->regmap)) since
devm_regmap_init_mmio() can't return NULL.
https://staticthinking.wordpress.com/2022/08/01/mixing-error-pointers-and-null/


c01d15789f1d15b Xianwei Zhao 2026-02-27 @483            return 
PTR_ERR(aml_dma->regmap);
c01d15789f1d15b Xianwei Zhao 2026-02-27  484  
c01d15789f1d15b Xianwei Zhao 2026-02-27  485    aml_dma->clk = 
devm_clk_get_enabled(&pdev->dev, NULL);
c01d15789f1d15b Xianwei Zhao 2026-02-27  486    if (IS_ERR(aml_dma->clk))
c01d15789f1d15b Xianwei Zhao 2026-02-27  487            return 
PTR_ERR(aml_dma->clk);
c01d15789f1d15b Xianwei Zhao 2026-02-27  488  
c01d15789f1d15b Xianwei Zhao 2026-02-27  489    aml_dma->irq = 
platform_get_irq(pdev, 0);
c01d15789f1d15b Xianwei Zhao 2026-02-27  490  
c01d15789f1d15b Xianwei Zhao 2026-02-27  491    aml_dma->pdev = pdev;
c01d15789f1d15b Xianwei Zhao 2026-02-27  492    aml_dma->dma_device.dev = 
&pdev->dev;
c01d15789f1d15b Xianwei Zhao 2026-02-27  493  
c01d15789f1d15b Xianwei Zhao 2026-02-27  494    dma_dev = &aml_dma->dma_device;
c01d15789f1d15b Xianwei Zhao 2026-02-27  495    
INIT_LIST_HEAD(&dma_dev->channels);

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


Reply via email to