@samitouri / QOSamiQemu / commits / 44ed8188de

hw/m68k: keep QemuInputHandlerState in next-kbd

Track the input handled state, and dispose it on unrealize. Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Marc-André Lureau committed Jun 9, 2026 at 01:10 UTC 44ed8188de963a8739b147471396cc2bc205a827
1 file changed +10 -1
hw/m68k/next-kbd.c
+10 -1
@@ -65,6 +65,7 @@ typedef struct {
65 struct NextKBDState {
66 SysBusDevice sbd;
67 MemoryRegion mr;
68 + QemuInputHandlerState *hs;
69 KBDQueue queue;
70 uint16_t shift;
71 };
@@ -304,7 +305,14 @@ static void nextkbd_realize(DeviceState *dev, Error **errp)
305 memory_region_init_io(&s->mr, OBJECT(dev), &kbd_ops, s, "next.kbd", 0x1000);
306 sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->mr);
307
307 - qemu_input_handler_register(dev, &nextkbd_handler);
308 + s->hs = qemu_input_handler_register(dev, &nextkbd_handler);
309 +}
310 +
311 +static void nextkbd_unrealize(DeviceState *dev)
312 +{
313 + NextKBDState *s = NEXTKBD(dev);
314 +
315 + g_clear_pointer(&s->hs, qemu_input_handler_unregister);
316 }
317
318 static const VMStateDescription nextkbd_vmstate = {
@@ -319,6 +327,7 @@ static void nextkbd_class_init(ObjectClass *oc, const void *data)
327 set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
328 dc->vmsd = &nextkbd_vmstate;
329 dc->realize = nextkbd_realize;
330 + dc->unrealize = nextkbd_unrealize;
331 device_class_set_legacy_reset(dc, nextkbd_reset);
332 }
333