From: Jan Kiszka <jan.kiszka@siemens.com>
To: Gleb Natapov <gleb@redhat.com>
Cc: Vasilis Liaskovitis <vliaskov@gmail.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
Markus Armbruster <armbru@redhat.com>
Subject: Re: [PATCH] cpu hotplug issue
Date: Fri, 22 Jul 2011 12:56:58 +0200 [thread overview]
Message-ID: <4E29577A.9080909@siemens.com> (raw)
In-Reply-To: <20110721124512.GI3044@redhat.com>
On 2011-07-21 14:45, Gleb Natapov wrote:
> On Thu, Jul 21, 2011 at 02:51:18PM +0300, Gleb Natapov wrote:
>>>> Jan can you look at this please?
>>>
>>> I can't promise to do debugging myself.
>>>
>>> Also, as I never succeeded in getting anything working with CPU hotplug,
>>> even back in the days it was supposed to work, I'm a bit clueless /wrt
>>> to the right test cases.
>>>
>> CPU hotplug for Linux suppose to be easy (with allow_hotplug patch
>> applied). But we have two bugs currently. One is that ACPI interrupt
>> is not send when cpu is onlined (at least this appears to be the case).
>> I will look at that one. Another is that after new cpu is detected it
>> can't be onlined.
>>
>> After fixing the first bug the test should look like this:
>> 1. start vm with -smp 1,macpus=2
>> 2. wait for it to boot
>> 3. do "cpu 1 online" in monitor.
>> 4. do "echo 1 > /sys/devices/system/cpu/cpu1/online"
>>
>> If step 4 should succeed. It fails now.
>>
> The first one was easy to solve. See patch below. Step 3 should be
> "cpu_set 1 online".
>
> ---
>
> Trigger sci interrupt after cpu hotplug/unplug event.
>
> Signed-off-by: Gleb Natapov <gleb@redhat.com>
> diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c
> index c30a050..40f3fcd 100644
> --- a/hw/acpi_piix4.c
> +++ b/hw/acpi_piix4.c
> @@ -92,7 +92,8 @@ static void pm_update_sci(PIIX4PMState *s)
> ACPI_BITMASK_POWER_BUTTON_ENABLE |
> ACPI_BITMASK_GLOBAL_LOCK_ENABLE |
> ACPI_BITMASK_TIMER_ENABLE)) != 0) ||
> - (((s->gpe.sts[0] & s->gpe.en[0]) & PIIX4_PCI_HOTPLUG_STATUS) != 0);
> + (((s->gpe.sts[0] & s->gpe.en[0]) &
> + (PIIX4_PCI_HOTPLUG_STATUS | PIIX4_CPU_HOTPLUG_STATUS)) != 0);
>
> qemu_set_irq(s->irq, sci_level);
> /* schedule a timer interruption if needed */
> --
> Gleb.
I had a closer look and identified two further issues, one generic, one
CPU-hotplug-specific:
- (qdev) devices that are hotplugged do not receive any reset. That
does not only apply to the APIC in case of CPU hotplugging, it is
also broken for NICs, storage controllers, etc. when doing PCI
hot-add as I just checked via gdb.
- CPU hotplugging was always (or at least for a fairly long time),
well, fragile as it failed to make CPU thread creation and CPU
initialization atomic against APIC addition and other initialization
steps. IOW, we need to create CPUs stopped, finish all init work,
sync their states completely to the kernel
(cpu_synchronize_post_init), and then kick them of. Actually I'm
considering to stop all CPUs during that short phase to make things
simpler and future-proof (when we reduce qemu_global_mutex
dependencies).
Still, something else must be different for hotplugged CPUs as they fail
to come up properly every 2 or 3 system resets or online transitions of
the Linux guest. Will try to understand that once time permits.
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2011-07-22 10:57 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-19 17:40 cpu hotplug issue Vasilis Liaskovitis
2011-07-20 8:35 ` Gleb Natapov
2011-07-21 11:06 ` [PATCH] " Vasilis Liaskovitis
2011-07-21 11:33 ` Gleb Natapov
2011-07-21 11:42 ` Jan Kiszka
2011-07-21 11:51 ` Gleb Natapov
2011-07-21 11:55 ` Jan Kiszka
2011-07-21 12:00 ` Gleb Natapov
2011-07-21 12:18 ` Avi Kivity
2011-07-21 12:22 ` Gleb Natapov
2011-07-21 12:39 ` Jan Kiszka
2011-07-21 13:27 ` Lucas Meneghel Rodrigues
2011-07-21 12:45 ` Gleb Natapov
2011-07-22 10:56 ` Jan Kiszka [this message]
2011-07-24 11:56 ` Gleb Natapov
2011-07-24 16:11 ` Jan Kiszka
2011-07-25 13:18 ` Jan Kiszka
2011-07-25 13:21 ` Gleb Natapov
2011-07-25 13:26 ` Jan Kiszka
2011-07-27 16:35 ` Vasilis Liaskovitis
2011-07-28 16:52 ` Jan Kiszka
2011-08-02 9:46 ` Vasilis Liaskovitis
2011-08-02 10:24 ` Jan Kiszka
2011-08-02 13:41 ` Vasilis Liaskovitis
2011-08-03 10:07 ` Vasilis Liaskovitis
2011-08-03 10:37 ` Jan Kiszka
2011-08-03 10:38 ` Gleb Natapov
2011-08-03 10:42 ` Jan Kiszka
2011-08-03 16:25 ` Vasilis Liaskovitis
2011-08-04 8:01 ` Gleb Natapov
2011-08-04 8:40 ` Jan Kiszka
2011-07-21 13:08 ` Vasilis Liaskovitis
2011-07-21 13:11 ` Gleb Natapov
2011-07-21 13:12 ` Vasilis Liaskovitis
2011-07-21 13:13 ` Gleb Natapov
2011-07-21 13:15 ` Avi Kivity
2011-07-21 13:15 ` Avi Kivity
2011-07-21 11:36 ` Jan Kiszka
2011-07-21 12:22 ` Jan Kiszka
2011-07-21 12:25 ` Gleb Natapov
2011-07-21 12:35 ` Jan Kiszka
2011-07-21 12:40 ` Gleb Natapov
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=4E29577A.9080909@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=armbru@redhat.com \
--cc=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=vliaskov@gmail.com \
/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