]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/linux/clocksource.h
x86: remove set_kernel_exec()
[linux-2.6-omap-h63xx.git] / include / linux / clocksource.h
index daa4940cc0f1fa37c9afd87b4ed759aac8c0a6bf..85778a4b120906870970f25f8e987fdc7ece95e6 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/timex.h>
 #include <linux/time.h>
 #include <linux/list.h>
+#include <linux/cache.h>
 #include <linux/timer.h>
 #include <asm/div64.h>
 #include <asm/io.h>
@@ -48,10 +49,14 @@ struct clocksource;
  * @shift:             cycle to nanosecond divisor (power of two)
  * @flags:             flags describing special properties
  * @vread:             vsyscall based read
+ * @resume:            resume function for the clocksource, if necessary
  * @cycle_interval:    Used internally by timekeeping core, please ignore.
  * @xtime_interval:    Used internally by timekeeping core, please ignore.
  */
 struct clocksource {
+       /*
+        * First part of structure is read mostly
+        */
        char *name;
        struct list_head list;
        int rating;
@@ -61,10 +66,24 @@ struct clocksource {
        u32 shift;
        unsigned long flags;
        cycle_t (*vread)(void);
+       void (*resume)(void);
+#ifdef CONFIG_IA64
+       void *fsys_mmio;        /* used by fsyscall asm code */
+#define CLKSRC_FSYS_MMIO_SET(mmio, addr)      ((mmio) = (addr))
+#else
+#define CLKSRC_FSYS_MMIO_SET(mmio, addr)      do { } while (0)
+#endif
 
        /* timekeeping specific data, ignore */
-       cycle_t cycle_last, cycle_interval;
-       u64 xtime_nsec, xtime_interval;
+       cycle_t cycle_interval;
+       u64     xtime_interval;
+       /*
+        * Second part is written at each timer interrupt
+        * Keep it in a different cache line to dirty no
+        * more than one cache line.
+        */
+       cycle_t cycle_last ____cacheline_aligned_in_smp;
+       u64 xtime_nsec;
        s64 error;
 
 #ifdef CONFIG_CLOCKSOURCE_WATCHDOG
@@ -84,7 +103,7 @@ struct clocksource {
 #define CLOCK_SOURCE_VALID_FOR_HRES            0x20
 
 /* simplify initialization of mask field */
-#define CLOCKSOURCE_MASK(bits) (cycle_t)(bits<64 ? ((1ULL<<bits)-1) : -1)
+#define CLOCKSOURCE_MASK(bits) (cycle_t)((bits) < 64 ? ((1ULL<<(bits))-1) : -1)
 
 /**
  * clocksource_khz2mult - calculates mult from khz and shift
@@ -196,15 +215,22 @@ static inline void clocksource_calculate_interval(struct clocksource *c,
 
 /* used to install a new clocksource */
 extern int clocksource_register(struct clocksource*);
+extern void clocksource_unregister(struct clocksource*);
 extern struct clocksource* clocksource_get_next(void);
 extern void clocksource_change_rating(struct clocksource *cs, int rating);
+extern void clocksource_resume(void);
 
 #ifdef CONFIG_GENERIC_TIME_VSYSCALL
 extern void update_vsyscall(struct timespec *ts, struct clocksource *c);
+extern void update_vsyscall_tz(void);
 #else
 static inline void update_vsyscall(struct timespec *ts, struct clocksource *c)
 {
 }
+
+static inline void update_vsyscall_tz(void)
+{
+}
 #endif
 
 #endif /* _LINUX_CLOCKSOURCE_H */