Patch "mailbox: mtk-cmdq: Move devm_mbox_controller_register() after devm_pm_runtime_enable()" has been added to the 6.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    mailbox: mtk-cmdq: Move devm_mbox_controller_register() after devm_pm_runtime_enable()

to the 6.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mailbox-mtk-cmdq-move-devm_mbox_controller_register-.patch
and it can be found in the queue-6.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 839805d914d14bfa52a74bf915d74a8942ae788d
Author: Jason-JH.Lin <jason-jh.lin@xxxxxxxxxxxx>
Date:   Thu Jul 18 22:17:04 2024 +0800

    mailbox: mtk-cmdq: Move devm_mbox_controller_register() after devm_pm_runtime_enable()
    
    [ Upstream commit a8bd68e4329f9a0ad1b878733e0f80be6a971649 ]
    
    When mtk-cmdq unbinds, a WARN_ON message with condition
    pm_runtime_get_sync() < 0 occurs.
    
    According to the call tracei below:
      cmdq_mbox_shutdown
      mbox_free_channel
      mbox_controller_unregister
      __devm_mbox_controller_unregister
      ...
    
    The root cause can be deduced to be calling pm_runtime_get_sync() after
    calling pm_runtime_disable() as observed below:
    1. CMDQ driver uses devm_mbox_controller_register() in cmdq_probe()
       to bind the cmdq device to the mbox_controller, so
       devm_mbox_controller_unregister() will automatically unregister
       the device bound to the mailbox controller when the device-managed
       resource is removed. That means devm_mbox_controller_unregister()
       and cmdq_mbox_shoutdown() will be called after cmdq_remove().
    2. CMDQ driver also uses devm_pm_runtime_enable() in cmdq_probe() after
       devm_mbox_controller_register(), so that devm_pm_runtime_disable()
       will be called after cmdq_remove(), but before
       devm_mbox_controller_unregister().
    
    To fix this problem, cmdq_probe() needs to move
    devm_mbox_controller_register() after devm_pm_runtime_enable() to make
    devm_pm_runtime_disable() be called after
    devm_mbox_controller_unregister().
    
    Fixes: 623a6143a845 ("mailbox: mediatek: Add Mediatek CMDQ driver")
    Signed-off-by: Jason-JH.Lin <jason-jh.lin@xxxxxxxxxxxx>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx>
    Signed-off-by: Jassi Brar <jassisinghbrar@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c
index 4aa394e91109c..63b5e3fe75281 100644
--- a/drivers/mailbox/mtk-cmdq-mailbox.c
+++ b/drivers/mailbox/mtk-cmdq-mailbox.c
@@ -662,12 +662,6 @@ static int cmdq_probe(struct platform_device *pdev)
 		cmdq->mbox.chans[i].con_priv = (void *)&cmdq->thread[i];
 	}
 
-	err = devm_mbox_controller_register(dev, &cmdq->mbox);
-	if (err < 0) {
-		dev_err(dev, "failed to register mailbox: %d\n", err);
-		return err;
-	}
-
 	platform_set_drvdata(pdev, cmdq);
 
 	WARN_ON(clk_bulk_prepare(cmdq->pdata->gce_num, cmdq->clocks));
@@ -695,6 +689,12 @@ static int cmdq_probe(struct platform_device *pdev)
 	pm_runtime_set_autosuspend_delay(dev, CMDQ_MBOX_AUTOSUSPEND_DELAY_MS);
 	pm_runtime_use_autosuspend(dev);
 
+	err = devm_mbox_controller_register(dev, &cmdq->mbox);
+	if (err < 0) {
+		dev_err(dev, "failed to register mailbox: %d\n", err);
+		return err;
+	}
+
 	return 0;
 }
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux