From 99c5e11a73afd07e112dc7ef81dd33e8d76c06de Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 4 Apr 2018 13:51:03 +0200 Subject: [KERNEL] #ifs and #defines for timer pre/post 4.15 --- src/kernel/net.c | 27 ++++++++++++++------------- src/kernel/net.h | 4 ++++ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/kernel/net.c b/src/kernel/net.c index e3564db..1609258 100644 --- a/src/kernel/net.c +++ b/src/kernel/net.c @@ -308,23 +308,18 @@ int dnbd3_net_connect(dnbd3_device_t *dev) // add heartbeat timer dev->heartbeat_count = 0; -// Adapted from https://elixir.bootlin.com/linux/v3.4/source/include/linux/timer.h#L98 -#define CONFIG_LOCKDEP -#ifdef CONFIG_LOCKDEP -#define init_timer(timer) \ - do { \ - static struct lock_class_key __key; \ - init_timer_key((timer), NULL, 0, #timer, &__key); \ - } while (0) +// init_timer_key changed from kernel version 4.14 to 4.15, see and compare to 4.15: +// https://elixir.bootlin.com/linux/v4.14.32/source/include/linux/timer.h#L98 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) + timer_setup(&dev->hb_timer, dnbd3_net_heartbeat, 0); #else -#define init_timer(timer)\ - init_timer_key((timer), NULL, 0, NULL, NULL) -#endif + // Old timer setup init_timer(&dev->hb_timer); + dev->hb_timer.data = (unsigned long)dev; dev->hb_timer.function = dnbd3_net_heartbeat; dev->hb_timer.expires = jiffies + HZ; add_timer(&dev->hb_timer); - +#endif return 0; error: ; if (dev->sock) @@ -388,12 +383,18 @@ int dnbd3_net_disconnect(dnbd3_device_t *dev) return 0; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) void dnbd3_net_heartbeat(struct timer_list *arg) { + dnbd3_device_t *dev = (dnbd3_device_t *)container_of(arg, dnbd3_device_t, hb_timer); +#else +void dnbd3_net_heartbeat(unsigned long arg) +{ + dnbd3_device_t *dev = (dnbd3_device_t *)arg; +#endif // Because different events need different intervals, the timer is called once a second. // Other intervals can be derived using dev->heartbeat_count. #define timeout_seconds(x) (dev->heartbeat_count % (x) == 0) - dnbd3_device_t *dev = (dnbd3_device_t *) container_of(arg, dnbd3_device_t, hb_timer); if (!dev->panic) { diff --git a/src/kernel/net.h b/src/kernel/net.h index dbaa857..a06a20c 100644 --- a/src/kernel/net.h +++ b/src/kernel/net.h @@ -39,7 +39,11 @@ int dnbd3_net_send(void *data); int dnbd3_net_receive(void *data); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0) void dnbd3_net_heartbeat(struct timer_list *arg); +#else +void dnbd3_net_heartbeat(unsigned long arg); +#endif int dnbd3_net_discover(void *data); -- cgit v1.2.3-55-g7522