summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/timer.h89
-rw-r--r--include/linux/workqueue.h2
2 files changed, 40 insertions, 51 deletions
diff --git a/include/linux/timer.h b/include/linux/timer.h
index f890f4f3d668..cfedb5e8bb07 100644
--- a/include/linux/timer.h
+++ b/include/linux/timer.h
@@ -2,70 +2,59 @@
#define _LINUX_TIMER_H
#include <linux/config.h>
-#include <linux/smp.h>
-#include <linux/stddef.h>
#include <linux/list.h>
-#include <linux/spinlock.h>
-#include <linux/cache.h>
struct tvec_t_base_s;
-/*
- * Timers may be dynamically created and destroyed, and should be initialized
- * by a call to init_timer() upon creation.
- *
- * The "data" field enables use of a common timeout function for several
- * timeouts. You can use this field to distinguish between the different
- * invocations.
- */
-typedef struct timer_list {
- struct list_head list;
+struct timer_list {
+ struct list_head entry;
unsigned long expires;
- unsigned long data;
+
void (*function)(unsigned long);
+ unsigned long data;
+
struct tvec_t_base_s *base;
-} timer_t;
+};
-extern void add_timer(timer_t * timer);
-extern int del_timer(timer_t * timer);
-
-#ifdef CONFIG_SMP
-extern int del_timer_sync(timer_t * timer);
-extern void sync_timers(void);
-#define timer_enter(base, t) do { base->running_timer = t; mb(); } while (0)
-#define timer_exit(base) do { base->running_timer = NULL; } while (0)
-#define timer_is_running(base,t) (base->running_timer == t)
-#define timer_synchronize(base,t) while (timer_is_running(base,t)) barrier()
-#else
-#define del_timer_sync(t) del_timer(t)
-#define sync_timers() do { } while (0)
-#define timer_enter(base,t) do { } while (0)
-#define timer_exit(base) do { } while (0)
-#endif
-
-/*
- * mod_timer is a more efficient way to update the expire field of an
- * active timer (if the timer is inactive it will be activated)
- * mod_timer(a,b) is equivalent to del_timer(a); a->expires = b; add_timer(a).
- * If the timer is known to be not pending (ie, in the handler), mod_timer
- * is less efficient than a->expires = b; add_timer(a).
+/***
+ * init_timer - initialize a timer.
+ * @timer: the timer to be initialized
+ *
+ * init_timer() must be done to a timer prior calling *any* of the
+ * other timer functions.
*/
-int mod_timer(timer_t *timer, unsigned long expires);
-
-extern void it_real_fn(unsigned long);
-
-extern void init_timers(void);
-extern void run_local_timers(void);
-
-static inline void init_timer(timer_t * timer)
+static inline void init_timer(struct timer_list * timer)
{
- timer->list.next = timer->list.prev = NULL;
timer->base = NULL;
}
-static inline int timer_pending(const timer_t * timer)
+/***
+ * timer_pending - is a timer pending?
+ * @timer: the timer in question
+ *
+ * timer_pending will tell whether a given timer is currently pending,
+ * or not. Callers must ensure serialization wrt. other operations done
+ * to this timer, eg. interrupt contexts, or other CPUs on SMP.
+ *
+ * return value: 1 if the timer is pending, 0 if not.
+ */
+static inline int timer_pending(const struct timer_list * timer)
{
- return timer->list.next != NULL;
+ return timer->base != NULL;
}
+extern void add_timer(struct timer_list * timer);
+extern int del_timer(struct timer_list * timer);
+extern int mod_timer(struct timer_list *timer, unsigned long expires);
+
+#if CONFIG_SMP
+ extern int del_timer_sync(struct timer_list * timer);
+#else
+# define del_timer_sync(t) del_timer(t)
+#endif
+
+extern void init_timers(void);
+extern void run_local_timers(void);
+extern void it_real_fn(unsigned long);
+
#endif
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
index 7828c7bef55f..3e466894179f 100644
--- a/include/linux/workqueue.h
+++ b/include/linux/workqueue.h
@@ -15,7 +15,7 @@ struct work_struct {
void (*func)(void *);
void *data;
void *wq_data;
- timer_t timer;
+ struct timer_list timer;
};
#define __WORK_INITIALIZER(n, f, d) { \