[Qemu-devel] [PATCH v3 04/29] memory: Fix type of IOMMUMemoryRegionClass member @parent_class

Markus Armbruster posted 29 patches 6 years, 6 months ago
Maintainers: Helge Deller <deller@gmx.de>, Marek Vasut <marex@denx.de>, Kevin Wolf <kwolf@redhat.com>, Andrey Smirnov <andrew.smirnov@gmail.com>, Stefan Berger <stefanb@linux.ibm.com>, Yuval Shaia <yuval.shaia@oracle.com>, Jia Liu <proljc@gmail.com>, Alberto Garcia <berto@igalia.com>, Jiri Pirko <jiri@resnulli.us>, Riku Voipio <riku.voipio@iki.fi>, Laurent Vivier <laurent@vivier.eu>, "Hervé Poussineau" <hpoussin@reactos.org>, Halil Pasic <pasic@linux.ibm.com>, Leif Lindholm <leif.lindholm@linaro.org>, John Snow <jsnow@redhat.com>, Jean-Christophe Dubois <jcd@tribudubois.net>, Igor Mitsyanko <i.mitsyanko@gmail.com>, Juan Quintela <quintela@redhat.com>, Paul Durrant <paul.durrant@citrix.com>, Dmitry Fleytman <dmitry.fleytman@gmail.com>, Jason Wang <jasowang@redhat.com>, Jiri Slaby <jslaby@suse.cz>, Aleksandar Markovic <amarkovic@wavecomp.com>, Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>, Alistair Francis <alistair@alistair23.me>, Radoslaw Biernacki <radoslaw.biernacki@linaro.org>, Guan Xuetao <gxt@mprc.pku.edu.cn>, Paolo Bonzini <pbonzini@redhat.com>, Fam Zheng <fam@euphon.net>, Greg Kurz <groug@kaod.org>, Fabien Chouteau <chouteau@adacore.com>, Cornelia Huck <cohuck@redhat.com>, Marcelo Tosatti <mtosatti@redhat.com>, Paul Burton <pburton@wavecomp.com>, Peter Chubb <peter.chubb@nicta.com.au>, Laszlo Ersek <lersek@redhat.com>, "Philippe Mathieu-Daudé" <f4bug@amsat.org>, Andrzej Zaborowski <balrogg@gmail.com>, Liu Yuan <namei.unix@gmail.com>, Joel Stanley <joel@jms.id.au>, Subbaraya Sundeep <sundeep.lkml@gmail.com>, Stefano Stabellini <sstabellini@kernel.org>, Peter Lieven <pl@kamp.de>, "Michael S. Tsirkin" <mst@redhat.com>, Alex Williamson <alex.williamson@redhat.com>, Artyom Tarasenko <atar4qemu@gmail.com>, Alistair Francis <Alistair.Francis@wdc.com>, "Alex Bennée" <alex.bennee@linaro.org>, Amit Shah <amit@kernel.org>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, Thomas Huth <huth@tuxfamily.org>, Aurelien Jarno <aurelien@aurel32.net>, Anthony Perard <anthony.perard@citrix.com>, Xie Changlong <xiechanglong.d@gmail.com>, Shannon Zhao <shannon.zhaosl@gmail.com>, Andrew Jeffery <andrew@aj.id.au>, Magnus Damm <magnus.damm@gmail.com>, Max Filippov <jcmvbkbc@gmail.com>, Eric Auger <eric.auger@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>, Xiao Guangrong <xiaoguangrong.eric@gmail.com>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>, Christian Borntraeger <borntraeger@de.ibm.com>, Keith Busch <keith.busch@intel.com>, Hannes Reinecke <hare@suse.com>, Rob Herring <robh@kernel.org>, Aleksandar Rikalo <arikalo@wavecomp.com>, Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>, Max Reitz <mreitz@redhat.com>, Beniamino Galvani <b.galvani@gmail.com>, Samuel Thibault <samuel.thibault@ens-lyon.org>, Igor Mammedov <imammedo@redhat.com>, David Hildenbrand <david@redhat.com>, Bastian Koppelmann <kbastian@mail.uni-paderborn.de>, Tony Krowiak <akrowiak@linux.ibm.com>, Gonglei <arei.gonglei@huawei.com>, "Daniel P. Berrangé" <berrange@redhat.com>, Pierre Morel <pmorel@linux.ibm.com>, Antony Pavlov <antonynpavlov@gmail.com>, Jan Kiszka <jan.kiszka@web.de>, Richard Henderson <rth@twiddle.net>, Wen Congyang <wencongyang2@huawei.com>, James Hogan <jhogan@kernel.org>, Corey Minyard <cminyard@mvista.com>, Ben Warren <ben@skyportsystems.com>, Anthony Green <green@moxielogic.com>, Eduardo Habkost <ehabkost@redhat.com>, Collin Walling <walling@linux.ibm.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, Eric Blake <eblake@redhat.com>, BALATON Zoltan <balaton@eik.bme.hu>, Thomas Huth <thuth@redhat.com>, Peter Maydell <peter.maydell@linaro.org>, Andrew Baumann <Andrew.Baumann@microsoft.com>, Eric Farman <farman@linux.ibm.com>, Palmer Dabbelt <palmer@sifive.com>, "Philippe Mathieu-Daudé" <philmd@redhat.com>, zhanghailiang <zhang.zhanghailiang@huawei.com>, Gerd Hoffmann <kraxel@redhat.com>, "Edgar E. Iglesias" <edgar.iglesias@gmail.com>, Laurent Vivier <lvivier@redhat.com>, Michael Roth <mdroth@linux.vnet.ibm.com>, Sagar Karandikar <sagark@eecs.berkeley.edu>, Chris Wulff <crwulff@gmail.com>, Stefan Weil <sw@weilnetz.de>, "Cédric Le Goater" <clg@kaod.org>, Markus Armbruster <armbru@redhat.com>, KONRAD Frederic <frederic.konrad@adacore.com>, Stafford Horne <shorne@gmail.com>, Corey Minyard <minyard@acm.org>, Michael Walle <michael@walle.cc>, David Gibson <david@gibson.dropbear.id.au>
There is a newer version of this series
[Qemu-devel] [PATCH v3 04/29] memory: Fix type of IOMMUMemoryRegionClass member @parent_class
Posted by Markus Armbruster 6 years, 6 months ago
TYPE_IOMMU_MEMORY_REGION is a direct subtype of TYPE_MEMORY_REGION.
Its instance struct is IOMMUMemoryRegion, and its first member is a
MemoryRegion.  Correct.  Its class struct is IOMMUMemoryRegionClass,
and its first member is a DeviceClass.  Wrong.  Messed up when commit
1221a474676 introduced the QOM type.  It even included hw/qdev-core.h
just for that.

