qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: "Andreas Färber" <afaerber@suse.de>
Cc: kwolf@redhat.com, peter.maydell@linaro.org,
	peter.crosthwaite@xilinx.com, stefanha@redhat.com,
	mst@redhat.com, jan.kiszka@siemens.com, marcel.a@redhat.com,
	qemu-devel@nongnu.org, armbru@redhat.com, blauwirbel@gmail.com,
	alex.williamson@redhat.com, kraxel@redhat.com,
	aliguori@amazon.com, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH v6 2/9] qdev: add to BusState "hotplug-handler" link
Date: Wed, 5 Feb 2014 17:31:48 +0100	[thread overview]
Message-ID: <20140205173148.6499c7f0@thinkpad> (raw)
In-Reply-To: <52F25E3B.3050009@suse.de>

On Wed, 05 Feb 2014 16:52:27 +0100
Andreas Färber <afaerber@suse.de> wrote:

> Am 05.02.2014 16:36, schrieb Igor Mammedov:
> > It will allow to reuse field with different BUSes,
> > reducing code duplication. Field is intended for
> > replacing 'hotplug_qdev' field in PCIBus and also
> > will allow to avoid adding equivalent field to
> > DimmBus with possiblitity to refactor other BUSes
> > to use it instead of custom field.
> > In addition once all users of allow_hotplug field
> > are converted to new API, link could replace
> > allow_hotplug field in qdev hotplug code.
> > 
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > ---
> >  hw/core/qdev.c         |    4 ++++
> >  include/hw/qdev-core.h |   12 ++++++++++++
> >  2 files changed, 16 insertions(+), 0 deletions(-)
> > 
> > diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> > index 82a9123..c9f0c33 100644
> > --- a/hw/core/qdev.c
> > +++ b/hw/core/qdev.c
> > @@ -32,6 +32,7 @@
> >  #include "qapi/visitor.h"
> >  #include "qapi/qmp/qjson.h"
> >  #include "monitor/monitor.h"
> > +#include "hw/hotplug.h"
> >  
> >  int qdev_hotplug = 0;
> >  static bool qdev_hot_added = false;
> > @@ -870,6 +871,9 @@ static void qbus_initfn(Object *obj)
> >      BusState *bus = BUS(obj);
> >  
> >      QTAILQ_INIT(&bus->children);
> > +    object_property_add_link(obj, QDEV_HOTPLUG_HANDLER_PROPERTY,
> > +                             TYPE_HOTPLUG_HANDLER,
> > +                             (Object **)&bus->hotplug_handler, NULL);
> 
> Will/should the user ever change that property? If not, we could drop
> this hunk and change the inline link-setting below to just do it the C
> way. Otherwise it should probably be using &error_abort instead of NULL.
So far user is expected to set property only one time.
But why deviate from QOM an allow user to poke directly into arbitrary bus
internals even with help of inline helper below? 
Link also will allow to keep pointer safe, i.e. hotplug_handler won't
disappear suddenly.

As for using &error_abort in initfn(), this function might be called during
hotplug and crash running guest.
One way to handle such errors could be passing errp to initfn(),
another is shown is this patch: i.e. ignore error in initfn() as it's done
in other initfn()-s and handle error at set time in qbus_set_hotplug_handler(),
then caller can decide whether do abort or report error up the call stack, i.e.
to libvirt via QMP.

