diff options
| -rw-r--r-- | arch/x86/kernel/kvmclock.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 220a360010f8..5bedbdddf1f2 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c | |||
| @@ -218,6 +218,9 @@ static void kvm_shutdown(void) | |||
| 218 | void __init kvmclock_init(void) | 218 | void __init kvmclock_init(void) |
| 219 | { | 219 | { |
| 220 | unsigned long mem; | 220 | unsigned long mem; |
| 221 | int size; | ||
| 222 | |||
| 223 | size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS); | ||
| 221 | 224 | ||
| 222 | if (!kvm_para_available()) | 225 | if (!kvm_para_available()) |
| 223 | return; | 226 | return; |
| @@ -231,16 +234,14 @@ void __init kvmclock_init(void) | |||
| 231 | printk(KERN_INFO "kvm-clock: Using msrs %x and %x", | 234 | printk(KERN_INFO "kvm-clock: Using msrs %x and %x", |
| 232 | msr_kvm_system_time, msr_kvm_wall_clock); | 235 | msr_kvm_system_time, msr_kvm_wall_clock); |
| 233 | 236 | ||
| 234 | mem = memblock_alloc(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS, | 237 | mem = memblock_alloc(size, PAGE_SIZE); |
| 235 | PAGE_SIZE); | ||
| 236 | if (!mem) | 238 | if (!mem) |
| 237 | return; | 239 | return; |
| 238 | hv_clock = __va(mem); | 240 | hv_clock = __va(mem); |
| 239 | 241 | ||
| 240 | if (kvm_register_clock("boot clock")) { | 242 | if (kvm_register_clock("boot clock")) { |
| 241 | hv_clock = NULL; | 243 | hv_clock = NULL; |
| 242 | memblock_free(mem, | 244 | memblock_free(mem, size); |
| 243 | sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS); | ||
| 244 | return; | 245 | return; |
| 245 | } | 246 | } |
| 246 | pv_time_ops.sched_clock = kvm_clock_read; | 247 | pv_time_ops.sched_clock = kvm_clock_read; |
| @@ -275,7 +276,7 @@ int __init kvm_setup_vsyscall_timeinfo(void) | |||
| 275 | struct pvclock_vcpu_time_info *vcpu_time; | 276 | struct pvclock_vcpu_time_info *vcpu_time; |
| 276 | unsigned int size; | 277 | unsigned int size; |
| 277 | 278 | ||
| 278 | size = sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS; | 279 | size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS); |
| 279 | 280 | ||
| 280 | preempt_disable(); | 281 | preempt_disable(); |
| 281 | cpu = smp_processor_id(); | 282 | cpu = smp_processor_id(); |
