linux/drivers/remoteproc
Arnaud Pouliquen b32d60a852 remoteproc: core: Fix ida_free call while not allocated
commit 7378aeb664 upstream.

In the rproc_alloc() function, on error, put_device(&rproc->dev) is
called, leading to the call of the rproc_type_release() function.
An error can occurs before ida_alloc is called.

In such case in rproc_type_release(), the condition (rproc->index >= 0) is
true as rproc->index has been  initialized to 0.
ida_free() is called reporting a warning:
[    4.181906] WARNING: CPU: 1 PID: 24 at lib/idr.c:525 ida_free+0x100/0x164
[    4.186378] stm32-display-dsi 5a000000.dsi: Fixed dependency cycle(s) with /soc/dsi@5a000000/panel@0
[    4.188854] ida_free called for id=0 which is not allocated.
[    4.198256] mipi-dsi 5a000000.dsi.0: Fixed dependency cycle(s) with /soc/dsi@5a000000
[    4.203556] Modules linked in: panel_orisetech_otm8009a dw_mipi_dsi_stm(+) gpu_sched dw_mipi_dsi stm32_rproc stm32_crc32 stm32_ipcc(+) optee(+)
[    4.224307] CPU: 1 UID: 0 PID: 24 Comm: kworker/u10:0 Not tainted 6.12.0 #442
[    4.231481] Hardware name: STM32 (Device Tree Support)
[    4.236627] Workqueue: events_unbound deferred_probe_work_func
[    4.242504] Call trace:
[    4.242522]  unwind_backtrace from show_stack+0x10/0x14
[    4.250218]  show_stack from dump_stack_lvl+0x50/0x64
[    4.255274]  dump_stack_lvl from __warn+0x80/0x12c
[    4.260134]  __warn from warn_slowpath_fmt+0x114/0x188
[    4.265199]  warn_slowpath_fmt from ida_free+0x100/0x164
[    4.270565]  ida_free from rproc_type_release+0x38/0x60
[    4.275832]  rproc_type_release from device_release+0x30/0xa0
[    4.281601]  device_release from kobject_put+0xc4/0x294
[    4.286762]  kobject_put from rproc_alloc.part.0+0x208/0x28c
[    4.292430]  rproc_alloc.part.0 from devm_rproc_alloc+0x80/0xc4
[    4.298393]  devm_rproc_alloc from stm32_rproc_probe+0xd0/0x844 [stm32_rproc]
[    4.305575]  stm32_rproc_probe [stm32_rproc] from platform_probe+0x5c/0xbc

Calling ida_alloc earlier in rproc_alloc ensures that the rproc->index is
properly set.

