From: Jeremy Fitzhardinge <jeremy@goop.org> To: "H. Peter Anvin" <hpa@zytor.com> Cc: "Linux Virtualization" <virtualization@lists.linux-foundation.org>, "Glauber Costa" <glommer@redhat.com>, "Avi Kivity" <avi@redhat.com>, "the arch/x86 maintainers" <x86@kernel.org>, "Linux Virtualization" <virtualization@lists.linux-foundation.org>, "Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>, "Xen-devel@lists.xensource.com" <Xen-devel@lists.xensource.com>, kvm-devel <kvm@vger.kernel.org>, "Cédric Schieli" <cschieli@gmail.com>, "Eelco Dolstra" <e.dolstra@tudelft.nl>, "Olivier Hanesse" <olivier.hanesse@gmail.com> Subject: [PATCH] x86/pvclock-xen: zero last_value on resume Date: Tue, 26 Oct 2010 09:59:10 -0700 [thread overview] Message-ID: <4CC708DE.1070000@goop.org> (raw) [-- Attachment #1: Type: text/plain, Size: 1899 bytes --] If the guest domain has been suspend/resumed or migrated, then the system clock backing the pvclock clocksource may revert to a smaller value (ie, can be non-monotonic across the migration/save-restore). Make sure we zero last_value in that case so that the domain continues to see clock updates. [ I don't know if kvm needs an analogous fix or not. ] Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Cc: Stable Kernel <stable@kernel.org> Reported-by: Eelco Dolstra <e.dolstra@tudelft.nl> Reported-by: Olivier Hanesse <olivier.hanesse@gmail.com> Bisected-by: Cédric Schieli <cschieli@gmail.com> Tested-by: Cédric Schieli <cschieli@gmail.com> diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h index cd02f32..6226870 100644 --- a/arch/x86/include/asm/pvclock.h +++ b/arch/x86/include/asm/pvclock.h @@ -11,5 +11,6 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src); void pvclock_read_wallclock(struct pvclock_wall_clock *wall, struct pvclock_vcpu_time_info *vcpu, struct timespec *ts); +void pvclock_resume(void); #endif /* _ASM_X86_PVCLOCK_H */ diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index 239427c..a4f07c1 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c @@ -120,6 +120,11 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src) static atomic64_t last_value = ATOMIC64_INIT(0); +void pvclock_resume(void) +{ + atomic64_set(&last_value, 0); +} + cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src) { struct pvclock_shadow_time shadow; diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index b2bb5aa..5da5e53 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -426,6 +426,8 @@ void xen_timer_resume(void) { int cpu; + pvclock_resume(); + if (xen_clockevent != &xen_vcpuop_clockevent) return; [-- Attachment #2: x86-pvclock-resume.patch --] [-- Type: text/plain, Size: 2064 bytes --] From 29acbb4e1d93e719250648db1ce8c7a24144fd86 Mon Sep 17 00:00:00 2001 From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Date: Mon, 25 Oct 2010 16:53:46 -0700 Subject: [PATCH] x86/pvclock: zero last_value on resume If the guest domain has been suspend/resumed or migrated, then the system clock backing the pvclock clocksource may revert to a smaller value (ie, can be non-monotonic across the migration/save-restore). Make sure we zero last_value in that case so that the domain continues to see clock updates. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Cc: Stable Kernel <stable@kernel.org> Reported-by: Eelco Dolstra <e.dolstra@tudelft.nl> Reported-by: Olivier Hanesse <olivier.hanesse@gmail.com> Bisected-by: Cédric Schieli <cschieli@gmail.com> Tested-by: Cédric Schieli <cschieli@gmail.com> diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h index cd02f32..6226870 100644 --- a/arch/x86/include/asm/pvclock.h +++ b/arch/x86/include/asm/pvclock.h @@ -11,5 +11,6 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src); void pvclock_read_wallclock(struct pvclock_wall_clock *wall, struct pvclock_vcpu_time_info *vcpu, struct timespec *ts); +void pvclock_resume(void); #endif /* _ASM_X86_PVCLOCK_H */ diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index 239427c..a4f07c1 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c @@ -120,6 +120,11 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src) static atomic64_t last_value = ATOMIC64_INIT(0); +void pvclock_resume(void) +{ + atomic64_set(&last_value, 0); +} + cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src) { struct pvclock_shadow_time shadow; diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index b2bb5aa..5da5e53 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -426,6 +426,8 @@ void xen_timer_resume(void) { int cpu; + pvclock_resume(); + if (xen_clockevent != &xen_vcpuop_clockevent) return;
WARNING: multiple messages have this Message-ID (diff)
From: Jeremy Fitzhardinge <jeremy@goop.org> To: "H. Peter Anvin" <hpa@zytor.com> Cc: "Linux Virtualization" <virtualization@lists.linux-foundation.org>, "Glauber Costa" <glommer@redhat.com>, "Avi Kivity" <avi@redhat.com>, "the arch/x86 maintainers" <x86@kernel.org> Subject: [PATCH] x86/pvclock-xen: zero last_value on resume Date: Tue, 26 Oct 2010 09:59:10 -0700 [thread overview] Message-ID: <4CC708DE.1070000@goop.org> (raw) [-- Attachment #1: Type: text/plain, Size: 1899 bytes --] If the guest domain has been suspend/resumed or migrated, then the system clock backing the pvclock clocksource may revert to a smaller value (ie, can be non-monotonic across the migration/save-restore). Make sure we zero last_value in that case so that the domain continues to see clock updates. [ I don't know if kvm needs an analogous fix or not. ] Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Cc: Stable Kernel <stable@kernel.org> Reported-by: Eelco Dolstra <e.dolstra@tudelft.nl> Reported-by: Olivier Hanesse <olivier.hanesse@gmail.com> Bisected-by: Cédric Schieli <cschieli@gmail.com> Tested-by: Cédric Schieli <cschieli@gmail.com> diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h index cd02f32..6226870 100644 --- a/arch/x86/include/asm/pvclock.h +++ b/arch/x86/include/asm/pvclock.h @@ -11,5 +11,6 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src); void pvclock_read_wallclock(struct pvclock_wall_clock *wall, struct pvclock_vcpu_time_info *vcpu, struct timespec *ts); +void pvclock_resume(void); #endif /* _ASM_X86_PVCLOCK_H */ diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index 239427c..a4f07c1 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c @@ -120,6 +120,11 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src) static atomic64_t last_value = ATOMIC64_INIT(0); +void pvclock_resume(void) +{ + atomic64_set(&last_value, 0); +} + cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src) { struct pvclock_shadow_time shadow; diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index b2bb5aa..5da5e53 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -426,6 +426,8 @@ void xen_timer_resume(void) { int cpu; + pvclock_resume(); + if (xen_clockevent != &xen_vcpuop_clockevent) return; [-- Attachment #2: x86-pvclock-resume.patch --] [-- Type: text/plain, Size: 2064 bytes --] From 29acbb4e1d93e719250648db1ce8c7a24144fd86 Mon Sep 17 00:00:00 2001 From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Date: Mon, 25 Oct 2010 16:53:46 -0700 Subject: [PATCH] x86/pvclock: zero last_value on resume If the guest domain has been suspend/resumed or migrated, then the system clock backing the pvclock clocksource may revert to a smaller value (ie, can be non-monotonic across the migration/save-restore). Make sure we zero last_value in that case so that the domain continues to see clock updates. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Cc: Stable Kernel <stable@kernel.org> Reported-by: Eelco Dolstra <e.dolstra@tudelft.nl> Reported-by: Olivier Hanesse <olivier.hanesse@gmail.com> Bisected-by: Cédric Schieli <cschieli@gmail.com> Tested-by: Cédric Schieli <cschieli@gmail.com> diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h index cd02f32..6226870 100644 --- a/arch/x86/include/asm/pvclock.h +++ b/arch/x86/include/asm/pvclock.h @@ -11,5 +11,6 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src); void pvclock_read_wallclock(struct pvclock_wall_clock *wall, struct pvclock_vcpu_time_info *vcpu, struct timespec *ts); +void pvclock_resume(void); #endif /* _ASM_X86_PVCLOCK_H */ diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index 239427c..a4f07c1 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c @@ -120,6 +120,11 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src) static atomic64_t last_value = ATOMIC64_INIT(0); +void pvclock_resume(void) +{ + atomic64_set(&last_value, 0); +} + cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src) { struct pvclock_shadow_time shadow; diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index b2bb5aa..5da5e53 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c @@ -426,6 +426,8 @@ void xen_timer_resume(void) { int cpu; + pvclock_resume(); + if (xen_clockevent != &xen_vcpuop_clockevent) return;
next reply other threads:[~2010-10-26 16:59 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-10-26 16:59 Jeremy Fitzhardinge [this message] 2010-10-26 16:59 ` [PATCH] x86/pvclock-xen: zero last_value on resume Jeremy Fitzhardinge 2010-10-26 17:48 ` Glauber Costa 2010-10-26 17:48 ` Glauber Costa 2010-10-27 18:53 ` [Xen-devel] " Jeremy Fitzhardinge 2010-10-27 18:53 ` Jeremy Fitzhardinge 2010-10-27 20:59 ` H. Peter Anvin 2010-10-27 20:59 ` H. Peter Anvin 2010-11-03 12:46 ` Ian Campbell 2010-11-03 12:46 ` Ian Campbell 2010-11-03 12:46 ` Ian Campbell 2010-11-03 12:46 ` Ian Campbell 2010-10-26 17:48 ` Glauber Costa 2010-11-22 20:16 ` Jeremy Fitzhardinge 2010-11-22 20:16 ` Jeremy Fitzhardinge 2010-11-26 10:40 ` Ingo Molnar 2010-11-26 10:40 ` Ingo Molnar 2010-11-26 10:40 ` Ingo Molnar 2010-11-26 22:29 ` Jeremy Fitzhardinge 2010-11-26 22:29 ` Jeremy Fitzhardinge 2010-11-26 22:29 ` Jeremy Fitzhardinge -- strict thread matches above, loose matches on Subject: below -- 2010-10-26 16:59 Jeremy Fitzhardinge
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=4CC708DE.1070000@goop.org \ --to=jeremy@goop.org \ --cc=Xen-devel@lists.xensource.com \ --cc=avi@redhat.com \ --cc=cschieli@gmail.com \ --cc=e.dolstra@tudelft.nl \ --cc=glommer@redhat.com \ --cc=hpa@zytor.com \ --cc=kvm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=olivier.hanesse@gmail.com \ --cc=virtualization@lists.linux-foundation.org \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.