]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
accel/amdxdna: Fix order of canceled mailbox messages
authorLizhi Hou <lizhi.hou@amd.com>
Mon, 13 Apr 2026 18:18:43 +0000 (11:18 -0700)
committerLizhi Hou <lizhi.hou@amd.com>
Tue, 14 Apr 2026 16:10:54 +0000 (09:10 -0700)
Mailbox message IDs are allocated cyclically. When destroying a mailbox
channel, pending messages are canceled starting from message ID 0. This
results in an incorrect cancellation order when the ID of the last posted
message wraps around and is smaller than the ID of the first posted
message.

Fix this by canceling pending messages starting from the next available
message ID, ensuring the correct ordering across wraparound.

Fixes: a37d78470bcc ("accel/amdxdna: Replace idr api with xarray")
Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
Signed-off-by: Lizhi Hou <lizhi.hou@amd.com>
Link: https://patch.msgid.link/20260413181843.670796-1-lizhi.hou@amd.com
drivers/accel/amdxdna/amdxdna_mailbox.c

index 84a7e92562ad0d60b7ce282d0d47ea7df0ca613c..336e5e77f18a97f632784b72b8c33070a83cc3c9 100644 (file)
@@ -549,7 +549,9 @@ void xdna_mailbox_stop_channel(struct mailbox_channel *mb_chann)
        drain_workqueue(mb_chann->work_q);
 
        /* We can clean up and release resources */
-       xa_for_each(&mb_chann->chan_xa, msg_id, mb_msg)
+       xa_for_each_start(&mb_chann->chan_xa, msg_id, mb_msg, mb_chann->next_msgid)
+               mailbox_release_msg(mb_chann, mb_msg);
+       xa_for_each_range(&mb_chann->chan_xa, msg_id, mb_msg, 0, mb_chann->next_msgid - 1)
                mailbox_release_msg(mb_chann, mb_msg);
        xa_destroy(&mb_chann->chan_xa);