All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/9] Enable support for kernel 5.15
@ 2021-10-13 11:55 Jan Kiszka
  2021-10-13 11:55 ` [PATCH 1/9] cobalt/dovetail: Use IRQ_WORK_INIT to please 5.11+ Jan Kiszka
                   ` (9 more replies)
  0 siblings, 10 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:55 UTC (permalink / raw)
  To: xenomai

Most of these are harmless conversions with backward-compatible
wrappings. Only the last patch is a bit hairy as I'm unsure whether the
new detection mechanism for vDSO VMAs is truly reliable. Therefore, this
patch is not (yet?) targeting next, thus 3.2-rc2.

Jan


CC: Philippe Gerum <rpm@xenomai.org>

Jan Kiszka (9):
  cobalt/dovetail: Use IRQ_WORK_INIT to please 5.11+
  cobalt: Use close_fd for kernel 5.14+
  cobalt: Use linux/stdarg.h
  cobalt/posix: Add required FORCE makefile rule
  cobalt/thread: Switch to MAX_RT_PRIO
  cobalt: Use fallthrough key word rather than comments
  drivers/can: Drop MODULE_SUPPORTED_DEVICE
  drivers/net/e1000e: Add missing ethtool.h include
  cobalt/debug: Detect vDSO via absence of vm_file

 .../kernel/dovetail/pipeline/inband_work.h    |  6 +-----
 kernel/cobalt/debug.c                         | 12 +++++------
 kernel/cobalt/heap.c                          |  2 +-
 .../include/asm-generic/xenomai/wrappers.h    | 19 ++++++++++++++++++
 kernel/cobalt/include/linux/stdarg.h          |  1 +
 kernel/cobalt/posix/Makefile                  |  4 ++--
 kernel/cobalt/posix/compat.c                  |  2 +-
 kernel/cobalt/posix/mqueue.c                  |  2 +-
 kernel/cobalt/posix/process.c                 |  2 +-
 kernel/cobalt/posix/sched.c                   |  6 +++---
 kernel/cobalt/posix/signal.c                  |  2 +-
 kernel/cobalt/posix/signal.h                  |  2 +-
 kernel/cobalt/posix/thread.h                  |  2 +-
 kernel/cobalt/rtdm/core.c                     |  4 ++--
 kernel/cobalt/rtdm/fd.c                       |  2 +-
 kernel/cobalt/synch.c                         |  2 +-
 kernel/cobalt/thread.c                        |  4 ++--
 kernel/cobalt/timer.c                         |  2 +-
 kernel/cobalt/vfile.c                         |  2 +-
 .../analogy/national_instruments/mio_common.c |  2 +-
 .../drivers/can/peak_canfd/rtcan_peak_canfd.c |  2 +-
 .../can/peak_canfd/rtcan_peak_pciefd.c        |  3 +--
 kernel/drivers/can/rtcan_flexcan.c            |  2 +-
 kernel/drivers/can/rtcan_raw_dev.c            |  2 +-
 kernel/drivers/can/sja1000/rtcan_adv_pci.c    |  1 -
 kernel/drivers/can/sja1000/rtcan_ems_pci.c    |  1 -
 kernel/drivers/can/sja1000/rtcan_esd_pci.c    |  2 --
 kernel/drivers/can/sja1000/rtcan_isa.c        |  1 -
 kernel/drivers/can/sja1000/rtcan_ixxat_pci.c  |  1 -
 kernel/drivers/can/sja1000/rtcan_mem.c        |  1 -
 kernel/drivers/can/sja1000/rtcan_peak_dng.c   |  1 -
 kernel/drivers/can/sja1000/rtcan_peak_pci.c   | 11 +++++-----
 kernel/drivers/can/sja1000/rtcan_plx_pci.c    |  7 -------
 kernel/drivers/can/sja1000/rtcan_sja1000.c    |  1 -
 kernel/drivers/ipc/bufp.c                     |  2 +-
 kernel/drivers/ipc/iddp.c                     |  2 +-
 kernel/drivers/ipc/xddp.c                     |  2 +-
 kernel/drivers/net/drivers/e1000/e1000_hw.c   | 20 +++++++++----------
 kernel/drivers/net/drivers/e1000/e1000_main.c |  2 +-
 kernel/drivers/net/drivers/e1000e/82571.c     |  4 ++--
 kernel/drivers/net/drivers/e1000e/e1000.h     |  1 +
 kernel/drivers/net/drivers/e1000e/ich8lan.c   |  8 ++++----
 kernel/drivers/net/drivers/e1000e/netdev.c    |  4 ++--
 .../experimental/e1000/e1000_ethtool.c        |  4 ++--
 .../drivers/experimental/e1000/e1000_main.c   | 10 +++++-----
 .../drivers/experimental/e1000/e1000_param.c  |  2 +-
 kernel/drivers/net/drivers/igb/e1000_82575.c  |  4 ++--
 kernel/drivers/net/drivers/igb/e1000_nvm.c    |  2 +-
 kernel/drivers/net/drivers/igb/e1000_phy.c    |  4 ++--
 kernel/drivers/net/drivers/igb/igb_main.c     | 10 +++++-----
 kernel/drivers/net/stack/ipv4/udp/udp.c       |  2 +-
 kernel/drivers/net/stack/packet/af_packet.c   |  2 +-
 kernel/drivers/testing/switchtest.c           |  2 +-
 scripts/prepare-kernel.sh                     |  1 +
 54 files changed, 101 insertions(+), 103 deletions(-)
 create mode 100644 kernel/cobalt/include/linux/stdarg.h

-- 
2.31.1



^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH 1/9] cobalt/dovetail: Use IRQ_WORK_INIT to please 5.11+
  2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
@ 2021-10-13 11:55 ` Jan Kiszka
  2021-10-13 14:00   ` [PATCH v2 " Jan Kiszka
  2021-10-13 11:55 ` [PATCH 2/9] cobalt: Use close_fd for kernel 5.14+ Jan Kiszka
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:55 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 include/cobalt/kernel/dovetail/pipeline/inband_work.h | 6 +-----
 kernel/cobalt/include/asm-generic/xenomai/wrappers.h  | 7 +++++++
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/include/cobalt/kernel/dovetail/pipeline/inband_work.h b/include/cobalt/kernel/dovetail/pipeline/inband_work.h
index 317a31de70..af3d70fc69 100644
--- a/include/cobalt/kernel/dovetail/pipeline/inband_work.h
+++ b/include/cobalt/kernel/dovetail/pipeline/inband_work.h
@@ -19,11 +19,7 @@ struct pipeline_inband_work {
 
 #define PIPELINE_INBAND_WORK_INITIALIZER(__work, __handler)		\
 	{								\
-		.work = {						\
-			.func = (void (*)(struct irq_work *))		\
-			__handler,					\
-			.flags = ATOMIC_INIT(0),			\
-		},							\
+		.work = IRQ_WORK_INIT((void (*)(struct irq_work *))__handler), \
 	}
 
 #define pipeline_post_inband_work(__work)				\
diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
index 54fdc8b05e..d3423016e9 100644
--- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
+++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
@@ -231,4 +231,11 @@ devm_hwmon_device_register_with_groups(struct device *dev, const char *name,
 	kernel_read_file(__file, 0, __buf, __buf_size, __file_size, __id)
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,11,0)
+#define IRQ_WORK_INIT(_func) (struct irq_work){	\
+	.node = { .u_flags = 0, },		\
+	.func = (_func),			\
+}
+#endif
+
 #endif /* _COBALT_ASM_GENERIC_WRAPPERS_H */
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 2/9] cobalt: Use close_fd for kernel 5.14+
  2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
  2021-10-13 11:55 ` [PATCH 1/9] cobalt/dovetail: Use IRQ_WORK_INIT to please 5.11+ Jan Kiszka
@ 2021-10-13 11:55 ` Jan Kiszka
  2021-10-13 11:55 ` [PATCH 3/9] cobalt: Use linux/stdarg.h Jan Kiszka
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:55 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Wrap it on __close_fd for older kernels.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/cobalt/include/asm-generic/xenomai/wrappers.h | 4 ++++
 kernel/cobalt/rtdm/core.c                            | 4 ++--
 kernel/cobalt/rtdm/fd.c                              | 2 +-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
index d3423016e9..cb3f2b242f 100644
--- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
+++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
@@ -238,4 +238,8 @@ devm_hwmon_device_register_with_groups(struct device *dev, const char *name,
 }
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,14,0)
+#define close_fd(__ufd)	__close_fd(current->files, __ufd)
+#endif
+
 #endif /* _COBALT_ASM_GENERIC_WRAPPERS_H */
diff --git a/kernel/cobalt/rtdm/core.c b/kernel/cobalt/rtdm/core.c
index 2e5aeb44e2..dcced045df 100644
--- a/kernel/cobalt/rtdm/core.c
+++ b/kernel/cobalt/rtdm/core.c
@@ -66,7 +66,7 @@ int __rtdm_anon_getfd(const char *name, int flags)
 
 void __rtdm_anon_putfd(int ufd)
 {
-	__close_fd(current->files, ufd);
+	close_fd(ufd);
 }
 
 static int create_instance(int ufd, struct rtdm_device *dev,
@@ -247,7 +247,7 @@ int __rtdm_dev_socket(int protocol_family, int socket_type,
 fail_socket:
 	cleanup_instance(dev, context);
 fail_create:
-	__close_fd(current->files, ufd);
+	close_fd(ufd);
 fail_getfd:
 	__rtdm_put_device(dev);
 
diff --git a/kernel/cobalt/rtdm/fd.c b/kernel/cobalt/rtdm/fd.c
index c314d9f650..bbeea06ae9 100644
--- a/kernel/cobalt/rtdm/fd.c
+++ b/kernel/cobalt/rtdm/fd.c
@@ -902,7 +902,7 @@ eadv:
 	 * rtdm_fd are still pending.
 	 */
 	__fd_close(ppd, idx, s);
-	__close_fd(current->files, ufd);
+	close_fd(ufd);
 
 	return 0;
 }
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 3/9] cobalt: Use linux/stdarg.h
  2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
  2021-10-13 11:55 ` [PATCH 1/9] cobalt/dovetail: Use IRQ_WORK_INIT to please 5.11+ Jan Kiszka
  2021-10-13 11:55 ` [PATCH 2/9] cobalt: Use close_fd for kernel 5.14+ Jan Kiszka
