* [PATCH 0/2] provide disable clock functionality.
@ 2008-03-06 14:45 Glauber Costa
2008-03-06 14:45 ` [PATCH 1/2] [PATCH] use per cpu variables instead of a vector Glauber Costa
2008-03-07 9:05 ` [PATCH 0/2] provide disable clock functionality Avi Kivity
0 siblings, 2 replies; 5+ messages in thread
From: Glauber Costa @ 2008-03-06 14:45 UTC (permalink / raw)
To: kvm-devel; +Cc: chrisw, avi
Avi,
Hope this is better
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] [PATCH] use per cpu variables instead of a vector
2008-03-06 14:45 [PATCH 0/2] provide disable clock functionality Glauber Costa
@ 2008-03-06 14:45 ` Glauber Costa
2008-03-06 14:45 ` [PATCH 2/2] [PATCH] disable kvm clock unless addr's LSB is set Glauber Costa
2008-03-07 9:05 ` [PATCH 0/2] provide disable clock functionality Avi Kivity
1 sibling, 1 reply; 5+ messages in thread
From: Glauber Costa @ 2008-03-06 14:45 UTC (permalink / raw)
To: kvm-devel; +Cc: chrisw, avi, Glauber Costa
replace hv_clock vector in kvmclock with a percpu variable
that is cacheline aligned.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
---
arch/x86/kernel/kvmclock.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index 9c4a0f4..7c481a3 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -20,6 +20,7 @@ #include <linux/clocksource.h>
#include <linux/kvm_para.h>
#include <asm/arch_hooks.h>
#include <asm/msr.h>
+#include <linux/percpu.h>
#define KVM_SCALE 22
@@ -33,8 +34,8 @@ static int parse_no_kvmclock(char *arg)
early_param("no-kvmclock", parse_no_kvmclock);
/* The hypervisor will put information about time periodically here */
-static struct kvm_vcpu_time_info hv_clock[NR_CPUS];
-#define get_clock(cpu, field) hv_clock[cpu].field
+static DEFINE_PER_CPU_SHARED_ALIGNED(struct kvm_vcpu_time_info, hv_clock);
+#define get_clock(cpu, field) per_cpu(hv_clock, cpu).field
static inline u64 kvm_get_delta(u64 last_tsc)
{
@@ -124,8 +125,8 @@ static int kvm_register_clock(void)
{
int cpu = smp_processor_id();
int low, high;
- low = (int)__pa(&hv_clock[cpu]);
- high = ((u64)__pa(&hv_clock[cpu]) >> 32);
+ low = (int)__pa(&per_cpu(hv_clock, cpu));
+ high = ((u64)__pa(&per_cpu(hv_clock, cpu)) >> 32);
return native_write_msr_safe(MSR_KVM_SYSTEM_TIME, low, high);
}
--
1.4.2
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] [PATCH] disable kvm clock unless addr's LSB is set.
2008-03-06 14:45 ` [PATCH 1/2] [PATCH] use per cpu variables instead of a vector Glauber Costa
@ 2008-03-06 14:45 ` Glauber Costa
2008-03-08 3:39 ` Yang, Sheng
0 siblings, 1 reply; 5+ messages in thread
From: Glauber Costa @ 2008-03-06 14:45 UTC (permalink / raw)
To: kvm-devel; +Cc: chrisw, avi, Glauber Costa
Use LSB of the address passed through the msr to enable/disable
the clock. Setting it to 1 enables it, setting it to 0 disables it.
As the guest data structures are aligned anyway, this
won't be a problem, as this bit is free.
Guest is changed accordingly
Signed-off-by: Glauber Costa <gcosta@redhat.com>
---
arch/x86/kernel/kvmclock.c | 2 +-
arch/x86/kvm/x86.c | 9 ++++++++-
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index 7c481a3..f654a12 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -125,7 +125,7 @@ static int kvm_register_clock(void)
{
int cpu = smp_processor_id();
int low, high;
- low = (int)__pa(&per_cpu(hv_clock, cpu));
+ low = (int)__pa(&per_cpu(hv_clock, cpu)) | 1;
high = ((u64)__pa(&per_cpu(hv_clock, cpu)) >> 32);
return native_write_msr_safe(MSR_KVM_SYSTEM_TIME, low, high);
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 6abd784..64beff6 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -591,8 +591,15 @@ int kvm_set_msr_common(struct kvm_vcpu *
if (vcpu->arch.time_page)
kvm_release_page_dirty(vcpu->arch.time_page);
+ /* we verify if the enable bit is set... */
+ if (!(data & 1)) {
+ vcpu->arch.time = NULL;
+ break;
+ }
+
vcpu->arch.time = data & PAGE_MASK;
- vcpu->arch.time_offset = data & ~PAGE_MASK;
+ /* ...but clean it before doing the actual write */
+ vcpu->arch.time_offset = data & ~(PAGE_MASK | 1);
vcpu->arch.hv_clock.tsc_to_system_mul =
clocksource_khz2mult(tsc_khz, 22);
--
1.4.2
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] provide disable clock functionality.
2008-03-06 14:45 [PATCH 0/2] provide disable clock functionality Glauber Costa
2008-03-06 14:45 ` [PATCH 1/2] [PATCH] use per cpu variables instead of a vector Glauber Costa
@ 2008-03-07 9:05 ` Avi Kivity
1 sibling, 0 replies; 5+ messages in thread
From: Avi Kivity @ 2008-03-07 9:05 UTC (permalink / raw)
To: Glauber Costa; +Cc: kvm-devel, chrisw
Glauber Costa wrote:
> Avi,
>
> Hope this is better
>
Applied, thanks.
--
Any sufficiently difficult bug is indistinguishable from a feature.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] [PATCH] disable kvm clock unless addr's LSB is set.
2008-03-06 14:45 ` [PATCH 2/2] [PATCH] disable kvm clock unless addr's LSB is set Glauber Costa
@ 2008-03-08 3:39 ` Yang, Sheng
0 siblings, 0 replies; 5+ messages in thread
From: Yang, Sheng @ 2008-03-08 3:39 UTC (permalink / raw)
To: kvm-devel; +Cc: chrisw, avi, Glauber Costa
On Thursday 06 March 2008 22:45:44 Glauber Costa wrote:
> Use LSB of the address passed through the msr to enable/disable
> the clock. Setting it to 1 enables it, setting it to 0 disables it.
>
> As the guest data structures are aligned anyway, this
> won't be a problem, as this bit is free.
>
> Guest is changed accordingly
>
> Signed-off-by: Glauber Costa <gcosta@redhat.com>
> ---
> arch/x86/kernel/kvmclock.c | 2 +-
> arch/x86/kvm/x86.c | 9 ++++++++-
> 2 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
> index 7c481a3..f654a12 100644
> --- a/arch/x86/kernel/kvmclock.c
> +++ b/arch/x86/kernel/kvmclock.c
> @@ -125,7 +125,7 @@ static int kvm_register_clock(void)
> {
> int cpu = smp_processor_id();
> int low, high;
> - low = (int)__pa(&per_cpu(hv_clock, cpu));
> + low = (int)__pa(&per_cpu(hv_clock, cpu)) | 1;
> high = ((u64)__pa(&per_cpu(hv_clock, cpu)) >> 32);
>
> return native_write_msr_safe(MSR_KVM_SYSTEM_TIME, low, high);
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 6abd784..64beff6 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -591,8 +591,15 @@ int kvm_set_msr_common(struct kvm_vcpu *
> if (vcpu->arch.time_page)
> kvm_release_page_dirty(vcpu->arch.time_page);
>
> + /* we verify if the enable bit is set... */
> + if (!(data & 1)) {
> + vcpu->arch.time = NULL;
This line made compiler complaining...
Thanks
Yang, Sheng
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-03-08 3:39 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-06 14:45 [PATCH 0/2] provide disable clock functionality Glauber Costa
2008-03-06 14:45 ` [PATCH 1/2] [PATCH] use per cpu variables instead of a vector Glauber Costa
2008-03-06 14:45 ` [PATCH 2/2] [PATCH] disable kvm clock unless addr's LSB is set Glauber Costa
2008-03-08 3:39 ` Yang, Sheng
2008-03-07 9:05 ` [PATCH 0/2] provide disable clock functionality Avi Kivity
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox