From: Gerd Hoffmann <kraxel@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: igvt-g@ml01.01.org, xen-devel@lists.xensource.com,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
qemu-devel@nongnu.org, Cao jin <caoj.fnst@cn.fujitsu.com>,
vfio-users@redhat.com
Subject: Re: [Qemu-devel] [PATCH v3 05/11] igd: TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE: call parent realize
Date: Wed, 20 Jan 2016 10:10:11 +0100 [thread overview]
Message-ID: <1453281011.11804.40.camel@redhat.com> (raw)
In-Reply-To: <20160119151302.GB3869@thinpad.lan.raisama.net>
[-- Attachment #1: Type: text/plain, Size: 413 bytes --]
Hi,
> > > > + i440fx_realize = k->realize;
> > > > k->realize = igd_pt_i440fx_realize;
> >
> > ... because we are overriding it right here.
>
> Many device classes have a parent_realize field so they can keep
> a pointer to the original realize function. It's better than a
> static variable.
How does the attached patch (incremental fix, not tested yet) look like?
cheers,
Gerd
[-- Attachment #2: 0001-fixup-TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE-realize.patch --]
[-- Type: text/x-patch, Size: 2398 bytes --]
From 3d110e297b5182107e055db3ab69092affdef5bb Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel@redhat.com>
Date: Wed, 20 Jan 2016 10:08:19 +0100
Subject: [PATCH] [fixup] TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE realize_parent
---
hw/pci-host/igd.c | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/hw/pci-host/igd.c b/hw/pci-host/igd.c
index 160828f..2d51745 100644
--- a/hw/pci-host/igd.c
+++ b/hw/pci-host/igd.c
@@ -49,12 +49,24 @@ out_free:
g_free(path);
}
-static void (*i440fx_realize)(PCIDevice *pci_dev, Error **errp);
+#define IGD_PT_I440FX_CLASS(class) \
+ OBJECT_CLASS_CHECK(IGDPtI440fxClass, (class), \
+ TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE)
+#define IGD_PT_I440FX_GET_CLASS(obj) \
+ OBJECT_GET_CLASS(IGDPtI440fxClass, (obj), \
+ TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE)
+
+typedef struct IGDPtI440fxClass {
+ PCIDeviceClass parent_class;
+ void (*parent_realize)(PCIDevice *dev, Error **errp);
+} IGDPtI440fxClass;
+
static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp)
{
+ IGDPtI440fxClass *k = IGD_PT_I440FX_GET_CLASS(pci_dev);
Error *err = NULL;
- i440fx_realize(pci_dev, &err);
+ k->parent_realize(pci_dev, &err);
if (err != NULL) {
error_propagate(errp, err);
return;
@@ -72,11 +84,12 @@ static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp)
static void igd_passthrough_i440fx_class_init(ObjectClass *klass, void *data)
{
+ IGDPtI440fxClass *k = IGD_PT_I440FX_CLASS(klass);
DeviceClass *dc = DEVICE_CLASS(klass);
- PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
+ PCIDeviceClass *pc = PCI_DEVICE_CLASS(klass);
- i440fx_realize = k->realize;
- k->realize = igd_pt_i440fx_realize;
+ k->parent_realize = pc->realize;
+ pc->realize = igd_pt_i440fx_realize;
dc->desc = "IGD Passthrough Host bridge (i440fx)";
}
@@ -84,6 +97,7 @@ static const TypeInfo igd_passthrough_i440fx_info = {
.name = TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE,
.parent = TYPE_I440FX_PCI_DEVICE,
.class_init = igd_passthrough_i440fx_class_init,
+ .class_size = sizeof(IGDPtI440fxClass),
};
static void (*q35_realize)(PCIDevice *pci_dev, Error **errp);
--
1.8.3.1
WARNING: multiple messages have this Message-ID (diff)
From: Gerd Hoffmann <kraxel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Eduardo Habkost <ehabkost-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: igvt-g-y27Ovi1pjclAfugRpC6u6w@public.gmane.org,
xen-devel-GuqFBffKawuULHF6PoxzQEEOCMrvLtNR@public.gmane.org,
Stefano Stabellini
<stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org>,
qemu-devel-qX2TKyscuCcdnm+yROfE0A@public.gmane.org,
Cao jin <caoj.fnst-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>,
vfio-users-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCH v3 05/11] igd: TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE: call parent realize
Date: Wed, 20 Jan 2016 10:10:11 +0100 [thread overview]
Message-ID: <1453281011.11804.40.camel@redhat.com> (raw)
In-Reply-To: <20160119151302.GB3869-CWx9maZTQ9aWdW/7B+e53bcJ0lE8rU3a@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 413 bytes --]
Hi,
> > > > + i440fx_realize = k->realize;
> > > > k->realize = igd_pt_i440fx_realize;
> >
> > ... because we are overriding it right here.
>
> Many device classes have a parent_realize field so they can keep
> a pointer to the original realize function. It's better than a
> static variable.
How does the attached patch (incremental fix, not tested yet) look like?
cheers,
Gerd
[-- Attachment #2: 0001-fixup-TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE-realize.patch --]
[-- Type: text/x-patch, Size: 2398 bytes --]
From 3d110e297b5182107e055db3ab69092affdef5bb Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel@redhat.com>
Date: Wed, 20 Jan 2016 10:08:19 +0100
Subject: [PATCH] [fixup] TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE realize_parent
---
hw/pci-host/igd.c | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/hw/pci-host/igd.c b/hw/pci-host/igd.c
index 160828f..2d51745 100644
--- a/hw/pci-host/igd.c
+++ b/hw/pci-host/igd.c
@@ -49,12 +49,24 @@ out_free:
g_free(path);
}
-static void (*i440fx_realize)(PCIDevice *pci_dev, Error **errp);
+#define IGD_PT_I440FX_CLASS(class) \
+ OBJECT_CLASS_CHECK(IGDPtI440fxClass, (class), \
+ TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE)
+#define IGD_PT_I440FX_GET_CLASS(obj) \
+ OBJECT_GET_CLASS(IGDPtI440fxClass, (obj), \
+ TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE)
+
+typedef struct IGDPtI440fxClass {
+ PCIDeviceClass parent_class;
+ void (*parent_realize)(PCIDevice *dev, Error **errp);
+} IGDPtI440fxClass;
+
static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp)
{
+ IGDPtI440fxClass *k = IGD_PT_I440FX_GET_CLASS(pci_dev);
Error *err = NULL;
- i440fx_realize(pci_dev, &err);
+ k->parent_realize(pci_dev, &err);
if (err != NULL) {
error_propagate(errp, err);
return;
@@ -72,11 +84,12 @@ static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp)
static void igd_passthrough_i440fx_class_init(ObjectClass *klass, void *data)
{
+ IGDPtI440fxClass *k = IGD_PT_I440FX_CLASS(klass);
DeviceClass *dc = DEVICE_CLASS(klass);
- PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
+ PCIDeviceClass *pc = PCI_DEVICE_CLASS(klass);
- i440fx_realize = k->realize;
- k->realize = igd_pt_i440fx_realize;
+ k->parent_realize = pc->realize;
+ pc->realize = igd_pt_i440fx_realize;
dc->desc = "IGD Passthrough Host bridge (i440fx)";
}
@@ -84,6 +97,7 @@ static const TypeInfo igd_passthrough_i440fx_info = {
.name = TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE,
.parent = TYPE_I440FX_PCI_DEVICE,
.class_init = igd_passthrough_i440fx_class_init,
+ .class_size = sizeof(IGDPtI440fxClass),
};
static void (*q35_realize)(PCIDevice *pci_dev, Error **errp);
--
1.8.3.1
[-- Attachment #3: Type: text/plain, Size: 174 bytes --]
_______________________________________________
vfio-users mailing list
vfio-users-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
https://www.redhat.com/mailman/listinfo/vfio-users
next prev parent reply other threads:[~2016-01-20 9:10 UTC|newest]
Thread overview: 132+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-05 11:41 [Qemu-devel] [PATCH v3 00/11] igd passthrough chipset tweaks Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 01/11] pc: wire up TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE for !xen Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 02/11] pc: remove has_igd_gfx_passthru global Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-06 14:32 ` [Qemu-devel] [Xen-devel] " Stefano Stabellini
2016-01-06 14:32 ` Stefano Stabellini
2016-01-19 15:09 ` [Qemu-devel] " Eduardo Habkost
2016-01-19 15:09 ` Eduardo Habkost
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 03/11] pc: move igd support code to igd.c Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 04/11] igd: switch TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE to realize Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-06 14:32 ` [Qemu-devel] " Stefano Stabellini
2016-01-06 14:32 ` Stefano Stabellini
2016-01-23 14:51 ` [Qemu-devel] " Eduardo Habkost
2016-01-23 14:51 ` Eduardo Habkost
2016-01-25 8:59 ` [Qemu-devel] " Gerd Hoffmann
2016-01-25 8:59 ` Gerd Hoffmann
2016-01-25 11:53 ` [Qemu-devel] " Stefano Stabellini
2016-01-25 11:53 ` Stefano Stabellini
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 05/11] igd: TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE: call parent realize Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-06 14:41 ` [Qemu-devel] " Stefano Stabellini
2016-01-06 14:41 ` Stefano Stabellini
2016-01-06 15:45 ` [Qemu-devel] " Gerd Hoffmann
2016-01-06 15:45 ` Gerd Hoffmann
2016-01-19 15:13 ` [Qemu-devel] " Eduardo Habkost
2016-01-19 15:13 ` Eduardo Habkost
2016-01-20 9:10 ` Gerd Hoffmann [this message]
2016-01-20 9:10 ` Gerd Hoffmann
2016-01-23 14:52 ` [Qemu-devel] " Eduardo Habkost
2016-01-23 14:52 ` Eduardo Habkost
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 06/11] igd: use defines for standard pci config space offsets Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-06 14:43 ` [Qemu-devel] " Stefano Stabellini
2016-01-06 14:43 ` Stefano Stabellini
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 07/11] igd: revamp host config read Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-06 15:02 ` [Qemu-devel] " Stefano Stabellini
2016-01-06 15:02 ` Stefano Stabellini
2016-01-06 15:51 ` [Qemu-devel] " Gerd Hoffmann
2016-01-06 15:51 ` Gerd Hoffmann
2016-01-06 16:23 ` [Qemu-devel] [Xen-devel] " Stefano Stabellini
2016-01-06 16:23 ` Stefano Stabellini
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 08/11] igd: add q35 support Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 09/11] igd: move igd-passthrough-isa-bridge to igd.c too Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 10/11] igd: handle igd-passthrough-isa-bridge setup in realize() Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-06 15:29 ` [Qemu-devel] " Stefano Stabellini
2016-01-06 15:29 ` Stefano Stabellini
2016-01-06 15:52 ` [Qemu-devel] " Gerd Hoffmann
2016-01-06 15:52 ` Gerd Hoffmann
2016-01-05 11:41 ` [Qemu-devel] [PATCH v3 11/11] igd: move igd-passthrough-isa-bridge creation to machine init Gerd Hoffmann
2016-01-05 11:41 ` Gerd Hoffmann
2016-01-06 15:36 ` [Qemu-devel] " Stefano Stabellini
2016-01-06 15:36 ` Stefano Stabellini
2016-01-07 7:38 ` [Qemu-devel] " Gerd Hoffmann
2016-01-07 7:38 ` Gerd Hoffmann
2016-01-07 13:10 ` [Qemu-devel] " Stefano Stabellini
2016-01-07 13:10 ` Stefano Stabellini
2016-01-07 15:50 ` [Qemu-devel] " Gerd Hoffmann
2016-01-07 15:50 ` Gerd Hoffmann
2016-01-08 11:20 ` Stefano Stabellini
2016-01-08 11:20 ` Stefano Stabellini
2016-01-08 12:12 ` [Qemu-devel] " Stefano Stabellini
2016-01-08 12:12 ` Stefano Stabellini
2016-01-08 12:32 ` Gerd Hoffmann
2016-01-08 12:32 ` Gerd Hoffmann
2016-01-08 12:38 ` [Qemu-devel] " Stefano Stabellini
2016-01-08 12:38 ` Stefano Stabellini
2016-01-05 13:07 ` [Qemu-devel] [PATCH v3 00/11] igd passthrough chipset tweaks Michael S. Tsirkin
2016-01-05 13:07 ` Michael S. Tsirkin
2016-01-28 19:35 ` [Qemu-devel] [vfio-users] " Alex Williamson
2016-01-28 19:35 ` Alex Williamson
2016-01-29 2:22 ` [Qemu-devel] [iGVT-g] " Kay, Allen M
2016-01-29 2:22 ` Kay, Allen M
2016-01-29 2:54 ` [Qemu-devel] " Alex Williamson
2016-01-29 2:54 ` Alex Williamson
2016-01-29 6:21 ` [Qemu-devel] " Jike Song
2016-01-29 6:21 ` Jike Song
2016-01-29 21:58 ` [Qemu-devel] " Kay, Allen M
2016-01-29 21:58 ` Kay, Allen M
2016-02-02 7:07 ` [Qemu-devel] " Tian, Kevin
2016-02-02 7:07 ` Tian, Kevin
2016-02-02 19:10 ` [Qemu-devel] " Kay, Allen M
2016-02-02 19:10 ` [iGVT-g] " Kay, Allen M
2016-02-02 19:37 ` [Qemu-devel] [iGVT-g] [vfio-users] " Alex Williamson
2016-02-02 19:37 ` Alex Williamson
2016-02-02 23:32 ` [Qemu-devel] " Kay, Allen M
2016-02-02 23:32 ` Kay, Allen M
2016-01-29 7:09 ` [Qemu-devel] " Gerd Hoffmann
2016-01-29 7:09 ` Gerd Hoffmann
2016-01-29 17:59 ` [Qemu-devel] " Alex Williamson
2016-01-29 17:59 ` Alex Williamson
2016-01-30 1:18 ` [Qemu-devel] [iGVT-g] " Kay, Allen M
2016-01-30 1:18 ` Kay, Allen M
2016-01-31 17:42 ` [Qemu-devel] " Alex Williamson
2016-01-31 17:42 ` Alex Williamson
2016-02-02 0:04 ` [Qemu-devel] " Kay, Allen M
2016-02-02 0:04 ` Kay, Allen M
2016-02-02 6:42 ` [Qemu-devel] [Xen-devel] " Tian, Kevin
2016-02-02 6:42 ` Tian, Kevin
2016-02-02 11:50 ` [Qemu-devel] " David Woodhouse
2016-02-02 11:50 ` David Woodhouse
2016-02-02 14:54 ` [Qemu-devel] " Alex Williamson
2016-02-02 14:54 ` Alex Williamson
2016-02-02 15:06 ` [Qemu-devel] " David Woodhouse
2016-02-02 15:06 ` David Woodhouse
2016-02-02 14:38 ` [Qemu-devel] " Alex Williamson
2016-02-02 14:38 ` Alex Williamson
2016-02-01 12:49 ` [Qemu-devel] " Gerd Hoffmann
2016-02-01 12:49 ` Gerd Hoffmann
2016-02-01 22:16 ` [Qemu-devel] " Alex Williamson
2016-02-01 22:16 ` Alex Williamson
2016-02-02 7:43 ` [Qemu-devel] [vfio-users] " Gerd Hoffmann
2016-02-02 7:43 ` Gerd Hoffmann
2016-02-02 7:01 ` [Qemu-devel] [iGVT-g] " Tian, Kevin
2016-02-02 7:01 ` [iGVT-g] " Tian, Kevin
2016-02-02 8:56 ` [Qemu-devel] [iGVT-g] [vfio-users] " Gerd Hoffmann
2016-02-02 8:56 ` Gerd Hoffmann
2016-02-02 16:31 ` [Qemu-devel] " Kevin O'Connor
2016-02-02 16:31 ` Kevin O'Connor
2016-02-02 16:49 ` [Qemu-devel] " Laszlo Ersek
2016-02-02 16:49 ` Laszlo Ersek
2016-02-02 20:18 ` [Qemu-devel] " Alex Williamson
2016-02-02 20:18 ` Alex Williamson
2016-02-03 6:08 ` [Qemu-devel] " Tian, Kevin
2016-02-03 6:08 ` Tian, Kevin
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=1453281011.11804.40.camel@redhat.com \
--to=kraxel@redhat.com \
--cc=caoj.fnst@cn.fujitsu.com \
--cc=ehabkost@redhat.com \
--cc=igvt-g@ml01.01.org \
--cc=qemu-devel@nongnu.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=vfio-users@redhat.com \
--cc=xen-devel@lists.xensource.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 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.