svn commit: r361452 - in head/sys/compat/linuxkpi/common: include/linux src
Emmanuel Vadot
manu at FreeBSD.org
Mon May 25 12:46:06 UTC 2020
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);
}
More information about the svn-src-all
mailing list