Replace use of qdev_reset_all() with device_cold_reset()
The legacy function qdev_reset_all() performs a recursive reset, starting from a qdev. However, it does not permit any of the devices in the tree to use three-phase reset, because device reset goes through the device_legacy_reset() function that only calls the single DeviceClass::reset method. Switch to using the device_cold_reset() function instead. This also performs a recursive reset, where first the children are reset and then finally the parent, but it uses the new (...in 2020...) Resettable mechanism, which supports both the old style single-reset method and also the new 3-phase reset handling. This commit changes the five remaining uses of this function. Commit created with: sed -i -e 's/qdev_reset_all/device_cold_reset/g' hw/i386/xen/xen_platform.c hw/input/adb.c hw/remote/vfio-user-obj.c hw/s390x/s390-virtio-ccw.c hw/usb/dev-uas.c Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
8cadd251b0
commit
dfa6ba6bae
@ -177,7 +177,7 @@ static void pci_xen_ide_unplug(DeviceState *dev, bool aux)
|
|||||||
blk_unref(blk);
|
blk_unref(blk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qdev_reset_all(dev);
|
device_cold_reset(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unplug_disks(PCIBus *b, PCIDevice *d, void *opaque)
|
static void unplug_disks(PCIBus *b, PCIDevice *d, void *opaque)
|
||||||
|
@ -43,7 +43,7 @@ static const char *adb_commands[] = {
|
|||||||
|
|
||||||
static void adb_device_reset(ADBDevice *d)
|
static void adb_device_reset(ADBDevice *d)
|
||||||
{
|
{
|
||||||
qdev_reset_all(DEVICE(d));
|
device_cold_reset(DEVICE(d));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf,
|
static int do_adb_request(ADBBusState *s, uint8_t *obuf, const uint8_t *buf,
|
||||||
|
@ -678,7 +678,7 @@ static int vfu_object_device_reset(vfu_ctx_t *vfu_ctx, vfu_reset_type_t type)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
qdev_reset_all(DEVICE(o->pci_dev));
|
device_cold_reset(DEVICE(o->pci_dev));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -118,7 +118,7 @@ static void subsystem_reset(void)
|
|||||||
for (i = 0; i < ARRAY_SIZE(reset_dev_types); i++) {
|
for (i = 0; i < ARRAY_SIZE(reset_dev_types); i++) {
|
||||||
dev = DEVICE(object_resolve_path_type("", reset_dev_types[i], NULL));
|
dev = DEVICE(object_resolve_path_type("", reset_dev_types[i], NULL));
|
||||||
if (dev) {
|
if (dev) {
|
||||||
qdev_reset_all(dev);
|
device_cold_reset(dev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -791,7 +791,7 @@ static void usb_uas_task(UASDevice *uas, uas_iu *iu)
|
|||||||
|
|
||||||
case UAS_TMF_LOGICAL_UNIT_RESET:
|
case UAS_TMF_LOGICAL_UNIT_RESET:
|
||||||
trace_usb_uas_tmf_logical_unit_reset(uas->dev.addr, tag, lun);
|
trace_usb_uas_tmf_logical_unit_reset(uas->dev.addr, tag, lun);
|
||||||
qdev_reset_all(&dev->qdev);
|
device_cold_reset(&dev->qdev);
|
||||||
usb_uas_queue_response(uas, tag, UAS_RC_TMF_COMPLETE);
|
usb_uas_queue_response(uas, tag, UAS_RC_TMF_COMPLETE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user