diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-10 10:18:15 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-10 10:18:15 -0500 |
| commit | 2cbd1883881ac490d93514324b947a0267c5ca96 (patch) | |
| tree | 79211d70db535cfb838f3e79d31dd2ceaf6d22c1 | |
| parent | 5993fe31c0e9646233ff4ecea32e3c899036eda9 (diff) | |
| parent | ee73f656a604d5aa9df86a97102e4e462dd79924 (diff) | |
Merge branch 'kvm-updates/2.6.33' of git://git.kernel.org/pub/scm/virt/kvm/kvm
* 'kvm-updates/2.6.33' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
KVM: PIT: control word is write-only
kvmclock: count total_sleep_time when updating guest clock
Export the symbol of getboottime and mmonotonic_to_bootbased
| -rw-r--r-- | arch/x86/kvm/i8254.c | 3 | ||||
| -rw-r--r-- | arch/x86/kvm/x86.c | 7 | ||||
| -rw-r--r-- | kernel/time/timekeeping.c | 2 |
3 files changed, 8 insertions, 4 deletions
diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c index 296aba49472a..15578f180e59 100644 --- a/arch/x86/kvm/i8254.c +++ b/arch/x86/kvm/i8254.c | |||
| @@ -467,6 +467,9 @@ static int pit_ioport_read(struct kvm_io_device *this, | |||
| 467 | return -EOPNOTSUPP; | 467 | return -EOPNOTSUPP; |
| 468 | 468 | ||
| 469 | addr &= KVM_PIT_CHANNEL_MASK; | 469 | addr &= KVM_PIT_CHANNEL_MASK; |
| 470 | if (addr == 3) | ||
| 471 | return 0; | ||
| 472 | |||
| 470 | s = &pit_state->channels[addr]; | 473 | s = &pit_state->channels[addr]; |
| 471 | 474 | ||
| 472 | mutex_lock(&pit_state->lock); | 475 | mutex_lock(&pit_state->lock); |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 1ddcad452add..a1e1bc9d412d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
| @@ -670,7 +670,7 @@ static void kvm_write_wall_clock(struct kvm *kvm, gpa_t wall_clock) | |||
| 670 | { | 670 | { |
| 671 | static int version; | 671 | static int version; |
| 672 | struct pvclock_wall_clock wc; | 672 | struct pvclock_wall_clock wc; |
| 673 | struct timespec now, sys, boot; | 673 | struct timespec boot; |
| 674 | 674 | ||
| 675 | if (!wall_clock) | 675 | if (!wall_clock) |
| 676 | return; | 676 | return; |
| @@ -685,9 +685,7 @@ static void kvm_write_wall_clock(struct kvm *kvm, gpa_t wall_clock) | |||
| 685 | * wall clock specified here. guest system time equals host | 685 | * wall clock specified here. guest system time equals host |
| 686 | * system time for us, thus we must fill in host boot time here. | 686 | * system time for us, thus we must fill in host boot time here. |
| 687 | */ | 687 | */ |
| 688 | now = current_kernel_time(); | 688 | getboottime(&boot); |
| 689 | ktime_get_ts(&sys); | ||
| 690 | boot = ns_to_timespec(timespec_to_ns(&now) - timespec_to_ns(&sys)); | ||
| 691 | 689 | ||
| 692 | wc.sec = boot.tv_sec; | 690 | wc.sec = boot.tv_sec; |
| 693 | wc.nsec = boot.tv_nsec; | 691 | wc.nsec = boot.tv_nsec; |
| @@ -762,6 +760,7 @@ static void kvm_write_guest_time(struct kvm_vcpu *v) | |||
| 762 | local_irq_save(flags); | 760 | local_irq_save(flags); |
| 763 | kvm_get_msr(v, MSR_IA32_TSC, &vcpu->hv_clock.tsc_timestamp); | 761 | kvm_get_msr(v, MSR_IA32_TSC, &vcpu->hv_clock.tsc_timestamp); |
| 764 | ktime_get_ts(&ts); | 762 | ktime_get_ts(&ts); |
| 763 | monotonic_to_bootbased(&ts); | ||
| 765 | local_irq_restore(flags); | 764 | local_irq_restore(flags); |
| 766 | 765 | ||
| 767 | /* With all the info we got, fill in the values */ | 766 | /* With all the info we got, fill in the values */ |
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 7faaa32fbf4f..e2ab064c6d41 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c | |||
| @@ -880,6 +880,7 @@ void getboottime(struct timespec *ts) | |||
| 880 | 880 | ||
| 881 | set_normalized_timespec(ts, -boottime.tv_sec, -boottime.tv_nsec); | 881 | set_normalized_timespec(ts, -boottime.tv_sec, -boottime.tv_nsec); |
| 882 | } | 882 | } |
| 883 | EXPORT_SYMBOL_GPL(getboottime); | ||
| 883 | 884 | ||
| 884 | /** | 885 | /** |
| 885 | * monotonic_to_bootbased - Convert the monotonic time to boot based. | 886 | * monotonic_to_bootbased - Convert the monotonic time to boot based. |
| @@ -889,6 +890,7 @@ void monotonic_to_bootbased(struct timespec *ts) | |||
| 889 | { | 890 | { |
| 890 | *ts = timespec_add_safe(*ts, total_sleep_time); | 891 | *ts = timespec_add_safe(*ts, total_sleep_time); |
| 891 | } | 892 | } |
| 893 | EXPORT_SYMBOL_GPL(monotonic_to_bootbased); | ||
| 892 | 894 | ||
| 893 | unsigned long get_seconds(void) | 895 | unsigned long get_seconds(void) |
| 894 | { | 896 | { |