@ 2021-10-13 11:55 ` Jan Kiszka
  2021-10-13 11:55 ` [PATCH 4/9] cobalt/posix: Add required FORCE makefile rule Jan Kiszka
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:55 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Required with kernel 5.15 to avoid duplicate includes. Provide a stub
for older kernels that continues to use the toolchain header.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/cobalt/heap.c                 | 2 +-
 kernel/cobalt/include/linux/stdarg.h | 1 +
 kernel/cobalt/posix/mqueue.c         | 2 +-
 kernel/cobalt/posix/process.c        | 2 +-
 kernel/cobalt/posix/thread.h         | 2 +-
 kernel/cobalt/synch.c                | 2 +-
 kernel/cobalt/vfile.c                | 2 +-
 scripts/prepare-kernel.sh            | 1 +
 8 files changed, 8 insertions(+), 6 deletions(-)
 create mode 100644 kernel/cobalt/include/linux/stdarg.h

diff --git a/kernel/cobalt/heap.c b/kernel/cobalt/heap.c
index d3f43729e1..f106d5d071 100644
--- a/kernel/cobalt/heap.c
+++ b/kernel/cobalt/heap.c
@@ -16,7 +16,7 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  * 02111-1307, USA.
  */
-#include <stdarg.h>
+#include <linux/stdarg.h>
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
 #include <linux/kernel.h>
diff --git a/kernel/cobalt/include/linux/stdarg.h b/kernel/cobalt/include/linux/stdarg.h
new file mode 100644
index 0000000000..38ade6d9f5
--- /dev/null
+++ b/kernel/cobalt/include/linux/stdarg.h
@@ -0,0 +1 @@
+#include <stdarg.h>
diff --git a/kernel/cobalt/posix/mqueue.c b/kernel/cobalt/posix/mqueue.c
index 9075c80be9..d93c0bdf6d 100644
--- a/kernel/cobalt/posix/mqueue.c
+++ b/kernel/cobalt/posix/mqueue.c
@@ -16,7 +16,7 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-#include <stdarg.h>
+#include <linux/stdarg.h>
 #include <linux/slab.h>
 #include <linux/mm.h>
 #include <linux/sched.h>
diff --git a/kernel/cobalt/posix/process.c b/kernel/cobalt/posix/process.c
index 87b4893b30..935007f821 100644
--- a/kernel/cobalt/posix/process.c
+++ b/kernel/cobalt/posix/process.c
@@ -21,7 +21,7 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  * 02111-1307, USA.
  */
-#include <stdarg.h>
+#include <linux/stdarg.h>
 #include <linux/unistd.h>
 #include <linux/init.h>
 #include <linux/module.h>
diff --git a/kernel/cobalt/posix/thread.h b/kernel/cobalt/posix/thread.h
index 51be372a7a..0959ff6d72 100644
--- a/kernel/cobalt/posix/thread.h
+++ b/kernel/cobalt/posix/thread.h
@@ -18,7 +18,7 @@
 #ifndef _COBALT_POSIX_THREAD_H
 #define _COBALT_POSIX_THREAD_H
 
-#include <stdarg.h>
+#include <linux/stdarg.h>
 #include <linux/types.h>
 #include <linux/time.h>
 #include <linux/signal.h>
diff --git a/kernel/cobalt/synch.c b/kernel/cobalt/synch.c
index 911bc83f60..6e50e537fa 100644
--- a/kernel/cobalt/synch.c
+++ b/kernel/cobalt/synch.c
@@ -16,7 +16,7 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  * 02111-1307, USA.
  */
-#include <stdarg.h>
+#include <linux/stdarg.h>
 #include <linux/signal.h>
 #include <cobalt/kernel/sched.h>
 #include <cobalt/kernel/synch.h>
diff --git a/kernel/cobalt/vfile.c b/kernel/cobalt/vfile.c
index fae0cc3773..a0ec5cad1c 100644
--- a/kernel/cobalt/vfile.c
+++ b/kernel/cobalt/vfile.c
@@ -15,7 +15,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
-#include <stdarg.h>
+#include <linux/stdarg.h>
 #include <linux/ctype.h>
 #include <linux/uaccess.h>
 #include <linux/module.h>
diff --git a/scripts/prepare-kernel.sh b/scripts/prepare-kernel.sh
index 9ee1b3d650..64e2484e16 100755
--- a/scripts/prepare-kernel.sh
+++ b/scripts/prepare-kernel.sh
@@ -453,6 +453,7 @@ patch_link r n include/cobalt/kernel/$pipeline_type/pipeline include/xenomai/pip
 patch_link r n include/cobalt/uapi include/xenomai/cobalt/uapi
 patch_link r n include/rtdm/uapi include/xenomai/rtdm/uapi
 patch_link n version.h include/xenomai include/xenomai
+patch_link n stdarg.h kernel/cobalt/include/linux include/xenomai/linux
 
 if test "x$output_patch" != "x"; then
     if test x$verbose = x1; then
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 4/9] cobalt/posix: Add required FORCE makefile rule
  2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
                   ` (2 preceding siblings ...)
  2021-10-13 11:55 ` [PATCH 3/9] cobalt: Use linux/stdarg.h Jan Kiszka
@ 2021-10-13 11:55 ` Jan Kiszka
  2021-10-13 11:55 ` [PATCH 5/9] cobalt/thread: Switch to MAX_RT_PRIO Jan Kiszka
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:55 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Enforced by recent kernels.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/cobalt/posix/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/cobalt/posix/Makefile b/kernel/cobalt/posix/Makefile
index e941b50114..5b4f3214a0 100644
--- a/kernel/cobalt/posix/Makefile
+++ b/kernel/cobalt/posix/Makefile
@@ -26,9 +26,9 @@ xenomai-y :=		\
 syscall_entries := $(srctree)/$(src)/gen-syscall-entries.sh
 
 quiet_cmd_syscall_entries = GEN     $@
-      cmd_syscall_entries = $(CONFIG_SHELL) '$(syscall_entries)' $^ > $@
+      cmd_syscall_entries = $(CONFIG_SHELL) '$(syscall_entries)' $(filter-out FORCE,$^) > $@
 
-$(obj)/syscall_entries.h: $(syscall_entries) $(wildcard $(srctree)/$(src)/*.c)
+$(obj)/syscall_entries.h: $(syscall_entries) $(wildcard $(srctree)/$(src)/*.c) FORCE
 	$(call if_changed,syscall_entries)
 
 target += syscall_entries.h
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 5/9] cobalt/thread: Switch to MAX_RT_PRIO
  2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
                   ` (3 preceding siblings ...)
  2021-10-13 11:55 ` [PATCH 4/9] cobalt/posix: Add required FORCE makefile rule Jan Kiszka
@ 2021-10-13 11:55 ` Jan Kiszka
  2021-10-13 11:55 ` [PATCH 6/9] cobalt: Use fallthrough key word rather than comments Jan Kiszka
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:55 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Identical to MAX_USER_RT_PRIO which was removed in 5.12.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/cobalt/thread.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/cobalt/thread.c b/kernel/cobalt/thread.c
index 2c1ec6d3a4..2e1667d197 100644
--- a/kernel/cobalt/thread.c
+++ b/kernel/cobalt/thread.c
@@ -2008,8 +2008,8 @@ void __xnthread_propagate_schedparam(struct xnthread *curr)
 	 */
 	if (xnthread_test_state(curr, XNWEAK) && kprio == 0)
 		kpolicy = SCHED_NORMAL;
-	else if (kprio >= MAX_USER_RT_PRIO)
-		kprio = MAX_USER_RT_PRIO - 1;
+	else if (kprio >= MAX_RT_PRIO)
+		kprio = MAX_RT_PRIO - 1;
 
 	if (p->policy != kpolicy || (kprio > 0 && p->rt_priority != kprio)) {
 		param.sched_priority = kprio;
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 6/9] cobalt: Use fallthrough key word rather than comments
  2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
                   ` (4 preceding siblings ...)
  2021-10-13 11:55 ` [PATCH 5/9] cobalt/thread: Switch to MAX_RT_PRIO Jan Kiszka
@ 2021-10-13 11:55 ` Jan Kiszka
  2021-10-13 11:55 ` [PATCH 7/9] drivers/can: Drop MODULE_SUPPORTED_DEVICE Jan Kiszka
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:55 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Kernel 5.14 requires this.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 .../include/asm-generic/xenomai/wrappers.h    |  8 ++++++++
 kernel/cobalt/posix/compat.c                  |  2 +-
 kernel/cobalt/posix/sched.c                   |  6 +++---
 kernel/cobalt/posix/signal.c                  |  2 +-
 kernel/cobalt/posix/signal.h                  |  2 +-
 kernel/cobalt/timer.c                         |  2 +-
 .../analogy/national_instruments/mio_common.c |  2 +-
 .../drivers/can/peak_canfd/rtcan_peak_canfd.c |  2 +-
 .../can/peak_canfd/rtcan_peak_pciefd.c        |  2 +-
 kernel/drivers/can/rtcan_flexcan.c            |  2 +-
 kernel/drivers/can/rtcan_raw_dev.c            |  2 +-
 kernel/drivers/can/sja1000/rtcan_peak_pci.c   | 10 +++++-----
 kernel/drivers/ipc/bufp.c                     |  2 +-
 kernel/drivers/ipc/iddp.c                     |  2 +-
 kernel/drivers/ipc/xddp.c                     |  2 +-
 kernel/drivers/net/drivers/e1000/e1000_hw.c   | 20 +++++++++----------
 kernel/drivers/net/drivers/e1000/e1000_main.c |  2 +-
 kernel/drivers/net/drivers/e1000e/82571.c     |  4 ++--
 kernel/drivers/net/drivers/e1000e/ich8lan.c   |  8 ++++----
 kernel/drivers/net/drivers/e1000e/netdev.c    |  4 ++--
 .../experimental/e1000/e1000_ethtool.c        |  4 ++--
 .../drivers/experimental/e1000/e1000_main.c   | 10 +++++-----
 .../drivers/experimental/e1000/e1000_param.c  |  2 +-
 kernel/drivers/net/drivers/igb/e1000_82575.c  |  4 ++--
 kernel/drivers/net/drivers/igb/e1000_nvm.c    |  2 +-
 kernel/drivers/net/drivers/igb/e1000_phy.c    |  4 ++--
 kernel/drivers/net/drivers/igb/igb_main.c     | 10 +++++-----
 kernel/drivers/net/stack/ipv4/udp/udp.c       |  2 +-
 kernel/drivers/net/stack/packet/af_packet.c   |  2 +-
 kernel/drivers/testing/switchtest.c           |  2 +-
 30 files changed, 68 insertions(+), 60 deletions(-)

diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
index cb3f2b242f..f0f89f9ad2 100644
--- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
+++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
@@ -231,6 +231,14 @@ devm_hwmon_device_register_with_groups(struct device *dev, const char *name,
 	kernel_read_file(__file, 0, __buf, __buf_size, __file_size, __id)
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,4,0)
+#if __has_attribute(__fallthrough__)
+# define fallthrough			__attribute__((__fallthrough__))
+#else
+# define fallthrough			do {} while (0)  /* fallthrough */
+#endif
+#endif
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,11,0)
 #define IRQ_WORK_INIT(_func) (struct irq_work){	\
 	.node = { .u_flags = 0, },		\
