mirror of https://gitlab.com/qemu-project/qemu
usb: make usb_create_simple catch and pass up errors.
Use qdev_init() instead of qdev_init_nofail(), usb device initialization can fail, most common case being port and device speed mismatch. Handle failures correctly and pass up NULL pointers then. Also fixup usb_create_simple() callers (only one was buggy) to properly check for NULL pointers before referncing the usb_create_simple() return value. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
40897c9c16
commit
2af2a1b8d0
|
@ -528,6 +528,9 @@ USBDevice *usb_bt_init(HCIInfo *hci)
|
||||||
if (!hci)
|
if (!hci)
|
||||||
return NULL;
|
return NULL;
|
||||||
dev = usb_create_simple(NULL /* FIXME */, "usb-bt-dongle");
|
dev = usb_create_simple(NULL /* FIXME */, "usb-bt-dongle");
|
||||||
|
if (!dev) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
s = DO_UPCAST(struct USBBtState, dev, dev);
|
s = DO_UPCAST(struct USBBtState, dev, dev);
|
||||||
s->dev.opaque = s;
|
s->dev.opaque = s;
|
||||||
|
|
||||||
|
|
11
hw/usb-bus.c
11
hw/usb-bus.c
|
@ -139,10 +139,17 @@ USBDevice *usb_create(USBBus *bus, const char *name)
|
||||||
USBDevice *usb_create_simple(USBBus *bus, const char *name)
|
USBDevice *usb_create_simple(USBBus *bus, const char *name)
|
||||||
{
|
{
|
||||||
USBDevice *dev = usb_create(bus, name);
|
USBDevice *dev = usb_create(bus, name);
|
||||||
|
int rc;
|
||||||
|
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
hw_error("Failed to create USB device '%s'\n", name);
|
error_report("Failed to create USB device '%s'\n", name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
rc = qdev_init(&dev->qdev);
|
||||||
|
if (rc < 0) {
|
||||||
|
error_report("Failed to initialize USB device '%s'\n", name);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
qdev_init_nofail(&dev->qdev);
|
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue