--- a/setup/Linux/oss/build/osscore.c
+++ b/setup/Linux/oss/build/osscore.c
@@ -492,6 +492,9 @@
   void *arg;
 
   struct timer_list timer;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
+  unsigned long id;
+#endif
 } tmout_desc_t;
 
 static volatile int next_id = 0;
@@ -501,10 +504,19 @@
 
 int timeout_random = 0x12123400;
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
+void
+oss_timer_callback (struct timer_list *tl)
+#else
 void
 oss_timer_callback (unsigned long id)
+#endif
 {
   tmout_desc_t *tmout;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
+  tmout = from_timer(tmout, tl, timer);
+  unsigned long id = tmout->id;
+#endif
   int ix;
   void *arg;
 
@@ -562,10 +574,15 @@
   tmout->arg = arg;
   tmout->timestamp = id | (timeout_random & ~0xff);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
+  tmout->id = id | (timeout_random & ~0xff);
+  timer_setup(&tmout->timer, oss_timer_callback, 0);
+#else
   init_timer (&tmout->timer);
-  tmout->timer.expires = jiffies + ticks;
   tmout->timer.data = id | (timeout_random & ~0xff);
   tmout->timer.function = oss_timer_callback;
+#endif
+  tmout->timer.expires = jiffies + ticks;
   add_timer (&tmout->timer);
 
   return id | (timeout_random & ~0xff);