TYPE_MEMORY_REGION doesn't bother to define a class struct.  This is
fine, it simply defaults to its super-type TYPE_OBJECT's class struct
ObjectClass.  Changing IOMMUMemoryRegionClass's first member's type to
ObjectClass would be a minimal fix, if a bit brittle: if
TYPE_MEMORY_REGION ever acquired own class struct, we'd have to update
IOMMUMemoryRegionClass to use it.

Fix it the clean and robust way instead: give TYPE_MEMORY_REGION its
own class struct MemoryRegionClass now, and use it for
IOMMUMemoryRegionClass's first member.

Revert the include of hw/qdev-core.h, and fix the few files that have
come to rely on it.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/display/vga-isa-mm.c |  1 +
 hw/net/pcnet.h          |  1 +
 include/exec/memory.h   | 10 ++++++++--
 memory.c                |  1 +
 4 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/hw/display/vga-isa-mm.c b/hw/display/vga-isa-mm.c
index 215e649719..a790f69b6d 100644
--- a/hw/display/vga-isa-mm.c
+++ b/hw/display/vga-isa-mm.c
@@ -22,6 +22,7 @@
  * THE SOFTWARE.
  */
 #include "qemu/osdep.h"
+#include "qemu/bitops.h"
 #include "qemu/units.h"
 #include "hw/hw.h"
 #include "hw/display/vga.h"
diff --git a/hw/net/pcnet.h b/hw/net/pcnet.h
index 40831a7845..28d19a5c6f 100644
--- a/hw/net/pcnet.h
+++ b/hw/net/pcnet.h
@@ -8,6 +8,7 @@
 #define PCNET_LOOPTEST_NOCRC	2
 
 #include "exec/memory.h"
+#include "hw/irq.h"
 
 /* BUS CONFIGURATION REGISTERS */
 #define BCR_MSRDA    0
diff --git a/include/exec/memory.h b/include/exec/memory.h
index bb0961ddb9..d99eb25d2e 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -20,12 +20,12 @@
 #include "exec/hwaddr.h"
 #include "exec/memattrs.h"
 #include "exec/ramlist.h"
+#include "qemu/bswap.h"
 #include "qemu/queue.h"
 #include "qemu/int128.h"
 #include "qemu/notify.h"
 #include "qom/object.h"
 #include "qemu/rcu.h"
-#include "hw/qdev-core.h"
 
 #define RAM_ADDR_INVALID (~(ram_addr_t)0)
 
@@ -205,6 +205,12 @@ struct MemoryRegionOps {
     } impl;
 };
 
+typedef struct MemoryRegionClass {
+    /* private */
+    ObjectClass parent_class;
+} MemoryRegionClass;
+
+
 enum IOMMUMemoryRegionAttr {
     IOMMU_ATTR_SPAPR_TCE_FD
 };
@@ -237,7 +243,7 @@ enum IOMMUMemoryRegionAttr {
  */
 typedef struct IOMMUMemoryRegionClass {
     /* private */
-    struct DeviceClass parent_class;
+    MemoryRegionClass parent_class;
 
     /*
      * Return a TLB entry that contains a given address.
diff --git a/memory.c b/memory.c
index 5d8c9a9234..09d9b254fd 100644
--- a/memory.c
+++ b/memory.c
@@ -3245,6 +3245,7 @@ void memory_region_init_rom_device(MemoryRegion *mr,
 static const TypeInfo memory_region_info = {
     .parent             = TYPE_OBJECT,
     .name               = TYPE_MEMORY_REGION,
+    .class_size         = sizeof(MemoryRegionClass),
     .instance_size      = sizeof(MemoryRegion),
     .instance_init      = memory_region_initfn,
     .instance_finalize  = memory_region_finalize,
-- 
2.21.0