Author: manu
Date: Mon May 25 12:46:05 2020
New Revision: 361452
URL: https://svnweb.freebsd.org/changeset/base/361452

Log:
  linuxkpi: Fix mod_timer and del_timer_sync
  
  mod_timer is supposed to return 1 if the modified timer was pending, which
  is exactly what callout_reset does so return the value after checking
  that it's a correct one in case the api change.
  del_timer_sync returns int so add a function and handle that.
  
  Reviewed by:  hselasky
  Differential Revision:        https://reviews.freebsd.org/D24983

Modified:
  head/sys/compat/linuxkpi/common/include/linux/timer.h
  head/sys/compat/linuxkpi/common/src/linux_compat.c

Modified: head/sys/compat/linuxkpi/common/include/linux/timer.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/timer.h       Mon May 25 
12:45:10 2020        (r361451)
+++ head/sys/compat/linuxkpi/common/include/linux/timer.h       Mon May 25 
12:46:05 2020        (r361452)
@@ -78,12 +78,12 @@ extern unsigned long linux_timer_hz_mask;
        callout_init(&(timer)->callout, 1);                     \
 } while (0)
 
-extern void mod_timer(struct timer_list *, int);
+extern int mod_timer(struct timer_list *, int);
 extern void add_timer(struct timer_list *);
 extern void add_timer_on(struct timer_list *, int cpu);
 extern int del_timer(struct timer_list *);
+extern int del_timer_sync(struct timer_list *);
 
-#define        del_timer_sync(timer)   (void)callout_drain(&(timer)->callout)
 #define        timer_pending(timer)    callout_pending(&(timer)->callout)
 #define        round_jiffies(j)        \
        ((int)(((j) + linux_timer_hz_mask) & ~linux_timer_hz_mask))

Modified: head/sys/compat/linuxkpi/common/src/linux_compat.c
==============================================================================
--- head/sys/compat/linuxkpi/common/src/linux_compat.c  Mon May 25 12:45:10 
2020        (r361451)
+++ head/sys/compat/linuxkpi/common/src/linux_compat.c  Mon May 25 12:46:05 
2020        (r361452)
@@ -1903,14 +1903,19 @@ linux_timer_callback_wrapper(void *context)
        timer->function(timer->data);
 }
 
-void
+int
 mod_timer(struct timer_list *timer, int expires)
 {
+       int ret;
 
        timer->expires = expires;
-       callout_reset(&timer->callout,
+       ret = callout_reset(&timer->callout,
            linux_timer_jiffies_until(expires),
            &linux_timer_callback_wrapper, timer);
+
+       MPASS(ret == 0 || ret == 1);
+
+       return (ret == 1);
 }
 
 void
@@ -1936,6 +1941,15 @@ del_timer(struct timer_list *timer)
 {
 
        if (callout_stop(&(timer)->callout) == -1)
+               return (0);
+       return (1);
+}
+
+int
+del_timer_sync(struct timer_list *timer)
+{
+
+       if (callout_drain(&(timer)->callout) == -1)
                return (0);
        return (1);
 }
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to