From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: KVM: x86: silence preempt warning on kvm_write_guest_time Date: Thu, 26 Feb 2009 11:57:00 +0200 Message-ID: <49A6676C.1000606@redhat.com> References: <20090224182800.GA7653@amt.cnet> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, Gerd Hoffmann , Glauber de Oliveira Costa To: Marcelo Tosatti Return-path: Received: from mx2.redhat.com ([66.187.237.31]:54274 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752615AbZBZJ5F (ORCPT ); Thu, 26 Feb 2009 04:57:05 -0500 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n1Q9v2mQ000499 for ; Thu, 26 Feb 2009 04:57:02 -0500 In-Reply-To: <20090224182800.GA7653@amt.cnet> Sender: kvm-owner@vger.kernel.org List-ID: Marcelo Tosatti wrote: > Glauber, Gerd, > > See comments on > http://sourceforge.net/tracker2/?func=detail&aid=2627272&group_id=180599&atid=893831 > regarding the "version" variable. Looks fishy. > > From: Matt T. Yourst > > This issue just appeared in kvm-84 when running on 2.6.28.7 (x86-64) > with PREEMPT enabled. > > We're getting syslog warnings like this many (but not all) times qemu > tells KVM to run the VCPU: > > BUG: using smp_processor_id() in preemptible [00000000] code: > qemu-system-x86/28938 > caller is kvm_arch_vcpu_ioctl_run+0x5d1/0xc70 [kvm] > Pid: 28938, comm: qemu-system-x86 2.6.28.7-mtyrel-64bit > Call Trace: > debug_smp_processor_id+0xf7/0x100 > kvm_arch_vcpu_ioctl_run+0x5d1/0xc70 [kvm] > ? __wake_up+0x4e/0x70 > ? wake_futex+0x27/0x40 > kvm_vcpu_ioctl+0x2e9/0x5a0 [kvm] > enqueue_hrtimer+0x8a/0x110 > _spin_unlock_irqrestore+0x27/0x50 > vfs_ioctl+0x31/0xa0 > do_vfs_ioctl+0x74/0x480 > sys_futex+0xb4/0x140 > sys_ioctl+0x99/0xa0 > system_call_fastpath+0x16/0x1b > > As it turns out, the call trace is messed up due to gcc's inlining, but > I isolated the problem anyway: kvm_write_guest_time() is being used in a > non-thread-safe manner on preemptable kernels. > > Basically kvm_write_guest_time()'s body needs to be surrounded by > preempt_disable() and preempt_enable(), since the kernel won't let us > query any per-CPU data (indirectly using smp_processor_id()) without > preemption disabled. The attached patch fixes this issue by disabling > preemption inside kvm_write_guest_time(). > > [marcelo: surround only __get_cpu_var calls since the warning > is harmless] > > Applied, thanks. -- error compiling committee.c: too many arguments to function