The abstract PCMCIA_CARD is a bus-less TYPE_DEVICE, so devices implementing it are not reset automatically. Register a reset handler so children get reset on machine reset.
Note, the DSCM-1XXXX device (TYPE_DSCM1XXXX) which inherits TYPE_MICRODRIVE and PCMCIA_CARD reset itself when a disk is attached or detached, but was not resetting itself on machine reset. It doesn't seem to be an issue because it is that way since the device QDev'ifycation 8 years ago, in commit d1f2c96a81a ("pcmcia: QOM'ify PCMCIACardState and MicroDriveState"). Still, correct to have a proper API usage. Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> --- hw/pcmcia/pcmcia.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/hw/pcmcia/pcmcia.c b/hw/pcmcia/pcmcia.c index 03d13e7d670..73656257227 100644 --- a/hw/pcmcia/pcmcia.c +++ b/hw/pcmcia/pcmcia.c @@ -6,14 +6,39 @@ #include "qemu/osdep.h" #include "qemu/module.h" +#include "sysemu/reset.h" #include "hw/pcmcia.h" +static void pcmcia_card_reset_handler(void *dev) +{ + device_legacy_reset(DEVICE(dev)); +} + +static void pcmcia_card_realize(DeviceState *dev, Error **errp) +{ + qemu_register_reset(pcmcia_card_reset_handler, dev); +} + +static void pcmcia_card_unrealize(DeviceState *dev) +{ + qemu_unregister_reset(pcmcia_card_reset_handler, dev); +} + +static void pcmcia_card_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + + dc->realize = pcmcia_card_realize; + dc->unrealize = pcmcia_card_unrealize; +} + static const TypeInfo pcmcia_card_type_info = { .name = TYPE_PCMCIA_CARD, .parent = TYPE_DEVICE, .instance_size = sizeof(PCMCIACardState), .abstract = true, .class_size = sizeof(PCMCIACardClass), + .class_init = pcmcia_card_class_init, }; static void pcmcia_register_types(void) -- 2.26.3