Message ID | 20231018141151.87466-9-philmd@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | hw: Strengthen SysBus & QBus API | expand |
On 18/10/2023 16.11, Philippe Mathieu-Daudé wrote: > sysbus_mmio_map() should not be called on unrealized device. I also cannot spot a sysbus_mmio_map() here ... do you mean qdev_new() instead? Thomas > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > hw/isa/isa-bus.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c > index a289eccfb1..f1e0f14007 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; > } >
On 18/10/23 17:57, Thomas Huth wrote: > On 18/10/2023 16.11, Philippe Mathieu-Daudé wrote: >> sysbus_mmio_map() should not be called on unrealized device. > > I also cannot spot a sysbus_mmio_map() here ... do you mean qdev_new() > instead? Yeah, bad copy/paste :/ > > Thomas > >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> --- >> hw/isa/isa-bus.c | 11 +++++++++-- >> 1 file changed, 9 insertions(+), 2 deletions(-) >> >> diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c >> index a289eccfb1..f1e0f14007 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; >> } >
diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c index a289eccfb1..f1e0f14007 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; }
sysbus_mmio_map() should not be called on unrealized device. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- hw/isa/isa-bus.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)