]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mailbox: mailbox-test: initialize struct earlier
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Fri, 17 Apr 2026 07:42:35 +0000 (09:42 +0200)
committerJassi Brar <jassisinghbrar@gmail.com>
Sat, 18 Apr 2026 18:10:14 +0000 (13:10 -0500)
The waitqueue must be initialized before the debugfs files are created
because from that time, requests from userspace can already be made.
Similarily, drvdata and spinlock needs to be initialized before we
request the channel, otherwise dangling irqs might run into problems
like a NULL pointer exception.

Fixes: 8ea4484d0c2b ("mailbox: Add generic mechanism for testing Mailbox Controllers")
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
drivers/mailbox/mailbox-test.c

index 0a56b593fcace9af3d1368175165287afb9414fb..ec591616fe46b2ade6ac405f2e7117d530f100df 100644 (file)
@@ -382,6 +382,12 @@ static int mbox_test_probe(struct platform_device *pdev)
        if (!tdev)
                return -ENOMEM;
 
+       tdev->dev = &pdev->dev;
+       spin_lock_init(&tdev->lock);
+       mutex_init(&tdev->mutex);
+       init_waitqueue_head(&tdev->waitq);
+       platform_set_drvdata(pdev, tdev);
+
        /* It's okay for MMIO to be NULL */
        tdev->tx_mmio = mbox_test_ioremap(pdev, 0);
 
@@ -400,12 +406,6 @@ static int mbox_test_probe(struct platform_device *pdev)
        if (!tdev->rx_channel && (tdev->rx_mmio != tdev->tx_mmio))
                tdev->rx_channel = tdev->tx_channel;
 
-       tdev->dev = &pdev->dev;
-       platform_set_drvdata(pdev, tdev);
-
-       spin_lock_init(&tdev->lock);
-       mutex_init(&tdev->mutex);
-
        if (tdev->rx_channel) {
                tdev->rx_buffer = devm_kzalloc(&pdev->dev,
                                               MBOX_MAX_MSG_LEN, GFP_KERNEL);
@@ -419,7 +419,6 @@ static int mbox_test_probe(struct platform_device *pdev)
        if (ret)
                goto err_free_chans;
 
-       init_waitqueue_head(&tdev->waitq);
        dev_info(&pdev->dev, "Successfully registered\n");
 
        return 0;