From: Gonglei <arei.gonglei@huawei.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: "pbonzini@redhat.com" <pbonzini@redhat.com>,
"kraxel@redhat.com" <kraxel@redhat.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"afaerber@suse.de" <afaerber@suse.de>,
"mst@redhat.com" <mst@redhat.com>
Subject: Re: [Qemu-devel] [PATCH RFC 02/10] pci: Permit incremental conversion of device models to realize
Date: Tue, 28 Oct 2014 16:35:39 +0800 [thread overview]
Message-ID: <544F555B.1010107@huawei.com> (raw)
In-Reply-To: <1414481739-19939-3-git-send-email-armbru@redhat.com>
On 2014/10/28 15:35, Markus Armbruster wrote:
> Call the new PCIDeviceClass method realize(). Default it to
> pci_default_realize(), which calls old method init().
>
> To convert a device model, make it implement realize() rather than
> init().
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
> hw/pci/pci.c | 24 +++++++++++++++++++-----
> include/hw/pci/pci.h | 3 ++-
> 2 files changed, 21 insertions(+), 6 deletions(-)
>
Reviewed-by: Gonglei <arei.gonglei@huawei.com>
Best regards,
-Gonglei
> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> index aef95c3..e21c0a8 100644
> --- a/hw/pci/pci.c
> +++ b/hw/pci/pci.c
> @@ -1753,7 +1753,6 @@ static void pci_qdev_realize(DeviceState *qdev, Error **errp)
> PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(pci_dev);
> Error *local_err = NULL;
> PCIBus *bus;
> - int rc;
> bool is_default_rom;
>
> /* initialize cap_present for pci_is_express() and pci_config_size() */
> @@ -1768,11 +1767,11 @@ static void pci_qdev_realize(DeviceState *qdev, Error **errp)
> if (pci_dev == NULL)
> return;
>
> - if (pc->init) {
> - rc = pc->init(pci_dev);
> - if (rc != 0) {
> + if (pc->realize) {
> + pc->realize(pci_dev, &local_err);
> + if (local_err) {
> + error_propagate(errp, local_err);
> do_pci_unregister_device(pci_dev);
> - error_setg(errp, "Device initialization failed");
> return;
> }
> }
> @@ -1792,6 +1791,18 @@ static void pci_qdev_realize(DeviceState *qdev, Error **errp)
> }
> }
>
> +static void pci_default_realize(PCIDevice *dev, Error **errp)
> +{
> + PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev);
> +
> + if (pc->init) {
> + if (pc->init(dev) < 0) {
> + error_setg(errp, "Device initialization failed");
> + return;
> + }
> + }
> +}
> +
> PCIDevice *pci_create_multifunction(PCIBus *bus, int devfn, bool multifunction,
> const char *name)
> {
> @@ -2286,10 +2297,13 @@ MemoryRegion *pci_address_space_io(PCIDevice *dev)
> static void pci_device_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *k = DEVICE_CLASS(klass);
> + PCIDeviceClass *pc = PCI_DEVICE_CLASS(klass);
> +
> k->realize = pci_qdev_realize;
> k->unrealize = pci_qdev_unrealize;
> k->bus_type = TYPE_PCI_BUS;
> k->props = pci_props;
> + pc->realize = pci_default_realize;
> }
>
> AddressSpace *pci_device_iommu_address_space(PCIDevice *dev)
> diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
> index c352c7b..83597b3 100644
> --- a/include/hw/pci/pci.h
> +++ b/include/hw/pci/pci.h
> @@ -183,7 +183,8 @@ typedef struct PCIINTxRoute {
> typedef struct PCIDeviceClass {
> DeviceClass parent_class;
>
> - int (*init)(PCIDevice *dev);
> + void (*realize)(PCIDevice *dev, Error **errp);
> + int (*init)(PCIDevice *dev);/* TODO convert to realize() and remove */
> PCIUnregisterFunc *exit;
> PCIConfigReadFunc *config_read;
> PCIConfigWriteFunc *config_write;
next prev parent reply other threads:[~2014-10-28 8:36 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-28 7:35 [Qemu-devel] [PATCH RFC 00/10] pci: Partial conversion to realize Markus Armbruster
2014-10-28 7:35 ` [Qemu-devel] [PATCH RFC 01/10] pci: Convert core " Markus Armbruster
2014-10-28 8:32 ` Gonglei
2014-10-28 9:38 ` Markus Armbruster
2014-10-30 16:58 ` Marcel Apfelbaum
2014-10-30 17:02 ` Marcel Apfelbaum
2014-10-28 7:35 ` [Qemu-devel] [PATCH RFC 02/10] pci: Permit incremental conversion of device models " Markus Armbruster
2014-10-28 8:35 ` Gonglei [this message]
2014-10-28 7:35 ` [Qemu-devel] [PATCH RFC 03/10] pci: Trivial device model conversions " Markus Armbruster
2014-10-28 8:38 ` Gonglei
2014-10-28 7:35 ` [Qemu-devel] [PATCH RFC 04/10] pcnet: pcnet_common_init() always returns 0, change to void Markus Armbruster
2014-10-28 8:42 ` Gonglei
2014-10-28 9:41 ` Markus Armbruster
2014-10-28 10:35 ` Gonglei
2014-10-28 7:35 ` [Qemu-devel] [PATCH RFC 05/10] pcnet: Convert to realize Markus Armbruster
2014-10-28 7:35 ` [Qemu-devel] [PATCH RFC 06/10] serial-pci: " Markus Armbruster
2014-10-28 8:43 ` Gonglei
2014-10-28 7:35 ` [Qemu-devel] [PATCH RFC 07/10] ide/ich: " Markus Armbruster
2014-10-28 8:44 ` Gonglei
2014-10-28 7:35 ` [Qemu-devel] [PATCH RFC 08/10] cirrus-vga: " Markus Armbruster
2014-10-28 8:44 ` Gonglei
2014-10-28 7:35 ` [Qemu-devel] [PATCH RFC 09/10] qxl: " Markus Armbruster
2014-10-28 8:46 ` Gonglei
2014-10-28 7:35 ` [Qemu-devel] [PATCH RFC 10/10] pci-assign: " Markus Armbruster
2014-10-28 8:49 ` Gonglei
2014-10-28 8:27 ` [Qemu-devel] [PATCH RFC 00/10] pci: Partial conversion " Gonglei
2014-10-30 14:01 ` Andreas Färber
2014-11-03 7:40 ` Markus Armbruster
2015-01-19 15:21 ` Markus Armbruster
2015-01-30 9:17 ` Markus Armbruster
2014-11-02 11:20 ` Michael S. Tsirkin
2014-11-03 7:22 ` Markus Armbruster
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=544F555B.1010107@huawei.com \
--to=arei.gonglei@huawei.com \
--cc=afaerber@suse.de \
--cc=armbru@redhat.com \
--cc=kraxel@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--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.