Fixes: 08333b911f ("remoteproc: Directly use ida_alloc()/free()")
Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20241122175127.2188037-1-arnaud.pouliquen@foss.st.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-02-08 09:52:37 +01:00
..
da8xx_remoteproc.c remoteproc: da8xx: Convert to platform remove callback returning void 2023-05-09 11:45:22 -06:00
imx_dsp_rproc.c remoteproc: Explicitly include correct DT includes 2023-07-15 10:35:50 -07:00
imx_rproc.c remoteproc: imx_rproc: Use imx specific hook for find_loaded_rsc_table 2024-10-17 15:24:19 +02:00
imx_rproc.h remoteproc: imx_rproc: Switch iMX8MN/MP from SMCCC to MMIO 2023-07-27 10:44:17 -06:00
ingenic_rproc.c remoteproc: ingenic: Request IRQ disabled 2021-12-06 10:17:44 -07:00
Kconfig remoteproc: stm32: use correct format strings on 64-bit 2023-06-22 09:54:44 +02:00
keystone_remoteproc.c remoteproc: keystone: Convert to platform remove callback returning void 2023-05-09 11:48:38 -06:00
Makefile drivers: remoteproc: Add Xilinx r5 remoteproc driver 2022-11-25 09:12:05 -07:00
meson_mx_ao_arc.c remoteproc: meson_mx_ao_arc: Convert to platform remove callback returning void 2023-05-09 13:17:22 -06:00
mtk_common.h remoteproc: mediatek: Fix side effect of mt8195 sram power on 2022-04-11 09:56:42 -06:00
mtk_scp.c remoteproc: mediatek: Make sure IPI buffer fits in L2TCM 2024-05-25 16:22:55 +02:00
mtk_scp_ipi.c remoteproc/mtk_scpi_ipi: Fix one kernel-doc comment 2023-03-16 12:12:18 -06:00
omap_remoteproc.c remoteproc: Explicitly include correct DT includes 2023-07-15 10:35:50 -07:00
omap_remoteproc.h remoteproc/omap: Switch to SPDX license identifiers 2020-03-25 22:29:51 -07:00
pru_rproc.c remoteproc: pru: add support for configuring GPMUX based on client setup 2023-08-21 15:19:28 -06:00
pru_rproc.h remoteproc: pru: Add support for PRU specific interrupt configuration 2020-12-10 10:56:01 -06:00
qcom_common.c remoteproc: qcom: Expand MD_* as MINIDUMP_* 2023-07-15 13:26:52 -07:00
qcom_common.h remoteproc updates for v6.3 2023-02-26 12:18:36 -08:00
qcom_pil_info.c remoteproc: qcom: pil_info: Don't memcpy_toio more than is provided 2021-12-13 16:58:05 -06:00
qcom_pil_info.h remoteproc: qcom: Introduce helper to store pil info in IMEM 2020-07-01 22:10:18 -07:00
qcom_q6v5.c soc: qcom: aoss: Tidy up qmp_send() callers 2023-08-13 19:27:32 -07:00
qcom_q6v5.h remoteproc: qcom: q6v5: Add interconnect path proxy vote 2022-03-11 14:22:03 -06:00
qcom_q6v5_adsp.c remoteproc: qcom: Use of_reserved_mem_lookup() 2023-07-15 12:39:48 -07:00
qcom_q6v5_mss.c remoteproc: qcom_q6v5_mss: Re-order writes to the IMEM region 2024-12-09 10:32:29 +01:00
qcom_q6v5_pas.c remoteproc: qcom: pas: enable SAR2130P audio DSP support 2025-01-09 13:31:45 +01:00
qcom_q6v5_wcss.c remoteproc: qcom: q6v5: use devm_platform_ioremap_resource_byname() 2023-07-15 13:09:35 -07:00
qcom_sysmon.c remoteproc: Explicitly include correct DT includes 2023-07-15 10:35:50 -07:00
qcom_wcnss.c remoteproc: qcom: wcnss: use devm_platform_ioremap_resource_byname() 2023-07-15 13:10:34 -07:00
qcom_wcnss.h remoteproc: qcom: wcnss: remove unused qcom_iris_driver declaration 2022-12-28 09:50:07 -06:00
qcom_wcnss_iris.c remoteproc: Explicitly include correct DT includes 2023-07-15 10:35:50 -07:00
rcar_rproc.c remoteproc: Explicitly include correct DT includes 2023-07-15 10:35:50 -07:00
remoteproc_cdev.c remoteproc: core: Move state checking to remoteproc_core 2022-04-14 11:13:33 -06:00
remoteproc_core.c remoteproc: core: Fix ida_free call while not allocated 2025-02-08 09:52:37 +01:00
remoteproc_coredump.c remoteproc: core: Export the rproc coredump APIs 2023-07-15 12:56:48 -07:00
remoteproc_debugfs.c remoteproc: Don't bother checking the return value of debugfs_create* 2022-04-11 10:04:40 -06:00
remoteproc_elf_helpers.h remoteproc: fix an typo in fw_elf_get_class code comments 2021-07-28 14:57:30 -05:00
remoteproc_elf_loader.c ELF: fix all "Elf" typos 2023-04-08 13:45:37 -07:00
remoteproc_internal.h remoteproc: core: Export the rproc coredump APIs 2023-07-15 12:56:48 -07:00
remoteproc_sysfs.c remoteproc: core: Move state checking to remoteproc_core 2022-04-14 11:13:33 -06:00
remoteproc_virtio.c remoteproc: virtio: Fix wdg cannot recovery remote processor 2024-04-03 15:28:16 +02:00
st_remoteproc.c remoteproc: st: Convert to platform remove callback returning void 2023-05-09 13:37:08 -06:00
st_slim_rproc.c remoteproc: Explicitly include correct DT includes 2023-07-15 10:35:50 -07:00
stm32_rproc.c remoteproc: stm32_rproc: Fix mailbox interrupts queuing 2024-08-03 08:54:30 +02:00
ti_k3_dsp_remoteproc.c remoteproc: Explicitly include correct DT includes 2023-07-15 10:35:50 -07:00
ti_k3_r5_remoteproc.c remoteproc: k3-r5: Delay notification of wakeup event 2024-10-10 11:58:04 +02:00
ti_sci_proc.h remoteproc: k3: Add TI-SCI processor control helper functions 2020-07-28 17:06:43 -07:00
wkup_m3_rproc.c remoteproc: Explicitly include correct DT includes 2023-07-15 10:35:50 -07:00
xlnx_r5_remoteproc.c remoteproc: Remove unnecessary (void*) conversions 2023-04-03 11:01:08 -06:00