From: Igor Mammedov <imammedo@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: aliguori@us.ibm.com, claudio.fontana@huawei.com,
qemu-devel@nongnu.org, aderumier@odiso.com,
lcapitulino@redhat.com, jfrei@linux.vnet.ibm.com,
yang.z.zhang@intel.com, pbonzini@redhat.com, afaerber@suse.de,
lig.fnst@cn.fujitsu.com, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH 07/19] rtc: update rtc_cmos on CPU hot-plug
Date: Fri, 12 Apr 2013 18:24:23 +0200 [thread overview]
Message-ID: <20130412182423.06a1b968@thinkpad> (raw)
In-Reply-To: <20130412153514.GU2719@otherpad.lan.raisama.net>
On Fri, 12 Apr 2013 12:35:14 -0300
Eduardo Habkost <ehabkost@redhat.com> wrote:
> On Fri, Apr 12, 2013 at 05:16:20PM +0200, Igor Mammedov wrote:
> > On Fri, 12 Apr 2013 10:35:53 -0300
> > Eduardo Habkost <ehabkost@redhat.com> wrote:
> >
> > > On Fri, Apr 12, 2013 at 12:53:51PM +0200, Igor Mammedov wrote:
> > > > On Thu, 11 Apr 2013 15:59:40 -0300
> > > > Eduardo Habkost <ehabkost@redhat.com> wrote:
> > > >
> > > > > On Thu, Apr 11, 2013 at 04:51:46PM +0200, Igor Mammedov wrote:
> > > > > > ... so that on reboot BIOS could read current available CPU count
> > > > > >
> > > > > > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > > > > > v2:
> > > > > > * s/qemu_register_cpu_add_notifier()/qemu_register_cpu_added_notifier()/
> > > > > > ---
> > > > > > hw/timer/mc146818rtc.c | 12 ++++++++++++
> > > > > > 1 file changed, 12 insertions(+)
> > > > >
> > > > > Initialization of the cmos fields (including 0x5F) is done on
> > > > > pc.c:pc_cmos_init(). What about making the field increment inside pc.c
> > > > > as well?
> > > > I looked at possibility but discarded it because to increment it there initial
> > > > value should be -1 (field is zero based) which is not obvious, plug ugly
> > > > casting to singed variable.
> > > > Result looked ugly.
> > >
> > > I was thinking about simply adding exactly the same code with exactly
> > > the same logic, but inside pc.c instead of of mc146818rtc.c. Instead of
> > > registering the notifier inside rtc_initfn(), register exactly the same
> > > notifier with exactly the same code, but inside pc_cmos_init() (that's
> > > where 0x5f is initialized).
> > >
> > > It would even be safer and easier review and ensure correctness: with
> > > this patch, the notifier is registered very early, even before
> > > pc_cmos_init() initializes 0x5f to smp_cpus. CPU hotplug events are
> > > unlikely to be emitted before pc_cmos_init() is called, but still: why
> > it isn't be called, hot-add is available only after machine initialized.
> >
> > > make the initialization ordering so subtle if we don't have to?
> > Currently cmos init doesn't look like proper QOM object and has 3 stage
> > initialization: realize(), then pc_cmos_init() the last pc_cmos_init_late().
> > The last 2 calls are made after realize(), setting various properties. Which
> > looks wrong from QOM perspective, so I'm against of stuffing more internal
> > stuff in arbitrary places. We should do opposite instead.
>
> True, but as we already have this weird 3-stage initialization process
> and we won't fix it really soon, I would really prefer to keep parts of
> the code that are closely related and depend on each other in the same
> part of the code.
>
> >
> > If you look at mc146818rtc.c or hw/acpi/piix4.c, all notifiers are private to
> > object and registered at realize() time. It looks like initialization order
> > of mc146818rtc should be fixed, instead of adapting new code to it.
> >
> > So since this patch doesn't break or violate anything in current code, I'd
> > like to leave it as it is.
>
> If you insist into making the mc146818rtc device take care of
> maintaining the 0x5f value by itself, why not doing:
>
> s->cmos_data[0x5f] = smp_cpus - 1;
>
> inside rtc_initfn() instead of pc_cmos_init() as well?
Device is used not only by target-i386.
Right way would be to redesign rtc_init() and rtc_initfn() and it would be
quite an intrusive patch.
That said it looks like current patch is incorrect if other targets
are considered, where s->cmos_data[0x5f] doesn't mean smp_cpus - 1. That looks
like a good reason to place notifier into pc.c and make it board specific.
I'll redo it for the next respin.
>
> This would be one additional step towards making pc_cmos_init() be
> replaced by QOM-based code (if that's what you want to do in the long
> term).
>
>
> >
> > > > >
> > > > > What happens if a CPU is hotplugged after the machine has started but
> > > > > before the guest OS has booted? Are we supposed to make sure the BIOS do
> > > > > the right thing if a CPU is hotplugged before the OS has booted, or this
> > > > > simply won't be supported?
> > > > BIOS uses this value to set in ACPI tables what CPUs are present.
> > > > 1. if hot-plug happens before BIOS reads it then OS will see all CPUs
> > > > and SCI it receives will be nop.
> > > > 2. if hot-plug happens after BIOS reads it, OS will handle SCI as usual
> > > > and hotplug CPU instead of initializing it smp_boot() time.
> > > > BIOS itself has nothing to do with hot-plug, it's OSPM job.
> > >
> > > Makes sense, thanks.
> > >
> > > What happens if the CPU is hotplugged after the BIOS builds the ACPI
> > > tables, but long before the OS starts handling ACPI events? Is the OS
> > > guaranteed to run the CPU hotplug ACPI method (that's \_GPE._E02 in the
> > > DSDT, right?), even if that happens?
> > Theoretically interrupt should not disappear on it's own and OS should pick it
> > up. But to say it for sure I need to test this case. If SCI will be lost for
> > some reason, then OS won't notice new CPU until another CPU hot-plug event
> > happens.
>
>
> Makes sense, thanks.
>
> (Anyway, if an interrupt gets lost, it's probably a BIOS or OS bug).
>
> > [...]
>
> --
> Eduardo
>
--
Regards,
Igor
next prev parent reply other threads:[~2013-04-12 16:25 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-11 14:51 [Qemu-devel] [PATCH 00/19 v3] target-i386: CPU hot-add with cpu-add QMP command Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 01/19] target-i386: split out CPU creation and features parsing into cpu_x86_create() Igor Mammedov
2013-04-11 17:03 ` Eduardo Habkost
2013-04-15 15:03 ` Andreas Färber
2013-04-11 14:51 ` [Qemu-devel] [PATCH 02/19] cpu: Pass CPUState to *cpu_synchronize_post*() Igor Mammedov
2013-04-15 15:12 ` Andreas Färber
2013-04-11 14:51 ` [Qemu-devel] [PATCH 03/19] cpu: make kvm-stub.o a part of CPU library Igor Mammedov
2013-04-11 17:45 ` Eduardo Habkost
2013-04-12 11:17 ` Igor Mammedov
2013-04-12 19:25 ` Eduardo Habkost
2013-04-15 9:09 ` Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 04/19] cpu: call cpu_synchronize_post_init() from CPUClass.realize() if hotplugged Igor Mammedov
2013-04-11 18:33 ` Eduardo Habkost
2013-04-12 11:34 ` Igor Mammedov
2013-04-12 14:08 ` Eduardo Habkost
2013-04-15 19:57 ` Eduardo Habkost
2013-04-15 20:21 ` Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 05/19] cpu: resume CPU from CPUClass.cpu_common_realizefn() when it is hot-plugged Igor Mammedov
2013-04-11 18:36 ` Eduardo Habkost
2013-04-12 11:36 ` Igor Mammedov
2013-04-15 19:58 ` Eduardo Habkost
2013-04-11 14:51 ` [Qemu-devel] [PATCH 06/19] introduce CPU hot-plug notifier Igor Mammedov
2013-04-11 18:46 ` Eduardo Habkost
2013-04-12 11:00 ` Igor Mammedov
2013-04-15 20:08 ` Eduardo Habkost
2013-04-11 14:51 ` [Qemu-devel] [PATCH 07/19] rtc: update rtc_cmos on CPU hot-plug Igor Mammedov
2013-04-11 18:59 ` Eduardo Habkost
2013-04-12 10:53 ` Igor Mammedov
2013-04-12 13:35 ` Eduardo Habkost
2013-04-12 15:16 ` Igor Mammedov
2013-04-12 15:35 ` Eduardo Habkost
2013-04-12 16:24 ` Igor Mammedov [this message]
2013-04-15 9:38 ` Igor Mammedov
2013-04-15 17:53 ` Eduardo Habkost
2013-04-11 14:51 ` [Qemu-devel] [PATCH 08/19] cpu: introduce get_arch_id() method and override it for target-i386 Igor Mammedov
2013-04-11 19:04 ` Eduardo Habkost
2013-04-12 10:31 ` Igor Mammedov
2013-04-12 13:47 ` Eduardo Habkost
2013-04-15 15:24 ` Andreas Färber
2013-04-15 15:34 ` Igor Mammedov
2013-04-15 15:42 ` Andreas Färber
2013-04-15 15:47 ` Eduardo Habkost
2013-04-15 20:34 ` Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 09/19] cpu: add helper cpu_exists(), to check if CPU with specified id exists Igor Mammedov
2013-04-11 19:06 ` Eduardo Habkost
2013-04-12 10:14 ` Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 10/19] acpi_piix4: add infrastructure to send CPU hot-plug GPE to guest Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 11/19] target-i386: introduce apic-id property Igor Mammedov
2013-04-11 19:12 ` Eduardo Habkost
2013-04-12 10:20 ` Igor Mammedov
2013-04-12 13:13 ` Eduardo Habkost
2013-04-12 15:46 ` Igor Mammedov
2013-04-12 16:29 ` Eduardo Habkost
2013-04-15 2:30 ` li guang
2013-04-15 13:37 ` Igor Mammedov
2013-04-15 13:45 ` Eduardo Habkost
2013-04-15 14:34 ` Igor Mammedov
2013-04-15 14:49 ` Eduardo Habkost
2013-04-15 20:27 ` Igor Mammedov
2013-04-15 20:49 ` Eduardo Habkost
2013-04-15 21:13 ` Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 12/19] introduce ICC bus/device/bridge Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 13/19] target-i386: cpu: attach ICC bus to CPU on its creation Igor Mammedov
2013-04-15 15:38 ` Andreas Färber
2013-04-15 15:49 ` Igor Mammedov
2013-04-15 16:06 ` Andreas Färber
2013-04-15 16:17 ` Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 14/19] target-i386: replace MSI_SPACE_SIZE with APIC_SPACE_SIZE Igor Mammedov
2013-04-15 15:34 ` Andreas Färber
2013-04-15 15:47 ` Jan Kiszka
2013-04-11 14:51 ` [Qemu-devel] [PATCH 15/19] target-i386: move APIC to ICC bus Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 16/19] target-i386: move IOAPIC " Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 17/19] qdev: set device's parent before calling realize() down inheritance chain Igor Mammedov
2013-04-15 15:48 ` Andreas Färber
2013-04-11 14:51 ` [Qemu-devel] [PATCH 18/19] target-i386: expose all possible CPUs as /machine/icc-bridge/cpu[0..N] links Igor Mammedov
2013-04-11 17:19 ` Eduardo Habkost
2013-04-12 10:01 ` Igor Mammedov
2013-04-12 12:44 ` Eduardo Habkost
2013-04-15 14:15 ` Igor Mammedov
2013-04-15 14:48 ` Eduardo Habkost
2013-04-15 15:16 ` Igor Mammedov
2013-04-15 15:26 ` Eduardo Habkost
2013-04-15 20:37 ` Igor Mammedov
2013-04-11 14:51 ` [Qemu-devel] [PATCH 19/19] add cpu-add qmp command and implement CPU hot-add for target-i386 Igor Mammedov
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=20130412182423.06a1b968@thinkpad \
--to=imammedo@redhat.com \
--cc=aderumier@odiso.com \
--cc=afaerber@suse.de \
--cc=aliguori@us.ibm.com \
--cc=claudio.fontana@huawei.com \
--cc=ehabkost@redhat.com \
--cc=jfrei@linux.vnet.ibm.com \
--cc=lcapitulino@redhat.com \
--cc=lig.fnst@cn.fujitsu.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=yang.z.zhang@intel.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 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.