From: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
To: Shaohua Li <shaohua.li-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Cc: kvm-devel
<kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>,
Andrew Morton
<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
Subject: Re: [PATCH] KVM breaks CPU hotplug
Date: Mon, 26 Mar 2007 11:11:08 +0200 [thread overview]
Message-ID: <46078E2C.9010100@qumranet.com> (raw)
In-Reply-To: <1174898893.14063.7.camel-yAZKuqJtXNMXR+D7ky4Foa2pdiUAq4bhAL8bYrjMMd8@public.gmane.org>
Shaohua Li wrote:
> When testing CPU hotplug, I found cpu can't be onlined with kvm enabled
> sometimes. The reason is smp_call_function_single is a nop if the thread
> is running on the target cpu. I think CPU_ONLINE case doesn't require
> the fix as the online CPU isn't plugged into sheduler yet.
>
>
I think this is not enough, because:
- this path is preemptible code, so the test (this_cpu == cpu) can run
one on cpu and execute later code on another
- a virtual machine might be scheduled later on this cpu and oops when
executing a vmx/svm instruction
I'm not sure how to fix. Perhaps have _cpu_down() remove the cpu it is
downing from its affinity mask earlier? the code is already there, a
few lines below.
> Signed-off-by: Shaohua Li <shaohua.li-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
>
> diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
> index dc7a8c7..806a931 100644
> --- a/drivers/kvm/kvm_main.c
> +++ b/drivers/kvm/kvm_main.c
> @@ -2360,6 +2360,7 @@ static int kvm_cpu_hotplug(struct notifier_block *notifier, unsigned long val,
> void *v)
> {
> int cpu = (long)v;
> + int this_cpu;
>
> switch (val) {
> case CPU_DOWN_PREPARE:
> @@ -2367,8 +2368,13 @@ static int kvm_cpu_hotplug(struct notifier_block *notifier, unsigned long val,
> printk(KERN_INFO "kvm: disabling virtualization on CPU%d\n",
> cpu);
> decache_vcpus_on_cpu(cpu);
> - smp_call_function_single(cpu, kvm_arch_ops->hardware_disable,
> - NULL, 0, 1);
> + this_cpu = get_cpu();
> + if (this_cpu == cpu)
> + kvm_arch_ops->hardware_disable(NULL);
> + else
> + smp_call_function_single(cpu,
> + kvm_arch_ops->hardware_disable, NULL, 0, 1);
> + put_cpu();
> break;
> case CPU_ONLINE:
> printk(KERN_INFO "kvm: enabling virtualization on CPU%d\n",
>
--
Do not meddle in the internals of kernels, for they are subtle and quick to panic.
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
next prev parent reply other threads:[~2007-03-26 9:11 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-26 8:48 [PATCH] KVM breaks CPU hotplug Shaohua Li
[not found] ` <1174898893.14063.7.camel-yAZKuqJtXNMXR+D7ky4Foa2pdiUAq4bhAL8bYrjMMd8@public.gmane.org>
2007-03-26 9:11 ` Avi Kivity [this message]
[not found] ` <46078E2C.9010100-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-03-26 10:58 ` Avi Kivity
[not found] ` <4607A749.30603-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-03-27 1:12 ` Li, Shaohua
[not found] ` <FC1D1B23302A22499C60C967336B2AE00100CB7F-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-03-27 6:38 ` Avi Kivity
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=46078E2C.9010100@qumranet.com \
--to=avi-atkuwr5tajbwk0htik3j/w@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=shaohua.li-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.