public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@qumranet.com>
To: Paolo Ornati <ornati@fastwebnet.it>
Cc: Michal Piotrowski <michal.k.k.piotrowski@gmail.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	kvm-devel@lists.sourceforge.net
Subject: Re: WARNING: at arch/x86_64/kernel/smp.c:379 smp_call_function_single()
Date: Sun, 19 Aug 2007 13:55:13 +0300	[thread overview]
Message-ID: <46C82191.90300@qumranet.com> (raw)
In-Reply-To: <46C05017.3050806@qumranet.com>

[-- Attachment #1: Type: text/plain, Size: 2180 bytes --]

Avi Kivity wrote:
> Paolo Ornati wrote:
>> On Fri, 10 Aug 2007 14:04:33 +0200
>> "Michal Piotrowski" <michal.k.k.piotrowski@gmail.com> wrote:
>>
>>  
>>>> [  756.707601] Disabling non-boot CPUs ...
>>>> [  756.712034] kvm: disabling virtualization on CPU1
>>>> [  756.712037] WARNING: at arch/x86_64/kernel/smp.c:379 
>>>> smp_call_function_single()
>>>> [  756.712039]
>>>> [  756.712039] Call Trace:
>>>> [  756.712046]  [<ffffffff8021d159>] 
>>>> smp_call_function_single+0x119/0x120
>>>> [  756.712050]  [<ffffffff80542169>] thread_return+0x1bf/0x626
>>>> [  756.712054]  [<ffffffff80234b5b>] sys_sched_yield+0x2b/0x80
>>>> [  756.712057]  [<ffffffff8043684b>] kvm_cpu_hotplug+0x4b/0xa0
>>>> [  756.712060]  [<ffffffff80247c83>] notifier_call_chain+0x53/0x80
>>>> [  756.712062]  [<ffffffff80247d09>] 
>>>> __raw_notifier_call_chain+0x9/0x10
>>>> [  756.712065]  [<ffffffff80247d21>] raw_notifier_call_chain+0x11/0x20
>>>> [  756.712068]  [<ffffffff8026184b>] take_cpu_down+0x1b/0x30
>>>> [  756.712071]  [<ffffffff802699d2>] do_stop+0xd2/0x150
>>>> [  756.712073]  [<ffffffff80269900>] do_stop+0x0/0x150
>>>> [  756.712076]  [<ffffffff8024f84d>] kthread+0x4d/0x80
>>>> [  756.712079]  [<ffffffff8020cb28>] child_rip+0xa/0x12
>>>> [  756.712081]  [<ffffffff8020c23c>] restore_args+0x0/0x30
>>>> [  756.712084]  [<ffffffff8024f800>] kthread+0x0/0x80
>>>> [  756.712086]  [<ffffffff8020cb1e>] child_rip+0x0/0x12
>>>> [  756.712087]
>>>> [  756.815693] CPU 1 is now offline
>>>> [  756.815697] lockdep: not fixing up alternatives.
>>>> [  756.819276] CPU1 is down
>>>>  
>>>>       
>>> Added to KR list, thanks for the report.
>>>     
>>
>>
>> I've bisected it down to this commit:
>>
>> cec9ad279b66793bee0b5009b7ca311060061efd
>>
>>     KVM: Use CPU_DYING for disabling virtualization
>>         Only at the CPU_DYING stage can we be sure that no user 
>> process will
>>     be scheduled onto the cpu and oops when trying to use virtualization
>>     extensions.
>>
>>   
>
> Thanks.  I'll have a go at it.
>
>

Sorry about the delay -- here is the fairly simple patch.  A Tested-by: 
would be appreciated.


-- 
error compiling committee.c: too many arguments to function


[-- Attachment #2: 0001-KVM-Avoid-calling-smp_call_function_single-with-i.patch --]
[-- Type: text/x-patch, Size: 1283 bytes --]

>From a8c346b28695b938018f4bafd458f6d3e70c36e3 Mon Sep 17 00:00:00 2001
From: Avi Kivity <avi@qumranet.com>
Date: Sun, 19 Aug 2007 13:51:00 +0300
Subject: [PATCH] KVM: Avoid calling smp_call_function_single() with interrupts disabled

When taking a cpu down, we need to hardware_disable() it.  Unfortunately,
the CPU_DYING notifier is called with interrupts disabled, which means
we can't use smp_call_function_single().  Fortunately, the CPU_DYING notifier
is always called on the dying cpu, so we don't need to use the function at
all and can simply call hardware_disable() directly.

Signed-off-by: Avi Kivity <avi@qumranet.com>
---
 drivers/kvm/kvm_main.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index 9685609..cd05579 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -2974,6 +2974,10 @@ static int kvm_cpu_hotplug(struct notifier_block *notifier, unsigned long val,
 	switch (val) {
 	case CPU_DYING:
 	case CPU_DYING_FROZEN:
+		printk(KERN_INFO "kvm: disabling virtualization on CPU%d\n",
+		       cpu);
+		hardware_disable(NULL);
+		break;
 	case CPU_UP_CANCELED:
 	case CPU_UP_CANCELED_FROZEN:
 		printk(KERN_INFO "kvm: disabling virtualization on CPU%d\n",
-- 
1.5.2.4


  reply	other threads:[~2007-08-19 10:55 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-10 11:41 WARNING: at arch/x86_64/kernel/smp.c:379 smp_call_function_single() Paolo Ornati
2007-08-10 12:04 ` Michal Piotrowski
2007-08-13 11:42   ` Paolo Ornati
2007-08-13 12:35     ` Avi Kivity
2007-08-19 10:55       ` Avi Kivity [this message]
2007-08-19 12:51         ` Paolo Ornati

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=46C82191.90300@qumranet.com \
    --to=avi@qumranet.com \
    --cc=kvm-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michal.k.k.piotrowski@gmail.com \
    --cc=ornati@fastwebnet.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox