Re: [PATCH 12/13] serial: linflexuart: Add DMA support

From: Dan Carpenter

Date: Thu Feb 19 2026 - 03:22:57 EST


Hi Larisa,

kernel test robot noticed the following build warnings:

https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Larisa-Grigore/serial-linflexuart-Fix-locking-in-set_termios/20260216-231403
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git tty-testing
patch link: https://lore.kernel.org/r/20260216150205.212318-13-larisa.grigore%40oss.nxp.com
patch subject: [PATCH 12/13] serial: linflexuart: Add DMA support
config: i386-randconfig-141-20260217 (https://download.01.org/0day-ci/archive/20260217/202602171109.6YSFXcJ3-lkp@xxxxxxxxx/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
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 <lkp@xxxxxxxxx>
| Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
| Closes: https://lore.kernel.org/r/202602171109.6YSFXcJ3-lkp@xxxxxxxxx/

smatch warnings:
drivers/tty/serial/fsl_linflexuart.c:1441 linflex_probe() warn: missing unwind goto?

vim +1441 drivers/tty/serial/fsl_linflexuart.c

09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1377 static int linflex_probe(struct platform_device *pdev)
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1378 {
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1379 struct device_node *np = pdev->dev.of_node;
1d3f5f07fafc71 Radu Pirea 2026-02-16 1380 struct linflex_port *lfport;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1381 struct uart_port *sport;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1382 struct resource *res;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1383 int ret;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1384
1d3f5f07fafc71 Radu Pirea 2026-02-16 1385 lfport = devm_kzalloc(&pdev->dev, sizeof(*lfport), GFP_KERNEL);
1d3f5f07fafc71 Radu Pirea 2026-02-16 1386 if (!lfport)
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1387 return -ENOMEM;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1388
1d3f5f07fafc71 Radu Pirea 2026-02-16 1389 sport = &lfport->port;
0b34325c5f79f1 Larisa Grigore 2026-02-16 1390 sport->dev = &pdev->dev;
0b34325c5f79f1 Larisa Grigore 2026-02-16 1391
0b34325c5f79f1 Larisa Grigore 2026-02-16 1392 lfport->dma_tx_chan = dma_request_chan(sport->dev, "tx");
0b34325c5f79f1 Larisa Grigore 2026-02-16 1393 if (IS_ERR(lfport->dma_tx_chan)) {
0b34325c5f79f1 Larisa Grigore 2026-02-16 1394 ret = PTR_ERR(lfport->dma_tx_chan);
0b34325c5f79f1 Larisa Grigore 2026-02-16 1395 if (ret == -EPROBE_DEFER)
0b34325c5f79f1 Larisa Grigore 2026-02-16 1396 return ret;
0b34325c5f79f1 Larisa Grigore 2026-02-16 1397
0b34325c5f79f1 Larisa Grigore 2026-02-16 1398 dev_info(sport->dev,
0b34325c5f79f1 Larisa Grigore 2026-02-16 1399 "DMA tx channel request failed, operating without tx DMA %ld\n",
0b34325c5f79f1 Larisa Grigore 2026-02-16 1400 PTR_ERR(lfport->dma_tx_chan));
0b34325c5f79f1 Larisa Grigore 2026-02-16 1401 lfport->dma_tx_chan = NULL;
0b34325c5f79f1 Larisa Grigore 2026-02-16 1402 }
0b34325c5f79f1 Larisa Grigore 2026-02-16 1403
0b34325c5f79f1 Larisa Grigore 2026-02-16 1404 lfport->dma_rx_chan = dma_request_chan(sport->dev, "rx");
0b34325c5f79f1 Larisa Grigore 2026-02-16 1405 if (IS_ERR(lfport->dma_rx_chan)) {
0b34325c5f79f1 Larisa Grigore 2026-02-16 1406 ret = PTR_ERR(lfport->dma_rx_chan);
0b34325c5f79f1 Larisa Grigore 2026-02-16 1407 if (ret == -EPROBE_DEFER) {
0b34325c5f79f1 Larisa Grigore 2026-02-16 1408 dma_release_channel(lfport->dma_tx_chan);
0b34325c5f79f1 Larisa Grigore 2026-02-16 1409 return ret;
0b34325c5f79f1 Larisa Grigore 2026-02-16 1410 }
0b34325c5f79f1 Larisa Grigore 2026-02-16 1411
0b34325c5f79f1 Larisa Grigore 2026-02-16 1412 dev_info(sport->dev,
0b34325c5f79f1 Larisa Grigore 2026-02-16 1413 "DMA rx channel request failed, operating without rx DMA %ld\n",
0b34325c5f79f1 Larisa Grigore 2026-02-16 1414 PTR_ERR(lfport->dma_rx_chan));
0b34325c5f79f1 Larisa Grigore 2026-02-16 1415 lfport->dma_rx_chan = NULL;
0b34325c5f79f1 Larisa Grigore 2026-02-16 1416 }
1d3f5f07fafc71 Radu Pirea 2026-02-16 1417
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1418 ret = of_alias_get_id(np, "serial");
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1419 if (ret < 0) {
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1420 dev_err(&pdev->dev, "failed to get alias id, errno %d\n", ret);
0b34325c5f79f1 Larisa Grigore 2026-02-16 1421 goto linflex_probe_free_dma;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1422 }
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1423 if (ret >= UART_NR) {
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1424 dev_err(&pdev->dev, "driver limited to %d serial ports\n",
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1425 UART_NR);
0b34325c5f79f1 Larisa Grigore 2026-02-16 1426 ret = -ENOMEM;
0b34325c5f79f1 Larisa Grigore 2026-02-16 1427 goto linflex_probe_free_dma;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1428 }
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1429
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1430 sport->line = ret;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1431
8c6d7e5fd50b45 Yangtao Li 2023-07-12 1432 sport->membase = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
0b34325c5f79f1 Larisa Grigore 2026-02-16 1433 if (IS_ERR(sport->membase)) {
0b34325c5f79f1 Larisa Grigore 2026-02-16 1434 ret = PTR_ERR(sport->membase);
0b34325c5f79f1 Larisa Grigore 2026-02-16 1435 goto linflex_probe_free_dma;
0b34325c5f79f1 Larisa Grigore 2026-02-16 1436 }
8c6d7e5fd50b45 Yangtao Li 2023-07-12 1437 sport->mapbase = res->start;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1438
4e8da86fc1f767 Zhang Shurong 2023-08-26 1439 ret = platform_get_irq(pdev, 0);
4e8da86fc1f767 Zhang Shurong 2023-08-26 1440 if (ret < 0)
4e8da86fc1f767 Zhang Shurong 2023-08-26 @1441 return ret;

No clean up?

4e8da86fc1f767 Zhang Shurong 2023-08-26 1442
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1443 sport->iotype = UPIO_MEM;
4e8da86fc1f767 Zhang Shurong 2023-08-26 1444 sport->irq = ret;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1445 sport->ops = &linflex_pops;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1446 sport->flags = UPF_BOOT_AUTOCONF;
4151bbed79f98b Dmitry Safonov 2019-12-13 1447 sport->has_sysrq = IS_ENABLED(CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE);
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1448
1d3f5f07fafc71 Radu Pirea 2026-02-16 1449 ret = linflex_init_clk(lfport);
1d3f5f07fafc71 Radu Pirea 2026-02-16 1450 if (ret)
0b34325c5f79f1 Larisa Grigore 2026-02-16 1451 goto linflex_probe_free_dma;
1d3f5f07fafc71 Radu Pirea 2026-02-16 1452
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1453 linflex_ports[sport->line] = sport;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1454
1d3f5f07fafc71 Radu Pirea 2026-02-16 1455 platform_set_drvdata(pdev, lfport);
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1456
1d3f5f07fafc71 Radu Pirea 2026-02-16 1457 ret = uart_add_one_port(&linflex_reg, sport);
0b34325c5f79f1 Larisa Grigore 2026-02-16 1458 if (ret) {
1d3f5f07fafc71 Radu Pirea 2026-02-16 1459 clk_bulk_disable_unprepare(LINFLEX_CLK_NUM, lfport->clks);
0b34325c5f79f1 Larisa Grigore 2026-02-16 1460 goto linflex_probe_free_dma;
0b34325c5f79f1 Larisa Grigore 2026-02-16 1461 }
0b34325c5f79f1 Larisa Grigore 2026-02-16 1462
0b34325c5f79f1 Larisa Grigore 2026-02-16 1463 return 0;
0b34325c5f79f1 Larisa Grigore 2026-02-16 1464
0b34325c5f79f1 Larisa Grigore 2026-02-16 1465 linflex_probe_free_dma:
0b34325c5f79f1 Larisa Grigore 2026-02-16 1466 if (lfport->dma_tx_chan)
0b34325c5f79f1 Larisa Grigore 2026-02-16 1467 dma_release_channel(lfport->dma_tx_chan);
0b34325c5f79f1 Larisa Grigore 2026-02-16 1468 if (lfport->dma_rx_chan)
0b34325c5f79f1 Larisa Grigore 2026-02-16 1469 dma_release_channel(lfport->dma_rx_chan);
1d3f5f07fafc71 Radu Pirea 2026-02-16 1470
1d3f5f07fafc71 Radu Pirea 2026-02-16 1471 return ret;
09864c1cdf5c53 Stefan-gabriel Mirea 2019-08-09 1472 }

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