@@ -2326,6 +2326,22 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev)
secure_dsp = !(of_property_read_bool(rdev->of_node, "qcom,non-secure-domain"));
data->secure = secure_dsp;
+ kref_init(&data->refcount);
+
+ dev_set_drvdata(&rpdev->dev, data);
+ rdev->dma_mask = &data->dma_mask;
+ dma_set_mask_and_coherent(rdev, DMA_BIT_MASK(32));
+ INIT_LIST_HEAD(&data->users);
+ INIT_LIST_HEAD(&data->invoke_interrupted_mmaps);
+ spin_lock_init(&data->lock);
+ idr_init(&data->ctx_idr);
+ data->domain_id = domain_id;
+ data->rpdev = rpdev;
+
+ err = of_platform_populate(rdev->of_node, NULL, NULL, rdev);
+ if (err)
+ goto err_free_data;
+
switch (domain_id) {
case ADSP_DOMAIN_ID:
case MDSP_DOMAIN_ID:
@@ -2353,22 +2369,6 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev)
goto err_free_data;
}
- kref_init(&data->refcount);
-
- dev_set_drvdata(&rpdev->dev, data);
- rdev->dma_mask = &data->dma_mask;
- dma_set_mask_and_coherent(rdev, DMA_BIT_MASK(32));
- INIT_LIST_HEAD(&data->users);
- INIT_LIST_HEAD(&data->invoke_interrupted_mmaps);
- spin_lock_init(&data->lock);
- idr_init(&data->ctx_idr);
- data->domain_id = domain_id;
- data->rpdev = rpdev;
-
- err = of_platform_populate(rdev->of_node, NULL, NULL, rdev);
- if (err)
- goto err_deregister_fdev;
-
return 0;
err_deregister_fdev:
During rpmsg_probe, fastrpc device nodes are created first, then channel specific resources are initialized, followed by of_platform_populate, which triggers context bank probing. This sequence can cause issues as applications might open the device node before channel resources are initialized or the session is available, leading to problems. For example, spin_lock is initialized after the device node creation, but it is used in device_open, potentially before initialization. Move device registration after channel resource initialization in fastrpc_rpmsg_probe. Fixes: f6f9279f2bf0e ("misc: fastrpc: Add Qualcomm fastrpc basic driver model") Cc: stable@kernel.org Signed-off-by: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com> --- Patch v1: https://lore.kernel.org/all/20250517072432.1331803-1-ekansh.gupta@oss.qualcomm.com/ Changes in v2: - Moved device registration after channel resource initialization to resolve the problem. - Modified commit text accordingly. drivers/misc/fastrpc.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-)