KVM: Add reset support for in kernel PIT
PATCH 1/1 KVM: Add reset support for in kernel PIT
From 2d08f4266a8f47d9c52db9d4f629ab5d2f8fd044 Mon Sep 17 00:00:00 2001
From: Sheng Yang <[email protected]>
Date: Thu, 13 Mar 2008 10:22:26 +0800
Subject: [PATCH] KVM: Add reset support for in kernel PIT
Separate the reset part and prepare for reset support.
--- arch/x86/kvm/i8254.c | 30 +++++++++++++++++++----------- arch/x86/kvm/i8254.h | 1 + 2 files changed, 20 insertions(+), 11 deletions(-)
arch/x86/kvm/i8254.c +0 -0
@@ -476,12 +476,28 @@ static int speaker_in_range(struct kvm_io_device *this,
gpa_t addr)
return (addr == KVM_SPEAKER_BASE_ADDRESS);
}
-struct kvm_pit *kvm_create_pit(struct kvm *kvm)
+void kvm_pit_reset(struct kvm_pit *pit)
{
int i;
+ struct kvm_kpit_channel_state *c;
+
+ mutex_lock(&pit->pit_state.lock);
+ for (i = 0; i < 3; i++) {
+ c = &pit->pit_state.channels[i];
+ c->mode = 0xff;
+ c->gate = (i != 2);
+ pit_load_count(pit->kvm, i, 0);
+ }
+ mutex_unlock(&pit->pit_state.lock);
+
+ atomic_set(&pit->pit_state.pit_timer.pending, 0);
+ pit->pit_state.inject_pending = 1;
+}
+
+struct kvm_pit *kvm_create_pit(struct kvm *kvm)
+{
struct kvm_pit *pit;
struct kvm_kpit_state *pit_state;
- struct kvm_kpit_channel_state *c;
pit = kzalloc(sizeof(struct kvm_pit), GFP_KERNEL); if (!pit)
@@ -510,17 +526,9 @@ struct kvm_pit *kvm_create_pit(struct kvm *kvm)
pit_state->pit = pit; hrtimer_init(&pit_state->pit_timer.timer,
CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
- atomic_set(&pit_state->pit_timer.pending, 0);
- for (i = 0; i < 3; i++) {
- c = &pit_state->channels[i];
- c->mode = 0xff;
- c->gate = (i != 2);
- pit_load_count(kvm, i, 0);
- }
-
mutex_unlock(&pit->pit_state.lock);
- pit->pit_state.inject_pending = 1;
+ kvm_pit_reset(pit);
return pit;
}
arch/x86/kvm/i8254.h +0 -0
@@ -57,5 +57,6 @@ void kvm_pit_timer_intr_post(struct kvm_vcpu *vcpu, int
vec);
void kvm_pit_load_count(struct kvm *kvm, int channel, u32 val); struct kvm_pit *kvm_create_pit(struct kvm *kvm);
void kvm_free_pit(struct kvm *kvm);
+void kvm_pit_reset(struct kvm_pit *pit);
#endif
--
debian.1.5.3.7.1-dirty
From 2d08f4266a8f47d9c52db9d4f629ab5d2f8fd044 Mon Sep 17 00:00:00 2001
From: Sheng Yang <[email protected]>
Date: Thu, 13 Mar 2008 10:22:26 +0800
Subject: [PATCH] KVM: Add reset support for in kernel PIT
Separate the reset part and prepare for reset support.
--- arch/x86/kvm/i8254.c | 30 +++++++++++++++++++----------- arch/x86/kvm/i8254.h | 1 + 2 files changed, 20 insertions(+), 11 deletions(-)
arch/x86/kvm/i8254.c +19 -11
@@ -476,12 +476,28 @@ static int speaker_in_range(struct kvm_io_device *this, gpa_t addr)return (addr ==KVM_SPEAKER_BASE_ADDRESS ); } -struct kvm_pit *kvm_create_pit (struct kvm *kvm) +void kvm_pit_reset (struct kvm_pit *pit) {int i; +struct kvm_kpit_channel_state *c; + +mutex_lock (&pit->pit_state.lock); +for (i =0 ; i <3 ; i++) { + c = &pit->pit_state.channels[i]; + c->mode =0xff ; + c->gate = (i !=2 ); +pit_load_count (pit->kvm, i,0 ); + } +mutex_unlock (&pit->pit_state.lock); + +atomic_set (&pit->pit_state.pit_timer.pending,0 ); + pit->pit_state.inject_pending =1 ; +} + +struct kvm_pit *kvm_create_pit (struct kvm *kvm) +{struct kvm_pit *pit;struct kvm_kpit_state *pit_state; -struct kvm_kpit_channel_state *c; pit =kzalloc (sizeof (struct kvm_pit ),GFP_KERNEL );if (!pit)
@@ -510,17 +526,9 @@ struct kvm_pit *kvm_create_pit(struct kvm *kvm) pit_state->pit = pit;hrtimer_init (&pit_state->pit_timer.timer,CLOCK_MONOTONIC ,HRTIMER_MODE_ABS ); -atomic_set (&pit_state->pit_timer.pending,0 ); -for (i =0 ; i <3 ; i++) { - c = &pit_state->channels[i]; - c->mode =0xff ; - c->gate = (i !=2 ); -pit_load_count (kvm, i,0 ); - } -mutex_unlock (&pit->pit_state.lock); - pit->pit_state.inject_pending =1 ; +kvm_pit_reset (pit);return pit; }
arch/x86/kvm/i8254.h +1 -0
@@ -57,5 +57,6 @@ void kvm_pit_timer_intr_post(struct kvm_vcpu *vcpu, int vec);void kvm_pit_load_count (struct kvm *kvm,int channel,u32 val);struct kvm_pit *kvm_create_pit (struct kvm *kvm);void kvm_free_pit (struct kvm *kvm); +void kvm_pit_reset (struct kvm_pit *pit);#endif
Signature · 1 line
debian.1.5.3.7.1-dirty
-------------------------------------------------------------------------
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/
_______________________________________________
kvm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel
Quoted 27 lines · Sheng
From
2d08f4266a8f47d9c52db9d4f629ab5d2f8fd044Mon Sep 17 00:00:00 2001
From: Sheng Yang <[email protected]>
Date: Thu, 13 Mar 2008 10:22:26 +0800
Subject: [PATCH] KVM: Add reset support for in kernel PITSeparate the reset part and prepare for reset support.
arch/x86/kvm/i8254.c +6
-1@@ -476,12 +476,28 @@ static int speaker_in_range(struct kvm_io_device *this, gpa_t addr)return (addr ==KVM_SPEAKER_BASE_ADDRESS ); } -struct kvm_pit *kvm_create_pit (struct kvm *kvm) +void kvm_pit_reset (struct kvm_pit *pit) {int i; +struct kvm_kpit_channel_state *c; + +mutex_lock (&pit->pit_state.lock); +for (i =0 ; i <3 ; i++) { + c = &pit->pit_state.channels[i];
arch/x86/kvm/i8254.c static int speaker_in_range(struct kvm_io_device *this, · line 497
Quoted 10 lines
arch/x86/kvm/i8254.c +9
-0+ c->mode =0xff ; + c->gate = (i !=2 ); +pit_load_count (pit->kvm, i,0 ); + } +mutex_unlock (&pit->pit_state.lock); + +atomic_set (&pit->pit_state.pit_timer.pending,0 ); + pit->pit_state.inject_pending =1 ; +}
Don't you need an hrtimer_cancel() here, in case this is a true reset and not part of initialization?
Signature · 7 lines
error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- 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/
Quoted 32 lines · On Sunday 16 March 2008 22:36:57 Avi Kivity wrote:
Quoted 31 lines · Sheng
From
2d08f4266a8f47d9c52db9d4f629ab5d2f8fd044Mon Sep 17 00:00:00 2001
From: Sheng Yang <[email protected]>
Date: Thu, 13 Mar 2008 10:22:26 +0800
Subject: [PATCH] KVM: Add reset support for in kernel PITSeparate the reset part and prepare for reset support.
arch/x86/kvm/i8254.c +10
-1@@ -476,12 +476,28 @@ static int speaker_in_range(struct kvm_io_device *this, gpa_t addr)return (addr ==KVM_SPEAKER_BASE_ADDRESS ); } -struct kvm_pit *kvm_create_pit (struct kvm *kvm) +void kvm_pit_reset (struct kvm_pit *pit) {int i; +struct kvm_kpit_channel_state *c; + +mutex_lock (&pit->pit_state.lock); +for (i =0 ; i <3 ; i++) { + c = &pit->pit_state.channels[i]; + c->mode =0xff ; + c->gate = (i !=2 ); +pit_load_count (pit->kvm, i,0 ); + }
Quoted 8 lines
arch/x86/kvm/i8254.c static int speaker_in_range(struct kvm_io_device *this, gpa_t addr) · line 495
Quoted 5 lines
arch/x86/kvm/i8254.c +5
-0+mutex_unlock (&pit->pit_state.lock); + +atomic_set (&pit->pit_state.pit_timer.pending,0 ); + pit->pit_state.inject_pending =1 ; +}Don't you need an
hrtimer_cancel()here, in case this is a true reset and not part of initialization?
This was done implicitly, when the function call pit_load_count() with c->mode=0xff. But may be it's better to do it explicitly?
Signature · 7 lines
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/
Quoted 45 lines · Sheng
Quoted 33 lines · On Sunday 16 March 2008 22:36:57 Avi Kivity wrote:
Quoted 31 lines · Sheng
From
2d08f4266a8f47d9c52db9d4f629ab5d2f8fd044Mon Sep 17 00:00:00 2001
From: Sheng Yang <[email protected]>
Date: Thu, 13 Mar 2008 10:22:26 +0800
Subject: [PATCH] KVM: Add reset support for in kernel PITSeparate the reset part and prepare for reset support.
arch/x86/kvm/i8254.c +10
-1@@ -476,12 +476,28 @@ static int speaker_in_range(struct kvm_io_device *this, gpa_t addr)return (addr ==KVM_SPEAKER_BASE_ADDRESS ); } -struct kvm_pit *kvm_create_pit (struct kvm *kvm) +void kvm_pit_reset (struct kvm_pit *pit) {int i; +struct kvm_kpit_channel_state *c; + +mutex_lock (&pit->pit_state.lock); +for (i =0 ; i <3 ; i++) { + c = &pit->pit_state.channels[i]; + c->mode =0xff ; + c->gate = (i !=2 ); +pit_load_count (pit->kvm, i,0 ); + }Quoted 9 lines
arch/x86/kvm/i8254.c static int speaker_in_range(struct kvm_io_device *this, gpa_t addr) · line 501
Quoted 6 lines
arch/x86/kvm/i8254.c +5
-0+mutex_unlock (&pit->pit_state.lock); + +atomic_set (&pit->pit_state.pit_timer.pending,0 ); + pit->pit_state.inject_pending =1 ; +}Don't you need an
hrtimer_cancel()here, in case this is a true reset and not part of initialization?
Quoted 4 lines
This was done implicitly, when the function call
pit_load_count()with c->mode=0xff. But may be it's better to do it explicitly?
It's fine, didn't look closely enough. Will apply, thanks.
Signature · 7 lines
error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- 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/