From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= Subject: [PATCH v2 05/14] KVM: x86: tone down WARN_ON pit.state_lock Date: Wed, 17 Feb 2016 20:14:47 +0100 Message-ID: <1455736496-374-6-git-send-email-rkrcmar@redhat.com> References: <1455736496-374-1-git-send-email-rkrcmar@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: kvm@vger.kernel.org, Paolo Bonzini , Yuki Shibuya To: linux-kernel@vger.kernel.org Return-path: In-Reply-To: <1455736496-374-1-git-send-email-rkrcmar@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: kvm.vger.kernel.org A guest could hang the host kernel if it could hit the WARN_ON, because of sheer number of those reports. Internal callers have to be sensible anyway, so we now only check for it in an API function. Signed-off-by: Radim Kr=C4=8Dm=C3=A1=C5=99 --- v2: new arch/x86/kvm/i8254.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c index cbb911728ac8..328b21f3ab7c 100644 --- a/arch/x86/kvm/i8254.c +++ b/arch/x86/kvm/i8254.c @@ -76,8 +76,6 @@ static void pit_set_gate(struct kvm *kvm, int channel= , u32 val) struct kvm_kpit_channel_state *c =3D &kvm->arch.vpit->pit_state.channels[channel]; =20 - WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); - switch (c->mode) { default: case 0: @@ -99,8 +97,6 @@ static void pit_set_gate(struct kvm *kvm, int channel= , u32 val) =20 static int pit_get_gate(struct kvm *kvm, int channel) { - WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); - return kvm->arch.vpit->pit_state.channels[channel].gate; } =20 @@ -144,8 +140,6 @@ static int pit_get_count(struct kvm *kvm, int chann= el) s64 d, t; int counter; =20 - WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); - t =3D kpit_elapsed(kvm, c, channel); d =3D muldiv64(t, KVM_PIT_FREQ, NSEC_PER_SEC); =20 @@ -174,8 +168,6 @@ static int pit_get_out(struct kvm *kvm, int channel= ) s64 d, t; int out; =20 - WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); - t =3D kpit_elapsed(kvm, c, channel); d =3D muldiv64(t, KVM_PIT_FREQ, NSEC_PER_SEC); =20 @@ -207,8 +199,6 @@ static void pit_latch_count(struct kvm *kvm, int ch= annel) struct kvm_kpit_channel_state *c =3D &kvm->arch.vpit->pit_state.channels[channel]; =20 - WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); - if (!c->count_latched) { c->latched_count =3D pit_get_count(kvm, channel); c->count_latched =3D c->rw_mode; @@ -220,8 +210,6 @@ static void pit_latch_status(struct kvm *kvm, int c= hannel) struct kvm_kpit_channel_state *c =3D &kvm->arch.vpit->pit_state.channels[channel]; =20 - WARN_ON(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); - if (!c->status_latched) { /* TODO: Return NULL COUNT (bit 6). */ c->status =3D ((pit_get_out(kvm, channel) << 7) | @@ -367,8 +355,6 @@ static void pit_load_count(struct kvm *kvm, int cha= nnel, u32 val) { struct kvm_kpit_state *ps =3D &kvm->arch.vpit->pit_state; =20 - WARN_ON(!mutex_is_locked(&ps->lock)); - pr_debug("load_count val is %d, channel is %d\n", val, channel); =20 /* @@ -406,6 +392,9 @@ static void pit_load_count(struct kvm *kvm, int cha= nnel, u32 val) void kvm_pit_load_count(struct kvm *kvm, int channel, u32 val, int hpe= t_legacy_start) { u8 saved_mode; + + WARN_ON_ONCE(!mutex_is_locked(&kvm->arch.vpit->pit_state.lock)); + if (hpet_legacy_start) { /* save existing mode for later reenablement */ WARN_ON(channel !=3D 0); --=20 2.7.1