xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
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

  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).