From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: kvm/ia64: Fix halt emulation logic. Date: Sat, 18 Oct 2008 13:27:45 -0200 Message-ID: <20081018152745.GA32642@dmt.cnet> References: <42DFA526FC41B1429CE7279EF83C6BDC01B47EA5@pdsmsx415.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: avi , kvm-ia64@vger.kernel.org, kvm@vger.kernel.org To: "Zhang, Xiantao" Return-path: Received: from mx2.redhat.com ([66.187.237.31]:50690 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754132AbYKCCgi (ORCPT ); Sun, 2 Nov 2008 21:36:38 -0500 Content-Disposition: inline In-Reply-To: <42DFA526FC41B1429CE7279EF83C6BDC01B47EA5@pdsmsx415.ccr.corp.intel.com> Sender: kvm-owner@vger.kernel.org List-ID: Hi Xiantao, On Wed, Oct 15, 2008 at 09:47:24PM +0800, Zhang, Xiantao wrote: > + expires = div64_u64(itc_diff, cyc_per_usec); > + kt = ktime_set(0, 1000 * expires); > + > + down_read(&vcpu->kvm->slots_lock); > + vcpu->arch.ht_active = 1; > + hrtimer_start(p_ht, kt, HRTIMER_MODE_ABS); > > - if (irqchip_in_kernel(vcpu->kvm)) { > vcpu->arch.mp_state = KVM_MP_STATE_HALTED; > kvm_vcpu_block(vcpu); > hrtimer_cancel(p_ht); > vcpu->arch.ht_active = 0; > > + if (test_and_clear_bit(KVM_REQ_UNHALT, &vcpu->requests)) > + if (vcpu->arch.mp_state == KVM_MP_STATE_HALTED) > + vcpu->arch.mp_state = > + KVM_MP_STATE_RUNNABLE; > + up_read(&vcpu->kvm->slots_lock); You should release slots_lock when blocking via kvm_vcpu_block(). Otherwise paths that grab it for write will depend on these vcpus to unhalt. BTW, none of the data structures in this section of code should be protected by slots_lock?