qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 06/19] introduce CPU hot-plug notifier


From: Eduardo Habkost
Subject: Re: [Qemu-devel] [PATCH 06/19] introduce CPU hot-plug notifier
Date: Mon, 15 Apr 2013 17:08:07 -0300
User-agent: Mutt/1.5.21 (2010-09-15)

On Fri, Apr 12, 2013 at 01:00:57PM +0200, Igor Mammedov wrote:
> On Thu, 11 Apr 2013 15:46:47 -0300
> Eduardo Habkost <address@hidden> wrote:
> 
> > On Thu, Apr 11, 2013 at 04:51:45PM +0200, Igor Mammedov wrote:
> > > hot-added CPU will be distributed to acpi_piix4, rtc_cmos and icc_bridge
> > > 
> > > Signed-off-by: Igor Mammedov <address@hidden>
> > > Reviewed-by: Paolo Bonzini <address@hidden>
> > 
> > Have you considered making a generic device creation/realization
> > notification mechanism, that could work with any device class?
> Not really, that would make notification handler a bit more complicated,
> since they will have to decide if event belong to them.

I don't think it would be complicated. It should be as simple as:

void qdev_register_realize_notifier(DeviceClass *dc, Notifier *notifier)
{
    notifier_list_add(&dc->realize_notifiers, notifier);
}

static void notify_device_realized(ObjectClass *klass, void *opaque)
{
    DeviceState *dev = (DeviceState *)opaque;
    DeviceClass *dc = DEVICE_CLASS(klass);
    notifier_list_notify(&dc->realize_notifiers, dev);
}

static void device_realize(DeviceState *dev, Error **err)
{
    [...]
    object_class_foreach(notify_device_realized, TYPE_DEVICE, true, dev);
}


> We could add it in future if there will be need for it.

OK.

Reviewed-by: Eduardo Habkost <address@hidden>

> 
> > 
> > > ---
> > > v2:
> > >   * move notifier to qom/cpu.c and call it from CPUClass.realize() on 
> > > hotplug
> > >   * remove get_firmware_id() since it belong to other patch
> > > ---
> > >  include/sysemu/sysemu.h |  3 +++
> > >  qom/cpu.c               | 12 ++++++++++++
> > >  2 files changed, 15 insertions(+)
> > > 
> > > diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> > > index 6578782..a8c3de1 100644
> > > --- a/include/sysemu/sysemu.h
> > > +++ b/include/sysemu/sysemu.h
> > > @@ -152,6 +152,9 @@ void do_pci_device_hot_remove(Monitor *mon, const 
> > > QDict *qdict);
> > >  /* generic hotplug */
> > >  void drive_hot_add(Monitor *mon, const QDict *qdict);
> > >  
> > > +/* CPU hotplug */
> > > +void qemu_register_cpu_added_notifier(Notifier *notifier);
> > > +
> > >  /* pcie aer error injection */
> > >  void pcie_aer_inject_error_print(Monitor *mon, const QObject *data);
> > >  int do_pcie_aer_inject_error(Monitor *mon,
> > > diff --git a/qom/cpu.c b/qom/cpu.c
> > > index 2869cfe..fe85960 100644
> > > --- a/qom/cpu.c
> > > +++ b/qom/cpu.c
> > > @@ -22,6 +22,17 @@
> > >  #include "qemu-common.h"
> > >  #include "sysemu/kvm.h"
> > >  #include "sysemu/cpus.h"
> > > +#include "qemu/notify.h"
> > > +#include "sysemu/sysemu.h"
> > > +
> > > +/* CPU hot-plug notifiers */
> > > +static NotifierList cpu_added_notifiers =
> > > +    NOTIFIER_LIST_INITIALIZER(cpu_add_notifiers);
> > > +
> > > +void qemu_register_cpu_added_notifier(Notifier *notifier)
> > > +{
> > > +    notifier_list_add(&cpu_added_notifiers, notifier);
> > > +}
> > >  
> > >  void cpu_reset_interrupt(CPUState *cpu, int mask)
> > >  {
> > > @@ -62,6 +73,7 @@ static void cpu_common_realizefn(DeviceState *dev, 
> > > Error **errp)
> > >      if (dev->hotplugged) {
> > >          cpu_synchronize_post_init(CPU(dev));
> > >          resume_vcpu(CPU(dev));
> > > +        notifier_list_notify(&cpu_added_notifiers, dev);
> > >      }
> > >  }
> > >  
> > > -- 
> > > 1.8.2
> > > 
> > 
> > -- 
> > Eduardo
> 
> 
> -- 
> Regards,
>   Igor
> 

-- 
Eduardo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]