diff --git a/kernel/cobalt/posix/compat.c b/kernel/cobalt/posix/compat.c
index 029fe2582a..2ec46084c5 100644
--- a/kernel/cobalt/posix/compat.c
+++ b/kernel/cobalt/posix/compat.c
@@ -424,7 +424,7 @@ int sys32_put_siginfo(void __user *u_si, const struct siginfo *si,
 	case SI_QUEUE:
 	case SI_MESGQ:
 		ret |= __xn_put_user(ptr_to_compat(si->si_ptr), &u_p->si_ptr);
-		/* fallthrough */
+		fallthrough;
 	case SI_USER:
 		ret |= __xn_put_user(si->si_pid, &u_p->si_pid);
 		ret |= __xn_put_user(si->si_uid, &u_p->si_uid);
diff --git a/kernel/cobalt/posix/sched.c b/kernel/cobalt/posix/sched.c
index 4fd9c2b46e..994ee88d95 100644
--- a/kernel/cobalt/posix/sched.c
+++ b/kernel/cobalt/posix/sched.c
@@ -58,7 +58,7 @@ cobalt_sched_policy_param(union xnsched_policy_param *param,
 		 * levels. Otherwise, SCHED_NORMAL is scheduled by
 		 * xnsched_class_rt at priority level #0.
 		 */
-		/* fallthrough */
+		fallthrough;
 	case SCHED_WEAK:
 #ifdef CONFIG_XENO_OPT_SCHED_WEAK
 		if (prio < XNSCHED_WEAK_MIN_PRIO ||
@@ -76,7 +76,7 @@ cobalt_sched_policy_param(union xnsched_policy_param *param,
 		tslice = u_ts2ns(&param_ex->sched_rr_quantum);
 		if (tslice == XN_INFINITE && tslice_r)
 			tslice = *tslice_r;
-		/* fallthrough */
+		fallthrough;
 	case SCHED_FIFO:
 		if (prio < XNSCHED_FIFO_MIN_PRIO ||
 		    prio > XNSCHED_FIFO_MAX_PRIO)
@@ -249,7 +249,7 @@ int set_tp_config(int cpu, union sched_config *config, size_t len)
 	case sched_tp_install:
 		if (config->tp.nr_windows > 0)
 			break;
-		/* fallthrough */
+		fallthrough;
 	case sched_tp_uninstall:
 		gps = NULL;
 		goto set_schedule;
diff --git a/kernel/cobalt/posix/signal.c b/kernel/cobalt/posix/signal.c
index e3ba3abcfb..5f5cb85d19 100644
--- a/kernel/cobalt/posix/signal.c
+++ b/kernel/cobalt/posix/signal.c
@@ -235,7 +235,7 @@ static int signal_put_siginfo(void __user *u_si, const struct siginfo *si,
 	case SI_QUEUE:
 	case SI_MESGQ:
 		ret |= __xn_put_user(si->si_ptr, &u_p->si_ptr);
-		/* fallthrough */
+		fallthrough;
 	case SI_USER:
 		ret |= __xn_put_user(si->si_pid, &u_p->si_pid);
 		ret |= __xn_put_user(si->si_uid, &u_p->si_uid);
diff --git a/kernel/cobalt/posix/signal.h b/kernel/cobalt/posix/signal.h
index 121db8f9b5..0b5d11e813 100644
--- a/kernel/cobalt/posix/signal.h
+++ b/kernel/cobalt/posix/signal.h
@@ -49,7 +49,7 @@ void cobalt_copy_siginfo(int code,
 	case SI_QUEUE:
 	case SI_MESGQ:
 		dst->si_value = src->si_value;
-		/* fallthrough */
+		fallthrough;
 	case SI_USER:
 		dst->si_pid = src->si_pid;
 		dst->si_uid = src->si_uid;
diff --git a/kernel/cobalt/timer.c b/kernel/cobalt/timer.c
index 1ec7617915..4b9cea4a97 100644
--- a/kernel/cobalt/timer.c
+++ b/kernel/cobalt/timer.c
@@ -140,7 +140,7 @@ int xntimer_start(struct xntimer *timer,
 	case XN_REALTIME:
 		timer->status |= XNTIMER_REALTIME;
 		value -= xnclock_get_offset(clock);
-		/* fall through */
+		fallthrough;
 	default: /* XN_ABSOLUTE || XN_REALTIME */
 		date = xnclock_ns_to_ticks(clock, value);
 		if ((xnsticks_t)(date - now) <= 0) {
diff --git a/kernel/drivers/analogy/national_instruments/mio_common.c b/kernel/drivers/analogy/national_instruments/mio_common.c
index 6c5bba0568..b071adcfc9 100644
--- a/kernel/drivers/analogy/national_instruments/mio_common.c
+++ b/kernel/drivers/analogy/national_instruments/mio_common.c
@@ -4014,7 +4014,7 @@ static void ni_gpct_write_register(struct ni_gpct *counter,
 		break;
 	case NITIO_G01_Joint_Reset_Reg:
 		BUG_ON(bits & ~gpct_joint_reset_mask);
-		/* fall-through */
+		fallthrough;
 	default:
 		stc_register = ni_gpct_to_stc_register(reg);
 		devpriv->stc_writew(dev, bits, stc_register);
diff --git a/kernel/drivers/can/peak_canfd/rtcan_peak_canfd.c b/kernel/drivers/can/peak_canfd/rtcan_peak_canfd.c
index e10ff8bbc5..4ecc1e965c 100644
--- a/kernel/drivers/can/peak_canfd/rtcan_peak_canfd.c
+++ b/kernel/drivers/can/peak_canfd/rtcan_peak_canfd.c
@@ -493,7 +493,7 @@ static int peak_canfd_set_mode(struct rtcan_device *rdev, can_mode_t mode,
 		if (rdev->state == CAN_STATE_SLEEPING)
 			break;
 
-		/* fallthrough */
+		fallthrough;
 	default:
 		err = -EOPNOTSUPP;
 		break;
diff --git a/kernel/drivers/can/peak_canfd/rtcan_peak_pciefd.c b/kernel/drivers/can/peak_canfd/rtcan_peak_pciefd.c
index 9ede5a2cc1..445c46e1c7 100644
--- a/kernel/drivers/can/peak_canfd/rtcan_peak_pciefd.c
+++ b/kernel/drivers/can/peak_canfd/rtcan_peak_pciefd.c
@@ -698,7 +698,7 @@ static int pciefd_can_probe(struct pciefd_board *pciefd)
 		pciefd_can_writereg(priv, CANFD_CLK_SEL_80MHZ,
 				    PCIEFD_REG_CAN_CLK_SEL);
 
-		/* fallthrough */
+		fallthrough;
 	case CANFD_CLK_SEL_80MHZ:
 		priv->ucan.rdev->can_sys_clock = 80 * 1000 * 1000;
 		break;
diff --git a/kernel/drivers/can/rtcan_flexcan.c b/kernel/drivers/can/rtcan_flexcan.c
index 601dd0ba42..7569d16f75 100644
--- a/kernel/drivers/can/rtcan_flexcan.c
+++ b/kernel/drivers/can/rtcan_flexcan.c
@@ -604,7 +604,7 @@ static void flexcan_change_state(struct rtcan_device *dev,
 				CAN_ERR_CRTL_TX_WARNING :
 				CAN_ERR_CRTL_RX_WARNING;
 		}
-		/* fallthrough */
+		fallthrough;
 	case CAN_STATE_ERROR_WARNING:
 		/*
 		 * from: ERROR_ACTIVE, ERROR_WARNING
diff --git a/kernel/drivers/can/rtcan_raw_dev.c b/kernel/drivers/can/rtcan_raw_dev.c
index c72c3ced51..d1ff640e33 100644
--- a/kernel/drivers/can/rtcan_raw_dev.c
+++ b/kernel/drivers/can/rtcan_raw_dev.c
@@ -374,7 +374,7 @@ int rtcan_raw_ioctl_dev(struct rtdm_fd *fd, int request, void *arg)
     case SIOCGCANBAUDRATE:
     case SIOCGCANCUSTOMBITTIME:
 	    get = 1;
-	    /* fallthrough */
+	    fallthrough;
     case SIOCSCANMODE:
     case SIOCSCANCTRLMODE:
     case SIOCSCANBAUDRATE:
diff --git a/kernel/drivers/can/sja1000/rtcan_peak_pci.c b/kernel/drivers/can/sja1000/rtcan_peak_pci.c
index bc6439b8fe..42df49acdc 100644
--- a/kernel/drivers/can/sja1000/rtcan_peak_pci.c
+++ b/kernel/drivers/can/sja1000/rtcan_peak_pci.c
@@ -142,7 +142,7 @@ static void rtcan_peak_pci_del_chan(struct rtcan_device *dev,
 	printk("Removing %s %s device %s\n",
 	       peak_pci_board_name, dev->ctrl_name, dev->name);
 	rtcan_sja1000_unregister(dev);
-	/* fallthrough */
+	fallthrough;
     case 5:
 	pita_icr_high = readw(board->conf_addr + PITA_ICR + 2);
 	if (board->channel == CHANNEL_SLAVE) {
@@ -151,17 +151,17 @@ static void rtcan_peak_pci_del_chan(struct rtcan_device *dev,
 	    pita_icr_high &= ~0x0002;
 	}
 	writew(pita_icr_high, board->conf_addr + PITA_ICR + 2);
-	/* fallthrough */
+	fallthrough;
     case 4:
 	iounmap((void *)board->base_addr);
-	/* fallthrough */
+	fallthrough;
     case 3:
 	if (board->channel != CHANNEL_SLAVE)
 	    iounmap((void *)board->conf_addr);
-	/* fallthrough */
+	fallthrough;
     case 2:
 	rtcan_dev_free(dev);
-	/* fallthrough */
+	fallthrough;
     case 1:
 	break;
     }
diff --git a/kernel/drivers/ipc/bufp.c b/kernel/drivers/ipc/bufp.c
index d673ee8f32..fd533dba27 100644
--- a/kernel/drivers/ipc/bufp.c
+++ b/kernel/drivers/ipc/bufp.c
@@ -1035,7 +1035,7 @@ static int bufp_ioctl(struct rtdm_fd *fd,
 	COMPAT_CASE(_RTIOC_BIND):
 		if (rtdm_in_rt_context())
 			return -ENOSYS;	/* Try downgrading to NRT */
-		/* fallthrough */
+		fallthrough;
 	default:
 		ret = __bufp_ioctl(fd, request, arg);
 	}
diff --git a/kernel/drivers/ipc/iddp.c b/kernel/drivers/ipc/iddp.c
index 3a9de845fc..a553902326 100644
--- a/kernel/drivers/ipc/iddp.c
+++ b/kernel/drivers/ipc/iddp.c
@@ -916,7 +916,7 @@ static int iddp_ioctl(struct rtdm_fd *fd,
 	COMPAT_CASE(_RTIOC_BIND):
 		if (rtdm_in_rt_context())
 			return -ENOSYS;	/* Try downgrading to NRT */
-		/* fallthrough */
+		fallthrough;
 	default:
 		ret = __iddp_ioctl(fd, request, arg);
 	}
diff --git a/kernel/drivers/ipc/xddp.c b/kernel/drivers/ipc/xddp.c
index 25dd68a9da..ae5b720c0c 100644
--- a/kernel/drivers/ipc/xddp.c
+++ b/kernel/drivers/ipc/xddp.c
@@ -1079,7 +1079,7 @@ static int xddp_ioctl(struct rtdm_fd *fd,
 	COMPAT_CASE(_RTIOC_BIND):
 		if (rtdm_in_rt_context())
 			return -ENOSYS;	/* Try downgrading to NRT */
-		/* fallthrough */
+		fallthrough;
 	default:
 		ret = __xddp_ioctl(fd, request, arg);
 	}
diff --git a/kernel/drivers/net/drivers/e1000/e1000_hw.c b/kernel/drivers/net/drivers/e1000/e1000_hw.c
index 9c57215373..59c55ffff1 100644
--- a/kernel/drivers/net/drivers/e1000/e1000_hw.c
+++ b/kernel/drivers/net/drivers/e1000/e1000_hw.c
@@ -126,7 +126,7 @@ e1000_set_phy_type(struct e1000_hw *hw)
             hw->phy_type = e1000_phy_igp;
             break;
         }
-        /* fallthrough */
+        fallthrough;
     case IGP03E1000_E_PHY_ID:
         hw->phy_type = e1000_phy_igp_3;
         break;
@@ -140,7 +140,7 @@ e1000_set_phy_type(struct e1000_hw *hw)
             hw->phy_type = e1000_phy_gg82563;
             break;
         }
-        /* fallthrough */
+        fallthrough;
     default:
         /* Should never have loaded on this device */
         hw->phy_type = e1000_phy_undefined;
@@ -373,12 +373,12 @@ e1000_set_mac_type(struct e1000_hw *hw)
         break;
     case e1000_80003es2lan:
         hw->swfw_sync_present = TRUE;
-        /* fall through */
+        fallthrough;
     case e1000_82571:
     case e1000_82572:
     case e1000_82573:
         hw->eeprom_semaphore_present = TRUE;
-        /* fall through */
+        fallthrough;
     case e1000_82541:
     case e1000_82547:
     case e1000_82541_rev_2:
@@ -611,7 +611,7 @@ e1000_reset_hw(struct e1000_hw *hw)
                 E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
                 E1000_WRITE_FLUSH(hw);
             }
-            /* fall through */
+            fallthrough;
         case e1000_82571:
         case e1000_82572:
         case e1000_ich8lan:
@@ -834,7 +834,7 @@ e1000_init_hw(struct e1000_hw *hw)
         reg_data = E1000_READ_REG_ARRAY(hw, FFLT, 0x0001);
         reg_data &= ~0x00100000;
         E1000_WRITE_REG_ARRAY(hw, FFLT, 0x0001, reg_data);
-        /* Fall through */
+        fallthrough;
     case e1000_82571:
     case e1000_82572:
     case e1000_ich8lan:
@@ -5870,7 +5870,7 @@ e1000_rar_set(struct e1000_hw *hw,
     case e1000_80003es2lan:
         if (hw->leave_av_bit_off == TRUE)
             break;
-        /* fallthrough */
+        fallthrough;
     default:
         /* Indicate to hardware the Address is Valid. */
         rar_high |= E1000_RAH_AV;
@@ -6062,7 +6062,7 @@ e1000_setup_led(struct e1000_hw *hw)
                                       ~IGP01E1000_GMII_SPD));
         if (ret_val)
             return ret_val;
-        /* Fall Through */
+        fallthrough;
     default:
         if (hw->media_type == e1000_media_type_fiber) {
             ledctl = E1000_READ_REG(hw, LEDCTL);
@@ -6150,7 +6150,7 @@ e1000_cleanup_led(struct e1000_hw *hw)
                                       hw->phy_spd_default);
         if (ret_val)
             return ret_val;
-        /* Fall Through */
+        fallthrough;
     default:
         if (hw->phy_type == e1000_phy_ife) {
             e1000_write_phy_reg(hw, IFE_PHY_SPECIAL_CONTROL_LED, 0);
@@ -8030,7 +8030,7 @@ e1000_get_phy_cfg_done(struct e1000_hw *hw)
         /* Separate *_CFG_DONE_* bit for each port */
         if (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1)
             cfg_mask = E1000_EEPROM_CFG_DONE_PORT_1;
-        /* Fall Through */
+        fallthrough;
     case e1000_82571:
     case e1000_82572:
         while (timeout) {
diff --git a/kernel/drivers/net/drivers/e1000/e1000_main.c b/kernel/drivers/net/drivers/e1000/e1000_main.c
index 3df35e033c..222709a48f 100644
--- a/kernel/drivers/net/drivers/e1000/e1000_main.c
+++ b/kernel/drivers/net/drivers/e1000/e1000_main.c
@@ -893,7 +893,7 @@ static int e1000_probe(struct pci_dev *pdev,
 				EEPROM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
 			break;
 		}
-		/* Fall Through */
+		fallthrough;
 	default:
 		e1000_read_eeprom(&adapter->hw,
 			EEPROM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
diff --git a/kernel/drivers/net/drivers/e1000e/82571.c b/kernel/drivers/net/drivers/e1000e/82571.c
index a3e65fd26e..1a3fa39d4e 100644
--- a/kernel/drivers/net/drivers/e1000e/82571.c
+++ b/kernel/drivers/net/drivers/e1000e/82571.c
@@ -199,7 +199,7 @@ static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
 			ew32(EECD, eecd);
 			break;
 		}
-		/* Fall Through */
+		fallthrough;
 	default:
 		nvm->type = e1000_nvm_eeprom_spi;
 		size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
@@ -1172,7 +1172,7 @@ static s32 e1000_init_hw_82571(struct e1000_hw *hw)
 	switch (mac->type) {
 	case e1000_82573:
 		e1000e_enable_tx_pkt_filtering(hw);
-		/* fall through */
+		fallthrough;
 	case e1000_82574:
 	case e1000_82583:
 		reg_data = er32(GCR);
diff --git a/kernel/drivers/net/drivers/e1000e/ich8lan.c b/kernel/drivers/net/drivers/e1000e/ich8lan.c
index 4e2e5301e2..8bdcf3d1d4 100644
--- a/kernel/drivers/net/drivers/e1000e/ich8lan.c
+++ b/kernel/drivers/net/drivers/e1000e/ich8lan.c
@@ -397,7 +397,7 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
 			goto out;
 		if ((phy->id != 0) && (phy->id != PHY_REVISION_MASK))
 			break;
-		/* fall-through */
+		fallthrough;
 	case e1000_pch2lan:
 	case e1000_pch_lpt:
 		/*
@@ -770,7 +770,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
 		ret_val = e1000_k1_workaround_lv(hw);
 		if (ret_val)
 			goto out;
-		/* fall-thru */
+		fallthrough;
 	case e1000_pchlan:
 		if (hw->phy.type == e1000_phy_82578) {
 			ret_val = e1000_link_stall_workaround_hv(hw);
@@ -1210,7 +1210,7 @@ static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
 			sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG;
 			break;
 		}
-		/* Fall-thru */
+		fallthrough;
 	case e1000_pchlan:
 	case e1000_pch2lan:
 	case e1000_pch_lpt:
@@ -2267,7 +2267,7 @@ static s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank)
 		}
 		e_dbg("Unable to determine valid NVM bank via EEC - "
 		       "reading flash signature\n");
-		/* fall-thru */
+		fallthrough;
 	default:
 		/* set bank to 0 in case flash read fails */
 		*bank = 0;
diff --git a/kernel/drivers/net/drivers/e1000e/netdev.c b/kernel/drivers/net/drivers/e1000e/netdev.c
index 5ce4679113..20073aa672 100644
--- a/kernel/drivers/net/drivers/e1000e/netdev.c
+++ b/kernel/drivers/net/drivers/e1000e/netdev.c
@@ -1239,7 +1239,7 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)
 			e1000e_reset_interrupt_capability(adapter);
 		}
 		adapter->int_mode = E1000E_INT_MODE_MSI;
-		/* Fall through */
+		fallthrough;
 	case E1000E_INT_MODE_MSI:
 		if (!pci_enable_msi(adapter->pdev)) {
 			adapter->flags |= FLAG_MSI_ENABLED;
@@ -1248,7 +1248,7 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)
 			e_err("Failed to initialize MSI interrupts.  Falling "
 			      "back to legacy interrupts.\n");
 		}
-		/* Fall through */
+		fallthrough;
 	case E1000E_INT_MODE_LEGACY:
 		/* Don't do anything; this is the system default */
 		break;
diff --git a/kernel/drivers/net/drivers/experimental/e1000/e1000_ethtool.c b/kernel/drivers/net/drivers/experimental/e1000/e1000_ethtool.c
index 375aa7f41b..1911673af9 100644
--- a/kernel/drivers/net/drivers/experimental/e1000/e1000_ethtool.c
+++ b/kernel/drivers/net/drivers/experimental/e1000/e1000_ethtool.c
@@ -1565,7 +1565,7 @@ static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
 			E1000_WRITE_REG(hw, E1000_CTRL_EXT, adapter->tx_fifo_head);
 			adapter->tx_fifo_head = 0;
 		}
-		/* fall through */
+		fallthrough;
 	case e1000_82571:
 	case e1000_82572:
 		if (hw->phy.media_type == e1000_media_type_fiber ||
@@ -1575,7 +1575,7 @@ static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
 			msleep(10);
 			break;
 		}
-		/* Fall Through */
+		fallthrough;
 	case e1000_82545:
 	case e1000_82546:
 	case e1000_82545_rev_3:
diff --git a/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c b/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
index c9751c1ddc..64b724c3cb 100644
--- a/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
+++ b/kernel/drivers/net/drivers/experimental/e1000/e1000_main.c
@@ -1314,7 +1314,7 @@ static int e1000_probe(struct pci_dev *pdev,
 				NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
 			break;
 		}
-		/* Fall Through */
+		fallthrough;
 	default:
 		e1000_read_nvm(&adapter->hw,
 			NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
@@ -1536,7 +1536,7 @@ static int e1000_sw_init(struct e1000_adapter *adapter)
 			adapter->num_rx_queues = 2;
 			break;
 		}
-		/* Fall through - remaining ICH SKUs do not support MQ */
+		fallthrough; /* remaining ICH SKUs do not support MQ */
 	default:
 		/* All hardware before 82571 only have 1 queue each for Rx/Tx.
 		 * However, the 82571 family does not have MSI-X, so multi-
@@ -2396,11 +2396,11 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
 		case 3:
 			psrctl |= PAGE_SIZE <<
 				E1000_PSRCTL_BSIZE3_SHIFT;
-			/* fall through */
+			fallthrough;
 		case 2:
 			psrctl |= PAGE_SIZE <<
 				E1000_PSRCTL_BSIZE2_SHIFT;
-			/* fall through */
+			fallthrough;
 		case 1:
 			psrctl |= PAGE_SIZE >>
 				E1000_PSRCTL_BSIZE1_SHIFT;
@@ -3780,7 +3780,7 @@ static int e1000_xmit_frame_ring(struct sk_buff *skb,
 				 * into the next dword */
 				if ((unsigned long)(skb_tail_pointer(skb) - 1) & 4)
 					break;
-				/* fall through */
+				fallthrough;
 			case e1000_82571:
 			case e1000_82572:
 			case e1000_82573:
diff --git a/kernel/drivers/net/drivers/experimental/e1000/e1000_param.c b/kernel/drivers/net/drivers/experimental/e1000/e1000_param.c
index bfead4151e..c5db2cb5c5 100644
--- a/kernel/drivers/net/drivers/experimental/e1000/e1000_param.c
+++ b/kernel/drivers/net/drivers/experimental/e1000/e1000_param.c
@@ -872,7 +872,7 @@ static void e1000_check_copper_options(struct e1000_adapter *adapter)
 	case SPEED_1000 + HALF_DUPLEX:
 		DPRINTK(PROBE, INFO,
 			"Half Duplex is not supported at 1000 Mbps\n");
-		/* fall through */
+		fallthrough;
 	case SPEED_1000 + FULL_DUPLEX:
 full_duplex_only:
 		DPRINTK(PROBE, INFO,
diff --git a/kernel/drivers/net/drivers/igb/e1000_82575.c b/kernel/drivers/net/drivers/igb/e1000_82575.c
index 45bd52a9e2..fff9e85926 100644
--- a/kernel/drivers/net/drivers/igb/e1000_82575.c
+++ b/kernel/drivers/net/drivers/igb/e1000_82575.c
@@ -608,7 +608,7 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw)
 			break;
 		}
 		/* for I2C based SGMII: */
-		/* fallthrough */
+		fallthrough;
 	case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES:
 		/* read media type from SFP EEPROM */
 		ret_val = igb_set_sfp_media_type_82575(hw);
@@ -1670,7 +1670,7 @@ static s32 igb_setup_serdes_link_82575(struct e1000_hw *hw)
 	case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
 		/* disable PCS autoneg and support parallel detect only */
 		pcs_autoneg = false;
-		/* fallthrough */
+		fallthrough;
 	default:
 		if (hw->mac.type == e1000_82575 ||
 		    hw->mac.type == e1000_82576) {
diff --git a/kernel/drivers/net/drivers/igb/e1000_nvm.c b/kernel/drivers/net/drivers/igb/e1000_nvm.c
index 737fb256b4..a8d020747a 100644
--- a/kernel/drivers/net/drivers/igb/e1000_nvm.c
+++ b/kernel/drivers/net/drivers/igb/e1000_nvm.c
@@ -742,7 +742,7 @@ void igb_get_fw_version(struct e1000_hw *hw, struct e1000_fw_version *fw_vers)
 			igb_read_invm_version(hw, fw_vers);
 			return;
 		}
-		/* fall through */
+		fallthrough;
 	case e1000_i350:
 		/* find combo image version */
 		hw->nvm.ops.read(hw, NVM_COMB_VER_PTR, 1, &comb_offset);
diff --git a/kernel/drivers/net/drivers/igb/e1000_phy.c b/kernel/drivers/net/drivers/igb/e1000_phy.c
index 41f3afcd50..8d740899c3 100644
--- a/kernel/drivers/net/drivers/igb/e1000_phy.c
+++ b/kernel/drivers/net/drivers/igb/e1000_phy.c
@@ -682,7 +682,7 @@ s32 igb_copper_link_setup_m88_gen2(struct e1000_hw *hw)
 			phy_data |= M88E1000_PSCR_AUTO_X_1000T;
 			break;
 		}
-		/* fallthrough */
+		fallthrough;
 	case 0:
 	default:
 		phy_data |= M88E1000_PSCR_AUTO_X_MODE;
@@ -2504,7 +2504,7 @@ static s32 igb_set_master_slave_mode(struct e1000_hw *hw)
 		break;
 	case e1000_ms_auto:
 		phy_data &= ~CR_1000T_MS_ENABLE;
-		/* fall-through */
+		fallthrough;
 	default:
 		break;
 	}
diff --git a/kernel/drivers/net/drivers/igb/igb_main.c b/kernel/drivers/net/drivers/igb/igb_main.c
index 1dc4732ee2..d47c0bb35c 100644
--- a/kernel/drivers/net/drivers/igb/igb_main.c
+++ b/kernel/drivers/net/drivers/igb/igb_main.c
@@ -638,14 +638,14 @@ static void igb_cache_ring_register(struct igb_adapter *adapter)
 		 * In order to avoid collision we start at the first free queue
 		 * and continue consuming queues in the same sequence
 		 */
-		/* Fall through */
+		fallthrough;
 	case e1000_82575:
 	case e1000_82580:
 	case e1000_i350:
 	case e1000_i354:
 	case e1000_i210:
 	case e1000_i211:
-		/* Fall through */
+		fallthrough;
 	default:
 		for (; i < adapter->num_rx_queues; i++)
 			adapter->rx_ring[i]->reg_idx = rbase_offset + i;
@@ -1876,7 +1876,7 @@ void igb_set_fw_version(struct igb_adapter *adapter)
 				 fw.invm_img_type);
 			break;
 		}
