[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC v5 048/126] USB: introduce ERRP_AUTO_PROPAGATE
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[RFC v5 048/126] USB: introduce ERRP_AUTO_PROPAGATE |
Date: |
Fri, 11 Oct 2019 19:04:34 +0300 |
If we want to add some info to errp (by error_prepend() or
error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro.
Otherwise, this info will not be added when errp == &fatal_err
(the program will exit prior to the error_append_hint() or
error_prepend() call). Fix such cases.
If we want to check error after errp-function call, we need to
introduce local_err and than propagate it to errp. Instead, use
ERRP_AUTO_PROPAGATE macro, benefits are:
1. No need of explicit error_propagate call
2. No need of explicit local_err variable: use errp directly
3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or
&error_fatel, this means that we don't break error_abort
(we'll abort on error_set, not on error_propagate)
This commit (together with its neighbors) was generated by
for f in $(git grep -l errp \*.[ch]); do \
spatch --sp-file scripts/coccinelle/auto-propagated-errp.cocci \
--macro-file scripts/cocci-macro-file.h --in-place --no-show-diff $f; \
done;
then fix a bit of compilation problems: coccinelle for some reason
leaves several
f() {
...
goto out;
...
out:
}
patterns, with "out:" at function end.
then
./python/commit-per-subsystem.py MAINTAINERS "$(< auto-msg)"
(auto-msg was a file with this commit message)
Still, for backporting it may be more comfortable to use only the first
command and then do one huge commit.
Reported-by: Kevin Wolf <address@hidden>
Reported-by: Greg Kurz <address@hidden>
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
hw/usb/bus.c | 37 +++++++++++++++--------------------
hw/usb/ccid-card-emulated.c | 1 +
hw/usb/dev-smartcard-reader.c | 14 ++++++-------
hw/usb/dev-storage.c | 17 +++++++---------
hw/usb/hcd-ohci-pci.c | 7 +++----
hw/usb/hcd-ohci.c | 14 ++++++-------
hw/usb/hcd-uhci.c | 7 +++----
hw/usb/hcd-xhci.c | 13 ++++++------
8 files changed, 48 insertions(+), 62 deletions(-)
diff --git a/hw/usb/bus.c b/hw/usb/bus.c
index a6522f5429..b2ef85afe4 100644
--- a/hw/usb/bus.c
+++ b/hw/usb/bus.c
@@ -240,8 +240,8 @@ void usb_device_free_streams(USBDevice *dev, USBEndpoint
**eps, int nr_eps)
static void usb_qdev_realize(DeviceState *qdev, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
USBDevice *dev = USB_DEVICE(qdev);
- Error *local_err = NULL;
pstrcpy(dev->product_desc, sizeof(dev->product_desc),
usb_device_get_product_desc(dev));
@@ -249,24 +249,21 @@ static void usb_qdev_realize(DeviceState *qdev, Error
**errp)
QLIST_INIT(&dev->strings);
usb_ep_init(dev);
- usb_claim_port(dev, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
+ usb_claim_port(dev, errp);
+ if (*errp) {
return;
}
- usb_device_realize(dev, &local_err);
- if (local_err) {
+ usb_device_realize(dev, errp);
+ if (*errp) {
usb_release_port(dev);
- error_propagate(errp, local_err);
return;
}
if (dev->auto_attach) {
- usb_device_attach(dev, &local_err);
- if (local_err) {
+ usb_device_attach(dev, errp);
+ if (*errp) {
usb_qdev_unrealize(qdev, NULL);
- error_propagate(errp, local_err);
return;
}
}
@@ -325,7 +322,7 @@ USBDevice *usb_create(USBBus *bus, const char *name)
static USBDevice *usb_try_create_simple(USBBus *bus, const char *name,
Error **errp)
{
- Error *err = NULL;
+ ERRP_AUTO_PROPAGATE();
USBDevice *dev;
dev = USB_DEVICE(qdev_try_create(&bus->qbus, name));
@@ -333,9 +330,9 @@ static USBDevice *usb_try_create_simple(USBBus *bus, const
char *name,
error_setg(errp, "Failed to create USB device '%s'", name);
return NULL;
}
- object_property_set_bool(OBJECT(dev), true, "realized", &err);
- if (err) {
- error_propagate_prepend(errp, err,
+ object_property_set_bool(OBJECT(dev), true, "realized", errp);
+ if (*errp) {
+ error_prepend(errp,
"Failed to initialize USB device '%s': ",
name);
return NULL;
@@ -532,12 +529,11 @@ void usb_check_attach(USBDevice *dev, Error **errp)
void usb_device_attach(USBDevice *dev, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
USBPort *port = dev->port;
- Error *local_err = NULL;
- usb_check_attach(dev, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
+ usb_check_attach(dev, errp);
+ if (*errp) {
return;
}
@@ -731,16 +727,15 @@ static bool usb_get_attached(Object *obj, Error **errp)
static void usb_set_attached(Object *obj, bool value, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
USBDevice *dev = USB_DEVICE(obj);
- Error *err = NULL;
if (dev->attached == value) {
return;
}
if (value) {
- usb_device_attach(dev, &err);
- error_propagate(errp, err);
+ usb_device_attach(dev, errp);
} else {
usb_device_detach(dev);
}
diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
index 291e41db8a..958791e817 100644
--- a/hw/usb/ccid-card-emulated.c
+++ b/hw/usb/ccid-card-emulated.c
@@ -488,6 +488,7 @@ static uint32_t parse_enumeration(char *str,
static void emulated_realize(CCIDCardState *base, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
EmulatedState *card = EMULATED_CCID_CARD(base);
VCardEmulError ret;
const EnumTable *ptable;
diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c
index 4568db2568..116bbc5c13 100644
--- a/hw/usb/dev-smartcard-reader.c
+++ b/hw/usb/dev-smartcard-reader.c
@@ -1271,19 +1271,18 @@ void ccid_card_card_inserted(CCIDCardState *card)
static void ccid_card_unrealize(DeviceState *qdev, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
CCIDCardState *card = CCID_CARD(qdev);
CCIDCardClass *cc = CCID_CARD_GET_CLASS(card);
USBDevice *dev = USB_DEVICE(qdev->parent_bus->parent);
USBCCIDState *s = USB_CCID_DEV(dev);
- Error *local_err = NULL;
if (ccid_card_inserted(s)) {
ccid_card_card_removed(card);
}
if (cc->unrealize) {
- cc->unrealize(card, &local_err);
- if (local_err != NULL) {
- error_propagate(errp, local_err);
+ cc->unrealize(card, errp);
+ if (*errp) {
return;
}
}
@@ -1292,11 +1291,11 @@ static void ccid_card_unrealize(DeviceState *qdev,
Error **errp)
static void ccid_card_realize(DeviceState *qdev, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
CCIDCardState *card = CCID_CARD(qdev);
CCIDCardClass *cc = CCID_CARD_GET_CLASS(card);
USBDevice *dev = USB_DEVICE(qdev->parent_bus->parent);
USBCCIDState *s = USB_CCID_DEV(dev);
- Error *local_err = NULL;
if (card->slot != 0) {
error_setg(errp, "usb-ccid supports one slot, can't add %d",
@@ -1308,9 +1307,8 @@ static void ccid_card_realize(DeviceState *qdev, Error
**errp)
return;
}
if (cc->realize) {
- cc->realize(card, &local_err);
- if (local_err != NULL) {
- error_propagate(errp, local_err);
+ cc->realize(card, errp);
+ if (*errp) {
return;
}
}
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index 8545193488..71b6440801 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -717,19 +717,19 @@ static void usb_msd_get_bootindex(Object *obj, Visitor
*v, const char *name,
static void usb_msd_set_bootindex(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
USBDevice *dev = USB_DEVICE(obj);
MSDState *s = USB_STORAGE_DEV(dev);
int32_t boot_index;
- Error *local_err = NULL;
- visit_type_int32(v, name, &boot_index, &local_err);
- if (local_err) {
- goto out;
+ visit_type_int32(v, name, &boot_index, errp);
+ if (*errp) {
+ return;
}
/* check whether bootindex is present in fw_boot_order list */
- check_boot_index(boot_index, &local_err);
- if (local_err) {
- goto out;
+ check_boot_index(boot_index, errp);
+ if (*errp) {
+ return;
}
/* change bootindex to a new one */
s->conf.bootindex = boot_index;
@@ -738,9 +738,6 @@ static void usb_msd_set_bootindex(Object *obj, Visitor *v,
const char *name,
object_property_set_int(OBJECT(s->scsi_dev), boot_index, "bootindex",
&error_abort);
}
-
-out:
- error_propagate(errp, local_err);
}
static const TypeInfo usb_storage_dev_type_info = {
diff --git a/hw/usb/hcd-ohci-pci.c b/hw/usb/hcd-ohci-pci.c
index c052f10521..2e88561bf8 100644
--- a/hw/usb/hcd-ohci-pci.c
+++ b/hw/usb/hcd-ohci-pci.c
@@ -60,7 +60,7 @@ static void ohci_pci_die(struct OHCIState *ohci)
static void usb_ohci_realize_pci(PCIDevice *dev, Error **errp)
{
- Error *err = NULL;
+ ERRP_AUTO_PROPAGATE();
OHCIPCIState *ohci = PCI_OHCI(dev);
dev->config[PCI_CLASS_PROG] = 0x10; /* OHCI */
@@ -68,9 +68,8 @@ static void usb_ohci_realize_pci(PCIDevice *dev, Error **errp)
usb_ohci_init(&ohci->state, DEVICE(dev), ohci->num_ports, 0,
ohci->masterbus, ohci->firstport,
- pci_get_address_space(dev), ohci_pci_die, &err);
- if (err) {
- error_propagate(errp, err);
+ pci_get_address_space(dev), ohci_pci_die, errp);
+ if (*errp) {
return;
}
diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c
index 145ee21fd6..d54a7c429f 100644
--- a/hw/usb/hcd-ohci.c
+++ b/hw/usb/hcd-ohci.c
@@ -1795,7 +1795,7 @@ void usb_ohci_init(OHCIState *ohci, DeviceState *dev,
uint32_t num_ports,
uint32_t firstport, AddressSpace *as,
void (*ohci_die_fn)(struct OHCIState *), Error **errp)
{
- Error *err = NULL;
+ ERRP_AUTO_PROPAGATE();
int i;
ohci->as = as;
@@ -1831,9 +1831,8 @@ void usb_ohci_init(OHCIState *ohci, DeviceState *dev,
uint32_t num_ports,
usb_register_companion(masterbus, ports, num_ports,
firstport, ohci, &ohci_port_ops,
USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL,
- &err);
- if (err) {
- error_propagate(errp, err);
+ errp);
+ if (*errp) {
return;
}
} else {
@@ -1887,15 +1886,14 @@ typedef struct {
static void ohci_realize_pxa(DeviceState *dev, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
OHCISysBusState *s = SYSBUS_OHCI(dev);
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
- Error *err = NULL;
usb_ohci_init(&s->ohci, dev, s->num_ports, s->dma_offset,
s->masterbus, s->firstport,
- &address_space_memory, ohci_sysbus_die, &err);
- if (err) {
- error_propagate(errp, err);
+ &address_space_memory, ohci_sysbus_die, errp);
+ if (*errp) {
return;
}
sysbus_init_irq(sbd, &s->ohci.irq);
diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c
index 23507ad3b5..758d2c700a 100644
--- a/hw/usb/hcd-uhci.c
+++ b/hw/usb/hcd-uhci.c
@@ -1213,7 +1213,7 @@ static USBBusOps uhci_bus_ops = {
static void usb_uhci_common_realize(PCIDevice *dev, Error **errp)
{
- Error *err = NULL;
+ ERRP_AUTO_PROPAGATE();
PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev);
UHCIPCIDeviceClass *u = container_of(pc, UHCIPCIDeviceClass, parent_class);
UHCIState *s = UHCI(dev);
@@ -1234,9 +1234,8 @@ static void usb_uhci_common_realize(PCIDevice *dev, Error
**errp)
usb_register_companion(s->masterbus, ports, NB_PORTS,
s->firstport, s, &uhci_port_ops,
USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL,
- &err);
- if (err) {
- error_propagate(errp, err);
+ errp);
+ if (*errp) {
return;
}
} else {
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index 80988bb305..4dec185ab5 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -3369,8 +3369,8 @@ static void usb_xhci_init(XHCIState *xhci)
static void usb_xhci_realize(struct PCIDevice *dev, Error **errp)
{
+ ERRP_AUTO_PROPAGATE();
int i, ret;
- Error *err = NULL;
XHCIState *xhci = XHCI(dev);
@@ -3404,20 +3404,19 @@ static void usb_xhci_realize(struct PCIDevice *dev,
Error **errp)
}
if (xhci->msi != ON_OFF_AUTO_OFF) {
- ret = msi_init(dev, 0x70, xhci->numintrs, true, false, &err);
+ ret = msi_init(dev, 0x70, xhci->numintrs, true, false, errp);
/* Any error other than -ENOTSUP(board's MSI support is broken)
* is a programming error */
assert(!ret || ret == -ENOTSUP);
if (ret && xhci->msi == ON_OFF_AUTO_ON) {
/* Can't satisfy user's explicit msi=on request, fail */
- error_append_hint(&err, "You have to use msi=auto (default) or "
- "msi=off with this machine type.\n");
- error_propagate(errp, err);
+ error_append_hint(errp, "You have to use msi=auto (default) or "
+ "msi=off with this machine type.\n");
return;
}
- assert(!err || xhci->msi == ON_OFF_AUTO_AUTO);
+ assert(!*errp || xhci->msi == ON_OFF_AUTO_AUTO);
/* With msi=auto, we fall back to MSI off silently */
- error_free(err);
+ error_free_errp(errp);
}
usb_xhci_init(xhci);
--
2.21.0
- [RFC v5 038/126] X86 Machines: introduce ERRP_AUTO_PROPAGATE, (continued)
- [RFC v5 038/126] X86 Machines: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 043/126] ACPI/SMBIOS: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 015/126] hw/s390x: rename Error ** parameter to more common errp, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 050/126] VFIO: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 047/126] SD (Secure Card): introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 046/126] SCSI: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 057/126] virtio-input: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 058/126] virtio-serial: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 049/126] USB (serial adapter): introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 048/126] USB: introduce ERRP_AUTO_PROPAGATE,
Vladimir Sementsov-Ogievskiy <=
- [RFC v5 053/126] virtio: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 019/126] include/block/snapshot.h: rename Error ** parameter to more common errp, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 054/126] virtio-9p: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 023/126] hw/vfio/ap: drop local_err from vfio_ap_realize, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 028/126] s390x: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 064/126] fw_cfg: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 063/126] virtio-gpu: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11
- [RFC v5 059/126] virtio-rng: introduce ERRP_AUTO_PROPAGATE, Vladimir Sementsov-Ogievskiy, 2019/10/11