Page MenuHomeFreeBSD

D24983.id72220.diff
No OneTemporary

D24983.id72220.diff

Index: sys/compat/linuxkpi/common/include/linux/timer.h
===================================================================
--- sys/compat/linuxkpi/common/include/linux/timer.h
+++ sys/compat/linuxkpi/common/include/linux/timer.h
@@ -78,12 +78,12 @@
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))
Index: sys/compat/linuxkpi/common/src/linux_compat.c
===================================================================
--- sys/compat/linuxkpi/common/src/linux_compat.c
+++ sys/compat/linuxkpi/common/src/linux_compat.c
@@ -1903,14 +1903,24 @@
timer->function(timer->data);
}
-void
+/*
+ * Returns 0 if the timer was not pending and 1 if it was
+ * What to do when callout_reset fails ?
+ */
+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);
+
+ if (ret < 0)
+ ret = 0;
+
+ return (ret);
}
void
@@ -1940,6 +1950,15 @@
return (1);
}
+int
+del_timer_sync(struct timer_list *timer)
+{
+
+ if (callout_drain(&(timer)->callout) == -1)
+ return (0);
+ return (1);
+}
+
/* greatest common divisor, Euclid equation */
static uint64_t
lkpi_gcd_64(uint64_t a, uint64_t b)

File Metadata

Mime Type
text/plain
Expires
Wed, Jan 28, 1:28 PM (26 m, 58 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28066090
Default Alt Text
D24983.id72220.diff (1 KB)

Event Timeline