]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mailbox: mailbox-test: make data_ready a per-instance variable
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Fri, 17 Apr 2026 07:42:36 +0000 (09:42 +0200)
committerJassi Brar <jassisinghbrar@gmail.com>
Sat, 18 Apr 2026 18:10:14 +0000 (13:10 -0500)
While not the default case, multiple tests can be run simultaneously.
Then, data_ready being a global variable will be overwritten and the
per-instance lock will not help. Turn the global variable into a
per-instance one to avoid this problem.

Fixes: e339c80af95e ("mailbox: mailbox-test: don't rely on rx_buffer content to signal data ready")
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
drivers/mailbox/mailbox-test.c

index ec591616fe46b2ade6ac405f2e7117d530f100df..7b6ef033e77a9fa2bda974a26b978b9af488f8c5 100644 (file)
@@ -28,8 +28,6 @@
 #define MBOX_HEXDUMP_MAX_LEN   (MBOX_HEXDUMP_LINE_LEN *                \
                                 (MBOX_MAX_MSG_LEN / MBOX_BYTES_PER_LINE))
 
-static bool mbox_data_ready;
-
 struct mbox_test_device {
        struct device           *dev;
        void __iomem            *tx_mmio;
@@ -42,6 +40,7 @@ struct mbox_test_device {
        spinlock_t              lock;
        struct mutex            mutex;
        wait_queue_head_t       waitq;
+       bool                    data_ready;
        struct fasync_struct    *async_queue;
        struct dentry           *root_debugfs_dir;
 };
@@ -162,7 +161,7 @@ static bool mbox_test_message_data_ready(struct mbox_test_device *tdev)
        unsigned long flags;
 
        spin_lock_irqsave(&tdev->lock, flags);
-       data_ready = mbox_data_ready;
+       data_ready = tdev->data_ready;
        spin_unlock_irqrestore(&tdev->lock, flags);
 
        return data_ready;
@@ -227,7 +226,7 @@ static ssize_t mbox_test_message_read(struct file *filp, char __user *userbuf,
        *(touser + l) = '\0';
 
        memset(tdev->rx_buffer, 0, MBOX_MAX_MSG_LEN);
-       mbox_data_ready = false;
+       tdev->data_ready = false;
 
        spin_unlock_irqrestore(&tdev->lock, flags);
 
@@ -297,7 +296,7 @@ static void mbox_test_receive_message(struct mbox_client *client, void *message)
                                     message, MBOX_MAX_MSG_LEN);
                memcpy(tdev->rx_buffer, message, MBOX_MAX_MSG_LEN);
        }
-       mbox_data_ready = true;
+       tdev->data_ready = true;
        spin_unlock_irqrestore(&tdev->lock, flags);
 
        wake_up_interruptible(&tdev->waitq);