diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-01-04 04:59:36 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-01-04 04:59:36 -0500 |
| commit | 4010b0192ddf6ec7ec1b9feb9b0953692aeb7329 (patch) | |
| tree | 188a36186f6ce580b479a9f90404fa7bfd8b22d7 /arch/s390/include | |
| parent | 79ff56ebd3edfb16f8badc558cb439b203a3298f (diff) | |
| parent | 7d3b56ba37a95f1f370f50258ed3954c304c524b (diff) | |
Merge branch 'linus' into core/urgent
Diffstat (limited to 'arch/s390/include')
| -rw-r--r-- | arch/s390/include/asm/cpu.h | 7 | ||||
| -rw-r--r-- | arch/s390/include/asm/cputime.h | 42 | ||||
| -rw-r--r-- | arch/s390/include/asm/lowcore.h | 49 | ||||
| -rw-r--r-- | arch/s390/include/asm/system.h | 4 | ||||
| -rw-r--r-- | arch/s390/include/asm/thread_info.h | 2 | ||||
| -rw-r--r-- | arch/s390/include/asm/timer.h | 16 | ||||
| -rw-r--r-- | arch/s390/include/asm/topology.h | 2 | ||||
| -rw-r--r-- | arch/s390/include/asm/vdso.h | 15 |
8 files changed, 78 insertions, 59 deletions
diff --git a/arch/s390/include/asm/cpu.h b/arch/s390/include/asm/cpu.h index e5a6a9ba3adf..d60a2eefb17b 100644 --- a/arch/s390/include/asm/cpu.h +++ b/arch/s390/include/asm/cpu.h | |||
| @@ -14,7 +14,6 @@ | |||
| 14 | 14 | ||
| 15 | struct s390_idle_data { | 15 | struct s390_idle_data { |
| 16 | spinlock_t lock; | 16 | spinlock_t lock; |
| 17 | unsigned int in_idle; | ||
| 18 | unsigned long long idle_count; | 17 | unsigned long long idle_count; |
| 19 | unsigned long long idle_enter; | 18 | unsigned long long idle_enter; |
| 20 | unsigned long long idle_time; | 19 | unsigned long long idle_time; |
| @@ -22,12 +21,12 @@ struct s390_idle_data { | |||
| 22 | 21 | ||
| 23 | DECLARE_PER_CPU(struct s390_idle_data, s390_idle); | 22 | DECLARE_PER_CPU(struct s390_idle_data, s390_idle); |
| 24 | 23 | ||
| 25 | void s390_idle_leave(void); | 24 | void vtime_start_cpu(void); |
| 26 | 25 | ||
| 27 | static inline void s390_idle_check(void) | 26 | static inline void s390_idle_check(void) |
| 28 | { | 27 | { |
| 29 | if ((&__get_cpu_var(s390_idle))->in_idle) | 28 | if ((&__get_cpu_var(s390_idle))->idle_enter != 0ULL) |
| 30 | s390_idle_leave(); | 29 | vtime_start_cpu(); |
| 31 | } | 30 | } |
| 32 | 31 | ||
| 33 | #endif /* _ASM_S390_CPU_H_ */ | 32 | #endif /* _ASM_S390_CPU_H_ */ |
diff --git a/arch/s390/include/asm/cputime.h b/arch/s390/include/asm/cputime.h index 133ce054fc89..521726430afa 100644 --- a/arch/s390/include/asm/cputime.h +++ b/arch/s390/include/asm/cputime.h | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | #include <asm/div64.h> | 12 | #include <asm/div64.h> |
| 13 | 13 | ||
| 14 | /* We want to use micro-second resolution. */ | 14 | /* We want to use full resolution of the CPU timer: 2**-12 micro-seconds. */ |
| 15 | 15 | ||
| 16 | typedef unsigned long long cputime_t; | 16 | typedef unsigned long long cputime_t; |
| 17 | typedef unsigned long long cputime64_t; | 17 | typedef unsigned long long cputime64_t; |
| @@ -53,9 +53,9 @@ __div(unsigned long long n, unsigned int base) | |||
| 53 | #define cputime_ge(__a, __b) ((__a) >= (__b)) | 53 | #define cputime_ge(__a, __b) ((__a) >= (__b)) |
| 54 | #define cputime_lt(__a, __b) ((__a) < (__b)) | 54 | #define cputime_lt(__a, __b) ((__a) < (__b)) |
| 55 | #define cputime_le(__a, __b) ((__a) <= (__b)) | 55 | #define cputime_le(__a, __b) ((__a) <= (__b)) |
| 56 | #define cputime_to_jiffies(__ct) (__div((__ct), 1000000 / HZ)) | 56 | #define cputime_to_jiffies(__ct) (__div((__ct), 4096000000ULL / HZ)) |
| 57 | #define cputime_to_scaled(__ct) (__ct) | 57 | #define cputime_to_scaled(__ct) (__ct) |
| 58 | #define jiffies_to_cputime(__hz) ((cputime_t)(__hz) * (1000000 / HZ)) | 58 | #define jiffies_to_cputime(__hz) ((cputime_t)(__hz) * (4096000000ULL / HZ)) |
| 59 | 59 | ||
| 60 | #define cputime64_zero (0ULL) | 60 | #define cputime64_zero (0ULL) |
| 61 | #define cputime64_add(__a, __b) ((__a) + (__b)) | 61 | #define cputime64_add(__a, __b) ((__a) + (__b)) |
| @@ -64,7 +64,7 @@ __div(unsigned long long n, unsigned int base) | |||
| 64 | static inline u64 | 64 | static inline u64 |
| 65 | cputime64_to_jiffies64(cputime64_t cputime) | 65 | cputime64_to_jiffies64(cputime64_t cputime) |
| 66 | { | 66 | { |
| 67 | do_div(cputime, 1000000 / HZ); | 67 | do_div(cputime, 4096000000ULL / HZ); |
| 68 | return cputime; | 68 | return cputime; |
| 69 | } | 69 | } |
| 70 | 70 | ||
| @@ -74,13 +74,13 @@ cputime64_to_jiffies64(cputime64_t cputime) | |||
| 74 | static inline unsigned int | 74 | static inline unsigned int |
| 75 | cputime_to_msecs(const cputime_t cputime) | 75 | cputime_to_msecs(const cputime_t cputime) |
| 76 | { | 76 | { |
| 77 | return __div(cputime, 1000); | 77 | return __div(cputime, 4096000); |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | static inline cputime_t | 80 | static inline cputime_t |
| 81 | msecs_to_cputime(const unsigned int m) | 81 | msecs_to_cputime(const unsigned int m) |
| 82 | { | 82 | { |
| 83 | return (cputime_t) m * 1000; | 83 | return (cputime_t) m * 4096000; |
| 84 | } | 84 | } |
| 85 | 85 | ||
| 86 | /* | 86 | /* |
| @@ -89,13 +89,13 @@ msecs_to_cputime(const unsigned int m) | |||
| 89 | static inline unsigned int | 89 | static inline unsigned int |
| 90 | cputime_to_secs(const cputime_t cputime) | 90 | cputime_to_secs(const cputime_t cputime) |
| 91 | { | 91 | { |
| 92 | return __div(cputime, 1000000); | 92 | return __div(cputime, 2048000000) >> 1; |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | static inline cputime_t | 95 | static inline cputime_t |
| 96 | secs_to_cputime(const unsigned int s) | 96 | secs_to_cputime(const unsigned int s) |
| 97 | { | 97 | { |
| 98 | return (cputime_t) s * 1000000; | 98 | return (cputime_t) s * 4096000000ULL; |
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | /* | 101 | /* |
| @@ -104,7 +104,7 @@ secs_to_cputime(const unsigned int s) | |||
| 104 | static inline cputime_t | 104 | static inline cputime_t |
| 105 | timespec_to_cputime(const struct timespec *value) | 105 | timespec_to_cputime(const struct timespec *value) |
| 106 | { | 106 | { |
| 107 | return value->tv_nsec / 1000 + (u64) value->tv_sec * 1000000; | 107 | return value->tv_nsec * 4096 / 1000 + (u64) value->tv_sec * 4096000000ULL; |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | static inline void | 110 | static inline void |
| @@ -114,12 +114,12 @@ cputime_to_timespec(const cputime_t cputime, struct timespec *value) | |||
| 114 | register_pair rp; | 114 | register_pair rp; |
| 115 | 115 | ||
| 116 | rp.pair = cputime >> 1; | 116 | rp.pair = cputime >> 1; |
| 117 | asm ("dr %0,%1" : "+d" (rp) : "d" (1000000 >> 1)); | 117 | asm ("dr %0,%1" : "+d" (rp) : "d" (2048000000UL)); |
| 118 | value->tv_nsec = rp.subreg.even * 1000; | 118 | value->tv_nsec = rp.subreg.even * 1000 / 4096; |
| 119 | value->tv_sec = rp.subreg.odd; | 119 | value->tv_sec = rp.subreg.odd; |
| 120 | #else | 120 | #else |
| 121 | value->tv_nsec = (cputime % 1000000) * 1000; | 121 | value->tv_nsec = (cputime % 4096000000ULL) * 1000 / 4096; |
| 122 | value->tv_sec = cputime / 1000000; | 122 | value->tv_sec = cputime / 4096000000ULL; |
| 123 | #endif | 123 | #endif |
| 124 | } | 124 | } |
| 125 | 125 | ||
| @@ -131,7 +131,7 @@ cputime_to_timespec(const cputime_t cputime, struct timespec *value) | |||
| 131 | static inline cputime_t | 131 | static inline cputime_t |
| 132 | timeval_to_cputime(const struct timeval *value) | 132 | timeval_to_cputime(const struct timeval *value) |
| 133 | { | 133 | { |
| 134 | return value->tv_usec + (u64) value->tv_sec * 1000000; | 134 | return value->tv_usec * 4096 + (u64) value->tv_sec * 4096000000ULL; |
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | static inline void | 137 | static inline void |
| @@ -141,12 +141,12 @@ cputime_to_timeval(const cputime_t cputime, struct timeval *value) | |||
| 141 | register_pair rp; | 141 | register_pair rp; |
| 142 | 142 | ||
| 143 | rp.pair = cputime >> 1; | 143 | rp.pair = cputime >> 1; |
| 144 | asm ("dr %0,%1" : "+d" (rp) : "d" (1000000 >> 1)); | 144 | asm ("dr %0,%1" : "+d" (rp) : "d" (2048000000UL)); |
| 145 | value->tv_usec = rp.subreg.even; | 145 | value->tv_usec = rp.subreg.even / 4096; |
| 146 | value->tv_sec = rp.subreg.odd; | 146 | value->tv_sec = rp.subreg.odd; |
| 147 | #else | 147 | #else |
| 148 | value->tv_usec = cputime % 1000000; | 148 | value->tv_usec = cputime % 4096000000ULL; |
| 149 | value->tv_sec = cputime / 1000000; | 149 | value->tv_sec = cputime / 4096000000ULL; |
| 150 | #endif | 150 | #endif |
| 151 | } | 151 | } |
| 152 | 152 | ||
| @@ -156,13 +156,13 @@ cputime_to_timeval(const cputime_t cputime, struct timeval *value) | |||
| 156 | static inline clock_t | 156 | static inline clock_t |
| 157 | cputime_to_clock_t(cputime_t cputime) | 157 | cputime_to_clock_t(cputime_t cputime) |
| 158 | { | 158 | { |
| 159 | return __div(cputime, 1000000 / USER_HZ); | 159 | return __div(cputime, 4096000000ULL / USER_HZ); |
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | static inline cputime_t | 162 | static inline cputime_t |
| 163 | clock_t_to_cputime(unsigned long x) | 163 | clock_t_to_cputime(unsigned long x) |
| 164 | { | 164 | { |
| 165 | return (cputime_t) x * (1000000 / USER_HZ); | 165 | return (cputime_t) x * (4096000000ULL / USER_HZ); |
| 166 | } | 166 | } |
| 167 | 167 | ||
| 168 | /* | 168 | /* |
| @@ -171,7 +171,7 @@ clock_t_to_cputime(unsigned long x) | |||
| 171 | static inline clock_t | 171 | static inline clock_t |
| 172 | cputime64_to_clock_t(cputime64_t cputime) | 172 | cputime64_to_clock_t(cputime64_t cputime) |
| 173 | { | 173 | { |
| 174 | return __div(cputime, 1000000 / USER_HZ); | 174 | return __div(cputime, 4096000000ULL / USER_HZ); |
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | #endif /* _S390_CPUTIME_H */ | 177 | #endif /* _S390_CPUTIME_H */ |
diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h index 0bc51d52a899..ffdef5fe8587 100644 --- a/arch/s390/include/asm/lowcore.h +++ b/arch/s390/include/asm/lowcore.h | |||
| @@ -67,11 +67,11 @@ | |||
| 67 | #define __LC_SYNC_ENTER_TIMER 0x248 | 67 | #define __LC_SYNC_ENTER_TIMER 0x248 |
| 68 | #define __LC_ASYNC_ENTER_TIMER 0x250 | 68 | #define __LC_ASYNC_ENTER_TIMER 0x250 |
| 69 | #define __LC_EXIT_TIMER 0x258 | 69 | #define __LC_EXIT_TIMER 0x258 |
| 70 | #define __LC_LAST_UPDATE_TIMER 0x260 | 70 | #define __LC_USER_TIMER 0x260 |
| 71 | #define __LC_USER_TIMER 0x268 | 71 | #define __LC_SYSTEM_TIMER 0x268 |
| 72 | #define __LC_SYSTEM_TIMER 0x270 | 72 | #define __LC_STEAL_TIMER 0x270 |
| 73 | #define __LC_LAST_UPDATE_CLOCK 0x278 | 73 | #define __LC_LAST_UPDATE_TIMER 0x278 |
| 74 | #define __LC_STEAL_CLOCK 0x280 | 74 | #define __LC_LAST_UPDATE_CLOCK 0x280 |
| 75 | #define __LC_RETURN_MCCK_PSW 0x288 | 75 | #define __LC_RETURN_MCCK_PSW 0x288 |
| 76 | #define __LC_KERNEL_STACK 0xC40 | 76 | #define __LC_KERNEL_STACK 0xC40 |
| 77 | #define __LC_THREAD_INFO 0xC44 | 77 | #define __LC_THREAD_INFO 0xC44 |
| @@ -89,11 +89,11 @@ | |||
| 89 | #define __LC_SYNC_ENTER_TIMER 0x250 | 89 | #define __LC_SYNC_ENTER_TIMER 0x250 |
| 90 | #define __LC_ASYNC_ENTER_TIMER 0x258 | 90 | #define __LC_ASYNC_ENTER_TIMER 0x258 |
| 91 | #define __LC_EXIT_TIMER 0x260 | 91 | #define __LC_EXIT_TIMER 0x260 |
| 92 | #define __LC_LAST_UPDATE_TIMER 0x268 | 92 | #define __LC_USER_TIMER 0x268 |
| 93 | #define __LC_USER_TIMER 0x270 | 93 | #define __LC_SYSTEM_TIMER 0x270 |
| 94 | #define __LC_SYSTEM_TIMER 0x278 | 94 | #define __LC_STEAL_TIMER 0x278 |
| 95 | #define __LC_LAST_UPDATE_CLOCK 0x280 | 95 | #define __LC_LAST_UPDATE_TIMER 0x280 |
| 96 | #define __LC_STEAL_CLOCK 0x288 | 96 | #define __LC_LAST_UPDATE_CLOCK 0x288 |
| 97 | #define __LC_RETURN_MCCK_PSW 0x290 | 97 | #define __LC_RETURN_MCCK_PSW 0x290 |
| 98 | #define __LC_KERNEL_STACK 0xD40 | 98 | #define __LC_KERNEL_STACK 0xD40 |
| 99 | #define __LC_THREAD_INFO 0xD48 | 99 | #define __LC_THREAD_INFO 0xD48 |
| @@ -106,8 +106,10 @@ | |||
| 106 | #define __LC_IPLDEV 0xDB8 | 106 | #define __LC_IPLDEV 0xDB8 |
| 107 | #define __LC_CURRENT 0xDD8 | 107 | #define __LC_CURRENT 0xDD8 |
| 108 | #define __LC_INT_CLOCK 0xDE8 | 108 | #define __LC_INT_CLOCK 0xDE8 |
| 109 | #define __LC_VDSO_PER_CPU 0xE38 | ||
| 109 | #endif /* __s390x__ */ | 110 | #endif /* __s390x__ */ |
| 110 | 111 | ||
| 112 | #define __LC_PASTE 0xE40 | ||
| 111 | 113 | ||
| 112 | #define __LC_PANIC_MAGIC 0xE00 | 114 | #define __LC_PANIC_MAGIC 0xE00 |
| 113 | #ifndef __s390x__ | 115 | #ifndef __s390x__ |
| @@ -252,11 +254,11 @@ struct _lowcore | |||
| 252 | __u64 sync_enter_timer; /* 0x248 */ | 254 | __u64 sync_enter_timer; /* 0x248 */ |
| 253 | __u64 async_enter_timer; /* 0x250 */ | 255 | __u64 async_enter_timer; /* 0x250 */ |
| 254 | __u64 exit_timer; /* 0x258 */ | 256 | __u64 exit_timer; /* 0x258 */ |
| 255 | __u64 last_update_timer; /* 0x260 */ | 257 | __u64 user_timer; /* 0x260 */ |
| 256 | __u64 user_timer; /* 0x268 */ | 258 | __u64 system_timer; /* 0x268 */ |
| 257 | __u64 system_timer; /* 0x270 */ | 259 | __u64 steal_timer; /* 0x270 */ |
| 258 | __u64 last_update_clock; /* 0x278 */ | 260 | __u64 last_update_timer; /* 0x278 */ |
| 259 | __u64 steal_clock; /* 0x280 */ | 261 | __u64 last_update_clock; /* 0x280 */ |
| 260 | psw_t return_mcck_psw; /* 0x288 */ | 262 | psw_t return_mcck_psw; /* 0x288 */ |
| 261 | __u8 pad8[0xc00-0x290]; /* 0x290 */ | 263 | __u8 pad8[0xc00-0x290]; /* 0x290 */ |
| 262 | 264 | ||
| @@ -343,11 +345,11 @@ struct _lowcore | |||
| 343 | __u64 sync_enter_timer; /* 0x250 */ | 345 | __u64 sync_enter_timer; /* 0x250 */ |
| 344 | __u64 async_enter_timer; /* 0x258 */ | 346 | __u64 async_enter_timer; /* 0x258 */ |
| 345 | __u64 exit_timer; /* 0x260 */ | 347 | __u64 exit_timer; /* 0x260 */ |
| 346 | __u64 last_update_timer; /* 0x268 */ | 348 | __u64 user_timer; /* 0x268 */ |
| 347 | __u64 user_timer; /* 0x270 */ | 349 | __u64 system_timer; /* 0x270 */ |
| 348 | __u64 system_timer; /* 0x278 */ | 350 | __u64 steal_timer; /* 0x278 */ |
| 349 | __u64 last_update_clock; /* 0x280 */ | 351 | __u64 last_update_timer; /* 0x280 */ |
| 350 | __u64 steal_clock; /* 0x288 */ | 352 | __u64 last_update_clock; /* 0x288 */ |
| 351 | psw_t return_mcck_psw; /* 0x290 */ | 353 | psw_t return_mcck_psw; /* 0x290 */ |
| 352 | __u8 pad8[0xc00-0x2a0]; /* 0x2a0 */ | 354 | __u8 pad8[0xc00-0x2a0]; /* 0x2a0 */ |
| 353 | /* System info area */ | 355 | /* System info area */ |
| @@ -381,7 +383,12 @@ struct _lowcore | |||
| 381 | /* whether the kernel died with panic() or not */ | 383 | /* whether the kernel died with panic() or not */ |
| 382 | __u32 panic_magic; /* 0xe00 */ | 384 | __u32 panic_magic; /* 0xe00 */ |
| 383 | 385 | ||
| 384 | __u8 pad13[0x11b8-0xe04]; /* 0xe04 */ | 386 | /* Per cpu primary space access list */ |
| 387 | __u8 pad_0xe04[0xe3c-0xe04]; /* 0xe04 */ | ||
| 388 | __u32 vdso_per_cpu_data; /* 0xe3c */ | ||
| 389 | __u32 paste[16]; /* 0xe40 */ | ||
| 390 | |||
| 391 | __u8 pad13[0x11b8-0xe80]; /* 0xe80 */ | ||
| 385 | 392 | ||
| 386 | /* 64 bit extparam used for pfault, diag 250 etc */ | 393 | /* 64 bit extparam used for pfault, diag 250 etc */ |
| 387 | __u64 ext_params2; /* 0x11B8 */ | 394 | __u64 ext_params2; /* 0x11B8 */ |
diff --git a/arch/s390/include/asm/system.h b/arch/s390/include/asm/system.h index 024ef42ed6d7..3a8b26eb1f2e 100644 --- a/arch/s390/include/asm/system.h +++ b/arch/s390/include/asm/system.h | |||
| @@ -99,7 +99,7 @@ static inline void restore_access_regs(unsigned int *acrs) | |||
| 99 | prev = __switch_to(prev,next); \ | 99 | prev = __switch_to(prev,next); \ |
| 100 | } while (0) | 100 | } while (0) |
| 101 | 101 | ||
| 102 | extern void account_vtime(struct task_struct *); | 102 | extern void account_vtime(struct task_struct *, struct task_struct *); |
| 103 | extern void account_tick_vtime(struct task_struct *); | 103 | extern void account_tick_vtime(struct task_struct *); |
| 104 | extern void account_system_vtime(struct task_struct *); | 104 | extern void account_system_vtime(struct task_struct *); |
| 105 | 105 | ||
| @@ -121,7 +121,7 @@ static inline void cmma_init(void) { } | |||
| 121 | 121 | ||
| 122 | #define finish_arch_switch(prev) do { \ | 122 | #define finish_arch_switch(prev) do { \ |
| 123 | set_fs(current->thread.mm_segment); \ | 123 | set_fs(current->thread.mm_segment); \ |
| 124 | account_vtime(prev); \ | 124 | account_vtime(prev, current); \ |
| 125 | } while (0) | 125 | } while (0) |
| 126 | 126 | ||
| 127 | #define nop() asm volatile("nop") | 127 | #define nop() asm volatile("nop") |
diff --git a/arch/s390/include/asm/thread_info.h b/arch/s390/include/asm/thread_info.h index c1eaf9604da7..c544aa524535 100644 --- a/arch/s390/include/asm/thread_info.h +++ b/arch/s390/include/asm/thread_info.h | |||
| @@ -47,6 +47,8 @@ struct thread_info { | |||
| 47 | unsigned int cpu; /* current CPU */ | 47 | unsigned int cpu; /* current CPU */ |
| 48 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | 48 | int preempt_count; /* 0 => preemptable, <0 => BUG */ |
| 49 | struct restart_block restart_block; | 49 | struct restart_block restart_block; |
| 50 | __u64 user_timer; | ||
| 51 | __u64 system_timer; | ||
| 50 | }; | 52 | }; |
| 51 | 53 | ||
| 52 | /* | 54 | /* |
diff --git a/arch/s390/include/asm/timer.h b/arch/s390/include/asm/timer.h index 61705d60f995..e4bcab739c19 100644 --- a/arch/s390/include/asm/timer.h +++ b/arch/s390/include/asm/timer.h | |||
| @@ -23,20 +23,18 @@ struct vtimer_list { | |||
| 23 | __u64 expires; | 23 | __u64 expires; |
| 24 | __u64 interval; | 24 | __u64 interval; |
| 25 | 25 | ||
| 26 | spinlock_t lock; | ||
| 27 | unsigned long magic; | ||
| 28 | |||
| 29 | void (*function)(unsigned long); | 26 | void (*function)(unsigned long); |
| 30 | unsigned long data; | 27 | unsigned long data; |
| 31 | }; | 28 | }; |
| 32 | 29 | ||
| 33 | /* the offset value will wrap after ca. 71 years */ | 30 | /* the vtimer value will wrap after ca. 71 years */ |
| 34 | struct vtimer_queue { | 31 | struct vtimer_queue { |
| 35 | struct list_head list; | 32 | struct list_head list; |
| 36 | spinlock_t lock; | 33 | spinlock_t lock; |
| 37 | __u64 to_expire; /* current event expire time */ | 34 | __u64 timer; /* last programmed timer */ |
| 38 | __u64 offset; /* list offset to zero */ | 35 | __u64 elapsed; /* elapsed time of timer expire values */ |
| 39 | __u64 idle; /* temp var for idle */ | 36 | __u64 idle; /* temp var for idle */ |
| 37 | int do_spt; /* =1: reprogram cpu timer in idle */ | ||
| 40 | }; | 38 | }; |
| 41 | 39 | ||
| 42 | extern void init_virt_timer(struct vtimer_list *timer); | 40 | extern void init_virt_timer(struct vtimer_list *timer); |
| @@ -48,8 +46,8 @@ extern int del_virt_timer(struct vtimer_list *timer); | |||
| 48 | extern void init_cpu_vtimer(void); | 46 | extern void init_cpu_vtimer(void); |
| 49 | extern void vtime_init(void); | 47 | extern void vtime_init(void); |
| 50 | 48 | ||
| 51 | extern void vtime_start_cpu_timer(void); | 49 | extern void vtime_stop_cpu(void); |
| 52 | extern void vtime_stop_cpu_timer(void); | 50 | extern void vtime_start_leave(void); |
| 53 | 51 | ||
| 54 | #endif /* __KERNEL__ */ | 52 | #endif /* __KERNEL__ */ |
| 55 | 53 | ||
diff --git a/arch/s390/include/asm/topology.h b/arch/s390/include/asm/topology.h index d96c91643458..c93eb50e1d09 100644 --- a/arch/s390/include/asm/topology.h +++ b/arch/s390/include/asm/topology.h | |||
| @@ -6,10 +6,12 @@ | |||
| 6 | #define mc_capable() (1) | 6 | #define mc_capable() (1) |
| 7 | 7 | ||
| 8 | cpumask_t cpu_coregroup_map(unsigned int cpu); | 8 | cpumask_t cpu_coregroup_map(unsigned int cpu); |
| 9 | const struct cpumask *cpu_coregroup_mask(unsigned int cpu); | ||
| 9 | 10 | ||
| 10 | extern cpumask_t cpu_core_map[NR_CPUS]; | 11 | extern cpumask_t cpu_core_map[NR_CPUS]; |
| 11 | 12 | ||
| 12 | #define topology_core_siblings(cpu) (cpu_core_map[cpu]) | 13 | #define topology_core_siblings(cpu) (cpu_core_map[cpu]) |
| 14 | #define topology_core_cpumask(cpu) (&cpu_core_map[cpu]) | ||
| 13 | 15 | ||
| 14 | int topology_set_cpu_management(int fc); | 16 | int topology_set_cpu_management(int fc); |
| 15 | void topology_schedule_update(void); | 17 | void topology_schedule_update(void); |
diff --git a/arch/s390/include/asm/vdso.h b/arch/s390/include/asm/vdso.h index a44f4fe16a35..7bdd7c8ebc91 100644 --- a/arch/s390/include/asm/vdso.h +++ b/arch/s390/include/asm/vdso.h | |||
| @@ -12,9 +12,9 @@ | |||
| 12 | #ifndef __ASSEMBLY__ | 12 | #ifndef __ASSEMBLY__ |
| 13 | 13 | ||
| 14 | /* | 14 | /* |
| 15 | * Note about this structure: | 15 | * Note about the vdso_data and vdso_per_cpu_data structures: |
| 16 | * | 16 | * |
| 17 | * NEVER USE THIS IN USERSPACE CODE DIRECTLY. The layout of this | 17 | * NEVER USE THEM IN USERSPACE CODE DIRECTLY. The layout of the |
| 18 | * structure is supposed to be known only to the function in the vdso | 18 | * structure is supposed to be known only to the function in the vdso |
| 19 | * itself and may change without notice. | 19 | * itself and may change without notice. |
| 20 | */ | 20 | */ |
| @@ -28,10 +28,21 @@ struct vdso_data { | |||
| 28 | __u64 wtom_clock_nsec; /* 0x28 */ | 28 | __u64 wtom_clock_nsec; /* 0x28 */ |
| 29 | __u32 tz_minuteswest; /* Minutes west of Greenwich 0x30 */ | 29 | __u32 tz_minuteswest; /* Minutes west of Greenwich 0x30 */ |
| 30 | __u32 tz_dsttime; /* Type of dst correction 0x34 */ | 30 | __u32 tz_dsttime; /* Type of dst correction 0x34 */ |
| 31 | __u32 ectg_available; | ||
| 32 | }; | ||
| 33 | |||
| 34 | struct vdso_per_cpu_data { | ||
| 35 | __u64 ectg_timer_base; | ||
| 36 | __u64 ectg_user_time; | ||
| 31 | }; | 37 | }; |
| 32 | 38 | ||
| 33 | extern struct vdso_data *vdso_data; | 39 | extern struct vdso_data *vdso_data; |
| 34 | 40 | ||
| 41 | #ifdef CONFIG_64BIT | ||
| 42 | int vdso_alloc_per_cpu(int cpu, struct _lowcore *lowcore); | ||
| 43 | void vdso_free_per_cpu(int cpu, struct _lowcore *lowcore); | ||
| 44 | #endif | ||
| 45 | |||
| 35 | #endif /* __ASSEMBLY__ */ | 46 | #endif /* __ASSEMBLY__ */ |
| 36 | 47 | ||
| 37 | #endif /* __KERNEL__ */ | 48 | #endif /* __KERNEL__ */ |
