Message ID | 20240627-san-v2-2-750bb0946dbd@daynix.com |
---|---|
State | New |
Headers | show |
Series | Fix check-qtest-ppc64 sanitizer errors | expand |
On 27/06/2024 14:37, Akihiko Odaki wrote: > macio ide_irq is connected to the IDE bus. This fixes the leak of > ide_irq. > > Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> > --- > hw/ide/macio.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git a/hw/ide/macio.c b/hw/ide/macio.c > index aca90d04f0e8..9c96a857a7c1 100644 > --- a/hw/ide/macio.c > +++ b/hw/ide/macio.c > @@ -427,7 +427,7 @@ static void macio_ide_realizefn(DeviceState *dev, Error **errp) > s->bus.dma = &s->dma; > } > > -static void pmac_ide_irq(void *opaque, int n, int level) > +static void pmac_irq(void *opaque, int n, int level) > { > MACIOIDEState *s = opaque; > uint32_t mask = 0x80000000u >> n; > @@ -446,6 +446,11 @@ static void pmac_ide_irq(void *opaque, int n, int level) > } > } > > +static void pmac_ide_irq(void *opaque, int n, int level) > +{ > + pmac_irq(opaque, 1, level); > +} > + > static void macio_ide_initfn(Object *obj) > { > SysBusDevice *d = SYS_BUS_DEVICE(obj); > @@ -456,8 +461,8 @@ static void macio_ide_initfn(Object *obj) > sysbus_init_mmio(d, &s->mem); > sysbus_init_irq(d, &s->real_ide_irq); > sysbus_init_irq(d, &s->real_dma_irq); > - s->dma_irq = qemu_allocate_irq(pmac_ide_irq, s, 0); > - s->ide_irq = qemu_allocate_irq(pmac_ide_irq, s, 1); > + s->dma_irq = qemu_allocate_irq(pmac_irq, s, 0); > + qdev_init_gpio_in_named_with_opaque(DEVICE(obj), pmac_ide_irq, s, NULL, 1); > > object_property_add_link(obj, "dbdma", TYPE_MAC_DBDMA, > (Object **) &s->dbdma, > This doesn't feel quite right: generally I consider the use of qdev_init_gpio_in_named_with_opaque() to indicate that the underlying modelling is incorrect. Let me have a look and see if I can figure out what's supposed to be happening. I guess I should probably be marked as maintainer of hw/ide/macio.c as it is part of the macio device, but it looks as if this is missing from MAINTAINERS. ATB, Mark.
diff --git a/hw/ide/macio.c b/hw/ide/macio.c index aca90d04f0e8..9c96a857a7c1 100644 --- a/hw/ide/macio.c +++ b/hw/ide/macio.c @@ -427,7 +427,7 @@ static void macio_ide_realizefn(DeviceState *dev, Error **errp) s->bus.dma = &s->dma; } -static void pmac_ide_irq(void *opaque, int n, int level) +static void pmac_irq(void *opaque, int n, int level) { MACIOIDEState *s = opaque; uint32_t mask = 0x80000000u >> n; @@ -446,6 +446,11 @@ static void pmac_ide_irq(void *opaque, int n, int level) } } +static void pmac_ide_irq(void *opaque, int n, int level) +{ + pmac_irq(opaque, 1, level); +} + static void macio_ide_initfn(Object *obj) { SysBusDevice *d = SYS_BUS_DEVICE(obj); @@ -456,8 +461,8 @@ static void macio_ide_initfn(Object *obj) sysbus_init_mmio(d, &s->mem); sysbus_init_irq(d, &s->real_ide_irq); sysbus_init_irq(d, &s->real_dma_irq); - s->dma_irq = qemu_allocate_irq(pmac_ide_irq, s, 0); - s->ide_irq = qemu_allocate_irq(pmac_ide_irq, s, 1); + s->dma_irq = qemu_allocate_irq(pmac_irq, s, 0); + qdev_init_gpio_in_named_with_opaque(DEVICE(obj), pmac_ide_irq, s, NULL, 1); object_property_add_link(obj, "dbdma", TYPE_MAC_DBDMA, (Object **) &s->dbdma,
macio ide_irq is connected to the IDE bus. This fixes the leak of ide_irq. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> --- hw/ide/macio.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)