Re: [PATCH] cpu hotplug issue

Gleb Natapov
2011-07-21T12:00:44Z

On Thu, Jul 21, 2011 at 01:55:26PM +0200, Jan Kiszka wrote:
> On 2011-07-21 13:51, Gleb Natapov wrote:
> > On Thu, Jul 21, 2011 at 01:42:08PM +0200, Jan Kiszka wrote:
> >> On 2011-07-21 13:33, Gleb Natapov wrote:
> >>> On Thu, Jul 21, 2011 at 01:06:41PM +0200, Vasilis Liaskovitis wrote:
> >>>> Hi,
> >>>>
> >>>> On Wed, Jul 20, 2011 at 10:35 AM, Gleb Natapov <gleb@redhat.com> wrote:
> >>>>> On Tue, Jul 19, 2011 at 07:40:55PM +0200, Vasilis Liaskovitis wrote:
> >>>>>> Hello,
> >>>>>>
> >>>>>> I have encountered a problem trying to hotplug a CPU in my x86_64 guest setup.
> >>>>>>
> >>>>> You do everything right. It's qemu who is buggy. Since qemu need a patch
> >>>>> for cpu hotplug to not crash it nobody tests it, so code bit rots.
> >>>>
> >>>> thanks for your reply.
> >>>>
> >>>> As I mentioned in the original email, onlining a hotplugged-cpu with
> >>>> qemu-kvm/master results in:
> >>>>
> >>>>>> echo 1 > /sys/devices/system/cpu/cpu1/online
> >>>>>> bash: echo: write error: Input/output error
> >>>>>>
> >>>>>> in the guest, dmesg reports:
> >>>>>>
> >>>>>> [ 2325.376355] Booting Node 0 Processor 1 APIC 0x1
> >>>>>> [ 2325.376357] smpboot cpu 1: start_ip = 9a000
> >>>>>> [ 2330.821306] CPU1: Not responding.
> >>>>
> >>>> I tried to git-bisect between qemu-kvm-0.13.0 (last known version
> >>>> where cpu hotplug works correctly
> >>>> for me) and qemu-kvm/master.
> >>>>
> >>>> More precisely: To enable cpu-hotplug at each bisect stage, I apply
> >>>> this patch derived from:
> >>>> http://lists.gnu.org/archive/html/qemu-devel/2010-08/msg00850.html
> >>>>
> >>>> diff --git a/hw/qdev.c b/hw/qdev.c
> >>>> index 1aa1ea0..aed48ce 100644
> >>>> --- a/hw/qdev.c
> >>>> +++ b/hw/qdev.c
> >>>> @@ -327,6 +327,7 @@ BusState *sysbus_get_default(void)
> >>>> if (!main_system_bus) {
> >>>> main_system_bus = qbus_create(&system_bus_info, NULL,
> >>>> "main-system-bus");
> >>>> + main_system_bus->allow_hotplug = 1;
> >>>> }
> >>>> return main_system_bus;
> >>>> }
> >>>>
> >>>> and test cpu hotplug functionality.
> >>>> The commit that appears to break CPU hotplug is:
> >>>>
> >>> Thank you for going through the pain of bisecting it! Bisects that
> >>> require patch to be applied between each step are especially annoying.
> >>>
> >>>> commit f4de8c1451f2265148ff4d895a27e21c0a8788aa
> >>>> Author: Jan Kiszka <jan.kiszka@siemens.com>
> >>>> Date: Mon Feb 21 12:28:07 2011 +0100
> >>>> qemu-kvm: Mark VCPU state dirty on creation
> >>>>
> >>> 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
>
> I bet we have multiple bugs for quite a while now, which accelerated bit
> rotting even further.
>
> > 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.
>
> Should the above work even with the current ACPI issue unfixed?
>
Last I checked cpu hotplug worked. cpu unplug didn't. ACPI is only
responsible for making guest noticing new cpu, not starting it, and
according to Vasilis testing this is still working (kind of).

--
Gleb.