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>
This commit is contained in:
parent
c85b843d17
commit
5a93fcfeeb
@ -52,18 +52,25 @@ static const TypeInfo isa_bus_info = {
|
|||||||
ISABus *isa_bus_new(DeviceState *dev, MemoryRegion* address_space,
|
ISABus *isa_bus_new(DeviceState *dev, MemoryRegion* address_space,
|
||||||
MemoryRegion *address_space_io, Error **errp)
|
MemoryRegion *address_space_io, Error **errp)
|
||||||
{
|
{
|
||||||
|
DeviceState *bridge = NULL;
|
||||||
|
|
||||||
if (isabus) {
|
if (isabus) {
|
||||||
error_setg(errp, "Can't create a second ISA bus");
|
error_setg(errp, "Can't create a second ISA bus");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
dev = qdev_new("isabus-bridge");
|
bridge = qdev_new("isabus-bridge");
|
||||||
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
|
dev = bridge;
|
||||||
}
|
}
|
||||||
|
|
||||||
isabus = ISA_BUS(qbus_new(TYPE_ISA_BUS, dev, NULL));
|
isabus = ISA_BUS(qbus_new(TYPE_ISA_BUS, dev, NULL));
|
||||||
isabus->address_space = address_space;
|
isabus->address_space = address_space;
|
||||||
isabus->address_space_io = address_space_io;
|
isabus->address_space_io = address_space_io;
|
||||||
|
|
||||||
|
if (bridge) {
|
||||||
|
sysbus_realize_and_unref(SYS_BUS_DEVICE(bridge), &error_fatal);
|
||||||
|
}
|
||||||
|
|
||||||
return isabus;
|
return isabus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user