> 
> Regards,
> Andreas
> 
> >  }
> >  
> >  static char *default_bus_get_fw_dev_path(DeviceState *dev)
> > diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> > index 2c4f140..41ec533 100644
> > --- a/include/hw/qdev-core.h
> > +++ b/include/hw/qdev-core.h
> > @@ -8,6 +8,7 @@
> >  #include "qom/object.h"
> >  #include "hw/irq.h"
> >  #include "qapi/error.h"
> > +#include "hw/hotplug.h"
> >  
> >  enum {
> >      DEV_NVECTORS_UNSPECIFIED = -1,
> > @@ -180,14 +181,18 @@ typedef struct BusChild {
> >      QTAILQ_ENTRY(BusChild) sibling;
> >  } BusChild;
> >  
> > +#define QDEV_HOTPLUG_HANDLER_PROPERTY "hotplug-handler"
> > +
> >  /**
> >   * BusState:
> > + * @hotplug_device: link to a hotplug device associated with bus.
> >   */
> >  struct BusState {
> >      Object obj;
> >      DeviceState *parent;
> >      const char *name;
> >      int allow_hotplug;
> > +    HotplugHandler *hotplug_handler;
> >      int max_index;
> >      QTAILQ_HEAD(ChildrenHead, BusChild) children;
> >      QLIST_ENTRY(BusState) sibling;
> > @@ -321,4 +326,11 @@ extern int qdev_hotplug;
> >  
> >  char *qdev_get_dev_path(DeviceState *dev);
> >  
> > +static inline void qbus_set_hotplug_handler(BusState *bus, DeviceState *handler,
> > +                                            Error **errp)
> > +{
> > +    object_property_set_link(OBJECT(bus), OBJECT(handler),
> > +                             QDEV_HOTPLUG_HANDLER_PROPERTY, errp);
> > +    bus->allow_hotplug = 1;
> > +}
> >  #endif
> > 
> 
> 
> -- 
> SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
> GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg


-- 
Regards,
  Igor

  reply	other threads:[~2014-02-05 16:32 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-05 15:36 [Qemu-devel] [PATCH v6 0/9] Refactor PCI/SHPC/PCIE hotplug to use a more generic hotplug API Igor Mammedov
2014-02-05 15:36 ` [Qemu-devel] [PATCH v6 1/9] define hotplug interface Igor Mammedov
2014-02-05 15:36 ` [Qemu-devel] [PATCH v6 2/9] qdev: add to BusState "hotplug-handler" link Igor Mammedov
2014-02-05 15:52   ` Andreas Färber
2014-02-05 16:31     ` Igor Mammedov [this message]
2014-02-05 16:44     ` Paolo Bonzini
2014-02-05 15:36 ` [Qemu-devel] [PATCH v6 3/9] qdev: add "hotpluggable" property to Device Igor Mammedov
2014-02-05 15:36 ` [Qemu-devel] [PATCH v6 4/9] hw/acpi: move typeinfo to the file end Igor Mammedov
2014-02-05 15:36 ` [Qemu-devel] [PATCH v6 5/9] qdev:pci: refactor PCIDevice to use generic "hotpluggable" property Igor Mammedov
2014-02-05 15:36 ` [Qemu-devel] [PATCH v6 6/9] acpi/piix4pm: convert ACPI PCI hotplug to use hotplug-handler API Igor Mammedov
2014-02-05 15:36 ` [Qemu-devel] [PATCH v6 7/9] pci/shpc: convert SHPC " Igor Mammedov
2014-02-05 15:36 ` [Qemu-devel] [PATCH v6 8/9] pci/pcie: convert PCIE " Igor Mammedov
2014-02-05 15:36 ` [Qemu-devel] [PATCH v6 9/9] hw/pci: switch to a generic hotplug handling for PCIDevice Igor Mammedov
2014-02-10  9:09 ` [Qemu-devel] [PATCH v6 0/9] Refactor PCI/SHPC/PCIE hotplug to use a more generic hotplug API Michael S. Tsirkin
2014-02-10  9:53   ` 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=20140205173148.6499c7f0@thinkpad \
    --to=imammedo@redhat.com \
    --cc=afaerber@suse.de \
    --cc=alex.williamson@redhat.com \
    --cc=aliguori@amazon.com \
    --cc=armbru@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=jan.kiszka@siemens.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=marcel.a@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.crosthwaite@xilinx.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.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;
as well as URLs for NNTP newsgroup(s).