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