From f446b7cab4507bda776592edbe81579c761e892d Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Tue, 5 Jun 2018 15:20:20 +0000 Subject: [PATCH] Implement timer_setup() and from_timer() function macros in the LinuxKPI. Submitted by: Johannes Lundberg MFC after: 1 week Sponsored by: Mellanox Technologies Sponsored by: Limelight Networks --- sys/compat/linuxkpi/common/include/linux/timer.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/sys/compat/linuxkpi/common/include/linux/timer.h b/sys/compat/linuxkpi/common/include/linux/timer.h index b4881b0b33a..87a4f1a6d0a 100644 --- a/sys/compat/linuxkpi/common/include/linux/timer.h +++ b/sys/compat/linuxkpi/common/include/linux/timer.h @@ -39,7 +39,10 @@ struct timer_list { struct callout callout; - void (*function) (unsigned long); + union { + void (*function) (unsigned long); /* < v4.15 */ + void (*function_415) (struct timer_list *); + }; unsigned long data; int expires; }; @@ -48,6 +51,16 @@ extern unsigned long linux_timer_hz_mask; #define TIMER_IRQSAFE 0x0001 +#define from_timer(var, arg, field) \ + container_of(arg, typeof(*(var)), field) + +#define timer_setup(timer, func, flags) do { \ + CTASSERT(((flags) & ~TIMER_IRQSAFE) == 0); \ + (timer)->function_415 = (func); \ + (timer)->data = (unsigned long)(timer); \ + callout_init(&(timer)->callout, 1); \ +} while (0) + #define setup_timer(timer, func, dat) do { \ (timer)->function = (func); \ (timer)->data = (dat); \