From: "Michael S. Tsirkin" <mst@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: "Kevin Wolf" <kwolf@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Peter Crosthwaite" <peter.crosthwaite@xilinx.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
marcel.a@redhat.com, qemu-devel <qemu-devel@nongnu.org>,
"Blue Swirl" <blauwirbel@gmail.com>,
"Alex Williamson" <alex.williamson@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Anthony Liguori" <anthony@codemonkey.ws>,
"Paolo Bonzini" <pbonzini@redhat.com>,
dkoch@verizon.co, "Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH 00/11 v3] Refactor PCI/SHPC/PCIE hotplug to use a more generic hotplug API
Date: Wed, 18 Dec 2013 18:26:07 +0200 [thread overview]
Message-ID: <20131218162607.GA21916@redhat.com> (raw)
In-Reply-To: <20131218164809.7b4ddb07@nial.usersys.redhat.com>
On Wed, Dec 18, 2013 at 04:48:09PM +0100, Igor Mammedov wrote:
> On Wed, 18 Dec 2013 11:36:52 +0100
> Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> > Il 17/12/2013 20:38, Anthony Liguori ha scritto:
> > > On Tue, Dec 17, 2013 at 4:38 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> > >> Il 17/12/2013 00:26, Anthony Liguori ha scritto:
> > >>> Sharing hot plug code is a good thing. Making hotplug a qdev-level
> > >>> concept seems like a bad thing to me.
> > >>
> > >> Can you explain what you mean?
> > >
> > > The question is whether "hotpluggable" as a property applies to all
> > > devices or not.
> I think Andreas asked me to provide "hotpluggable" property to
> distinguish hotpluggable vs not hotpluggable DimmDevice via qom interface.
>
> > >
> > > But hotplug is strictly a bus level concept. It's a sequence of
> > > events that correspond to what happens when you add a new device to a
> > > bus after power on.
> >
> > Hotplugging a device is a special case of plugging a device. If a bus
> > or device only supports cold-plug, that can be done using
> > "bc->allow_hotplug = false" or "dc->hotpluggable = false".
> Do we need per instance ability to set "hotpluggable" property?
> For example board might want to mark some CPUs as not hotpluggable.
It could be useful.
In real life same device can be on-board or on a plugin card.
But it's not a must, we survived without this so far.
So maybe start not supporting it, add later?
> >
> > Igor's interface applies just as well to the case of plugging a device
> > at startup; I think separating the two makes little sense. And once you
> > have cold-plug and hot-plug in qdev core, it makes sense to add unplug
> > as well. Also because we already have surprise removal in qdev core
> > (that's unparent) and we have some kind of unplug request support
> > (device_del/dc->unplug).
> >
> > One possibility that remains is to put cold/hot-plug in a "BusDevice"
> > class rather than in the core qdev:
> >
> > Device
> > BusDevice <-- can be cold/hot-plugged
> >
> > but this adds more complication. For example, the same CPU can be
> > hotpluggable or not depending on the board model, should the superclass
> > be Device or BusDevice. And if we ever have multi-CPU targets, with the
> > "core" CPU not hotpluggable and additional hotpluggable ones (e.g. for
> > GPUs) what would be the superclass of the common CPU superclass?
> >
> > > The question is whether there can be code sharing without touching the
> > > base class. You could certainly have a HotpluggableBusState and then
> > > a HotpluggableDeviceState.
> > >
> > > Interfaces would be another option too.
> >
> > Interfaces are fine, but the question is who finds them and calls them.
> > In this case, the discovery mechanism is a link property, and the
> > calling mechanism is an explicit hook in the "realized" property.
> If we don't need per instance "hotpluggable" state and we can call
> interfaces from generic qdev/device code, then we would need at first
> only TYPE_HOTPLUGGABLE_BUS_DEVICE_IF and later for link<> based hotplug
> we could add just TYPE_HOTPLUGGABLE_DEVICE_IF. Difference would be in
> the way they get access to hotplug device link, former one will use bus
> for it and second some other way.
>
> >
> > If we had aspect-oriented programming, we would be marking join points
> > instead of writing "if (dev->foo) bar(dev->foo)" conditionals. But the
> > idea is the same.
> >
> > > The general concern is about polluting widely used base classes. It's
> > > better if we can avoid adding things to DeviceState and Object
> > > whenever possible.
> >
> > I agree. At the same time we should make base classes as small as
> > possible, but not smaller than that.
> >
> > Paolo
> >
next prev parent reply other threads:[~2013-12-18 16:22 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-13 12:44 [Qemu-devel] [PATCH 00/11 v3] Refactor PCI/SHPC/PCIE hotplug to use a more generic hotplug API Igor Mammedov
2013-12-13 12:44 ` [Qemu-devel] [PATCH 01/11] qom: do not register interface "types" in the type table Igor Mammedov
2013-12-13 12:44 ` [Qemu-devel] [PATCH 02/11] qom: detect bad reentrance during object_class_foreach Igor Mammedov
2013-12-14 6:53 ` Peter Crosthwaite
2013-12-15 17:44 ` Andreas Färber
2013-12-13 12:44 ` [Qemu-devel] [PATCH 03/11] define hotplug interface Igor Mammedov
2013-12-14 7:03 ` Peter Crosthwaite
2013-12-16 15:37 ` Igor Mammedov
2013-12-13 12:44 ` [Qemu-devel] [PATCH 04/11] qdev: add to BusState "hotplug-handler" link Igor Mammedov
2013-12-14 7:05 ` Peter Crosthwaite
2013-12-16 15:26 ` Igor Mammedov
2013-12-16 15:53 ` Igor Mammedov
2013-12-13 12:44 ` [Qemu-devel] [PATCH 05/11] qdev: add "hotpluggable" property to Device Igor Mammedov
2013-12-14 7:10 ` Peter Crosthwaite
2013-12-16 15:37 ` Igor Mammedov
2013-12-16 23:22 ` Anthony Liguori
2013-12-13 12:44 ` [Qemu-devel] [PATCH 06/11] hw/acpi: move typeinfo to the file end Igor Mammedov
2013-12-13 12:44 ` [Qemu-devel] [PATCH 07/11] qdev:pci: refactor PCIDevice to use generic "hotpluggable" property Igor Mammedov
2013-12-13 12:44 ` [Qemu-devel] [PATCH 08/11] acpi/piix4pm: convert ACPI PCI hotplug to use hotplug-handler API Igor Mammedov
2013-12-13 12:44 ` [Qemu-devel] [PATCH 09/11] pci/shpc: convert SHPC " Igor Mammedov
2013-12-13 12:44 ` [Qemu-devel] [PATCH 10/11] pci/pcie: convert PCIE " Igor Mammedov
2013-12-13 12:44 ` [Qemu-devel] [PATCH 11/11] hw/pci: switch to a generic hotplug handling for PCIDevice Igor Mammedov
2013-12-16 23:26 ` [Qemu-devel] [PATCH 00/11 v3] Refactor PCI/SHPC/PCIE hotplug to use a more generic hotplug API Anthony Liguori
2013-12-16 23:34 ` Peter Crosthwaite
2013-12-17 11:58 ` Igor Mammedov
2013-12-17 12:38 ` Paolo Bonzini
2013-12-17 19:38 ` Anthony Liguori
2013-12-18 10:36 ` Paolo Bonzini
2013-12-18 15:48 ` Igor Mammedov
2013-12-18 15:59 ` Paolo Bonzini
2013-12-18 16:32 ` Igor Mammedov
2013-12-18 16:26 ` Michael S. Tsirkin [this message]
2013-12-18 16:34 ` 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=20131218162607.GA21916@redhat.com \
--to=mst@redhat.com \
--cc=afaerber@suse.de \
--cc=alex.williamson@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=blauwirbel@gmail.com \
--cc=dkoch@verizon.co \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=marcel.a@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.crosthwaite@xilinx.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/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.