aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Mathieu-Daudé <philmd@linaro.org>2023-10-18 14:41:33 +0200
committerPhilippe Mathieu-Daudé <philmd@linaro.org>2023-10-20 14:46:07 +0200
commit5a93fcfeeba7f0a4c766e7999fb778a2452d273e (patch)
treed9912feab57aedcdbd205477d544420503886a6c
parentc85b843d177e48bb5367946ac6731073d32f831e (diff)
downloadqemu-5a93fcfeeba7f0a4c766e7999fb778a2452d273e.zip
qemu-5a93fcfeeba7f0a4c766e7999fb778a2452d273e.tar.gz
qemu-5a93fcfeeba7f0a4c766e7999fb778a2452d273e.tar.bz2
hw/isa: Realize ISA bridge device before accessing it
qbus_new() should not be called on unrealized device. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Message-Id: <20231019071611.98885-9-philmd@linaro.org>
-rw-r--r--hw/isa/isa-bus.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c
index a289ecc..f1e0f14 100644
--- a/hw/isa/isa-bus.c
+++ b/hw/isa/isa-bus.c
@@ -52,18 +52,25 @@ static const TypeInfo isa_bus_info = {
ISABus *isa_bus_new(DeviceState *dev, MemoryRegion* address_space,
MemoryRegion *address_space_io, Error **errp)
{
+ DeviceState *bridge = NULL;
+
if (isabus) {
error_setg(errp, "Can't create a second ISA bus");
return NULL;
}
if (!dev) {
- dev = qdev_new("isabus-bridge");
- sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+ bridge = qdev_new("isabus-bridge");
+ dev = bridge;
}
isabus = ISA_BUS(qbus_new(TYPE_ISA_BUS, dev, NULL));
isabus->address_space = address_space;
isabus->address_space_io = address_space_io;
+
+ if (bridge) {
+ sysbus_realize_and_unref(SYS_BUS_DEVICE(bridge), &error_fatal);
+ }
+
return isabus;
}