Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.
1: #ifndef _LINUX_JIFFIES_H 2: #define _LINUX_JIFFIES_H 3: 4: #include <linux/math64.h> 5: #include <linux/kernel.h> 6: #include <linux/types.h> 7: #include <linux/time.h> 8: #include <linux/timex.h> 9: #include <asm/param.h> /* for HZ */ 10: 11: /* 12: * The following defines establish the engineering parameters of the PLL 13: * model. The HZ variable establishes the timer interrupt frequency, 100 Hz 14: * for the SunOS kernel, 256 Hz for the Ultrix kernel and 1024 Hz for the 15: * OSF/1 kernel. The SHIFT_HZ define expresses the same value as the 16: * nearest power of two in order to avoid hardware multiply operations. 17: */ 18: #if HZ >= 12 && HZ < 24 19: # define SHIFT_HZ 4 20: #elif HZ >= 24 && HZ < 48 21: # define SHIFT_HZ 5 22: #elif HZ >= 48 && HZ < 96 23: # define SHIFT_HZ 6 24: #elif HZ >= 96 && HZ < 192 25: # define SHIFT_HZ 7 26: #elif HZ >= 192 && HZ < 384 27: # define SHIFT_HZ 8 28: #elif HZ >= 384 && HZ < 768 29: # define SHIFT_HZ 9 30: #elif HZ >= 768 && HZ < 1536 31: # define SHIFT_HZ 10 32: #elif HZ >= 1536 && HZ < 3072 33: # define SHIFT_HZ 11 34: #elif HZ >= 3072 && HZ < 6144 35: # define SHIFT_HZ 12 36: #elif HZ >= 6144 && HZ < 12288 37: # define SHIFT_HZ 13 38: #else 39: # error Invalid value of HZ. 40: #endif 41: 42: /* Suppose we want to divide two numbers NOM and DEN: NOM/DEN, then we can 43: * improve accuracy by shifting LSH bits, hence calculating: 44: * (NOM << LSH) / DEN 45: * This however means trouble for large NOM, because (NOM << LSH) may no 46: * longer fit in 32 bits. The following way of calculating this gives us 47: * some slack, under the following conditions: 48: * - (NOM / DEN) fits in (32 - LSH) bits. 49: * - (NOM % DEN) fits in (32 - LSH) bits. 50: */ 51: #define SH_DIV(NOM,DEN,LSH) ( (((NOM) / (DEN)) << (LSH)) \ 52: + ((((NOM) % (DEN)) << (LSH)) + (DEN) / 2) / (DEN)) 53: 54: /* LATCH is used in the interval timer and ftape setup. */ 55: #define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */ 56: 57: extern int register_refined_jiffies(long clock_tick_rate); 58: 59: /* TICK_NSEC is the time between ticks in nsec assuming SHIFTED_HZ */ 60: #define TICK_NSEC ((NSEC_PER_SEC+HZ/2)/HZ) 61: 62: /* TICK_USEC is the time between ticks in usec assuming fake USER_HZ */ 63: #define TICK_USEC ((1000000UL + USER_HZ/2) / USER_HZ) 64: 65: /* some arch's have a small-data section that can be accessed register-relative 66: * but that can only take up to, say, 4-byte variables. jiffies being part of 67: * an 8-byte variable may not be correctly accessed unless we force the issue 68: */ 69: #define __jiffy_data __attribute__((section(".data"))) 70: 71: /* 72: * The 64-bit value is not atomic - you MUST NOT read it 73: * without sampling the sequence number in jiffies_lock. 74: * get_jiffies_64() will do this for you as appropriate. 75: */ 76: extern u64 __jiffy_data jiffies_64; 77: extern unsigned long volatile __jiffy_data jiffies; 78: 79: #if (BITS_PER_LONG < 64) 80: u64 get_jiffies_64(void); 81: #else 82: static inline u64 get_jiffies_64(void) 83: { 84: return (u64)jiffies; 85: } 86: #endif 87: 88: /* 89: * These inlines deal with timer wrapping correctly. You are 90: * strongly encouraged to use them 91: * 1. Because people otherwise forget 92: * 2. Because if the timer wrap changes in future you won't have to 93: * alter your driver code. 94: * 95: * time_after(a,b) returns true if the time a is after time b. 96: * 97: * Do this with "<0" and ">=0" to only test the sign of the result. A 98: * good compiler would generate better code (and a really good compiler 99: * wouldn't care). Gcc is currently neither. 100: */ 101: #define time_after(a,b) \ 102: (typecheck(unsigned long, a) && \ 103: typecheck(unsigned long, b) && \ 104: ((long)((b) - (a)) < 0)) 105: #define time_before(a,b) time_after(b,a) 106: 107: #define time_after_eq(a,b) \ 108: (typecheck(unsigned long, a) && \ 109: typecheck(unsigned long, b) && \ 110: ((long)((a) - (b)) >= 0)) 111: #define time_before_eq(a,b) time_after_eq(b,a) 112: 113: /* 114: * Calculate whether a is in the range of [b, c]. 115: */ 116: #define time_in_range(a,b,c) \ 117: (time_after_eq(a,b) && \ 118: time_before_eq(a,c)) 119: 120: /* 121: * Calculate whether a is in the range of [b, c). 122: */ 123: #define time_in_range_open(a,b,c) \ 124: (time_after_eq(a,b) && \ 125: time_before(a,c)) 126: 127: /* Same as above, but does so with platform independent 64bit types. 128: * These must be used when utilizing jiffies_64 (i.e. return value of 129: * get_jiffies_64() */ 130: #define time_after64(a,b) \ 131: (typecheck(__u64, a) && \ 132: typecheck(__u64, b) && \ 133: ((__s64)((b) - (a)) < 0)) 134: #define time_before64(a,b) time_after64(b,a) 135: 136: #define time_after_eq64(a,b) \ 137: (typecheck(__u64, a) && \ 138: typecheck(__u64, b) && \ 139: ((__s64)((a) - (b)) >= 0)) 140: #define time_before_eq64(a,b) time_after_eq64(b,a) 141: 142: #define time_in_range64(a, b, c) \ 143: (time_after_eq64(a, b) && \ 144: time_before_eq64(a, c)) 145: 146: /* 147: * These four macros compare jiffies and 'a' for convenience. 148: */ 149: 150: /* time_is_before_jiffies(a) return true if a is before jiffies */ 151: #define time_is_before_jiffies(a) time_after(jiffies, a) 152: 153: /* time_is_after_jiffies(a) return true if a is after jiffies */ 154: #define time_is_after_jiffies(a) time_before(jiffies, a) 155: 156: /* time_is_before_eq_jiffies(a) return true if a is before or equal to jiffies*/ 157: #define time_is_before_eq_jiffies(a) time_after_eq(jiffies, a) 158: 159: /* time_is_after_eq_jiffies(a) return true if a is after or equal to jiffies*/ 160: #define time_is_after_eq_jiffies(a) time_before_eq(jiffies, a) 161: 162: /* 163: * Have the 32 bit jiffies value wrap 5 minutes after boot 164: * so jiffies wrap bugs show up earlier. 165: */ 166: #define INITIAL_JIFFIES ((unsigned long)(unsigned int) (-300*HZ)) 167: 168: /* 169: * Change timeval to jiffies, trying to avoid the 170: * most obvious overflows.. 171: * 172: * And some not so obvious. 173: * 174: * Note that we don't want to return LONG_MAX, because 175: * for various timeout reasons we often end up having 176: * to wait "jiffies+1" in order to guarantee that we wait 177: * at _least_ "jiffies" - so "jiffies+1" had better still 178: * be positive. 179: */ 180: #define MAX_JIFFY_OFFSET ((LONG_MAX >> 1)-1) 181: 182: extern unsigned long preset_lpj; 183: 184: /* 185: * We want to do realistic conversions of time so we need to use the same 186: * values the update wall clock code uses as the jiffies size. This value 187: * is: TICK_NSEC (which is defined in timex.h). This 188: * is a constant and is in nanoseconds. We will use scaled math 189: * with a set of scales defined here as SEC_JIFFIE_SC, USEC_JIFFIE_SC and 190: * NSEC_JIFFIE_SC. Note that these defines contain nothing but 191: * constants and so are computed at compile time. SHIFT_HZ (computed in 192: * timex.h) adjusts the scaling for different HZ values. 193: 194: * Scaled math??? What is that? 195: * 196: * Scaled math is a way to do integer math on values that would, 197: * otherwise, either overflow, underflow, or cause undesired div 198: * instructions to appear in the execution path. In short, we "scale" 199: * up the operands so they take more bits (more precision, less 200: * underflow), do the desired operation and then "scale" the result back 201: * by the same amount. If we do the scaling by shifting we avoid the 202: * costly mpy and the dastardly div instructions. 203: 204: * Suppose, for example, we want to convert from seconds to jiffies 205: * where jiffies is defined in nanoseconds as NSEC_PER_JIFFIE. The 206: * simple math is: jiff = (sec * NSEC_PER_SEC) / NSEC_PER_JIFFIE; We 207: * observe that (NSEC_PER_SEC / NSEC_PER_JIFFIE) is a constant which we 208: * might calculate at compile time, however, the result will only have 209: * about 3-4 bits of precision (less for smaller values of HZ). 210: * 211: * So, we scale as follows: 212: * jiff = (sec) * (NSEC_PER_SEC / NSEC_PER_JIFFIE); 213: * jiff = ((sec) * ((NSEC_PER_SEC * SCALE)/ NSEC_PER_JIFFIE)) / SCALE; 214: * Then we make SCALE a power of two so: 215: * jiff = ((sec) * ((NSEC_PER_SEC << SCALE)/ NSEC_PER_JIFFIE)) >> SCALE; 216: * Now we define: 217: * #define SEC_CONV = ((NSEC_PER_SEC << SCALE)/ NSEC_PER_JIFFIE)) 218: * jiff = (sec * SEC_CONV) >> SCALE; 219: * 220: * Often the math we use will expand beyond 32-bits so we tell C how to 221: * do this and pass the 64-bit result of the mpy through the ">> SCALE" 222: * which should take the result back to 32-bits. We want this expansion 223: * to capture as much precision as possible. At the same time we don't 224: * want to overflow so we pick the SCALE to avoid this. In this file, 225: * that means using a different scale for each range of HZ values (as 226: * defined in timex.h). 227: * 228: * For those who want to know, gcc will give a 64-bit result from a "*" 229: * operator if the result is a long long AND at least one of the 230: * operands is cast to long long (usually just prior to the "*" so as 231: * not to confuse it into thinking it really has a 64-bit operand, 232: * which, buy the way, it can do, but it takes more code and at least 2 233: * mpys). 234: 235: * We also need to be aware that one second in nanoseconds is only a 236: * couple of bits away from overflowing a 32-bit word, so we MUST use 237: * 64-bits to get the full range time in nanoseconds. 238: 239: */ 240: 241: /* 242: * Here are the scales we will use. One for seconds, nanoseconds and 243: * microseconds. 244: * 245: * Within the limits of cpp we do a rough cut at the SEC_JIFFIE_SC and 246: * check if the sign bit is set. If not, we bump the shift count by 1. 247: * (Gets an extra bit of precision where we can use it.) 248: * We know it is set for HZ = 1024 and HZ = 100 not for 1000. 249: * Haven't tested others. 250: 251: * Limits of cpp (for #if expressions) only long (no long long), but 252: * then we only need the most signicant bit. 253: */ 254: 255: #define SEC_JIFFIE_SC (31 - SHIFT_HZ) 256: #if !((((NSEC_PER_SEC << 2) / TICK_NSEC) << (SEC_JIFFIE_SC - 2)) & 0x80000000) 257: #undef SEC_JIFFIE_SC 258: #define SEC_JIFFIE_SC (32 - SHIFT_HZ) 259: #endif 260: #define NSEC_JIFFIE_SC (SEC_JIFFIE_SC + 29) 261: #define USEC_JIFFIE_SC (SEC_JIFFIE_SC + 19) 262: #define SEC_CONVERSION ((unsigned long)((((u64)NSEC_PER_SEC << SEC_JIFFIE_SC) +\ TICK_NSEC -1) / (u64)TICK_NSEC)) 264: 265: #define NSEC_CONVERSION ((unsigned long)((((u64)1 << NSEC_JIFFIE_SC) +\ TICK_NSEC -1) / (u64)TICK_NSEC)) 267: #define USEC_CONVERSION \ 268: ((unsigned long)((((u64)NSEC_PER_USEC << USEC_JIFFIE_SC) +\ TICK_NSEC -1) / (u64)TICK_NSEC)) 270: /* 271: * USEC_ROUND is used in the timeval to jiffie conversion. See there 272: * for more details. It is the scaled resolution rounding value. Note 273: * that it is a 64-bit value. Since, when it is applied, we are already 274: * in jiffies (albit scaled), it is nothing but the bits we will shift 275: * off. 276: */ 277: #define USEC_ROUND (u64)(((u64)1 << USEC_JIFFIE_SC) - 1) 278: /* 279: * The maximum jiffie value is (MAX_INT >> 1). Here we translate that 280: * into seconds. The 64-bit case will overflow if we are not careful, 281: * so use the messy SH_DIV macro to do it. Still all constants. 282: */ 283: #if BITS_PER_LONG < 64 284: # define MAX_SEC_IN_JIFFIES \ 285: (long)((u64)((u64)MAX_JIFFY_OFFSET * TICK_NSEC) / NSEC_PER_SEC) 286: #else /* take care of overflow on 64 bits machines */ 287: # define MAX_SEC_IN_JIFFIES \ 288: (SH_DIV((MAX_JIFFY_OFFSET >> SEC_JIFFIE_SC) * TICK_NSEC, NSEC_PER_SEC, 1) - 1) 289: 290: #endif 291: 292: /* 293: * Convert various time units to each other: 294: */ 295: extern unsigned int jiffies_to_msecs(const unsigned long j); 296: extern unsigned int jiffies_to_usecs(const unsigned long j); 297: extern unsigned long msecs_to_jiffies(const unsigned int m); 298: extern unsigned long usecs_to_jiffies(const unsigned int u); 299: extern unsigned long timespec_to_jiffies(const struct timespec *value); 300: extern void jiffies_to_timespec(const unsigned long jiffies, 301: struct timespec *value); 302: extern unsigned long timeval_to_jiffies(const struct timeval *value); 303: extern void jiffies_to_timeval(const unsigned long jiffies, 304: struct timeval *value); 305: 306: extern clock_t jiffies_to_clock_t(unsigned long x); 307: static inline clock_t jiffies_delta_to_clock_t(long delta) 308: { 309: return jiffies_to_clock_t(max(0L, delta)); 310: } 311: 312: extern unsigned long clock_t_to_jiffies(unsigned long x); 313: extern u64 jiffies_64_to_clock_t(u64 x); 314: extern u64 nsec_to_clock_t(u64 x); 315: extern u64 nsecs_to_jiffies64(u64 n); 316: extern unsigned long nsecs_to_jiffies(u64 n); 317: 318: #define TIMESTAMP_SIZE 30 319: 320: #endif 321: