On Tue, 31 Jan 2023, Bjoern A. Zeeb wrote:

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 <dumbb...@freebsd.org>
AuthorDate: 2023-01-11 22:22:07 +0000
Commit:     Jean-Sébastien Pédron <dumbb...@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?

Never mind, I did.  Too late.

We could still fully pass the const through but that'll indeed need more
#ifdef to the implementation.

/bz


   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

Reply via email to