Commit e7e9b49f authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/kraxel/tags/pull-usb-20150320-1' into staging



usb: bugfix collection.

# gpg: Signature made Fri Mar 20 07:51:19 2015 GMT using RSA key ID D3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>"
# gpg:                 aka "Gerd Hoffmann <gerd@kraxel.org>"
# gpg:                 aka "Gerd Hoffmann (private) <kraxel@gmail.com>"

* remotes/kraxel/tags/pull-usb-20150320-1:
  ehci: fix segfault when hot-unplugging ehci controller
  ohci: fix resource cleanup leak
  uhci: fix segfault when hot-unplugging uhci controller
  hw/usb: Include USB files only if necessary
  usb/dev-storage: Avoid qerror_report_err() outside QMP handlers
  usb/dev-storage: Fix QMP device_add missing encryption key failure
  monitor usb: Inline monitor_read_bdrv_key_start()'s first part
  monitor: Plug memory leak in monitor_read_bdrv_key_start()
  monitor: Drop dead QMP check from monitor_read_password()
  uhci: Convert to realize
  ohci: Complete conversion to realize
  usb: Improve companion configuration error messages
  usb: Propagate errors through usb_register_companion()

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents 3e5f6234 4e289b1b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ CONFIG_DS1338=y
CONFIG_PFLASH_CFI01=y
CONFIG_PFLASH_CFI02=y
CONFIG_MICRODRIVE=y
CONFIG_USB=y
CONFIG_USB_MUSB=y
CONFIG_USB_EHCI_SYSBUS=y
CONFIG_PLATFORM_BUS=y
+1 −0
Original line number Diff line number Diff line
CONFIG_USB=y
CONFIG_USB_TABLET_WACOM=y
CONFIG_USB_STORAGE_BOT=y
CONFIG_USB_STORAGE_UAS=y
+4 −4
Original line number Diff line number Diff line
# usb subsystem core
common-obj-y += core.o combined-packet.o bus.o desc.o desc-msos.o
common-obj-y += libhw.o
common-obj-y += core.o combined-packet.o bus.o libhw.o
common-obj-$(CONFIG_USB) += desc.o desc-msos.o

# usb host adapters
common-obj-$(CONFIG_USB_UHCI) += hcd-uhci.o
@@ -11,8 +11,8 @@ common-obj-$(CONFIG_USB_XHCI) += hcd-xhci.o
common-obj-$(CONFIG_USB_MUSB) += hcd-musb.o

# emulated usb devices
common-obj-y += dev-hub.o
common-obj-y += dev-hid.o
common-obj-$(CONFIG_USB) += dev-hub.o
common-obj-$(CONFIG_USB) += dev-hid.o
common-obj-$(CONFIG_USB_TABLET_WACOM) += dev-wacom.o
common-obj-$(CONFIG_USB_STORAGE_BOT)  += dev-storage.o
common-obj-$(CONFIG_USB_STORAGE_UAS)  += dev-uas.o
+14 −13
Original line number Diff line number Diff line
@@ -360,9 +360,10 @@ void usb_register_port(USBBus *bus, USBPort *port, void *opaque, int index,
    bus->nfree++;
}

int usb_register_companion(const char *masterbus, USBPort *ports[],
void usb_register_companion(const char *masterbus, USBPort *ports[],
                            uint32_t portcount, uint32_t firstport,
                           void *opaque, USBPortOps *ops, int speedmask)
                            void *opaque, USBPortOps *ops, int speedmask,
                            Error **errp)
{
    USBBus *bus;
    int i;
@@ -373,22 +374,22 @@ int usb_register_companion(const char *masterbus, USBPort *ports[],
        }
    }

    if (!bus || !bus->ops->register_companion) {
        qerror_report(QERR_INVALID_PARAMETER_VALUE, "masterbus",
                      "an USB masterbus");
        if (bus) {
            error_printf_unless_qmp(
                "USB bus '%s' does not allow companion controllers\n",
                masterbus);
    if (!bus) {
        error_setg(errp, "USB bus '%s' not found", masterbus);
        return;
    }
        return -1;
    if (!bus->ops->register_companion) {
        error_setg(errp, "Can't use USB bus '%s' as masterbus,"
                   " it doesn't support companion controllers",
                   masterbus);
        return;
    }

    for (i = 0; i < portcount; i++) {
        usb_fill_port(ports[i], opaque, i, ops, speedmask);
    }

    return bus->ops->register_companion(bus, ports, portcount, firstport);
    bus->ops->register_companion(bus, ports, portcount, firstport, errp);
}

void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr)
+18 −12
Original line number Diff line number Diff line
@@ -559,8 +559,7 @@ static void usb_msd_password_cb(void *opaque, int err)
    }

    if (local_err) {
        qerror_report_err(local_err);
        error_free(local_err);
        error_report_err(local_err);
        qdev_unplug(&s->dev.qdev, NULL);
    }
}
@@ -610,6 +609,23 @@ static void usb_msd_realize_storage(USBDevice *dev, Error **errp)
        return;
    }

    bdrv_add_key(blk_bs(blk), NULL, &err);
    if (err) {
        if (monitor_cur_is_qmp()) {
            error_propagate(errp, err);
            return;
        }
        error_free(err);
        err = NULL;
        if (cur_mon) {
            monitor_read_bdrv_key_start(cur_mon, blk_bs(blk),
                                        usb_msd_password_cb, s);
            s->dev.auto_attach = 0;
        } else {
            autostart = 0;
        }
    }

    blkconf_serial(&s->conf, &dev->serial);
    blkconf_blocksizes(&s->conf);

@@ -638,16 +654,6 @@ static void usb_msd_realize_storage(USBDevice *dev, Error **errp)
    }
    usb_msd_handle_reset(dev);
    s->scsi_dev = scsi_dev;

    if (bdrv_key_required(blk_bs(blk))) {
        if (cur_mon) {
            monitor_read_bdrv_key_start(cur_mon, blk_bs(blk),
                                        usb_msd_password_cb, s);
            s->dev.auto_attach = 0;
        } else {
            autostart = 0;
        }
    }
}

static void usb_msd_realize_bot(USBDevice *dev, Error **errp)
Loading