summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLizhi Hou <lizhi.hou@amd.com>2026-04-13 11:18:43 -0700
committerLizhi Hou <lizhi.hou@amd.com>2026-04-14 09:10:54 -0700
commitc83ad8ea6b0a53f1ed61ae0b4b9606bdfe338b33 (patch)
tree0d19a5331e17bdf78ce01624be9adf3c7aaaa087
parent1bcfa4c4e88a554d1b6f98f4e3f886288581cbb4 (diff)
downloadlinux-c83ad8ea6b0a53f1ed61ae0b4b9606bdfe338b33.tar.gz
linux-c83ad8ea6b0a53f1ed61ae0b4b9606bdfe338b33.zip
accel/amdxdna: Fix order of canceled mailbox messages
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
-rw-r--r--drivers/accel/amdxdna/amdxdna_mailbox.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/accel/amdxdna/amdxdna_mailbox.c b/drivers/accel/amdxdna/amdxdna_mailbox.c
index 84a7e92562ad..336e5e77f18a 100644
--- a/drivers/accel/amdxdna/amdxdna_mailbox.c
+++ b/drivers/accel/amdxdna/amdxdna_mailbox.c
@@ -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);