From: Paolo Bonzini <pbonzini@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: "Kevin Wolf" <kwolf@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Peter Crosthwaite" <peter.crosthwaite@xilinx.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
"Michael S. Tsirkin" <mst@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>,
dkoch@verizon.co, "Igor Mammedov" <imammedo@redhat.com>,
"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 11:36:52 +0100 [thread overview]
Message-ID: <52B17AC4.6080709@redhat.com> (raw)
In-Reply-To: <CA+aC4kv1CLeSrFQQ3DzTsj4yHU-vKOhrTNxnYSSLf9PRN5Z=OA@mail.gmail.com>
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.
>
> 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".
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 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 10:37 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 [this message]
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
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=52B17AC4.6080709@redhat.com \
--to=pbonzini@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=mst@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 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).