From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Sheng" Subject: [PATCH] KVM: Add reset support for in kernel PIT Date: Thu, 13 Mar 2008 10:24:44 +0800 Message-ID: <200803131024.44218.sheng.yang@intel.com> Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_sBJ2HYElG/XtAbI" To: kvm-devel@lists.sourceforge.net Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces@lists.sourceforge.net Errors-To: kvm-devel-bounces@lists.sourceforge.net List-Id: kvm.vger.kernel.org --Boundary-00=_sBJ2HYElG/XtAbI Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =46rom 2d08f4266a8f47d9c52db9d4f629ab5d2f8fd044 Mon Sep 17 00:00:00 2001 =46rom: Sheng Yang 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. Signed-off-by: Sheng Yang =2D-- arch/x86/kvm/i8254.c | 30 +++++++++++++++++++----------- arch/x86/kvm/i8254.h | 1 + 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c index 7776f50..06a241a 100644 =2D-- a/arch/x86/kvm/i8254.c +++ b/arch/x86/kvm/i8254.c @@ -476,12 +476,28 @@ static int speaker_in_range(struct kvm_io_device *thi= s,=20 gpa_t addr) return (addr =3D=3D KVM_SPEAKER_BASE_ADDRESS); } =2Dstruct 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 =3D 0; i < 3; i++) { + c =3D &pit->pit_state.channels[i]; + c->mode =3D 0xff; + c->gate =3D (i !=3D 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 =3D 1; +} + +struct kvm_pit *kvm_create_pit(struct kvm *kvm) +{ struct kvm_pit *pit; struct kvm_kpit_state *pit_state; =2D struct kvm_kpit_channel_state *c; pit =3D 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 =3D pit; hrtimer_init(&pit_state->pit_timer.timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); =2D atomic_set(&pit_state->pit_timer.pending, 0); =2D for (i =3D 0; i < 3; i++) { =2D c =3D &pit_state->channels[i]; =2D c->mode =3D 0xff; =2D c->gate =3D (i !=3D 2); =2D pit_load_count(kvm, i, 0); =2D } =2D mutex_unlock(&pit->pit_state.lock); =2D pit->pit_state.inject_pending =3D 1; + kvm_pit_reset(pit); return pit; } diff --git a/arch/x86/kvm/i8254.h b/arch/x86/kvm/i8254.h index 586bbf0..e63ef38 100644 =2D-- a/arch/x86/kvm/i8254.h +++ b/arch/x86/kvm/i8254.h @@ -57,5 +57,6 @@ void kvm_pit_timer_intr_post(struct kvm_vcpu *vcpu, int=20 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 =2D- debian.1.5.3.7.1-dirty --Boundary-00=_sBJ2HYElG/XtAbI Content-Type: text/x-diff; charset="utf-8"; name="0001-KVM-Add-reset-support-for-in-kernel-PIT.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0001-KVM-Add-reset-support-for-in-kernel-PIT.patch" =46rom 2d08f4266a8f47d9c52db9d4f629ab5d2f8fd044 Mon Sep 17 00:00:00 2001 =46rom: Sheng Yang 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. Signed-off-by: Sheng Yang =2D-- arch/x86/kvm/i8254.c | 30 +++++++++++++++++++----------- arch/x86/kvm/i8254.h | 1 + 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c index 7776f50..06a241a 100644 =2D-- a/arch/x86/kvm/i8254.c +++ b/arch/x86/kvm/i8254.c @@ -476,12 +476,28 @@ static int speaker_in_range(struct kvm_io_device *thi= s, gpa_t addr) return (addr =3D=3D KVM_SPEAKER_BASE_ADDRESS); } =20 =2Dstruct 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 =3D 0; i < 3; i++) { + c =3D &pit->pit_state.channels[i]; + c->mode =3D 0xff; + c->gate =3D (i !=3D 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 =3D 1; +} + +struct kvm_pit *kvm_create_pit(struct kvm *kvm) +{ struct kvm_pit *pit; struct kvm_kpit_state *pit_state; =2D struct kvm_kpit_channel_state *c; =20 pit =3D 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 =3D pit; hrtimer_init(&pit_state->pit_timer.timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); =2D atomic_set(&pit_state->pit_timer.pending, 0); =2D for (i =3D 0; i < 3; i++) { =2D c =3D &pit_state->channels[i]; =2D c->mode =3D 0xff; =2D c->gate =3D (i !=3D 2); =2D pit_load_count(kvm, i, 0); =2D } =2D mutex_unlock(&pit->pit_state.lock); =20 =2D pit->pit_state.inject_pending =3D 1; + kvm_pit_reset(pit); =20 return pit; } diff --git a/arch/x86/kvm/i8254.h b/arch/x86/kvm/i8254.h index 586bbf0..e63ef38 100644 =2D-- a/arch/x86/kvm/i8254.h +++ b/arch/x86/kvm/i8254.h @@ -57,5 +57,6 @@ void kvm_pit_timer_intr_post(struct kvm_vcpu *vcpu, int v= ec); 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); =20 #endif =2D-=20 debian.1.5.3.7.1-dirty --Boundary-00=_sBJ2HYElG/XtAbI Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- 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/ --Boundary-00=_sBJ2HYElG/XtAbI Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel --Boundary-00=_sBJ2HYElG/XtAbI--