Re: git: a83b3ec719eb - main - linuxkpi: list_sort()'s callback now takes list arguments

From: Bjoern A. Zeeb <bz_at_FreeBSD.org>
Date: Tue, 31 Jan 2023 23:34:33 UTC
On Tue, 31 Jan 2023, Jean-Sébastien Pédron wrote:

> The branch main has been updated by dumbbell (ports committer):
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=a83b3ec719eb6c53658656b7b90607564d3c64d3
>
> commit a83b3ec719eb6c53658656b7b90607564d3c64d3
> Author:     Jean-Sébastien Pédron <dumbbell@FreeBSD.org>
> AuthorDate: 2023-01-11 22:22:07 +0000
> Commit:     Jean-Sébastien Pédron <dumbbell@FreeBSD.org>
> CommitDate: 2023-01-31 22:36:33 +0000
>
>    linuxkpi: list_sort()'s callback now takes list arguments

Does that description miss a ... takes "const" list ... ?

>    This change breaks the API of `list_sort()`. `LINUXKPI_VERSION >= 51300`
>    is used to keep the header compatible with both versions of the
>    prototype.

Given our internals half way through already dal with "const" I see
little harm in making it const unconditionally.  The actual
LINUXKPI_VERSION check probably should be around the DECONST lines in
linux_le_cmp() and in list_sort_thunk ; if we really wanted to not
lose the "const" half way through for newer versions which are prepared
for it.

Non-const arguments passed in to list_sort() will still work and we can
avoid having an extern with const but an implementation without (not
sure why that's not giving warnings anyway).

Or am I misreading the change?


>    Reviewed by:    manu
>    Approved by:    manu
>    Differential Revision:  https://reviews.freebsd.org/D38082
> ---
> sys/compat/linuxkpi/common/include/linux/list.h | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/sys/compat/linuxkpi/common/include/linux/list.h b/sys/compat/linuxkpi/common/include/linux/list.h
> index 80ac57fecf6d..6ec715291807 100644
> --- a/sys/compat/linuxkpi/common/include/linux/list.h
> +++ b/sys/compat/linuxkpi/common/include/linux/list.h
> @@ -504,7 +504,12 @@ static inline int list_is_last(const struct list_head *list,
> 	     (pos) && ({ n = (pos)->member.next; 1; });			\
> 	     pos = hlist_entry_safe(n, typeof(*(pos)), member))
>
> +#if defined(LINUXKPI_VERSION) && LINUXKPI_VERSION >= 51300
> +extern void list_sort(void *priv, struct list_head *head, int (*cmp)(void *priv,
> +    const struct list_head *a, const struct list_head *b));
> +#else
> extern void list_sort(void *priv, struct list_head *head, int (*cmp)(void *priv,
>     struct list_head *a, struct list_head *b));
> +#endif
>
> #endif /* _LINUXKPI_LINUX_LIST_H_ */
>

-- 
Bjoern A. Zeeb                                                     r15:7