-		/* fall through */
+		fallthrough;
 	default:
 		/* if option is rom valid, display its version too */
 		if (fw.or_valid) {
@@ -2514,7 +2514,7 @@ static void igb_init_queue_configuration(struct igb_adapter *adapter)
 		 * should pair the queues in order to conserve interrupts due
 		 * to limited supply.
 		 */
-		/* fall through */
+		fallthrough;
 	case e1000_82580:
 	case e1000_i350:
 	case e1000_i354:
@@ -3550,7 +3550,7 @@ bool igb_has_link(struct igb_adapter *adapter)
 	case e1000_media_type_copper:
 		if (!hw->mac.get_link_status)
 			return true;
-		/* fallthrough */
+		fallthrough;
 	case e1000_media_type_internal_serdes:
 		hw->mac.ops.check_for_link(hw);
 		link_active = !hw->mac.get_link_status;
diff --git a/kernel/drivers/net/stack/ipv4/udp/udp.c b/kernel/drivers/net/stack/ipv4/udp/udp.c
index db7a902c35..5977a3bc23 100644
--- a/kernel/drivers/net/stack/ipv4/udp/udp.c
+++ b/kernel/drivers/net/stack/ipv4/udp/udp.c
@@ -422,7 +422,7 @@ ssize_t rt_udp_recvmsg(struct rtdm_fd *fd, struct user_msghdr *msg,
 		switch (ret) {
 		default:
 			ret = -EBADF; /* socket has been closed */
-			/* fallthrough */
+			fallthrough;
 		case -EWOULDBLOCK:
 		case -ETIMEDOUT:
 		case -EINTR:
diff --git a/kernel/drivers/net/stack/packet/af_packet.c b/kernel/drivers/net/stack/packet/af_packet.c
index b55235ec19..6013ff9e74 100644
--- a/kernel/drivers/net/stack/packet/af_packet.c
+++ b/kernel/drivers/net/stack/packet/af_packet.c
@@ -326,7 +326,7 @@ static ssize_t rt_packet_recvmsg(struct rtdm_fd *fd, struct user_msghdr *msg,
 		switch (ret) {
 		default:
 			ret = -EBADF; /* socket has been closed */
-			/* fallthrough */
+			fallthrough;
 		case -EWOULDBLOCK:
 		case -ETIMEDOUT:
 		case -EINTR:
diff --git a/kernel/drivers/testing/switchtest.c b/kernel/drivers/testing/switchtest.c
index 6f8a9fcaa3..b5bc256dfa 100644
--- a/kernel/drivers/testing/switchtest.c
+++ b/kernel/drivers/testing/switchtest.c
@@ -432,7 +432,7 @@ static void rtswitch_ktask(void *cookie)
 			if (to == task->base.index)
 				++to;
 
-			/* Fall through. */
+			fallthrough;
 		case 2:
 			rtswitch_to_rt(ctx, task->base.index, to);
 		}
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 7/9] drivers/can: Drop MODULE_SUPPORTED_DEVICE
  2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
                   ` (5 preceding siblings ...)
  2021-10-13 11:55 ` [PATCH 6/9] cobalt: Use fallthrough key word rather than comments Jan Kiszka
@ 2021-10-13 11:55 ` Jan Kiszka
  2021-10-13 11:55 ` [PATCH 8/9] drivers/net/e1000e: Add missing ethtool.h include Jan Kiszka
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:55 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Was a nop and got removed in kernel 5.12.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/can/peak_canfd/rtcan_peak_pciefd.c | 1 -
 kernel/drivers/can/sja1000/rtcan_adv_pci.c        | 1 -
 kernel/drivers/can/sja1000/rtcan_ems_pci.c        | 1 -
 kernel/drivers/can/sja1000/rtcan_esd_pci.c        | 2 --
 kernel/drivers/can/sja1000/rtcan_isa.c            | 1 -
 kernel/drivers/can/sja1000/rtcan_ixxat_pci.c      | 1 -
 kernel/drivers/can/sja1000/rtcan_mem.c            | 1 -
 kernel/drivers/can/sja1000/rtcan_peak_dng.c       | 1 -
 kernel/drivers/can/sja1000/rtcan_peak_pci.c       | 1 -
 kernel/drivers/can/sja1000/rtcan_plx_pci.c        | 7 -------
 kernel/drivers/can/sja1000/rtcan_sja1000.c        | 1 -
 11 files changed, 18 deletions(-)

diff --git a/kernel/drivers/can/peak_canfd/rtcan_peak_pciefd.c b/kernel/drivers/can/peak_canfd/rtcan_peak_pciefd.c
index 445c46e1c7..921182fab1 100644
--- a/kernel/drivers/can/peak_canfd/rtcan_peak_pciefd.c
+++ b/kernel/drivers/can/peak_canfd/rtcan_peak_pciefd.c
@@ -35,7 +35,6 @@ static char *pciefd_board_name = "PEAK-PCIe FD";
 
 MODULE_AUTHOR("Stephane Grosjean <s.grosjean@peak-system.com>");
 MODULE_DESCRIPTION("RTCAN driver for PEAK PCAN PCIe/M.2 FD family cards");
-MODULE_SUPPORTED_DEVICE("PEAK PCAN PCIe/M.2 FD CAN controllers");
 MODULE_LICENSE("GPL v2");
 
 #define PEAK_PCI_VENDOR_ID	0x001c	/* The PCI device and vendor IDs */
diff --git a/kernel/drivers/can/sja1000/rtcan_adv_pci.c b/kernel/drivers/can/sja1000/rtcan_adv_pci.c
index 4637ff742a..f09be056ba 100644
--- a/kernel/drivers/can/sja1000/rtcan_adv_pci.c
+++ b/kernel/drivers/can/sja1000/rtcan_adv_pci.c
@@ -43,7 +43,6 @@ static char *adv_pci_board_name = "ADV-PCI";
 
 MODULE_AUTHOR("Thierry Bultel <thierry.bultel@basystemes.fr>");
 MODULE_DESCRIPTION("RTCAN board driver for Advantech PCI cards");
-MODULE_SUPPORTED_DEVICE("ADV-PCI card CAN controller");
 MODULE_LICENSE("GPL");
 
 struct rtcan_adv_pci {
diff --git a/kernel/drivers/can/sja1000/rtcan_ems_pci.c b/kernel/drivers/can/sja1000/rtcan_ems_pci.c
index ffd91235a2..2e3001b05c 100644
--- a/kernel/drivers/can/sja1000/rtcan_ems_pci.c
+++ b/kernel/drivers/can/sja1000/rtcan_ems_pci.c
@@ -41,7 +41,6 @@ static char *ems_pci_board_name = "EMS-CPC-PCI";
 
 MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
 MODULE_DESCRIPTION("RTCAN board driver for EMS CPC-PCI/PCIe/104P CAN cards");
-MODULE_SUPPORTED_DEVICE("EMS CPC-PCI/PCIe/104P CAN card");
 MODULE_LICENSE("GPL v2");
 
 #define EMS_PCI_V1_MAX_CHAN 2
diff --git a/kernel/drivers/can/sja1000/rtcan_esd_pci.c b/kernel/drivers/can/sja1000/rtcan_esd_pci.c
index 538c0c8ac3..2b5a19caf5 100644
--- a/kernel/drivers/can/sja1000/rtcan_esd_pci.c
+++ b/kernel/drivers/can/sja1000/rtcan_esd_pci.c
@@ -44,8 +44,6 @@ static char *esd_pci_board_name = "ESD-PCI";
 MODULE_AUTHOR("Sebastian Smolorz <sesmo@gmx.net");
 MODULE_DESCRIPTION("RTCAN board driver for esd PCI/PMC/CPCI/PCIe/PCI104 " \
 		   "CAN cards");
-MODULE_SUPPORTED_DEVICE("esd CAN-PCI/200, CAN-PCI/266, CAN-PMC266, " \
-			"CAN-PCIe/2000, CAN-CPCI/200, CAN-PCI104");
 MODULE_LICENSE("GPL v2");
 
 struct rtcan_esd_pci {
diff --git a/kernel/drivers/can/sja1000/rtcan_isa.c b/kernel/drivers/can/sja1000/rtcan_isa.c
index f4c59cd86b..a0e49fea30 100644
--- a/kernel/drivers/can/sja1000/rtcan_isa.c
+++ b/kernel/drivers/can/sja1000/rtcan_isa.c
@@ -42,7 +42,6 @@ static char *isa_board_name = "ISA-Board";
 
 MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
 MODULE_DESCRIPTION("RTCAN board driver for standard ISA boards");
-MODULE_SUPPORTED_DEVICE("ISA board");
 MODULE_LICENSE("GPL");
 
 static u16 io[RTCAN_ISA_MAX_DEV];
diff --git a/kernel/drivers/can/sja1000/rtcan_ixxat_pci.c b/kernel/drivers/can/sja1000/rtcan_ixxat_pci.c
index ca3556adc2..9c5197f833 100644
--- a/kernel/drivers/can/sja1000/rtcan_ixxat_pci.c
+++ b/kernel/drivers/can/sja1000/rtcan_ixxat_pci.c
@@ -39,7 +39,6 @@ static char *ixxat_pci_board_name = "IXXAT-PCI";
 
 MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
 MODULE_DESCRIPTION("RTCAN board driver for IXXAT-PCI cards");
-MODULE_SUPPORTED_DEVICE("IXXAT-PCI card CAN controller");
 MODULE_LICENSE("GPL");
 
 struct rtcan_ixxat_pci
diff --git a/kernel/drivers/can/sja1000/rtcan_mem.c b/kernel/drivers/can/sja1000/rtcan_mem.c
index 178b321d92..965735eb35 100644
--- a/kernel/drivers/can/sja1000/rtcan_mem.c
+++ b/kernel/drivers/can/sja1000/rtcan_mem.c
@@ -50,7 +50,6 @@ static char *mem_board_name = "mem mapped";
 
 MODULE_AUTHOR("Matthias Fuchs <matthias.fuchs@esd-electronics.com>");
 MODULE_DESCRIPTION("RTCAN driver for memory mapped SJA1000 controller");
-MODULE_SUPPORTED_DEVICE("mem mapped");
 MODULE_LICENSE("GPL");
 
 static u32 mem[RTCAN_MEM_MAX_DEV];
diff --git a/kernel/drivers/can/sja1000/rtcan_peak_dng.c b/kernel/drivers/can/sja1000/rtcan_peak_dng.c
index 9207be55e8..d1e3f44648 100644
--- a/kernel/drivers/can/sja1000/rtcan_peak_dng.c
+++ b/kernel/drivers/can/sja1000/rtcan_peak_dng.c
@@ -45,7 +45,6 @@ static char *dongle_board_name = "PEAK-Dongle";
 
 MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
 MODULE_DESCRIPTION("RTCAN board driver for PEAK-Dongle");
-MODULE_SUPPORTED_DEVICE("PEAK-Dongle CAN controller");
 MODULE_LICENSE("GPL");
 
 static char   *type[RTCAN_PEAK_DNG_MAX_DEV];
diff --git a/kernel/drivers/can/sja1000/rtcan_peak_pci.c b/kernel/drivers/can/sja1000/rtcan_peak_pci.c
index 42df49acdc..19f728b41b 100644
--- a/kernel/drivers/can/sja1000/rtcan_peak_pci.c
+++ b/kernel/drivers/can/sja1000/rtcan_peak_pci.c
@@ -43,7 +43,6 @@ static char *peak_pci_board_name = "PEAK-PCI";
 
 MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
 MODULE_DESCRIPTION("RTCAN board driver for PEAK-PCI cards");
-MODULE_SUPPORTED_DEVICE("PEAK-PCI card CAN controller");
 MODULE_LICENSE("GPL");
 
 struct rtcan_peak_pci
diff --git a/kernel/drivers/can/sja1000/rtcan_plx_pci.c b/kernel/drivers/can/sja1000/rtcan_plx_pci.c
index 30255626ec..4da14f2cc5 100644
--- a/kernel/drivers/can/sja1000/rtcan_plx_pci.c
+++ b/kernel/drivers/can/sja1000/rtcan_plx_pci.c
@@ -41,13 +41,6 @@
 MODULE_AUTHOR("Pavel Cheblakov <P.B.Cheblakov@inp.nsk.su>");
 MODULE_DESCRIPTION("RTCAN driver for PLX90xx PCI-bridge cards with "
 		   "the SJA1000 chips");
-MODULE_SUPPORTED_DEVICE("Adlink PCI-7841/cPCI-7841, "
-			"Adlink PCI-7841/cPCI-7841 SE, "
-			"Marathon CAN-bus-PCI, "
-			"TEWS TECHNOLOGIES TPMC810, "
-			"esd CAN-PCI/CPCI/PCI104/200, "
-			"esd CAN-PCI/PMC/266, "
-			"esd CAN-PCIe/2000")
 MODULE_LICENSE("GPL v2");
 
 #define PLX_PCI_MAX_CHAN 2
diff --git a/kernel/drivers/can/sja1000/rtcan_sja1000.c b/kernel/drivers/can/sja1000/rtcan_sja1000.c
index 842456dfdb..bd6c0ba5c8 100644
--- a/kernel/drivers/can/sja1000/rtcan_sja1000.c
+++ b/kernel/drivers/can/sja1000/rtcan_sja1000.c
@@ -81,7 +81,6 @@ static char *sja_ctrl_name = "SJA1000";
 MODULE_AUTHOR("Sebastian.Smolorz@stud.uni-hannover.de");
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("RT-Socket-CAN driver for SJA1000");
-MODULE_SUPPORTED_DEVICE("SJA1000 CAN controller");
 
 #ifndef CONFIG_XENO_DRIVERS_CAN_CALC_BITTIME_OLD
 static struct can_bittiming_const sja1000_bittiming_const = {
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 8/9] drivers/net/e1000e: Add missing ethtool.h include
  2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
                   ` (6 preceding siblings ...)
  2021-10-13 11:55 ` [PATCH 7/9] drivers/can: Drop MODULE_SUPPORTED_DEVICE Jan Kiszka
@ 2021-10-13 11:55 ` Jan Kiszka
  2021-10-13 11:55 ` [PATCH 9/9] cobalt/debug: Detect vDSO via absence of vm_file Jan Kiszka
  2021-10-13 11:59 ` [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
  9 siblings, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:55 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

Needed for recent kernels.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/drivers/net/drivers/e1000e/e1000.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/drivers/net/drivers/e1000e/e1000.h b/kernel/drivers/net/drivers/e1000e/e1000.h
index 7454c6350a..d6fa3d4839 100644
--- a/kernel/drivers/net/drivers/e1000e/e1000.h
+++ b/kernel/drivers/net/drivers/e1000e/e1000.h
@@ -40,6 +40,7 @@
 #include <linux/pci.h>
 #include <linux/crc32.h>
 #include <linux/if_vlan.h>
+#include <linux/ethtool.h>
 
 #include <rtnet_port.h>
 
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 9/9] cobalt/debug: Detect vDSO via absence of vm_file
  2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
                   ` (7 preceding siblings ...)
  2021-10-13 11:55 ` [PATCH 8/9] drivers/net/e1000e: Add missing ethtool.h include Jan Kiszka
@ 2021-10-13 11:55 ` Jan Kiszka
  2021-11-10 12:23   ` Jan Kiszka
  2022-01-03 16:34   ` Florian Bezdeka
  2021-10-13 11:59 ` [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
  9 siblings, 2 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:55 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

VM_DENYWRITE was removed in 5.15, so we need a different criteria.
Absence of a file-backing seems to be a good one.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kernel/cobalt/debug.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/kernel/cobalt/debug.c b/kernel/cobalt/debug.c
index a6e2cc42d3..0521fca45d 100644
--- a/kernel/cobalt/debug.c
+++ b/kernel/cobalt/debug.c
@@ -249,13 +249,12 @@ void xndebug_trace_relax(int nr, unsigned long *backtrace,
 			continue;
 
 		/*
-		 * Hack. Unlike DSOs, executables and interpreters
-		 * (e.g. dynamic linkers) are protected against write
-		 * attempts. Use this to determine when $pc should be
-		 * fixed up by subtracting the mapping base address in
-		 * the DSO case.
+		 * DSOs are not file-backed. Use this to determine when $pc
+		 * should be fixed up by subtracting the mapping base address
+		 * in the DSO case.
 		 */
-		if (!(vma->vm_flags & VM_DENYWRITE))
+		file = vma->vm_file;
+		if (file == NULL)
 			pc -= vma->vm_start;
 
 		spot.backtrace[depth].pc = pc;
@@ -265,7 +264,6 @@ void xndebug_trace_relax(int nr, unsigned long *backtrace,
 		 * record the PC value, which may still give some hint
 		 * downstream.
 		 */
-		file = vma->vm_file;
 		if (file == NULL)
 			goto next_frame;
 
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 0/9] Enable support for kernel 5.15
  2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
                   ` (8 preceding siblings ...)
  2021-10-13 11:55 ` [PATCH 9/9] cobalt/debug: Detect vDSO via absence of vm_file Jan Kiszka
@ 2021-10-13 11:59 ` Jan Kiszka
  9 siblings, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 11:59 UTC (permalink / raw)
  To: xenomai

On 13.10.21 13:55, Jan Kiszka via Xenomai wrote:
> Most of these are harmless conversions with backward-compatible
> wrappings. Only the last patch is a bit hairy as I'm unsure whether the
> new detection mechanism for vDSO VMAs is truly reliable. Therefore, this
> patch is not (yet?) targeting next, thus 3.2-rc2.
> 

Forgot to write: The result booted with v5.15-dovetail-rebase and
apparently worked fine. I'm just seeing strange issues with the virtual
VGA console in QEMU, likely upstream related and not an issue of
Dovetail or Xenomai.

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v2 1/9] cobalt/dovetail: Use IRQ_WORK_INIT to please 5.11+
  2021-10-13 11:55 ` [PATCH 1/9] cobalt/dovetail: Use IRQ_WORK_INIT to please 5.11+ Jan Kiszka
@ 2021-10-13 14:00   ` Jan Kiszka
  0 siblings, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-10-13 14:00 UTC (permalink / raw)
  To: xenomai

From: Jan Kiszka <jan.kiszka@siemens.com>

And wrap the previous open-coded initialization for older kernels.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---

Changes in v2:
 - initialize .flags in older kernels more accurately

 include/cobalt/kernel/dovetail/pipeline/inband_work.h | 6 +-----
 kernel/cobalt/include/asm-generic/xenomai/wrappers.h  | 7 +++++++
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/include/cobalt/kernel/dovetail/pipeline/inband_work.h b/include/cobalt/kernel/dovetail/pipeline/inband_work.h
index 317a31de70..af3d70fc69 100644
--- a/include/cobalt/kernel/dovetail/pipeline/inband_work.h
+++ b/include/cobalt/kernel/dovetail/pipeline/inband_work.h
@@ -19,11 +19,7 @@ struct pipeline_inband_work {
 
 #define PIPELINE_INBAND_WORK_INITIALIZER(__work, __handler)		\
 	{								\
-		.work = {						\
-			.func = (void (*)(struct irq_work *))		\
-			__handler,					\
-			.flags = ATOMIC_INIT(0),			\
-		},							\
+		.work = IRQ_WORK_INIT((void (*)(struct irq_work *))__handler), \
 	}
 
 #define pipeline_post_inband_work(__work)				\
diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
index 54fdc8b05e..bf24f2b17f 100644
--- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
+++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
@@ -231,4 +231,11 @@ devm_hwmon_device_register_with_groups(struct device *dev, const char *name,
 	kernel_read_file(__file, 0, __buf, __buf_size, __file_size, __id)
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,11,0)
+#define IRQ_WORK_INIT(_func) (struct irq_work) {	\
+	.flags = ATOMIC_INIT(0),			\
+	.func = (_func),				\
+}
+#endif
+
 #endif /* _COBALT_ASM_GENERIC_WRAPPERS_H */
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 9/9] cobalt/debug: Detect vDSO via absence of vm_file
  2021-10-13 11:55 ` [PATCH 9/9] cobalt/debug: Detect vDSO via absence of vm_file Jan Kiszka
@ 2021-11-10 12:23   ` Jan Kiszka
  2022-01-03 16:34   ` Florian Bezdeka
  1 sibling, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2021-11-10 12:23 UTC (permalink / raw)
  To: xenomai, Philippe Gerum

On 13.10.21 13:55, Jan Kiszka via Xenomai wrote:
> From: Jan Kiszka <jan.kiszka@siemens.com>
> 
> VM_DENYWRITE was removed in 5.15, so we need a different criteria.
> Absence of a file-backing seems to be a good one.
> 
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  kernel/cobalt/debug.c | 12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
> 
> diff --git a/kernel/cobalt/debug.c b/kernel/cobalt/debug.c
> index a6e2cc42d3..0521fca45d 100644
> --- a/kernel/cobalt/debug.c
> +++ b/kernel/cobalt/debug.c
> @@ -249,13 +249,12 @@ void xndebug_trace_relax(int nr, unsigned long *backtrace,
>  			continue;
>  
>  		/*
> -		 * Hack. Unlike DSOs, executables and interpreters
> -		 * (e.g. dynamic linkers) are protected against write
> -		 * attempts. Use this to determine when $pc should be
> -		 * fixed up by subtracting the mapping base address in
> -		 * the DSO case.
> +		 * DSOs are not file-backed. Use this to determine when $pc
> +		 * should be fixed up by subtracting the mapping base address
> +		 * in the DSO case.
>  		 */
> -		if (!(vma->vm_flags & VM_DENYWRITE))
> +		file = vma->vm_file;
> +		if (file == NULL)
>  			pc -= vma->vm_start;
>  
>  		spot.backtrace[depth].pc = pc;
> @@ -265,7 +264,6 @@ void xndebug_trace_relax(int nr, unsigned long *backtrace,
>  		 * record the PC value, which may still give some hint
>  		 * downstream.
>  		 */
> -		file = vma->vm_file;
>  		if (file == NULL)
>  			goto next_frame;
>  
> 

Philippe, could you comment on this change? Does this sound safe enough
to you? How to test that best?

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 9/9] cobalt/debug: Detect vDSO via absence of vm_file
  2021-10-13 11:55 ` [PATCH 9/9] cobalt/debug: Detect vDSO via absence of vm_file Jan Kiszka
  2021-11-10 12:23   ` Jan Kiszka
@ 2022-01-03 16:34   ` Florian Bezdeka
  2022-01-03 18:04     ` Jan Kiszka
  1 sibling, 1 reply; 16+ messages in thread
From: Florian Bezdeka @ 2022-01-03 16:34 UTC (permalink / raw)
  To: Jan Kiszka, xenomai

On 13.10.21 13:55, Jan Kiszka via Xenomai wrote:
> From: Jan Kiszka <jan.kiszka@siemens.com>
> 
> VM_DENYWRITE was removed in 5.15, so we need a different criteria.
> Absence of a file-backing seems to be a good one.

Bringing this one up, because we recently had a "report" on the ML
regarding VM_DENYWRITE.

I scanned the ld (dynamic loader) sources today. I was interested if
there is any magic involved when mapping DSOs to the vma of the process.
AFAICT there is none. I would expect the vma to be file-backed
(=vma->vm_file =! NULL), so not sure if that is going to work.

Btw: Subject talks about vDSO, which is not what we are looking at here.

Just to make sure I got all that right: We need a way to figure out if
the reason for the thread relax was caused by the executable itself, or
any of it's dependencies, right?

> 
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  kernel/cobalt/debug.c | 12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
> 
> diff --git a/kernel/cobalt/debug.c b/kernel/cobalt/debug.c
> index a6e2cc42d3..0521fca45d 100644
> --- a/kernel/cobalt/debug.c
> +++ b/kernel/cobalt/debug.c
> @@ -249,13 +249,12 @@ void xndebug_trace_relax(int nr, unsigned long *backtrace,
>  			continue;
>  
>  		/*
> -		 * Hack. Unlike DSOs, executables and interpreters
> -		 * (e.g. dynamic linkers) are protected against write
> -		 * attempts. Use this to determine when $pc should be
> -		 * fixed up by subtracting the mapping base address in
> -		 * the DSO case.
> +		 * DSOs are not file-backed. Use this to determine when $pc
> +		 * should be fixed up by subtracting the mapping base address
> +		 * in the DSO case.
>  		 */
> -		if (!(vma->vm_flags & VM_DENYWRITE))
> +		file = vma->vm_file;
> +		if (file == NULL)
>  			pc -= vma->vm_start;
>  
>  		spot.backtrace[depth].pc = pc;
> @@ -265,7 +264,6 @@ void xndebug_trace_relax(int nr, unsigned long *backtrace,
>  		 * record the PC value, which may still give some hint
>  		 * downstream.
>  		 */
> -		file = vma->vm_file;
>  		if (file == NULL)
>  			goto next_frame;
>  



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 9/9] cobalt/debug: Detect vDSO via absence of vm_file
  2022-01-03 16:34   ` Florian Bezdeka
@ 2022-01-03 18:04     ` Jan Kiszka
  2022-01-03 18:22       ` Jan Kiszka
  0 siblings, 1 reply; 16+ messages in thread
From: Jan Kiszka @ 2022-01-03 18:04 UTC (permalink / raw)
  To: Florian Bezdeka, xenomai

On 03.01.22 17:34, Florian Bezdeka wrote:
> On 13.10.21 13:55, Jan Kiszka via Xenomai wrote:
>> From: Jan Kiszka <jan.kiszka@siemens.com>
>>
>> VM_DENYWRITE was removed in 5.15, so we need a different criteria.
>> Absence of a file-backing seems to be a good one.
> 
> Bringing this one up, because we recently had a "report" on the ML
> regarding VM_DENYWRITE.
> 
> I scanned the ld (dynamic loader) sources today. I was interested if
> there is any magic involved when mapping DSOs to the vma of the process.
> AFAICT there is none. I would expect the vma to be file-backed
> (=vma->vm_file =! NULL), so not sure if that is going to work.

Then likely not.

> 
> Btw: Subject talks about vDSO, which is not what we are looking at here.

Yeah, misnomer of mine.

> 
> Just to make sure I got all that right: We need a way to figure out if
> the reason for the thread relax was caused by the executable itself, or
> any of it's dependencies, right?

The purpose is to calculate the correct PC value that makes sense and is
useful for the userspace helper:

         * We compute PC values relative to the base of the shared
         * executable mappings we find in the backtrace, which makes
         * it possible for the slackspot utility to match the
         * corresponding source code locations from unrelocated file
         * offsets.

Jan

-- 
Siemens AG, Technology
Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 9/9] cobalt/debug: Detect vDSO via absence of vm_file
  2022-01-03 18:04     ` Jan Kiszka
@ 2022-01-03 18:22       ` Jan Kiszka
  0 siblings, 0 replies; 16+ messages in thread
From: Jan Kiszka @ 2022-01-03 18:22 UTC (permalink / raw)
  To: Florian Bezdeka, xenomai

On 03.01.22 19:04, Jan Kiszka via Xenomai wrote:
> On 03.01.22 17:34, Florian Bezdeka wrote:
>> On 13.10.21 13:55, Jan Kiszka via Xenomai wrote:
>>> From: Jan Kiszka <jan.kiszka@siemens.com>
>>>
>>> VM_DENYWRITE was removed in 5.15, so we need a different criteria.
>>> Absence of a file-backing seems to be a good one.
>>
>> Bringing this one up, because we recently had a "report" on the ML
>> regarding VM_DENYWRITE.
>>
>> I scanned the ld (dynamic loader) sources today. I was interested if
>> there is any magic involved when mapping DSOs to the vma of the process.
>> AFAICT there is none. I would expect the vma to be file-backed
>> (=vma->vm_file =! NULL), so not sure if that is going to work.
> 
> Then likely not.
> 
>>
>> Btw: Subject talks about vDSO, which is not what we are looking at here.
> 
> Yeah, misnomer of mine.
> 
>>
>> Just to make sure I got all that right: We need a way to figure out if
>> the reason for the thread relax was caused by the executable itself, or
>> any of it's dependencies, right?
> 
> The purpose is to calculate the correct PC value that makes sense and is
> useful for the userspace helper:
> 
>          * We compute PC values relative to the base of the shared
>          * executable mappings we find in the backtrace, which makes
>          * it possible for the slackspot utility to match the
>          * corresponding source code locations from unrelocated file
>          * offsets.
> 

Looking at the slackspot tool: We run addr2line for each spot that has a
mapping, thus executable name, and we pass in relative addresses then.
For the others, we just print the true PC value as recording and as NOT
adjusted. So my logic was at least wrong in being inverted. It should
work for telling DSOs apart from interpreter-created executable
sections. Not sure about other "executables", though.

Jan

-- 
Siemens AG, Technology
Competence Center Embedded Linux


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2022-01-03 18:22 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-13 11:55 [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka
2021-10-13 11:55 ` [PATCH 1/9] cobalt/dovetail: Use IRQ_WORK_INIT to please 5.11+ Jan Kiszka
2021-10-13 14:00   ` [PATCH v2 " Jan Kiszka
2021-10-13 11:55 ` [PATCH 2/9] cobalt: Use close_fd for kernel 5.14+ Jan Kiszka
2021-10-13 11:55 ` [PATCH 3/9] cobalt: Use linux/stdarg.h Jan Kiszka
2021-10-13 11:55 ` [PATCH 4/9] cobalt/posix: Add required FORCE makefile rule Jan Kiszka
2021-10-13 11:55 ` [PATCH 5/9] cobalt/thread: Switch to MAX_RT_PRIO Jan Kiszka
2021-10-13 11:55 ` [PATCH 6/9] cobalt: Use fallthrough key word rather than comments Jan Kiszka
2021-10-13 11:55 ` [PATCH 7/9] drivers/can: Drop MODULE_SUPPORTED_DEVICE Jan Kiszka
2021-10-13 11:55 ` [PATCH 8/9] drivers/net/e1000e: Add missing ethtool.h include Jan Kiszka
2021-10-13 11:55 ` [PATCH 9/9] cobalt/debug: Detect vDSO via absence of vm_file Jan Kiszka
2021-11-10 12:23   ` Jan Kiszka
2022-01-03 16:34   ` Florian Bezdeka
2022-01-03 18:04     ` Jan Kiszka
2022-01-03 18:22       ` Jan Kiszka
2021-10-13 11:59 ` [PATCH 0/9] Enable support for kernel 5.15 Jan Kiszka

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.