From: Dan Carpenter <dan.carpenter@linaro.org>
To: Alain Volmat <alain.volmat@foss.st.com>
Cc: linux-spi@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: [bug report] spi: stm32: properly fail on dma_request_chan error
Date: Fri, 6 Feb 2026 16:40:51 +0300 [thread overview]
Message-ID: <aYXvY6NH7OlZ-OAF@stanley.mountain> (raw)
In-Reply-To: <caa37f28-a2e8-4e0a-a9ce-a365ce805e4b@stanley.mountain>
[ Smatch checking is paused while we raise funding. #SadFace
https://lore.kernel.org/all/aTaiGSbWZ9DJaGo7@stanley.mountain/ -dan ]
Hello Alain Volmat,
Commit c266d19b7d4e ("spi: stm32: properly fail on dma_request_chan
error") from Dec 18, 2025 (linux-next), leads to the following Smatch
static checker warning:
drivers/spi/spi-stm32.c:2578 stm32_spi_probe()
error: 'spi->dma_rx' dereferencing possible ERR_PTR()
drivers/spi/spi-stm32.c
2480 if (STM32_SPI_DEVICE_MODE(spi))
2481 ctrl->target_abort = stm32h7_spi_device_abort;
2482
2483 spi->dma_tx = dma_request_chan(spi->dev, "tx");
2484 if (IS_ERR(spi->dma_tx)) {
2485 ret = PTR_ERR(spi->dma_tx);
2486 if (ret == -ENODEV) {
2487 dev_info(&pdev->dev, "tx dma disabled\n");
2488 spi->dma_tx = NULL;
2489 } else {
2490 dev_err_probe(&pdev->dev, ret, "failed to request tx dma channel\n");
2491 goto err_clk_disable;
2492 }
2493 } else {
2494 ctrl->dma_tx = spi->dma_tx;
2495 }
2496
2497 spi->dma_rx = dma_request_chan(spi->dev, "rx");
2498 if (IS_ERR(spi->dma_rx)) {
2499 ret = PTR_ERR(spi->dma_rx);
2500 if (ret == -ENODEV) {
2501 dev_info(&pdev->dev, "rx dma disabled\n");
2502 spi->dma_rx = NULL;
2503 } else {
2504 dev_err_probe(&pdev->dev, ret, "failed to request rx dma channel\n");
2505 goto err_dma_release;
spi->dma_rx is an erorr pointer at this goto so it will crash.
2506 }
2507 } else {
2508 ctrl->dma_rx = spi->dma_rx;
2509 }
2510
2511 if (spi->dma_tx || spi->dma_rx)
2512 ctrl->can_dma = stm32_spi_can_dma;
2513
2514 spi->sram_pool = of_gen_pool_get(pdev->dev.of_node, "sram", 0);
2515 if (spi->sram_pool) {
2516 spi->sram_rx_buf_size = gen_pool_size(spi->sram_pool);
2517 dev_info(&pdev->dev, "SRAM pool: %zu KiB for RX DMA/MDMA chaining\n",
2518 spi->sram_rx_buf_size / 1024);
2519 spi->sram_rx_buf = gen_pool_dma_zalloc(spi->sram_pool, spi->sram_rx_buf_size,
2520 &spi->sram_dma_rx_buf);
2521 if (!spi->sram_rx_buf) {
2522 dev_err(&pdev->dev, "failed to allocate SRAM buffer\n");
2523 } else {
2524 spi->mdma_rx = dma_request_chan(spi->dev, "rxm2m");
2525 if (IS_ERR(spi->mdma_rx)) {
2526 ret = PTR_ERR(spi->mdma_rx);
2527 spi->mdma_rx = NULL;
2528 if (ret == -EPROBE_DEFER) {
2529 goto err_pool_free;
2530 } else {
2531 gen_pool_free(spi->sram_pool,
2532 (unsigned long)spi->sram_rx_buf,
2533 spi->sram_rx_buf_size);
2534 dev_warn(&pdev->dev,
2535 "failed to request rx mdma channel, DMA only\n");
2536 }
2537 }
2538 }
2539 }
2540
2541 pm_runtime_set_autosuspend_delay(&pdev->dev,
2542 STM32_SPI_AUTOSUSPEND_DELAY);
2543 pm_runtime_use_autosuspend(&pdev->dev);
2544 pm_runtime_set_active(&pdev->dev);
2545 pm_runtime_get_noresume(&pdev->dev);
2546 pm_runtime_enable(&pdev->dev);
2547
2548 ret = spi_register_controller(ctrl);
2549 if (ret) {
2550 dev_err(&pdev->dev, "spi controller registration failed: %d\n",
2551 ret);
2552 goto err_pm_disable;
2553 }
2554
2555 pm_runtime_put_autosuspend(&pdev->dev);
2556
2557 dev_info(&pdev->dev, "driver initialized (%s mode)\n",
2558 STM32_SPI_HOST_MODE(spi) ? "host" : "device");
2559
2560 return 0;
2561
2562 err_pm_disable:
2563 pm_runtime_disable(&pdev->dev);
2564 pm_runtime_put_noidle(&pdev->dev);
2565 pm_runtime_set_suspended(&pdev->dev);
2566 pm_runtime_dont_use_autosuspend(&pdev->dev);
2567
2568 if (spi->mdma_rx)
2569 dma_release_channel(spi->mdma_rx);
2570 err_pool_free:
2571 if (spi->sram_pool)
2572 gen_pool_free(spi->sram_pool, (unsigned long)spi->sram_rx_buf,
2573 spi->sram_rx_buf_size);
2574 err_dma_release:
2575 if (spi->dma_tx)
2576 dma_release_channel(spi->dma_tx);
2577 if (spi->dma_rx)
--> 2578 dma_release_channel(spi->dma_rx);
^^^^^^^^^^^
Here.
2579 err_clk_disable:
2580 clk_disable_unprepare(spi->clk);
2581
2582 return ret;
2583 }
regards,
dan carpenter
next prev parent reply other threads:[~2026-02-06 13:41 UTC|newest]
Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-08 10:02 Support needed to continue Smatch work Dan Carpenter
2026-02-06 13:38 ` Dan Carpenter
2026-02-06 13:38 ` [bug report] net: ethtool: Introduce per-PHY DUMP operations Dan Carpenter
2026-02-06 17:04 ` Maxime Chevallier
2026-02-09 7:09 ` Dan Carpenter
2026-02-09 8:09 ` Maxime Chevallier
2026-02-09 13:10 ` Andrew Lunn
2026-02-10 10:37 ` Dan Carpenter
2026-02-06 13:38 ` [bug report] net: wwan: Add Qualcomm BAM-DMUX WWAN network driver Dan Carpenter
2026-02-06 15:12 ` Stephan Gerhold
2026-02-06 15:23 ` Dan Carpenter
2026-02-06 13:38 ` [bug report] iommu/amd: Introduce gDomID-to-hDomID Mapping and handle parent domain invalidation Dan Carpenter
2026-02-06 13:38 ` [bug report] drm/amdkfd: add debug set and clear address watch points operation Dan Carpenter
2026-02-06 13:38 ` [PATCH next] mtd: spi-nor: hisi-sfc: fix refcounting bug in hisi_spi_nor_register_all() Dan Carpenter
2026-02-06 13:38 ` Dan Carpenter
2026-02-06 14:14 ` Pratyush Yadav
2026-02-06 14:14 ` Pratyush Yadav
2026-02-06 14:22 ` Miquel Raynal
2026-02-06 14:22 ` Miquel Raynal
2026-02-06 14:23 ` Miquel Raynal
2026-02-06 14:23 ` Miquel Raynal
2026-02-06 13:39 ` [bug report] media: synopsys: add driver for the designware mipi csi-2 receiver Dan Carpenter
2026-02-06 13:39 ` [bug report] crush: remove forcefeed functionality Dan Carpenter
2026-02-06 20:44 ` Viacheslav Dubeyko
2026-02-06 13:39 ` [bug report] net: ethernet: ti: am65-cpsw: enable bc/mc storm prevention support Dan Carpenter
2026-02-06 13:39 ` [bug report] phy: qcom: qmp-usbc: Add QCS615 USB/DP PHY config and DP mode support Dan Carpenter
2026-02-06 13:39 ` Dan Carpenter
2026-02-17 15:27 ` Konrad Dybcio
2026-02-17 15:27 ` Konrad Dybcio
2026-02-27 5:11 ` Xiangxu Yin
2026-02-27 5:11 ` Xiangxu Yin
2026-02-06 13:39 ` [bug report] drm/amd/display: add DC changes for DCN351 Dan Carpenter
2026-02-06 13:39 ` [bug report] media: rockchip: rkcif: add support for rk3568 vicap mipi capture Dan Carpenter
2026-02-06 13:39 ` Dan Carpenter
2026-02-16 13:33 ` Michael Riesch
2026-02-16 13:33 ` Michael Riesch
2026-02-06 13:39 ` [bug report] drm/imagination: Add gpuid module parameter Dan Carpenter
2026-02-06 13:39 ` [bug report] ASoC: SOF: ipc4-control: Add support for generic bytes control Dan Carpenter
2026-02-06 13:39 ` [bug report] media: iris: gen1: Destroy internal buffers after FW releases Dan Carpenter
2026-02-06 13:39 ` [bug report] cifs: Fix locking usage for tcon fields Dan Carpenter
2026-02-06 13:40 ` [bug report] drm/xe: Avoid toggling schedule state to check LRC timestamp in TDR Dan Carpenter
2026-02-06 13:40 ` [bug report] iio: dac: adding support for Microchip MCP47FEB02 Dan Carpenter
2026-02-06 14:04 ` Andy Shevchenko
2026-02-06 14:33 ` Dan Carpenter
2026-02-06 15:14 ` Andy Shevchenko
2026-02-06 15:32 ` Dan Carpenter
2026-02-06 15:57 ` Andy Shevchenko
2026-02-10 10:26 ` Ariana.Lazar
2026-03-01 12:31 ` Jonathan Cameron
2026-03-02 10:28 ` Ariana.Lazar
2026-03-03 21:41 ` Jonathan Cameron
2026-02-06 13:40 ` [bug report] power: sequencing: qcom-wcn: add support for WCN39xx Dan Carpenter
2026-02-06 13:40 ` [bug report] io_uring: add task fork hook Dan Carpenter
2026-02-06 14:28 ` Jens Axboe
2026-02-06 13:40 ` [bug report] ACPI: battery: Adjust event notification routine Dan Carpenter
2026-02-06 21:28 ` [PATCH v1] ACPI: battery: Drop redundant check from acpi_battery_notify() Rafael J. Wysocki
2026-02-06 13:40 ` [bug report] iio: adc: Add support for ad4062 Dan Carpenter
2026-02-06 14:07 ` Andy Shevchenko
2026-03-01 12:34 ` Jonathan Cameron
2026-03-05 17:10 ` Jorge Marques
2026-02-06 13:40 ` [bug report] ext4: refactor zeroout path and handle all cases Dan Carpenter
2026-02-06 15:44 ` Ojaswin Mujoo
2026-02-06 13:40 ` [bug report] media: chips-media: wave5: Fix Null reference while testing fluster Dan Carpenter
2026-02-11 7:59 ` Nas Chung
2026-02-06 13:40 ` [bug report] phy: apple: Add Apple Type-C PHY Dan Carpenter
2026-02-06 13:40 ` Dan Carpenter
2026-02-06 21:47 ` Janne Grunau
2026-02-06 21:47 ` Janne Grunau
2026-02-06 21:48 ` Sven Peter
2026-02-06 21:48 ` Sven Peter
2026-02-06 13:40 ` Dan Carpenter [this message]
2026-02-06 13:40 ` [bug report] tracing: Properly process error handling in event_hist_trigger_parse() Dan Carpenter
2026-02-06 13:40 ` [bug report] drm/amd/display: Only poll analog connectors Dan Carpenter
2026-02-06 13:41 ` [bug report] fs/ntfs3: Add initialization of super block Dan Carpenter
2026-02-09 10:20 ` Konstantin Komarov
2026-02-09 15:35 ` [PATCH] (resend: correct threading) fs/ntfs3: avoid calling run_get_entry() when run == NULL in ntfs_read_run_nb_ra() Konstantin Komarov
2026-02-06 13:41 ` [bug report] remoteproc: imx_rproc: Introduce prepare ops for imx_rproc_dcfg Dan Carpenter
2026-02-06 16:29 ` Mathieu Poirier
2026-02-08 11:45 ` Peng Fan
2026-02-06 13:41 ` [bug report] irqchip/ls-extirq: Convert to a platform driver to make it work again Dan Carpenter
2026-02-06 13:41 ` [bug report] soc: rockchip: grf: Support multiple grf to be handled Dan Carpenter
2026-02-06 13:41 ` Dan Carpenter
2026-02-06 13:41 ` [bug report] drm/amdgpu: fix possible fence leaks from job structure Dan Carpenter
2026-02-06 13:41 ` [bug report] bio: add allocation cache abstraction Dan Carpenter
2026-02-06 13:41 ` [bug report] ASoC: codecs: ACF bin parsing and check library file for aw88395 Dan Carpenter
2026-02-06 13:41 ` [bug report] xfrm: always fail xfrm_dev_{state,policy}_flush_secctx_check() Dan Carpenter
2026-02-06 14:05 ` Tetsuo Handa
2026-02-09 9:43 ` [bug report] wifi: mwifiex: Allocate dev name earlier for interface workqueue name Dan Carpenter
2026-02-09 9:44 ` [bug report] apparmor: add support loading per permission tagging Dan Carpenter
2026-02-10 17:15 ` [apparmor][PATCH] apparmor: fix signedness bug in unpack_tags() Massimiliano Pellizzer
2026-02-09 9:45 ` [bug report] regulator: s2mps11: add S2MPG10 regulator Dan Carpenter
2026-02-09 14:07 ` André Draszik
2026-02-10 8:43 ` [bug report] btrfs: tests: zoned: add tests cases for zoned code Dan Carpenter
2026-02-10 19:05 ` David Sterba
2026-02-10 8:51 ` [bug report] ASoC: SOF: sof-audio: Add support for loopback capture Dan Carpenter
2026-02-13 5:56 ` [bug report] bpf: Fix a potential use-after-free of BTF object Dan Carpenter
2026-02-13 10:29 ` Anton Protopopov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aYXvY6NH7OlZ-OAF@stanley.mountain \
--to=dan.carpenter@linaro.org \
--cc=alain.volmat@foss.st.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.