Hi Shiva,

On Wed, May 29, 2024 at 03:54:58PM +0530, Shiva sagar Myana wrote:
> 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.my...@amd.com>

With the subject line modified to below (for clarity):

"hw/net/can/xlnx-versal-canfd: Fix sorting of the tx queue"

Reviewed-by: Francisco Iglesias <francisco.igles...@amd.com>

BR,
F

> ---
>  hw/net/can/xlnx-versal-canfd.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/net/can/xlnx-versal-canfd.c b/hw/net/can/xlnx-versal-canfd.c
> index 47a14cfe63..5f083c21e9 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)
> -- 
> 2.34.1
> 

Reply via email to