summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2017-10-11 15:41:56 +0200
committerJohannes Berg <johannes.berg@intel.com>2017-10-11 17:00:42 +0200
commit78fd1c0acc64ab5bfff310ae023922226b6ff696 (patch)
tree185c632e243707736af4e3e8eb2e073f3ea91474
parentf1c4a5ebb291c3aaa9c296778da94ed537565b15 (diff)
backports: backport from_timer() and timer_setup()
These are needed for Kees's new timer API, and luckily he already provided them for conversion purposes :-) Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--backport/backport-include/linux/timer.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/backport/backport-include/linux/timer.h b/backport/backport-include/linux/timer.h
index df560a26..9824ea6b 100644
--- a/backport/backport-include/linux/timer.h
+++ b/backport/backport-include/linux/timer.h
@@ -29,7 +29,35 @@ static inline void setup_deferrable_timer_key(struct timer_list *timer,
(fn), (data)); \
} while (0)
#endif
+#endif
+
+#ifndef TIMER_DEFERRABLE
+#define TIMER_DEFERRABLE 1
+#endif
+
+#ifndef from_timer
+#define TIMER_DATA_TYPE unsigned long
+#define TIMER_FUNC_TYPE void (*)(TIMER_DATA_TYPE)
+
+static inline void timer_setup(struct timer_list *timer,
+ void (*callback) (struct timer_list *),
+ unsigned int flags)
+{
+#ifdef __setup_timer
+ __setup_timer(timer, (TIMER_FUNC_TYPE) callback,
+ (TIMER_DATA_TYPE) timer, flags);
+#else
+ if (flags & TIMER_DEFERRABLE)
+ setup_deferrable_timer(timer, (TIMER_FUNC_TYPE) callback,
+ (TIMER_DATA_TYPE) timer);
+ else
+ setup_timer(timer, (TIMER_FUNC_TYPE) callback,
+ (TIMER_DATA_TYPE) timer);
+#endif
+}
+#define from_timer(var, callback_timer, timer_fieldname) \
+ container_of(callback_timer, typeof(*var), timer_fieldname)
#endif
#endif /* _BACKPORT_TIMER_H */