mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
qdev: add return value to init() callbacks.
Sorry folks, but it has to be. One more of these invasive qdev patches. We have a serious design bug in the qdev interface: device init callbacks can't signal failure because the init() callback has no return value. This patch fixes it. We have already one case in-tree where this is needed: Try -device virtio-blk-pci (without drive= specified) and watch qemu segfault. This patch fixes it. With usb+scsi being converted to qdev we'll get more devices where the init callback can fail for various reasons. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
24e6f3551f
commit
81a322d4a1
102 changed files with 334 additions and 193 deletions
|
@ -104,14 +104,15 @@ void isa_init_irq(ISADevice *dev, qemu_irq *p)
|
|||
dev->nirqs++;
|
||||
}
|
||||
|
||||
static void isa_qdev_init(DeviceState *qdev, DeviceInfo *base)
|
||||
static int isa_qdev_init(DeviceState *qdev, DeviceInfo *base)
|
||||
{
|
||||
ISADevice *dev = DO_UPCAST(ISADevice, qdev, qdev);
|
||||
ISADeviceInfo *info = DO_UPCAST(ISADeviceInfo, qdev, base);
|
||||
|
||||
dev->isairq[0] = -1;
|
||||
dev->isairq[1] = -1;
|
||||
info->init(dev);
|
||||
|
||||
return info->init(dev);
|
||||
}
|
||||
|
||||
void isa_qdev_register(ISADeviceInfo *info)
|
||||
|
@ -156,9 +157,10 @@ static void isabus_dev_print(Monitor *mon, DeviceState *dev, int indent)
|
|||
}
|
||||
}
|
||||
|
||||
static void isabus_bridge_init(SysBusDevice *dev)
|
||||
static int isabus_bridge_init(SysBusDevice *dev)
|
||||
{
|
||||
/* nothing */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SysBusDeviceInfo isabus_bridge_info = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue