From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:35500) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UQbcU-0008Fc-9H for qemu-devel@nongnu.org; Fri, 12 Apr 2013 06:54:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UQbcS-0002tU-K4 for qemu-devel@nongnu.org; Fri, 12 Apr 2013 06:54:14 -0400 Received: from mx1.redhat.com ([209.132.183.28]:25217) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UQbcS-0002tM-CX for qemu-devel@nongnu.org; Fri, 12 Apr 2013 06:54:12 -0400 Date: Fri, 12 Apr 2013 12:53:51 +0200 From: Igor Mammedov Message-ID: <20130412125351.3f3d5f03@thinkpad> In-Reply-To: <20130411185940.GJ6862@otherpad.lan.raisama.net> References: <1365691918-30594-1-git-send-email-imammedo@redhat.com> <1365691918-30594-8-git-send-email-imammedo@redhat.com> <20130411185940.GJ6862@otherpad.lan.raisama.net> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 07/19] rtc: update rtc_cmos on CPU hot-plug List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eduardo Habkost 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 On Thu, 11 Apr 2013 15:59:40 -0300 Eduardo Habkost 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 > > 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. > > 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. > > > > > diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c > > index 69e6844..958ed6b 100644 > > --- a/hw/timer/mc146818rtc.c > > +++ b/hw/timer/mc146818rtc.c > > @@ -82,6 +82,7 @@ typedef struct RTCState { > > Notifier clock_reset_notifier; > > LostTickPolicy lost_tick_policy; > > Notifier suspend_notifier; > > + Notifier cpu_added_notifier; > > } RTCState; > > > > static void rtc_set_time(RTCState *s); > > @@ -759,6 +760,14 @@ static void rtc_notify_suspend(Notifier *notifier, void *data) > > rtc_set_memory(&s->dev, 0xF, 0xFE); > > } > > > > +static void rtc_notify_cpu_added(Notifier *notifier, void *data) > > +{ > > + RTCState *s = container_of(notifier, RTCState, cpu_added_notifier); > > + > > + /* increment the number of CPUs */ > > + s->cmos_data[0x5f] += 1; > > +} > > + > > static void rtc_reset(void *opaque) > > { > > RTCState *s = opaque; > > @@ -852,6 +861,9 @@ static int rtc_initfn(ISADevice *dev) > > s->suspend_notifier.notify = rtc_notify_suspend; > > qemu_register_suspend_notifier(&s->suspend_notifier); > > > > + s->cpu_added_notifier.notify = rtc_notify_cpu_added; > > + qemu_register_cpu_added_notifier(&s->cpu_added_notifier); > > + > > memory_region_init_io(&s->io, &cmos_ops, s, "rtc", 2); > > isa_register_ioport(dev, &s->io, base); > > > > -- > > 1.8.2 > > > > -- > Eduardo -- Regards, Igor