* [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize
@ 2014-09-18 12:47 arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 01/19] usb-storage: fix possible memory leak and missing error message arei.gonglei
` (21 more replies)
0 siblings, 22 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
DeviceClass->init is the old interface, let's convert usb
devices to the new realize API. In this way, all the
implementations now use error_setg instead of
qerror_report/error_report for reporting error.
Cc: Markus Armbruster <armbru@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
v2 -> v1:
- fix PATCH 2, using qerror_report_err print error messages
when attach fails (Paolo)
- using errp instead of qerror_report_err introduced by
fix 1 in PATCH 12 (Paolo)
- fix missing return in PATCH 14 (Paolo)
- add 'Reviewed-by' tag for other patches
Thanks a lot for reviewing!
Gonglei (19):
usb-storage: fix possible memory leak and missing error message
usb-bus: convert USBDeviceClass init to realize
usb-net: convert init to realize
libusb: convert init to realize
libusb: using error_report instead of fprintf
usb-hub: convert init to realize
dev-storage: convert init to realize
dev-storage: usring error_report instead of fprintf/printf
dev-uas: convert init to realize
dev-uas: using error_report instead of fprintf
dev-bluetooth: convert init to realize
dev-serial: convert init to realize
usb-ccid: convert init to realize
dev-hid: convert init to realize
dev-wacom: convert init to realize
usb-audio: convert init to realize
usb-redir: convert init to realize
usb-mtp: convert init to realize
usb-bus: remove "init" from USBDeviceClass struct
hw/usb/bus.c | 79 ++++++++++++++++++++++---------------------
hw/usb/dev-audio.c | 5 ++-
hw/usb/dev-bluetooth.c | 6 ++--
hw/usb/dev-hid.c | 27 +++++++--------
hw/usb/dev-hub.c | 9 +++--
hw/usb/dev-mtp.c | 5 ++-
hw/usb/dev-network.c | 9 +++--
hw/usb/dev-serial.c | 22 +++++++-----
hw/usb/dev-smartcard-reader.c | 5 ++-
hw/usb/dev-storage.c | 42 ++++++++++++-----------
hw/usb/dev-uas.c | 17 +++++-----
hw/usb/dev-wacom.c | 5 ++-
hw/usb/host-libusb.c | 33 +++++++++---------
hw/usb/redirect.c | 21 +++++++-----
include/hw/usb.h | 10 ++++--
15 files changed, 150 insertions(+), 145 deletions(-)
--
1.7.12.4
^ permalink raw reply [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 01/19] usb-storage: fix possible memory leak and missing error message
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 02/19] usb-bus: convert USBDeviceClass init to realize arei.gonglei
` (20 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
When scsi_bus_legacy_add_drive() return NULL, meanwhile err will
be not NULL, which will casue memory leak and missing error message.
Cc: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-storage.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index ae4efcb..f731b0a 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -624,6 +624,8 @@ static int usb_msd_initfn_storage(USBDevice *dev)
s->conf.bootindex, dev->serial,
&err);
if (!scsi_dev) {
+ error_report("%s", error_get_pretty(err));
+ error_free(err);
return -1;
}
s->bus.qbus.allow_hotplug = 0;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 02/19] usb-bus: convert USBDeviceClass init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 01/19] usb-storage: fix possible memory leak and missing error message arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 03/19] usb-net: convert " arei.gonglei
` (19 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
Add "realize/unrealize" in USBDeviceClass, which has errp
as a parameter. So all the implementations now use
error_setg instead of error_report for reporting error.
Note: this patch still keep "init" in USBDeviceClass, and
call kclass->init in usb_device_realize(), avoid breaking
git bisect. After realize all usb devices, will be removed.
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
---
hw/usb/bus.c | 81 +++++++++++++++++++++++++++-------------------------
hw/usb/dev-serial.c | 16 +++++++++--
hw/usb/dev-storage.c | 11 +++++--
hw/usb/host-libusb.c | 7 +++--
hw/usb/redirect.c | 6 +++-
include/hw/usb.h | 10 +++++--
6 files changed, 81 insertions(+), 50 deletions(-)
diff --git a/hw/usb/bus.c b/hw/usb/bus.c
index c7c4dad..12881cb 100644
--- a/hw/usb/bus.c
+++ b/hw/usb/bus.c
@@ -9,7 +9,7 @@ static void usb_bus_dev_print(Monitor *mon, DeviceState *qdev, int indent);
static char *usb_get_dev_path(DeviceState *dev);
static char *usb_get_fw_dev_path(DeviceState *qdev);
-static int usb_qdev_exit(DeviceState *qdev);
+static void usb_qdev_unrealize(DeviceState *qdev, Error **errp);
static Property usb_props[] = {
DEFINE_PROP_STRING("port", USBDevice, port_path),
@@ -107,13 +107,15 @@ USBBus *usb_bus_find(int busnr)
return NULL;
}
-static int usb_device_init(USBDevice *dev)
+static void usb_device_realize(USBDevice *dev, Error **errp)
{
USBDeviceClass *klass = USB_DEVICE_GET_CLASS(dev);
- if (klass->init) {
- return klass->init(dev);
+
+ if (klass->realize) {
+ klass->realize(dev, errp);
+ } else if (klass->init) {
+ klass->init(dev);
}
- return 0;
}
USBDevice *usb_device_find_device(USBDevice *dev, uint8_t addr)
@@ -232,36 +234,41 @@ void usb_device_free_streams(USBDevice *dev, USBEndpoint **eps, int nr_eps)
}
}
-static int usb_qdev_init(DeviceState *qdev)
+static void usb_qdev_realize(DeviceState *qdev, Error **errp)
{
USBDevice *dev = USB_DEVICE(qdev);
- int rc;
+ Error *local_err = NULL;
pstrcpy(dev->product_desc, sizeof(dev->product_desc),
usb_device_get_product_desc(dev));
dev->auto_attach = 1;
QLIST_INIT(&dev->strings);
usb_ep_init(dev);
- rc = usb_claim_port(dev);
- if (rc != 0) {
- return rc;
+
+ usb_claim_port(dev, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
}
- rc = usb_device_init(dev);
- if (rc != 0) {
+
+ usb_device_realize(dev, &local_err);
+ if (local_err) {
usb_release_port(dev);
- return rc;
+ error_propagate(errp, local_err);
+ return;
}
+
if (dev->auto_attach) {
- rc = usb_device_attach(dev);
- if (rc != 0) {
- usb_qdev_exit(qdev);
- return rc;
+ usb_device_attach(dev, &local_err);
+ if (local_err) {
+ usb_qdev_unrealize(qdev, NULL);
+ error_propagate(errp, local_err);
+ return;
}
}
- return 0;
}
-static int usb_qdev_exit(DeviceState *qdev)
+static void usb_qdev_unrealize(DeviceState *qdev, Error **errp)
{
USBDevice *dev = USB_DEVICE(qdev);
@@ -272,7 +279,6 @@ static int usb_qdev_exit(DeviceState *qdev)
if (dev->port) {
usb_release_port(dev);
}
- return 0;
}
typedef struct LegacyUSBFactory
@@ -392,7 +398,7 @@ void usb_unregister_port(USBBus *bus, USBPort *port)
bus->nfree--;
}
-int usb_claim_port(USBDevice *dev)
+void usb_claim_port(USBDevice *dev, Error **errp)
{
USBBus *bus = usb_bus_from_device(dev);
USBPort *port;
@@ -406,9 +412,9 @@ int usb_claim_port(USBDevice *dev)
}
}
if (port == NULL) {
- error_report("Error: usb port %s (bus %s) not found (in use?)",
- dev->port_path, bus->qbus.name);
- return -1;
+ error_setg(errp, "Error: usb port %s (bus %s) not found (in use?)",
+ dev->port_path, bus->qbus.name);
+ return;
}
} else {
if (bus->nfree == 1 && strcmp(object_get_typename(OBJECT(dev)), "usb-hub") != 0) {
@@ -416,9 +422,9 @@ int usb_claim_port(USBDevice *dev)
usb_create_simple(bus, "usb-hub");
}
if (bus->nfree == 0) {
- error_report("Error: tried to attach usb device %s to a bus "
- "with no free ports", dev->product_desc);
- return -1;
+ error_setg(errp, "Error: tried to attach usb device %s to a bus "
+ "with no free ports", dev->product_desc);
+ return;
}
port = QTAILQ_FIRST(&bus->free);
}
@@ -432,7 +438,6 @@ int usb_claim_port(USBDevice *dev)
QTAILQ_INSERT_TAIL(&bus->used, port, next);
bus->nused++;
- return 0;
}
void usb_release_port(USBDevice *dev)
@@ -475,7 +480,7 @@ static void usb_mask_to_str(char *dest, size_t size,
}
}
-int usb_device_attach(USBDevice *dev)
+void usb_device_attach(USBDevice *dev, Error **errp)
{
USBBus *bus = usb_bus_from_device(dev);
USBPort *port = dev->port;
@@ -489,18 +494,16 @@ int usb_device_attach(USBDevice *dev)
devspeed, portspeed);
if (!(port->speedmask & dev->speedmask)) {
- error_report("Warning: speed mismatch trying to attach"
- " usb device \"%s\" (%s speed)"
- " to bus \"%s\", port \"%s\" (%s speed)",
- dev->product_desc, devspeed,
- bus->qbus.name, port->path, portspeed);
- return -1;
+ error_setg(errp, "Warning: speed mismatch trying to attach"
+ " usb device \"%s\" (%s speed)"
+ " to bus \"%s\", port \"%s\" (%s speed)",
+ dev->product_desc, devspeed,
+ bus->qbus.name, port->path, portspeed);
+ return;
}
dev->attached++;
usb_attach(port);
-
- return 0;
}
int usb_device_detach(USBDevice *dev)
@@ -688,9 +691,9 @@ static void usb_device_class_init(ObjectClass *klass, void *data)
{
DeviceClass *k = DEVICE_CLASS(klass);
k->bus_type = TYPE_USB_BUS;
- k->init = usb_qdev_init;
k->unplug = qdev_simple_unplug_cb;
- k->exit = usb_qdev_exit;
+ k->realize = usb_qdev_realize;
+ k->unrealize = usb_qdev_unrealize;
k->props = usb_props;
}
diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
index d360614..eb1b115 100644
--- a/hw/usb/dev-serial.c
+++ b/hw/usb/dev-serial.c
@@ -9,7 +9,7 @@
*/
#include "qemu-common.h"
-#include "qemu/error-report.h"
+#include "monitor/monitor.h"
#include "hw/usb.h"
#include "hw/usb/desc.h"
#include "sysemu/char.h"
@@ -451,6 +451,7 @@ static void usb_serial_read(void *opaque, const uint8_t *buf, int size)
static void usb_serial_event(void *opaque, int event)
{
USBSerialState *s = opaque;
+ Error *local_err = NULL;
switch (event) {
case CHR_EVENT_BREAK:
@@ -460,7 +461,11 @@ static void usb_serial_event(void *opaque, int event)
break;
case CHR_EVENT_OPENED:
if (!s->dev.attached) {
- usb_device_attach(&s->dev);
+ usb_device_attach(&s->dev, &local_err);
+ if (local_err) {
+ qerror_report_err(local_err);
+ error_free(local_err);
+ }
}
break;
case CHR_EVENT_CLOSED:
@@ -474,6 +479,7 @@ static void usb_serial_event(void *opaque, int event)
static int usb_serial_initfn(USBDevice *dev)
{
USBSerialState *s = DO_UPCAST(USBSerialState, dev, dev);
+ Error *local_err = NULL;
usb_desc_create_serial(dev);
usb_desc_init(dev);
@@ -489,7 +495,11 @@ static int usb_serial_initfn(USBDevice *dev)
usb_serial_handle_reset(dev);
if (s->cs->be_open && !dev->attached) {
- usb_device_attach(dev);
+ usb_device_attach(dev, &local_err);
+ if (local_err) {
+ qerror_report_err(local_err);
+ error_free(local_err);
+ }
}
return 0;
}
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index f731b0a..06f63d1 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -549,12 +549,17 @@ static void usb_msd_handle_data(USBDevice *dev, USBPacket *p)
static void usb_msd_password_cb(void *opaque, int err)
{
MSDState *s = opaque;
+ Error *local_err = NULL;
- if (!err)
- err = usb_device_attach(&s->dev);
+ if (!err) {
+ usb_device_attach(&s->dev, &local_err);
+ }
- if (err)
+ if (local_err) {
+ qerror_report_err(local_err);
+ error_free(local_err);
qdev_unplug(&s->dev.qdev, NULL);
+ }
}
static void *usb_msd_load_request(QEMUFile *f, SCSIRequest *req)
diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c
index c189147..9f92705 100644
--- a/hw/usb/host-libusb.c
+++ b/hw/usb/host-libusb.c
@@ -834,6 +834,7 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev)
int bus_num = libusb_get_bus_number(dev);
int addr = libusb_get_device_address(dev);
int rc;
+ Error *local_err = NULL;
trace_usb_host_open_started(bus_num, addr);
@@ -869,8 +870,10 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev)
"host:%d.%d", bus_num, addr);
}
- rc = usb_device_attach(udev);
- if (rc) {
+ usb_device_attach(udev, &local_err);
+ if (local_err) {
+ error_report("%s", error_get_pretty(local_err));
+ error_free(local_err);
goto fail;
}
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index 44522d9..95158b3 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -1256,6 +1256,7 @@ static void usbredir_device_reject_bh(void *opaque)
static void usbredir_do_attach(void *opaque)
{
USBRedirDevice *dev = opaque;
+ Error *local_err = NULL;
/* In order to work properly with XHCI controllers we need these caps */
if ((dev->dev.port->speedmask & USB_SPEED_MASK_SUPER) && !(
@@ -1270,7 +1271,10 @@ static void usbredir_do_attach(void *opaque)
return;
}
- if (usb_device_attach(&dev->dev) != 0) {
+ usb_device_attach(&dev->dev, &local_err);
+ if (local_err) {
+ error_report("%s", error_get_pretty(local_err));
+ error_free(local_err);
WARNING("rejecting device due to speed mismatch\n");
usbredir_reject_device(dev);
}
diff --git a/include/hw/usb.h b/include/hw/usb.h
index 6b32a3b..612f09f 100644
--- a/include/hw/usb.h
+++ b/include/hw/usb.h
@@ -267,11 +267,17 @@ struct USBDevice {
#define USB_DEVICE_GET_CLASS(obj) \
OBJECT_GET_CLASS(USBDeviceClass, (obj), TYPE_USB_DEVICE)
+typedef void (*USBDeviceRealize)(USBDevice *dev, Error **errp);
+typedef void (*USBDeviceUnrealize)(USBDevice *dev, Error **errp);
+
typedef struct USBDeviceClass {
DeviceClass parent_class;
int (*init)(USBDevice *dev);
+ USBDeviceRealize realize;
+ USBDeviceUnrealize unrealize;
+
/*
* Walk (enabled) downstream ports, check for a matching device.
* Only hubs implement this.
@@ -544,9 +550,9 @@ int usb_register_companion(const char *masterbus, USBPort *ports[],
void *opaque, USBPortOps *ops, int speedmask);
void usb_port_location(USBPort *downstream, USBPort *upstream, int portnr);
void usb_unregister_port(USBBus *bus, USBPort *port);
-int usb_claim_port(USBDevice *dev);
+void usb_claim_port(USBDevice *dev, Error **errp);
void usb_release_port(USBDevice *dev);
-int usb_device_attach(USBDevice *dev);
+void usb_device_attach(USBDevice *dev, Error **errp);
int usb_device_detach(USBDevice *dev);
int usb_device_delete_addr(int busnr, int addr);
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 03/19] usb-net: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 01/19] usb-storage: fix possible memory leak and missing error message arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 02/19] usb-bus: convert USBDeviceClass init to realize arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 04/19] libusb: " arei.gonglei
` (18 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
meanwhile, qerror_report_err() is a transitional interface to
help with converting existing HMP commands to QMP. It should
not be used elsewhere.
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-network.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c
index 518d536..686bd69 100644
--- a/hw/usb/dev-network.c
+++ b/hw/usb/dev-network.c
@@ -27,7 +27,7 @@
#include "hw/usb.h"
#include "hw/usb/desc.h"
#include "net/net.h"
-#include "qapi/qmp/qerror.h"
+#include "qemu/error-report.h"
#include "qemu/queue.h"
#include "qemu/config-file.h"
#include "sysemu/sysemu.h"
@@ -1341,7 +1341,7 @@ static NetClientInfo net_usbnet_info = {
.cleanup = usbnet_cleanup,
};
-static int usb_net_initfn(USBDevice *dev)
+static void usb_net_realize(USBDevice *dev, Error **errrp)
{
USBNetState *s = DO_UPCAST(USBNetState, dev, dev);
@@ -1373,7 +1373,6 @@ static int usb_net_initfn(USBDevice *dev)
usb_desc_set_string(dev, STRING_ETHADDR, s->usbstring_mac);
add_boot_device_path(s->conf.bootindex, &dev->qdev, "/ethernet@0");
- return 0;
}
static USBDevice *usb_net_init(USBBus *bus, const char *cmdline)
@@ -1392,7 +1391,7 @@ static USBDevice *usb_net_init(USBBus *bus, const char *cmdline)
idx = net_client_init(opts, 0, &local_err);
if (local_err) {
- qerror_report_err(local_err);
+ error_report("%s", error_get_pretty(local_err));
error_free(local_err);
return NULL;
}
@@ -1421,7 +1420,7 @@ static void usb_net_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = usb_net_initfn;
+ uc->realize = usb_net_realize;
uc->product_desc = "QEMU USB Network Interface";
uc->usb_desc = &desc_net;
uc->handle_reset = usb_net_handle_reset;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 04/19] libusb: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (2 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 03/19] usb-net: convert " arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 05/19] libusb: using error_report instead of fprintf arei.gonglei
` (17 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
In this way, all the implementations now use
error_setg instead of error_report for reporting error.
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/host-libusb.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c
index 9f92705..863be64 100644
--- a/hw/usb/host-libusb.c
+++ b/hw/usb/host-libusb.c
@@ -951,21 +951,21 @@ static void usb_host_exit_notifier(struct Notifier *n, void *data)
}
}
-static int usb_host_initfn(USBDevice *udev)
+static void usb_host_realize(USBDevice *udev, Error **errp)
{
USBHostDevice *s = USB_HOST_DEVICE(udev);
if (s->match.vendor_id > 0xffff) {
- error_report("vendorid out of range");
- return -1;
+ error_setg(errp, "vendorid out of range");
+ return;
}
if (s->match.product_id > 0xffff) {
- error_report("productid out of range");
- return -1;
+ error_setg(errp, "productid out of range");
+ return;
}
if (s->match.addr > 127) {
- error_report("hostaddr out of range");
- return -1;
+ error_setg(errp, "hostaddr out of range");
+ return;
}
loglevel = s->loglevel;
@@ -980,7 +980,6 @@ static int usb_host_initfn(USBDevice *udev)
QTAILQ_INSERT_TAIL(&hostdevs, s, next);
add_boot_device_path(s->bootindex, &udev->qdev, NULL);
usb_host_auto_check(NULL);
- return 0;
}
static void usb_host_handle_destroy(USBDevice *udev)
@@ -1480,7 +1479,7 @@ static void usb_host_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = usb_host_initfn;
+ uc->realize = usb_host_realize;
uc->product_desc = "USB Host Device";
uc->cancel_packet = usb_host_cancel_packet;
uc->handle_data = usb_host_handle_data;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 05/19] libusb: using error_report instead of fprintf
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (3 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 04/19] libusb: " arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 06/19] usb-hub: convert init to realize arei.gonglei
` (16 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/host-libusb.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c
index 863be64..0650910 100644
--- a/hw/usb/host-libusb.c
+++ b/hw/usb/host-libusb.c
@@ -275,7 +275,7 @@ static void usb_host_libusb_error(const char *func, int rc)
} else {
errname = "?";
}
- fprintf(stderr, "%s: %d [%s]\n", func, rc, errname);
+ error_report("%s: %d [%s]", func, rc, errname);
}
/* ------------------------------------------------------------------------ */
@@ -1376,14 +1376,13 @@ static int usb_host_alloc_streams(USBDevice *udev, USBEndpoint **eps,
if (rc < 0) {
usb_host_libusb_error("libusb_alloc_streams", rc);
} else if (rc != streams) {
- fprintf(stderr,
- "libusb_alloc_streams: got less streams then requested %d < %d\n",
- rc, streams);
+ error_report("libusb_alloc_streams: got less streams "
+ "then requested %d < %d", rc, streams);
}
return (rc == streams) ? 0 : -1;
#else
- fprintf(stderr, "libusb_alloc_streams: error not implemented\n");
+ error_report("libusb_alloc_streams: error not implemented");
return -1;
#endif
}
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 06/19] usb-hub: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (4 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 05/19] libusb: using error_report instead of fprintf arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 07/19] dev-storage: " arei.gonglei
` (15 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
In this way, all the implementations now use
error_setg instead of error_report for reporting error.
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-hub.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/hw/usb/dev-hub.c b/hw/usb/dev-hub.c
index 7492174..8e3f7a8 100644
--- a/hw/usb/dev-hub.c
+++ b/hw/usb/dev-hub.c
@@ -511,15 +511,15 @@ static USBPortOps usb_hub_port_ops = {
.complete = usb_hub_complete,
};
-static int usb_hub_initfn(USBDevice *dev)
+static void usb_hub_realize(USBDevice *dev, Error **errp)
{
USBHubState *s = DO_UPCAST(USBHubState, dev, dev);
USBHubPort *port;
int i;
if (dev->port->hubcount == 5) {
- error_report("usb hub chain too deep");
- return -1;
+ error_setg(errp, "usb hub chain too deep");
+ return;
}
usb_desc_create_serial(dev);
@@ -533,7 +533,6 @@ static int usb_hub_initfn(USBDevice *dev)
usb_port_location(&port->port, dev->port, i+1);
}
usb_hub_handle_reset(dev);
- return 0;
}
static const VMStateDescription vmstate_usb_hub_port = {
@@ -564,7 +563,7 @@ static void usb_hub_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = usb_hub_initfn;
+ uc->realize = usb_hub_realize;
uc->product_desc = "QEMU USB Hub";
uc->usb_desc = &desc_hub;
uc->find_device = usb_hub_find_device;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 07/19] dev-storage: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (5 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 06/19] usb-hub: convert init to realize arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 08/19] dev-storage: usring error_report instead of fprintf/printf arei.gonglei
` (14 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
In this way, all the implementations now use
error_setg instead of error_report for reporting error.
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-storage.c | 21 ++++++++-------------
1 file changed, 8 insertions(+), 13 deletions(-)
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index 06f63d1..182dd5a 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -595,7 +595,7 @@ static const struct SCSIBusInfo usb_msd_scsi_info_bot = {
.load_request = usb_msd_load_request,
};
-static int usb_msd_initfn_storage(USBDevice *dev)
+static void usb_msd_realize_storage(USBDevice *dev, Error **errp)
{
MSDState *s = DO_UPCAST(MSDState, dev, dev);
BlockDriverState *bs = s->conf.bs;
@@ -603,8 +603,8 @@ static int usb_msd_initfn_storage(USBDevice *dev)
Error *err = NULL;
if (!bs) {
- error_report("drive property not set");
- return -1;
+ error_setg(errp, "drive property not set");
+ return;
}
blkconf_serial(&s->conf, &dev->serial);
@@ -629,9 +629,8 @@ static int usb_msd_initfn_storage(USBDevice *dev)
s->conf.bootindex, dev->serial,
&err);
if (!scsi_dev) {
- error_report("%s", error_get_pretty(err));
- error_free(err);
- return -1;
+ error_propagate(errp, err);
+ return;
}
s->bus.qbus.allow_hotplug = 0;
usb_msd_handle_reset(dev);
@@ -644,11 +643,9 @@ static int usb_msd_initfn_storage(USBDevice *dev)
autostart = 0;
}
}
-
- return 0;
}
-static int usb_msd_initfn_bot(USBDevice *dev)
+static void usb_msd_realize_bot(USBDevice *dev, Error **errp)
{
MSDState *s = DO_UPCAST(MSDState, dev, dev);
@@ -658,8 +655,6 @@ static int usb_msd_initfn_bot(USBDevice *dev)
&usb_msd_scsi_info_bot, NULL);
s->bus.qbus.allow_hotplug = 0;
usb_msd_handle_reset(dev);
-
- return 0;
}
static USBDevice *usb_msd_init(USBBus *bus, const char *filename)
@@ -765,7 +760,7 @@ static void usb_msd_class_initfn_storage(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = usb_msd_initfn_storage;
+ uc->realize = usb_msd_realize_storage;
dc->props = msd_properties;
usb_msd_class_initfn_common(klass);
}
@@ -774,7 +769,7 @@ static void usb_msd_class_initfn_bot(ObjectClass *klass, void *data)
{
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = usb_msd_initfn_bot;
+ uc->realize = usb_msd_realize_bot;
usb_msd_class_initfn_common(klass);
}
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 08/19] dev-storage: usring error_report instead of fprintf/printf
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (6 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 07/19] dev-storage: " arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 09/19] dev-uas: convert init to realize arei.gonglei
` (13 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-storage.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index 182dd5a..a5e9d4a 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -409,19 +409,19 @@ static void usb_msd_handle_data(USBDevice *dev, USBPacket *p)
switch (s->mode) {
case USB_MSDM_CBW:
if (p->iov.size != 31) {
- fprintf(stderr, "usb-msd: Bad CBW size");
+ error_report("usb-msd: Bad CBW size");
goto fail;
}
usb_packet_copy(p, &cbw, 31);
if (le32_to_cpu(cbw.sig) != 0x43425355) {
- fprintf(stderr, "usb-msd: Bad signature %08x\n",
- le32_to_cpu(cbw.sig));
+ error_report("usb-msd: Bad signature %08x",
+ le32_to_cpu(cbw.sig));
goto fail;
}
DPRINTF("Command on LUN %d\n", cbw.lun);
scsi_dev = scsi_device_find(&s->bus, 0, 0, cbw.lun);
if (scsi_dev == NULL) {
- fprintf(stderr, "usb-msd: Bad LUN %d\n", cbw.lun);
+ error_report("usb-msd: Bad LUN %d", cbw.lun);
goto fail;
}
tag = le32_to_cpu(cbw.tag);
@@ -680,13 +680,13 @@ static USBDevice *usb_msd_init(USBBus *bus, const char *filename)
pstrcpy(fmt, len, p2);
qemu_opt_set(opts, "format", fmt);
} else if (*filename != ':') {
- printf("unrecognized USB mass-storage option %s\n", filename);
+ error_report("unrecognized USB mass-storage option %s", filename);
return NULL;
}
filename = p1;
}
if (!*filename) {
- printf("block device specification needed\n");
+ error_report("block device specification needed");
return NULL;
}
qemu_opt_set(opts, "file", filename);
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 09/19] dev-uas: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (7 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 08/19] dev-storage: usring error_report instead of fprintf/printf arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 10/19] dev-uas: using error_report instead of fprintf arei.gonglei
` (12 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-uas.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c
index 9832385..884c003 100644
--- a/hw/usb/dev-uas.c
+++ b/hw/usb/dev-uas.c
@@ -892,7 +892,7 @@ static void usb_uas_handle_destroy(USBDevice *dev)
qemu_bh_delete(uas->status_bh);
}
-static int usb_uas_init(USBDevice *dev)
+static void usb_uas_realize(USBDevice *dev, Error **errp)
{
UASDevice *uas = DO_UPCAST(UASDevice, dev, dev);
@@ -905,8 +905,6 @@ static int usb_uas_init(USBDevice *dev)
scsi_bus_new(&uas->bus, sizeof(uas->bus), DEVICE(dev),
&usb_uas_scsi_info, NULL);
-
- return 0;
}
static const VMStateDescription vmstate_usb_uas = {
@@ -928,7 +926,7 @@ static void usb_uas_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = usb_uas_init;
+ uc->realize = usb_uas_realize;
uc->product_desc = desc_strings[STR_PRODUCT];
uc->usb_desc = &desc;
uc->cancel_packet = usb_uas_cancel_io;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 10/19] dev-uas: using error_report instead of fprintf
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (8 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 09/19] dev-uas: convert init to realize arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 11/19] dev-bluetooth: convert init to realize arei.gonglei
` (11 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-uas.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c
index 884c003..1508064 100644
--- a/hw/usb/dev-uas.c
+++ b/hw/usb/dev-uas.c
@@ -13,6 +13,7 @@
#include "qemu/option.h"
#include "qemu/config-file.h"
#include "trace.h"
+#include "qemu/error-report.h"
#include "hw/usb.h"
#include "hw/usb/desc.h"
@@ -648,7 +649,7 @@ static void usb_uas_handle_control(USBDevice *dev, USBPacket *p,
if (ret >= 0) {
return;
}
- fprintf(stderr, "%s: unhandled control request\n", __func__);
+ error_report("%s: unhandled control request", __func__);
p->status = USB_RET_STALL;
}
@@ -814,8 +815,8 @@ static void usb_uas_handle_data(USBDevice *dev, USBPacket *p)
usb_uas_task(uas, &iu);
break;
default:
- fprintf(stderr, "%s: unknown command iu: id 0x%x\n",
- __func__, iu.hdr.id);
+ error_report("%s: unknown command iu: id 0x%x",
+ __func__, iu.hdr.id);
p->status = USB_RET_STALL;
break;
}
@@ -861,7 +862,7 @@ static void usb_uas_handle_data(USBDevice *dev, USBPacket *p)
p->status = USB_RET_ASYNC;
break;
} else {
- fprintf(stderr, "%s: no inflight request\n", __func__);
+ error_report("%s: no inflight request", __func__);
p->status = USB_RET_STALL;
break;
}
@@ -879,7 +880,7 @@ static void usb_uas_handle_data(USBDevice *dev, USBPacket *p)
usb_uas_start_next_transfer(uas);
break;
default:
- fprintf(stderr, "%s: invalid endpoint %d\n", __func__, p->ep->nr);
+ error_report("%s: invalid endpoint %d", __func__, p->ep->nr);
p->status = USB_RET_STALL;
break;
}
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 11/19] dev-bluetooth: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (9 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 10/19] dev-uas: using error_report instead of fprintf arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 12/19] dev-serial: " arei.gonglei
` (10 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-bluetooth.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/hw/usb/dev-bluetooth.c b/hw/usb/dev-bluetooth.c
index a76e581..7db9921 100644
--- a/hw/usb/dev-bluetooth.c
+++ b/hw/usb/dev-bluetooth.c
@@ -501,7 +501,7 @@ static void usb_bt_handle_destroy(USBDevice *dev)
s->hci->acl_recv = NULL;
}
-static int usb_bt_initfn(USBDevice *dev)
+static void usb_bt_realize(USBDevice *dev, Error **errp)
{
struct USBBtState *s = DO_UPCAST(struct USBBtState, dev, dev);
@@ -516,8 +516,6 @@ static int usb_bt_initfn(USBDevice *dev)
s->hci->acl_recv = usb_bt_out_hci_packet_acl;
usb_bt_handle_reset(&s->dev);
s->intr = usb_ep_get(dev, USB_TOKEN_IN, USB_EVT_EP);
-
- return 0;
}
static USBDevice *usb_bt_init(USBBus *bus, const char *cmdline)
@@ -560,7 +558,7 @@ static void usb_bt_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = usb_bt_initfn;
+ uc->realize = usb_bt_realize;
uc->product_desc = "QEMU BT dongle";
uc->usb_desc = &desc_bluetooth;
uc->handle_reset = usb_bt_handle_reset;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 12/19] dev-serial: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (10 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 11/19] dev-bluetooth: convert init to realize arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:58 ` Paolo Bonzini
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 13/19] usb-ccid: " arei.gonglei
` (9 subsequent siblings)
21 siblings, 1 reply; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
In this way, all the implementations now use
error_setg instead of error_report for reporting error.
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-serial.c | 18 ++++++------------
1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
index eb1b115..d97339f 100644
--- a/hw/usb/dev-serial.c
+++ b/hw/usb/dev-serial.c
@@ -476,18 +476,17 @@ static void usb_serial_event(void *opaque, int event)
}
}
-static int usb_serial_initfn(USBDevice *dev)
+static void usb_serial_realize(USBDevice *dev, Error **errp)
{
USBSerialState *s = DO_UPCAST(USBSerialState, dev, dev);
- Error *local_err = NULL;
usb_desc_create_serial(dev);
usb_desc_init(dev);
dev->auto_attach = 0;
if (!s->cs) {
- error_report("Property chardev is required");
- return -1;
+ error_setg(errp, "Property chardev is required");
+ return;
}
qemu_chr_add_handlers(s->cs, usb_serial_can_read, usb_serial_read,
@@ -495,13 +494,8 @@ static int usb_serial_initfn(USBDevice *dev)
usb_serial_handle_reset(dev);
if (s->cs->be_open && !dev->attached) {
- usb_device_attach(dev, &local_err);
- if (local_err) {
- qerror_report_err(local_err);
- error_free(local_err);
- }
+ usb_device_attach(dev, errp);
}
- return 0;
}
static USBDevice *usb_serial_init(USBBus *bus, const char *filename)
@@ -592,7 +586,7 @@ static void usb_serial_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = usb_serial_initfn;
+ uc->realize = usb_serial_realize;
uc->product_desc = "QEMU USB Serial";
uc->usb_desc = &desc_serial;
uc->handle_reset = usb_serial_handle_reset;
@@ -620,7 +614,7 @@ static void usb_braille_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = usb_serial_initfn;
+ uc->realize = usb_serial_realize;
uc->product_desc = "QEMU USB Braille";
uc->usb_desc = &desc_braille;
uc->handle_reset = usb_serial_handle_reset;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 13/19] usb-ccid: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (11 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 12/19] dev-serial: " arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 14/19] dev-hid: " arei.gonglei
` (8 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-smartcard-reader.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c
index 470e69f..442f487 100644
--- a/hw/usb/dev-smartcard-reader.c
+++ b/hw/usb/dev-smartcard-reader.c
@@ -1304,7 +1304,7 @@ static int ccid_card_init(DeviceState *qdev)
return ret;
}
-static int ccid_initfn(USBDevice *dev)
+static void ccid_realize(USBDevice *dev, Error **errp)
{
USBCCIDState *s = DO_UPCAST(USBCCIDState, dev, dev);
@@ -1332,7 +1332,6 @@ static int ccid_initfn(USBDevice *dev)
ccid_reset_parameters(s);
ccid_reset(s);
s->debug = parse_debug_env("QEMU_CCID_DEBUG", D_VERBOSE, s->debug);
- return 0;
}
static int ccid_post_load(void *opaque, int version_id)
@@ -1441,7 +1440,7 @@ static void ccid_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = ccid_initfn;
+ uc->realize = ccid_realize;
uc->product_desc = "QEMU USB CCID";
uc->usb_desc = &desc_ccid;
uc->handle_reset = ccid_handle_reset;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 14/19] dev-hid: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (12 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 13/19] usb-ccid: " arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 15/19] dev-wacom: " arei.gonglei
` (7 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
In this way, all the implementations now use
error_setg instead of error_report for reporting error.
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
---
hw/usb/dev-hid.c | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c
index 67a57f1..05dc03b 100644
--- a/hw/usb/dev-hid.c
+++ b/hw/usb/dev-hid.c
@@ -566,7 +566,7 @@ static void usb_hid_handle_destroy(USBDevice *dev)
hid_free(&us->hid);
}
-static int usb_hid_initfn(USBDevice *dev, int kind)
+static void usb_hid_initfn(USBDevice *dev, int kind)
{
USBHIDState *us = DO_UPCAST(USBHIDState, dev, dev);
@@ -579,10 +579,9 @@ static int usb_hid_initfn(USBDevice *dev, int kind)
if (us->display && us->hid.s) {
qemu_input_handler_bind(us->hid.s, us->display, us->head, NULL);
}
- return 0;
}
-static int usb_tablet_initfn(USBDevice *dev)
+static void usb_tablet_realize(USBDevice *dev, Error **errp)
{
USBHIDState *us = DO_UPCAST(USBHIDState, dev, dev);
@@ -594,22 +593,22 @@ static int usb_tablet_initfn(USBDevice *dev)
dev->usb_desc = &desc_tablet2;
break;
default:
- error_report("Invalid usb version %d for usb-tabler (must be 1 or 2)",
- us->usb_version);
- return -1;
+ error_setg(errp, "Invalid usb version %d for usb-tablet "
+ "(must be 1 or 2)", us->usb_version);
+ return;
}
- return usb_hid_initfn(dev, HID_TABLET);
+ usb_hid_initfn(dev, HID_TABLET);
}
-static int usb_mouse_initfn(USBDevice *dev)
+static void usb_mouse_realize(USBDevice *dev, Error **errp)
{
- return usb_hid_initfn(dev, HID_MOUSE);
+ usb_hid_initfn(dev, HID_MOUSE);
}
-static int usb_keyboard_initfn(USBDevice *dev)
+static void usb_keyboard_realize(USBDevice *dev, Error **errp)
{
- return usb_hid_initfn(dev, HID_KEYBOARD);
+ usb_hid_initfn(dev, HID_KEYBOARD);
}
static int usb_ptr_post_load(void *opaque, int version_id)
@@ -669,7 +668,7 @@ static void usb_tablet_class_initfn(ObjectClass *klass, void *data)
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
usb_hid_class_initfn(klass, data);
- uc->init = usb_tablet_initfn;
+ uc->realize = usb_tablet_realize;
uc->product_desc = "QEMU USB Tablet";
dc->vmsd = &vmstate_usb_ptr;
dc->props = usb_tablet_properties;
@@ -689,7 +688,7 @@ static void usb_mouse_class_initfn(ObjectClass *klass, void *data)
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
usb_hid_class_initfn(klass, data);
- uc->init = usb_mouse_initfn;
+ uc->realize = usb_mouse_realize;
uc->product_desc = "QEMU USB Mouse";
uc->usb_desc = &desc_mouse;
dc->vmsd = &vmstate_usb_ptr;
@@ -714,7 +713,7 @@ static void usb_keyboard_class_initfn(ObjectClass *klass, void *data)
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
usb_hid_class_initfn(klass, data);
- uc->init = usb_keyboard_initfn;
+ uc->realize = usb_keyboard_realize;
uc->product_desc = "QEMU USB Keyboard";
uc->usb_desc = &desc_keyboard;
dc->vmsd = &vmstate_usb_kbd;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 15/19] dev-wacom: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (13 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 14/19] dev-hid: " arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-19 6:01 ` Gerd Hoffmann
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 16/19] usb-audio: " arei.gonglei
` (6 subsequent siblings)
21 siblings, 1 reply; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-wacom.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c
index 1b73fd0..217d48e 100644
--- a/hw/usb/dev-wacom.c
+++ b/hw/usb/dev-wacom.c
@@ -335,14 +335,13 @@ static void usb_wacom_handle_destroy(USBDevice *dev)
}
}
-static int usb_wacom_initfn(USBDevice *dev)
+static void usb_wacom_realize(USBDevice *dev, Error **errp)
{
USBWacomState *s = DO_UPCAST(USBWacomState, dev, dev);
usb_desc_create_serial(dev);
usb_desc_init(dev);
s->intr = usb_ep_get(dev, USB_TOKEN_IN, 1);
s->changed = 1;
- return 0;
}
static const VMStateDescription vmstate_usb_wacom = {
@@ -357,7 +356,7 @@ static void usb_wacom_class_init(ObjectClass *klass, void *data)
uc->product_desc = "QEMU PenPartner Tablet";
uc->usb_desc = &desc_wacom;
- uc->init = usb_wacom_initfn;
+ uc->realize = usb_wacom_realize;
uc->handle_reset = usb_wacom_handle_reset;
uc->handle_control = usb_wacom_handle_control;
uc->handle_data = usb_wacom_handle_data;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 16/19] usb-audio: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (14 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 15/19] dev-wacom: " arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 17/19] usb-redir: " arei.gonglei
` (5 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-audio.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c
index 7b9957b..83ebe83 100644
--- a/hw/usb/dev-audio.c
+++ b/hw/usb/dev-audio.c
@@ -628,7 +628,7 @@ static void usb_audio_handle_destroy(USBDevice *dev)
streambuf_fini(&s->out.buf);
}
-static int usb_audio_initfn(USBDevice *dev)
+static void usb_audio_realize(USBDevice *dev, Error **errp)
{
USBAudioState *s = DO_UPCAST(USBAudioState, dev, dev);
@@ -651,7 +651,6 @@ static int usb_audio_initfn(USBDevice *dev)
s, output_callback, &s->out.as);
AUD_set_volume_out(s->out.voice, s->out.mute, s->out.vol[0], s->out.vol[1]);
AUD_set_active_out(s->out.voice, 0);
- return 0;
}
static const VMStateDescription vmstate_usb_audio = {
@@ -676,7 +675,7 @@ static void usb_audio_class_init(ObjectClass *klass, void *data)
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
k->product_desc = "QEMU USB Audio Interface";
k->usb_desc = &desc_audio;
- k->init = usb_audio_initfn;
+ k->realize = usb_audio_realize;
k->handle_reset = usb_audio_handle_reset;
k->handle_control = usb_audio_handle_control;
k->handle_data = usb_audio_handle_data;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 17/19] usb-redir: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (15 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 16/19] usb-audio: " arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 18/19] usb-mtp: " arei.gonglei
` (4 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
In this way, all the implementations now use
error_setg instead of qerror_report for reporting error.
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/redirect.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index 95158b3..e2c9896 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -1361,14 +1361,14 @@ static void usbredir_init_endpoints(USBRedirDevice *dev)
}
}
-static int usbredir_initfn(USBDevice *udev)
+static void usbredir_realize(USBDevice *udev, Error **errp)
{
USBRedirDevice *dev = DO_UPCAST(USBRedirDevice, dev, udev);
int i;
if (dev->cs == NULL) {
- qerror_report(QERR_MISSING_PARAMETER, "chardev");
- return -1;
+ error_set(errp, QERR_MISSING_PARAMETER, "chardev");
+ return;
}
if (dev->filter_str) {
@@ -1376,9 +1376,9 @@ static int usbredir_initfn(USBDevice *udev)
&dev->filter_rules,
&dev->filter_rules_count);
if (i) {
- qerror_report(QERR_INVALID_PARAMETER_VALUE, "filter",
- "a usb device filter string");
- return -1;
+ error_set(errp, QERR_INVALID_PARAMETER_VALUE, "filter",
+ "a usb device filter string");
+ return;
}
}
@@ -1402,7 +1402,6 @@ static int usbredir_initfn(USBDevice *udev)
qemu_add_vm_change_state_handler(usbredir_vm_state_change, dev);
add_boot_device_path(dev->bootindex, &udev->qdev, NULL);
- return 0;
}
static void usbredir_cleanup_device_queues(USBRedirDevice *dev)
@@ -2481,7 +2480,7 @@ static void usbredir_class_initfn(ObjectClass *klass, void *data)
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
DeviceClass *dc = DEVICE_CLASS(klass);
- uc->init = usbredir_initfn;
+ uc->realize = usbredir_realize;
uc->product_desc = "USB Redirection Device";
uc->handle_destroy = usbredir_handle_destroy;
uc->cancel_packet = usbredir_cancel_packet;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 18/19] usb-mtp: convert init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (16 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 17/19] usb-redir: " arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 19/19] usb-bus: remove "init" from USBDeviceClass struct arei.gonglei
` (3 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/dev-mtp.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c
index 0820046..108ece8 100644
--- a/hw/usb/dev-mtp.c
+++ b/hw/usb/dev-mtp.c
@@ -1060,7 +1060,7 @@ static void usb_mtp_handle_data(USBDevice *dev, USBPacket *p)
}
}
-static int usb_mtp_initfn(USBDevice *dev)
+static void usb_mtp_realize(USBDevice *dev, Error **errp)
{
MTPState *s = DO_UPCAST(MTPState, dev, dev);
@@ -1075,7 +1075,6 @@ static int usb_mtp_initfn(USBDevice *dev)
s->desc = g_strdup("none");
}
}
- return 0;
}
static const VMStateDescription vmstate_usb_mtp = {
@@ -1100,7 +1099,7 @@ static void usb_mtp_class_initfn(ObjectClass *klass, void *data)
DeviceClass *dc = DEVICE_CLASS(klass);
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
- uc->init = usb_mtp_initfn;
+ uc->realize = usb_mtp_realize;
uc->product_desc = "QEMU USB MTP";
uc->usb_desc = &desc;
uc->cancel_packet = usb_mtp_cancel_packet;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [Qemu-devel] [PATCH v2 19/19] usb-bus: remove "init" from USBDeviceClass struct
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (17 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 18/19] usb-mtp: " arei.gonglei
@ 2014-09-18 12:47 ` arei.gonglei
2014-09-18 12:58 ` [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize Paolo Bonzini
` (2 subsequent siblings)
21 siblings, 0 replies; 35+ messages in thread
From: arei.gonglei @ 2014-09-18 12:47 UTC (permalink / raw)
To: qemu-devel
Cc: weidong.huang, luonengjun, peter.huangpeng, armbru, Gonglei,
kraxel, pbonzini
From: Gonglei <arei.gonglei@huawei.com>
All usb-bus devices are realized by realize(),
remove init callback function from USBDeviceClass struct.
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/usb/bus.c | 2 --
include/hw/usb.h | 2 --
2 files changed, 4 deletions(-)
diff --git a/hw/usb/bus.c b/hw/usb/bus.c
index 12881cb..b375293 100644
--- a/hw/usb/bus.c
+++ b/hw/usb/bus.c
@@ -113,8 +113,6 @@ static void usb_device_realize(USBDevice *dev, Error **errp)
if (klass->realize) {
klass->realize(dev, errp);
- } else if (klass->init) {
- klass->init(dev);
}
}
diff --git a/include/hw/usb.h b/include/hw/usb.h
index 612f09f..8ffbba2 100644
--- a/include/hw/usb.h
+++ b/include/hw/usb.h
@@ -273,8 +273,6 @@ typedef void (*USBDeviceUnrealize)(USBDevice *dev, Error **errp);
typedef struct USBDeviceClass {
DeviceClass parent_class;
- int (*init)(USBDevice *dev);
-
USBDeviceRealize realize;
USBDeviceUnrealize unrealize;
--
1.7.12.4
^ permalink raw reply related [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 12/19] dev-serial: convert init to realize
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 12/19] dev-serial: " arei.gonglei
@ 2014-09-18 12:58 ` Paolo Bonzini
2014-09-18 13:26 ` Gonglei (Arei)
0 siblings, 1 reply; 35+ messages in thread
From: Paolo Bonzini @ 2014-09-18 12:58 UTC (permalink / raw)
To: arei.gonglei, qemu-devel
Cc: luonengjun, peter.huangpeng, weidong.huang, kraxel, armbru
Il 18/09/2014 14:47, arei.gonglei@huawei.com ha scritto:
> if (s->cs->be_open && !dev->attached) {
> - usb_device_attach(dev, &local_err);
> - if (local_err) {
> - qerror_report_err(local_err);
> - error_free(local_err);
> - }
> + usb_device_attach(dev, errp);
> }
> - return 0;
Subtle change: realize now fails if the attach fails, i.e. if the speed
is mismatched. This is a bugfix, but it doesn't happen if the backend
is closed (e.g. for server socket chardevs).
For a follow-up, the speed check could be extracted to a separate
function usb_check_attach, that is called just once at realize time,
even if !s->cs->be_open. Then, I think, all calls to usb_device_attach
in dev-serial can pass &error_abort.
Paolo
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (18 preceding siblings ...)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 19/19] usb-bus: remove "init" from USBDeviceClass struct arei.gonglei
@ 2014-09-18 12:58 ` Paolo Bonzini
2014-09-18 17:15 ` Markus Armbruster
2014-09-19 6:06 ` Gerd Hoffmann
21 siblings, 0 replies; 35+ messages in thread
From: Paolo Bonzini @ 2014-09-18 12:58 UTC (permalink / raw)
To: arei.gonglei, qemu-devel
Cc: luonengjun, peter.huangpeng, weidong.huang, kraxel, armbru
Il 18/09/2014 14:47, arei.gonglei@huawei.com ha scritto:
> From: Gonglei <arei.gonglei@huawei.com>
>
> DeviceClass->init is the old interface, let's convert usb
> devices to the new realize API. In this way, all the
> implementations now use error_setg instead of
> qerror_report/error_report for reporting error.
>
> Cc: Markus Armbruster <armbru@redhat.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
>
> v2 -> v1:
> - fix PATCH 2, using qerror_report_err print error messages
> when attach fails (Paolo)
> - using errp instead of qerror_report_err introduced by
> fix 1 in PATCH 12 (Paolo)
> - fix missing return in PATCH 14 (Paolo)
> - add 'Reviewed-by' tag for other patches
>
> Thanks a lot for reviewing!
>
>
> Gonglei (19):
> usb-storage: fix possible memory leak and missing error message
> usb-bus: convert USBDeviceClass init to realize
> usb-net: convert init to realize
> libusb: convert init to realize
> libusb: using error_report instead of fprintf
> usb-hub: convert init to realize
> dev-storage: convert init to realize
> dev-storage: usring error_report instead of fprintf/printf
> dev-uas: convert init to realize
> dev-uas: using error_report instead of fprintf
> dev-bluetooth: convert init to realize
> dev-serial: convert init to realize
> usb-ccid: convert init to realize
> dev-hid: convert init to realize
> dev-wacom: convert init to realize
> usb-audio: convert init to realize
> usb-redir: convert init to realize
> usb-mtp: convert init to realize
> usb-bus: remove "init" from USBDeviceClass struct
>
> hw/usb/bus.c | 79 ++++++++++++++++++++++---------------------
> hw/usb/dev-audio.c | 5 ++-
> hw/usb/dev-bluetooth.c | 6 ++--
> hw/usb/dev-hid.c | 27 +++++++--------
> hw/usb/dev-hub.c | 9 +++--
> hw/usb/dev-mtp.c | 5 ++-
> hw/usb/dev-network.c | 9 +++--
> hw/usb/dev-serial.c | 22 +++++++-----
> hw/usb/dev-smartcard-reader.c | 5 ++-
> hw/usb/dev-storage.c | 42 ++++++++++++-----------
> hw/usb/dev-uas.c | 17 +++++-----
> hw/usb/dev-wacom.c | 5 ++-
> hw/usb/host-libusb.c | 33 +++++++++---------
> hw/usb/redirect.c | 21 +++++++-----
> include/hw/usb.h | 10 ++++--
> 15 files changed, 150 insertions(+), 145 deletions(-)
>
Looks good, thanks!
Paolo
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 12/19] dev-serial: convert init to realize
2014-09-18 12:58 ` Paolo Bonzini
@ 2014-09-18 13:26 ` Gonglei (Arei)
2014-09-18 13:31 ` Paolo Bonzini
0 siblings, 1 reply; 35+ messages in thread
From: Gonglei (Arei) @ 2014-09-18 13:26 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
Cc: Luonengjun, Huangpeng (Peter), Huangweidong (C), kraxel, armbru
> From: Paolo Bonzini [mailto:pbonzini@redhat.com]
> Sent: Thursday, September 18, 2014 8:59 PM
> Subject: Re: [PATCH v2 12/19] dev-serial: convert init to realize
>
> Il 18/09/2014 14:47, arei.gonglei@huawei.com ha scritto:
> > if (s->cs->be_open && !dev->attached) {
> > - usb_device_attach(dev, &local_err);
> > - if (local_err) {
> > - qerror_report_err(local_err);
> > - error_free(local_err);
> > - }
> > + usb_device_attach(dev, errp);
> > }
> > - return 0;
>
> Subtle change: realize now fails if the attach fails, i.e. if the speed
> is mismatched. This is a bugfix, but it doesn't happen if the backend
> is closed (e.g. for server socket chardevs).
>
Yes. Good catch. :)
> For a follow-up, the speed check could be extracted to a separate
> function usb_check_attach, that is called just once at realize time,
> even if !s->cs->be_open. Then, I think, all calls to usb_device_attach
> in dev-serial can pass &error_abort.
>
Yes, we can.
Can we use qerror_report_err still in realize function?
Just report this error but not propagate to the caller. Thanks!
Best regards,
-Gonglei
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 12/19] dev-serial: convert init to realize
2014-09-18 13:26 ` Gonglei (Arei)
@ 2014-09-18 13:31 ` Paolo Bonzini
2014-09-18 13:35 ` Gonglei (Arei)
0 siblings, 1 reply; 35+ messages in thread
From: Paolo Bonzini @ 2014-09-18 13:31 UTC (permalink / raw)
To: Gonglei (Arei), qemu-devel
Cc: Luonengjun, Huangpeng (Peter), Huangweidong (C), kraxel, armbru
Il 18/09/2014 15:26, Gonglei (Arei) ha scritto:
> Yes, we can.
>
> Can we use qerror_report_err still in realize function?
> Just report this error but not propagate to the caller. Thanks!
No, I think propagating the error is fine. In fact I suggested checking
for the error more aggressively, so that it can better propagate to the
caller.
Paolo
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 12/19] dev-serial: convert init to realize
2014-09-18 13:31 ` Paolo Bonzini
@ 2014-09-18 13:35 ` Gonglei (Arei)
2014-09-18 13:37 ` Paolo Bonzini
0 siblings, 1 reply; 35+ messages in thread
From: Gonglei (Arei) @ 2014-09-18 13:35 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
Cc: Luonengjun, Huangpeng (Peter), Huangweidong (C), kraxel, armbru
> From: Paolo Bonzini [mailto:pbonzini@redhat.com]
> Sent: Thursday, September 18, 2014 9:31 PM
> To: Gonglei (Arei); qemu-devel@nongnu.org
> Cc: kraxel@redhat.com; Huangweidong (C); armbru@redhat.com; Huangpeng
> (Peter); Luonengjun
> Subject: Re: [PATCH v2 12/19] dev-serial: convert init to realize
>
> Il 18/09/2014 15:26, Gonglei (Arei) ha scritto:
> > Yes, we can.
> >
> > Can we use qerror_report_err still in realize function?
> > Just report this error but not propagate to the caller. Thanks!
>
> No, I think propagating the error is fine. In fact I suggested checking
> for the error more aggressively, so that it can better propagate to the
> caller.
>
> Paolo
OK, got it. v3 will be posted shortly. Thanks :)
Best regards,
-Gonglei
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 12/19] dev-serial: convert init to realize
2014-09-18 13:35 ` Gonglei (Arei)
@ 2014-09-18 13:37 ` Paolo Bonzini
2014-09-18 13:40 ` Gonglei (Arei)
0 siblings, 1 reply; 35+ messages in thread
From: Paolo Bonzini @ 2014-09-18 13:37 UTC (permalink / raw)
To: Gonglei (Arei), qemu-devel
Cc: Luonengjun, Huangpeng (Peter), Huangweidong (C), kraxel, armbru
Il 18/09/2014 15:35, Gonglei (Arei) ha scritto:
>> From: Paolo Bonzini [mailto:pbonzini@redhat.com]
>> Sent: Thursday, September 18, 2014 9:31 PM
>> To: Gonglei (Arei); qemu-devel@nongnu.org
>> Cc: kraxel@redhat.com; Huangweidong (C); armbru@redhat.com; Huangpeng
>> (Peter); Luonengjun
>> Subject: Re: [PATCH v2 12/19] dev-serial: convert init to realize
>>
>> Il 18/09/2014 15:26, Gonglei (Arei) ha scritto:
>>> Yes, we can.
>>>
>>> Can we use qerror_report_err still in realize function?
>>> Just report this error but not propagate to the caller. Thanks!
>>
>> No, I think propagating the error is fine. In fact I suggested checking
>> for the error more aggressively, so that it can better propagate to the
>> caller.
>>
>> Paolo
>
> OK, got it. v3 will be posted shortly. Thanks :)
No need for that. It can be done as a separate series. This v2 is fine
for me.
Paolo
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 12/19] dev-serial: convert init to realize
2014-09-18 13:37 ` Paolo Bonzini
@ 2014-09-18 13:40 ` Gonglei (Arei)
0 siblings, 0 replies; 35+ messages in thread
From: Gonglei (Arei) @ 2014-09-18 13:40 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
Cc: Luonengjun, Huangpeng (Peter), Huangweidong (C), kraxel, armbru
> >>> Can we use qerror_report_err still in realize function?
> >>> Just report this error but not propagate to the caller. Thanks!
> >>
> >> No, I think propagating the error is fine. In fact I suggested checking
> >> for the error more aggressively, so that it can better propagate to the
> >> caller.
> >>
> >> Paolo
> >
> > OK, got it. v3 will be posted shortly. Thanks :)
>
> No need for that. It can be done as a separate series. This v2 is fine
> for me.
>
Great! Thanks. :)
Waiting for Gerd's response ~
Best regards,
-Gonglei
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (19 preceding siblings ...)
2014-09-18 12:58 ` [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize Paolo Bonzini
@ 2014-09-18 17:15 ` Markus Armbruster
2014-09-18 18:42 ` Paolo Bonzini
2014-09-19 6:06 ` Gerd Hoffmann
21 siblings, 1 reply; 35+ messages in thread
From: Markus Armbruster @ 2014-09-18 17:15 UTC (permalink / raw)
To: arei.gonglei
Cc: weidong.huang, luonengjun, qemu-devel, peter.huangpeng, kraxel, pbonzini
<arei.gonglei@huawei.com> writes:
> From: Gonglei <arei.gonglei@huawei.com>
>
> DeviceClass->init is the old interface, let's convert usb
> devices to the new realize API. In this way, all the
> implementations now use error_setg instead of
> qerror_report/error_report for reporting error.
[...]
Thanks for doing this work. If you can do a bit more of the same, here
are a few more device model init() methods I'd love to have converted,
because they use qerror_report_err():
hw/char/serial-pci.c serial_pci_init()
multi_serial_pci_init()
hw/i386/kvm/pci-assign.c assigned_initfn()
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize
2014-09-18 17:15 ` Markus Armbruster
@ 2014-09-18 18:42 ` Paolo Bonzini
2014-09-19 1:49 ` Gonglei (Arei)
2014-09-19 7:07 ` Markus Armbruster
0 siblings, 2 replies; 35+ messages in thread
From: Paolo Bonzini @ 2014-09-18 18:42 UTC (permalink / raw)
To: Markus Armbruster, arei.gonglei
Cc: luonengjun, kraxel, weidong.huang, qemu-devel, peter.huangpeng
Il 18/09/2014 19:15, Markus Armbruster ha scritto:
>
> Thanks for doing this work. If you can do a bit more of the same, here
> are a few more device model init() methods I'd love to have converted,
> because they use qerror_report_err():
>
> hw/char/serial-pci.c serial_pci_init()
> multi_serial_pci_init()
> hw/i386/kvm/pci-assign.c assigned_initfn()
Converting PCI is Gargantuan, but even something like patch 1 in this
series would be nice to have.
Paolo
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize
2014-09-18 18:42 ` Paolo Bonzini
@ 2014-09-19 1:49 ` Gonglei (Arei)
2014-09-19 7:07 ` Markus Armbruster
1 sibling, 0 replies; 35+ messages in thread
From: Gonglei (Arei) @ 2014-09-19 1:49 UTC (permalink / raw)
To: Paolo Bonzini, Markus Armbruster
Cc: Luonengjun, kraxel, Huangweidong (C), qemu-devel, Huangpeng (Peter)
> From: Paolo Bonzini [mailto:paolo.bonzini@gmail.com] On Behalf Of Paolo
> Bonzini
> Sent: Friday, September 19, 2014 2:42 AM
> Subject: Re: [PATCH v2 00/19] usb: convert device init to realize
>
> Il 18/09/2014 19:15, Markus Armbruster ha scritto:
> >
> > Thanks for doing this work. If you can do a bit more of the same, here
> > are a few more device model init() methods I'd love to have converted,
> > because they use qerror_report_err():
> >
> > hw/char/serial-pci.c serial_pci_init()
> > multi_serial_pci_init()
> > hw/i386/kvm/pci-assign.c assigned_initfn()
>
> Converting PCI is Gargantuan,
Yes. AFAICT all PCI devices are using init() at present in QEMU.
> but even something like patch 1 in this
> series would be nice to have.
>
I think you meant method of PATCH 2, right?
Best regards,
-Gonglei
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 15/19] dev-wacom: convert init to realize
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 15/19] dev-wacom: " arei.gonglei
@ 2014-09-19 6:01 ` Gerd Hoffmann
2014-09-19 6:05 ` Gonglei (Arei)
0 siblings, 1 reply; 35+ messages in thread
From: Gerd Hoffmann @ 2014-09-19 6:01 UTC (permalink / raw)
To: arei.gonglei
Cc: weidong.huang, armbru, luonengjun, peter.huangpeng, qemu-devel, pbonzini
> static const VMStateDescription vmstate_usb_wacom = {
> @@ -357,7 +356,7 @@ static void usb_wacom_class_init(ObjectClass *klass, void *data)
>
> uc->product_desc = "QEMU PenPartner Tablet";
> uc->usb_desc = &desc_wacom;
> - uc->init = usb_wacom_initfn;
> + uc->realize = usb_wacom_realize;
> uc->handle_reset = usb_wacom_handle_reset;
> uc->handle_control = usb_wacom_handle_control;
> uc->handle_data = usb_wacom_handle_data;
The new line isn't aligned with the others (here and in lots of other
patches too).
cheers,
Gerd
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 15/19] dev-wacom: convert init to realize
2014-09-19 6:01 ` Gerd Hoffmann
@ 2014-09-19 6:05 ` Gonglei (Arei)
0 siblings, 0 replies; 35+ messages in thread
From: Gonglei (Arei) @ 2014-09-19 6:05 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Huangweidong (C), armbru, Luonengjun, Huangpeng (Peter),
qemu-devel, pbonzini
Hi,
> From: Gerd Hoffmann [mailto:kraxel@redhat.com]
> Sent: Friday, September 19, 2014 2:02 PM
> Subject: Re: [PATCH v2 15/19] dev-wacom: convert init to realize
>
>
> > static const VMStateDescription vmstate_usb_wacom = {
> > @@ -357,7 +356,7 @@ static void usb_wacom_class_init(ObjectClass *klass,
> void *data)
> >
> > uc->product_desc = "QEMU PenPartner Tablet";
> > uc->usb_desc = &desc_wacom;
> > - uc->init = usb_wacom_initfn;
> > + uc->realize = usb_wacom_realize;
> > uc->handle_reset = usb_wacom_handle_reset;
> > uc->handle_control = usb_wacom_handle_control;
> > uc->handle_data = usb_wacom_handle_data;
>
> The new line isn't aligned with the others (here and in lots of other
> patches too).
>
OK. I will check and fix them shortly. Thanks!
Best regards,
-Gonglei
> cheers,
> Gerd
>
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
` (20 preceding siblings ...)
2014-09-18 17:15 ` Markus Armbruster
@ 2014-09-19 6:06 ` Gerd Hoffmann
2014-09-19 6:17 ` Gonglei (Arei)
21 siblings, 1 reply; 35+ messages in thread
From: Gerd Hoffmann @ 2014-09-19 6:06 UTC (permalink / raw)
To: arei.gonglei
Cc: weidong.huang, armbru, luonengjun, peter.huangpeng, qemu-devel, pbonzini
On Do, 2014-09-18 at 20:47 +0800, arei.gonglei@huawei.com wrote:
> From: Gonglei <arei.gonglei@huawei.com>
>
> DeviceClass->init is the old interface, let's convert usb
> devices to the new realize API. In this way, all the
> implementations now use error_setg instead of
> qerror_report/error_report for reporting error.
Looks good overall. One minor style nit, and there is the usb-serial
issue pointed out by paolo, I'd like to see them handled. I don't care
much whenever you do than with a v3 or 2-3 incremental patches to this
one.
cheers,
Gerd
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize
2014-09-19 6:06 ` Gerd Hoffmann
@ 2014-09-19 6:17 ` Gonglei (Arei)
0 siblings, 0 replies; 35+ messages in thread
From: Gonglei (Arei) @ 2014-09-19 6:17 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Huangweidong (C), armbru, Luonengjun, Huangpeng (Peter),
qemu-devel, pbonzini
> From: Gerd Hoffmann [mailto:kraxel@redhat.com]
> Sent: Friday, September 19, 2014 2:06 PM
> To: Gonglei (Arei)
> Subject: Re: [PATCH v2 00/19] usb: convert device init to realize
>
> On Do, 2014-09-18 at 20:47 +0800, arei.gonglei@huawei.com wrote:
> > From: Gonglei <arei.gonglei@huawei.com>
> >
> > DeviceClass->init is the old interface, let's convert usb
> > devices to the new realize API. In this way, all the
> > implementations now use error_setg instead of
> > qerror_report/error_report for reporting error.
>
> Looks good overall. One minor style nit, and there is the usb-serial
> issue pointed out by paolo, I'd like to see them handled. I don't care
> much whenever you do than with a v3 or 2-3 incremental patches to this
> one.
>
Got it. Thanks. :)
Best regards,
-Gonglei
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize
2014-09-18 18:42 ` Paolo Bonzini
2014-09-19 1:49 ` Gonglei (Arei)
@ 2014-09-19 7:07 ` Markus Armbruster
1 sibling, 0 replies; 35+ messages in thread
From: Markus Armbruster @ 2014-09-19 7:07 UTC (permalink / raw)
To: Paolo Bonzini
Cc: weidong.huang, luonengjun, peter.huangpeng, qemu-devel,
arei.gonglei, kraxel
Paolo Bonzini <pbonzini@redhat.com> writes:
> Il 18/09/2014 19:15, Markus Armbruster ha scritto:
>>
>> Thanks for doing this work. If you can do a bit more of the same, here
>> are a few more device model init() methods I'd love to have converted,
>> because they use qerror_report_err():
>>
>> hw/char/serial-pci.c serial_pci_init()
>> multi_serial_pci_init()
>> hw/i386/kvm/pci-assign.c assigned_initfn()
>
> Converting PCI is Gargantuan, but even something like patch 1 in this
> series would be nice to have.
Converting all the PCI devices in one go is Gargantuan indeed. Could we
enable incremental conversion?
^ permalink raw reply [flat|nested] 35+ messages in thread
end of thread, other threads:[~2014-09-19 7:07 UTC | newest]
Thread overview: 35+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-18 12:47 [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 01/19] usb-storage: fix possible memory leak and missing error message arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 02/19] usb-bus: convert USBDeviceClass init to realize arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 03/19] usb-net: convert " arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 04/19] libusb: " arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 05/19] libusb: using error_report instead of fprintf arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 06/19] usb-hub: convert init to realize arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 07/19] dev-storage: " arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 08/19] dev-storage: usring error_report instead of fprintf/printf arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 09/19] dev-uas: convert init to realize arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 10/19] dev-uas: using error_report instead of fprintf arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 11/19] dev-bluetooth: convert init to realize arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 12/19] dev-serial: " arei.gonglei
2014-09-18 12:58 ` Paolo Bonzini
2014-09-18 13:26 ` Gonglei (Arei)
2014-09-18 13:31 ` Paolo Bonzini
2014-09-18 13:35 ` Gonglei (Arei)
2014-09-18 13:37 ` Paolo Bonzini
2014-09-18 13:40 ` Gonglei (Arei)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 13/19] usb-ccid: " arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 14/19] dev-hid: " arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 15/19] dev-wacom: " arei.gonglei
2014-09-19 6:01 ` Gerd Hoffmann
2014-09-19 6:05 ` Gonglei (Arei)
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 16/19] usb-audio: " arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 17/19] usb-redir: " arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 18/19] usb-mtp: " arei.gonglei
2014-09-18 12:47 ` [Qemu-devel] [PATCH v2 19/19] usb-bus: remove "init" from USBDeviceClass struct arei.gonglei
2014-09-18 12:58 ` [Qemu-devel] [PATCH v2 00/19] usb: convert device init to realize Paolo Bonzini
2014-09-18 17:15 ` Markus Armbruster
2014-09-18 18:42 ` Paolo Bonzini
2014-09-19 1:49 ` Gonglei (Arei)
2014-09-19 7:07 ` Markus Armbruster
2014-09-19 6:06 ` Gerd Hoffmann
2014-09-19 6:17 ` Gonglei (Arei)
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.