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: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-05 11:41 [PATCH v3 00/11] igd passthrough chipset tweaks Gerd Hoffmann
[not found] ` <1451994098-6972-1-git-send-email-kraxel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-01-05 11:41 ` [PATCH v3 01/11] pc: wire up TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE for !xen Gerd Hoffmann
2016-01-05 11:41 ` [PATCH v3 02/11] pc: remove has_igd_gfx_passthru global Gerd Hoffmann
2016-01-06 14:32 ` [Xen-devel] " Stefano Stabellini
2016-01-19 15:09 ` Eduardo Habkost
2016-01-05 11:41 ` [PATCH v3 03/11] pc: move igd support code to igd.c Gerd Hoffmann
2016-01-05 11:41 ` [PATCH v3 04/11] igd: switch TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE to realize Gerd Hoffmann
2016-01-06 14:32 ` Stefano Stabellini
2016-01-23 14:51 ` Eduardo Habkost
2016-01-25 8:59 ` Gerd Hoffmann
2016-01-25 11:53 ` Stefano Stabellini
2016-01-05 11:41 ` [PATCH v3 05/11] igd: TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE: call parent realize Gerd Hoffmann
[not found] ` <1451994098-6972-6-git-send-email-kraxel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-01-06 14:41 ` Stefano Stabellini
2016-01-06 15:45 ` Gerd Hoffmann
[not found] ` <1452095101.6096.55.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-01-19 15:13 ` Eduardo Habkost
[not found] ` <20160119151302.GB3869-CWx9maZTQ9aWdW/7B+e53bcJ0lE8rU3a@public.gmane.org>
2016-01-20 9:10 ` Gerd Hoffmann [this message]
2016-01-23 14:52 ` Eduardo Habkost
2016-01-05 11:41 ` [PATCH v3 07/11] igd: revamp host config read Gerd Hoffmann
2016-01-06 15:02 ` Stefano Stabellini
2016-01-06 15:51 ` Gerd Hoffmann
[not found] ` <1452095486.6096.61.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-01-06 16:23 ` [Xen-devel] " Stefano Stabellini
2016-01-05 11:41 ` [PATCH v3 08/11] igd: add q35 support Gerd Hoffmann
2016-01-05 11:41 ` [PATCH v3 09/11] igd: move igd-passthrough-isa-bridge to igd.c too Gerd Hoffmann
2016-01-05 11:41 ` [PATCH v3 10/11] igd: handle igd-passthrough-isa-bridge setup in realize() Gerd Hoffmann
2016-01-06 15:29 ` Stefano Stabellini
2016-01-06 15:52 ` Gerd Hoffmann
2016-01-05 11:41 ` [PATCH v3 11/11] igd: move igd-passthrough-isa-bridge creation to machine init Gerd Hoffmann
2016-01-06 15:36 ` Stefano Stabellini
2016-01-07 7:38 ` Gerd Hoffmann
2016-01-07 13:10 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1601071200210.13564-7Z66fg9igcxYtxbxJUhB2Dgeux46jI+i@public.gmane.org>
2016-01-07 15:50 ` [Qemu-devel] " Gerd Hoffmann
2016-01-08 11:20 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.02.1601071743020.13564-7Z66fg9igcxYtxbxJUhB2Dgeux46jI+i@public.gmane.org>
2016-01-08 12:12 ` [Qemu-devel] " Stefano Stabellini
2016-01-08 12:32 ` Gerd Hoffmann
2016-01-08 12:38 ` Stefano Stabellini
2016-01-05 11:41 ` [PATCH v3 06/11] igd: use defines for standard pci config space offsets Gerd Hoffmann
2016-01-06 14:43 ` Stefano Stabellini
2016-01-05 13:07 ` [PATCH v3 00/11] igd passthrough chipset tweaks Michael S. Tsirkin
2016-01-28 19:35 ` [vfio-users] " Alex Williamson
2016-01-29 2:22 ` [iGVT-g] " Kay, Allen M
2016-01-29 2:54 ` Alex Williamson
2016-01-29 6:21 ` Jike Song
2016-01-29 21:58 ` Kay, Allen M
2016-02-02 7:07 ` Tian, Kevin
[not found] ` <AADFC41AFE54684AB9EE6CBC0274A5D15F794020-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2016-02-02 19:10 ` [iGVT-g] " Kay, Allen M
2016-02-02 19:37 ` [iGVT-g] [vfio-users] " Alex Williamson
2016-02-02 23:32 ` Kay, Allen M
2016-01-29 7:09 ` Gerd Hoffmann
2016-01-29 17:59 ` Alex Williamson
2016-01-30 1:18 ` [iGVT-g] " Kay, Allen M
2016-01-31 17:42 ` Alex Williamson
2016-02-02 0:04 ` Kay, Allen M
2016-02-02 6:42 ` [Xen-devel] " Tian, Kevin
2016-02-02 11:50 ` David Woodhouse
2016-02-02 14:54 ` Alex Williamson
2016-02-02 15:06 ` David Woodhouse
2016-02-02 14:38 ` Alex Williamson
2016-02-01 12:49 ` Gerd Hoffmann
[not found] ` <1454330962.10168.34.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-02-01 22:16 ` Alex Williamson
2016-02-02 7:43 ` [vfio-users] " Gerd Hoffmann
2016-02-02 7:01 ` [iGVT-g] " Tian, Kevin
2016-02-02 8:56 ` [iGVT-g] [vfio-users] " Gerd Hoffmann
2016-02-02 16:31 ` Kevin O'Connor
2016-02-02 16:49 ` Laszlo Ersek
2016-02-02 20:18 ` Alex Williamson
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-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=caoj.fnst-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org \
--cc=ehabkost-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=igvt-g-y27Ovi1pjclAfugRpC6u6w@public.gmane.org \
--cc=qemu-devel-qX2TKyscuCcdnm+yROfE0A@public.gmane.org \
--cc=stefano.stabellini-mvvWK6WmYclDPfheJLI6IQ@public.gmane.org \
--cc=vfio-users-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=xen-devel-GuqFBffKawuULHF6PoxzQEEOCMrvLtNR@public.gmane.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).