qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH not-for-merge 5/5] qdev: Instrument to detect bus mismatch


From: Markus Armbruster
Subject: [PATCH not-for-merge 5/5] qdev: Instrument to detect bus mismatch
Date: Mon, 18 May 2020 07:19:45 +0200

Signed-off-by: Markus Armbruster <address@hidden>
---
 hw/core/qdev.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 9e5538aeae..936ef3988a 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -98,6 +98,23 @@ void qdev_set_parent_bus(DeviceState *dev, BusState *bus)
 {
     BusState *old_parent_bus = dev->parent_bus;
 
+    DeviceClass *dc = DEVICE_GET_CLASS(dev);
+    if (bus) {
+        BusClass *bc;
+        for (bc = BUS_GET_CLASS(bus);
+             bc;
+             bc = (BusClass 
*)object_class_dynamic_cast(object_class_get_parent(OBJECT_CLASS(bc)), 
TYPE_BUS)) {
+            if (!g_strcmp0(dc->bus_type, 
object_class_get_name(OBJECT_CLASS(bc)))) {
+                break;
+            }
+        }
+        if (!bc) {
+            printf("### bus mismatch %s is %s plugged into %s\n",
+                   object_get_typename(OBJECT(dev)), dc->bus_type,
+                   object_class_get_name(OBJECT_CLASS(BUS_GET_CLASS(bus))));
+        }
+    }
+
     if (old_parent_bus) {
         trace_qdev_update_parent_bus(dev, object_get_typename(OBJECT(dev)),
             old_parent_bus, object_get_typename(OBJECT(old_parent_bus)),
-- 
2.21.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]