diff options
author | Dominik Sliwa <dominik.sliwa@toradex.com> | 2017-11-21 12:59:41 +0000 |
---|---|---|
committer | Dominik Sliwa <dominik.sliwa@toradex.com> | 2017-12-22 09:40:23 +0000 |
commit | e34cb44ac7c08783b98a16eec70125e205e6eb12 (patch) | |
tree | 1101d23f1a73e5627ae187b07c7a0cf8826e10d1 /backport-include/linux/timer.h |
initial commit
Generated againts 4.14 kernel source with
git backports 1d8cc151d365582b42be00af776270b834a7a37d
Diffstat (limited to 'backport-include/linux/timer.h')
-rw-r--r-- | backport-include/linux/timer.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/backport-include/linux/timer.h b/backport-include/linux/timer.h new file mode 100644 index 0000000..9824ea6 --- /dev/null +++ b/backport-include/linux/timer.h @@ -0,0 +1,63 @@ +#ifndef _BACKPORT_TIMER_H +#define _BACKPORT_TIMER_H + +#include_next <linux/timer.h> + +#ifndef setup_deferrable_timer +/* + * The TIMER_DEFERRABLE flag has not been around since 3.0 so + * two different backports are needed here. + */ +#ifdef TIMER_DEFERRABLE +#define setup_deferrable_timer(timer, fn, data) \ + __setup_timer((timer), (fn), (data), TIMER_DEFERRABLE) +#else +static inline void setup_deferrable_timer_key(struct timer_list *timer, + const char *name, + struct lock_class_key *key, + void (*func)(unsigned long), + unsigned long data) +{ + timer->function = func; + timer->data = data; + init_timer_deferrable_key(timer, name, key); +} +#define setup_deferrable_timer(timer, fn, data) \ + do { \ + static struct lock_class_key __key; \ + setup_deferrable_timer_key((timer), #timer, &__key, \ + (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 */ |