aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShiva sagar Myana <Shivasagar.Myana@amd.com>2024-06-18 16:22:20 +0100
committerPeter Maydell <peter.maydell@linaro.org>2024-06-21 14:01:58 +0100
commit35e71ec53581fc8a90dfff1565e4ba344945cf80 (patch)
tree97473d21a6a23f48909aab0d90c4c2c13fb2ac50
parent02d9c38236cf8c9826e5c5be61780c4444cb4ae0 (diff)
downloadqemu-35e71ec53581fc8a90dfff1565e4ba344945cf80.zip
qemu-35e71ec53581fc8a90dfff1565e4ba344945cf80.tar.gz
qemu-35e71ec53581fc8a90dfff1565e4ba344945cf80.tar.bz2
hw/net/can/xlnx-versal-canfd: Fix sorting of the tx queue
Returning an uint32_t casted to a gint from g_cmp_ids causes the tx queue to become wrongly sorted when executing g_slist_sort. Fix this by always returning -1 or 1 from g_cmp_ids based on the ID comparison instead. Also, if two message IDs are the same, sort them by using their index and transmit the message at the lowest index first. Signed-off-by: Shiva sagar Myana <Shivasagar.Myana@amd.com> Reviewed-by: Francisco Iglesias <francisco.iglesias@amd.com> Message-id: 20240603051732.3334571-1-Shivasagar.Myana@amd.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--hw/net/can/xlnx-versal-canfd.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/hw/net/can/xlnx-versal-canfd.c b/hw/net/can/xlnx-versal-canfd.c
index 47a14cf..5f083c2 100644
--- a/hw/net/can/xlnx-versal-canfd.c
+++ b/hw/net/can/xlnx-versal-canfd.c
@@ -1312,7 +1312,10 @@ static gint g_cmp_ids(gconstpointer data1, gconstpointer data2)
tx_ready_reg_info *tx_reg_1 = (tx_ready_reg_info *) data1;
tx_ready_reg_info *tx_reg_2 = (tx_ready_reg_info *) data2;
- return tx_reg_1->can_id - tx_reg_2->can_id;
+ if (tx_reg_1->can_id == tx_reg_2->can_id) {
+ return (tx_reg_1->reg_num < tx_reg_2->reg_num) ? -1 : 1;
+ }
+ return (tx_reg_1->can_id < tx_reg_2->can_id) ? -1 : 1;
}
static void free_list(GSList *list)