diff mbox series

[07/11] hw/m68k/next-cube: Make next_irq GPIO inputs to NEXT_PC device

Message ID 20210115201206.17347-8-peter.maydell@linaro.org
State Accepted
Headers show
Series hw/m68k/next-cube: refactor to fix Coverity issue | expand

Commit Message

Peter Maydell Jan. 15, 2021, 8:12 p.m. UTC
Make the next_irq function be GPIO inputs to the NEXT_PC
device, rather than a freestanding set of qemu_irq lines.

This fixes a minor Coverity issue where it correctly points
out the trivial memory leak of the memory allocated in the
call to qemu_allocate_irqs().

Fixes: CID 1421962
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
 include/hw/m68k/next-cube.h |  3 ++-
 hw/m68k/next-cube.c         | 21 ++++-----------------
 2 files changed, 6 insertions(+), 18 deletions(-)

-- 
2.20.1

Comments

Thomas Huth Jan. 16, 2021, 10:24 a.m. UTC | #1
Am Fri, 15 Jan 2021 20:12:02 +0000
schrieb Peter Maydell <peter.maydell@linaro.org>:

> Make the next_irq function be GPIO inputs to the NEXT_PC

> device, rather than a freestanding set of qemu_irq lines.

> 

> This fixes a minor Coverity issue where it correctly points

> out the trivial memory leak of the memory allocated in the

> call to qemu_allocate_irqs().

> 

> Fixes: CID 1421962

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

> ---

>  include/hw/m68k/next-cube.h |  3 ++-

>  hw/m68k/next-cube.c         | 21 ++++-----------------

>  2 files changed, 6 insertions(+), 18 deletions(-)

> 

> diff --git a/include/hw/m68k/next-cube.h b/include/hw/m68k/next-cube.h

> index 5a56c354b8e..d38c52d540d 100644

> --- a/include/hw/m68k/next-cube.h

> +++ b/include/hw/m68k/next-cube.h

> @@ -39,7 +39,8 @@ enum next_irqs {

>      NEXT_ENRX_DMA_I,

>      NEXT_SCSI_DMA_I,

>      NEXT_SCC_DMA_I,

> -    NEXT_SND_I

> +    NEXT_SND_I,

> +    NEXT_NUM_IRQS

>  };

>  

>  #endif /* NEXT_CUBE_H */

> diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c

> index 6b4bcfd4b9b..5a8fc24ed35 100644

> --- a/hw/m68k/next-cube.c

> +++ b/hw/m68k/next-cube.c

> @@ -734,10 +734,6 @@ static const MemoryRegionOps dma_ops = {

>      .endianness = DEVICE_NATIVE_ENDIAN,

>  };

>  

> -/*

> - * TODO: set the shift numbers as values in the enum, so the first

> switch

> - * will not be needed

> - */

>  static void next_irq(void *opaque, int number, int level)

>  {

>      NeXTPC *s = NEXT_PC(opaque);

> @@ -838,19 +834,8 @@ static void next_irq(void *opaque, int number,

> int level) }

>  }

>  

> -static void next_serial_irq(void *opaque, int n, int level)

> -{

> -    /* DPRINTF("SCC IRQ NUM %i\n",n); */

> -    if (n) {

> -        next_irq(opaque, NEXT_SCC_DMA_I, level);

> -    } else {

> -        next_irq(opaque, NEXT_SCC_I, level);

> -    }

> -}

> -

>  static void next_escc_init(DeviceState *pcdev)

>  {

> -    qemu_irq *ser_irq = qemu_allocate_irqs(next_serial_irq, pcdev,

> 2); DeviceState *dev;

>      SysBusDevice *s;

>  

> @@ -866,8 +851,8 @@ static void next_escc_init(DeviceState *pcdev)

>  

>      s = SYS_BUS_DEVICE(dev);

>      sysbus_realize_and_unref(s, &error_fatal);

> -    sysbus_connect_irq(s, 0, ser_irq[0]);

> -    sysbus_connect_irq(s, 1,  ser_irq[1]);

> +    sysbus_connect_irq(s, 0, qdev_get_gpio_in(pcdev, NEXT_SCC_I));

> +    sysbus_connect_irq(s, 1, qdev_get_gpio_in(pcdev,

> NEXT_SCC_DMA_I)); sysbus_mmio_map(s, 0, 0x2118000);

>  }

>  

> @@ -886,6 +871,8 @@ static void next_pc_realize(DeviceState *dev,

> Error **errp) NeXTPC *s = NEXT_PC(dev);

>      SysBusDevice *sbd = SYS_BUS_DEVICE(dev);

>  

> +    qdev_init_gpio_in(dev, next_irq, NEXT_NUM_IRQS);

> +

>      memory_region_init_io(&s->mmiomem, OBJECT(s), &mmio_ops, s,

>                            "next.mmio", 0xD0000);

>      memory_region_init_io(&s->scrmem, OBJECT(s), &scr_ops, s,


Acked-by: Thomas Huth <huth@tuxfamily.org>
diff mbox series

Patch

diff --git a/include/hw/m68k/next-cube.h b/include/hw/m68k/next-cube.h
index 5a56c354b8e..d38c52d540d 100644
--- a/include/hw/m68k/next-cube.h
+++ b/include/hw/m68k/next-cube.h
@@ -39,7 +39,8 @@  enum next_irqs {
     NEXT_ENRX_DMA_I,
     NEXT_SCSI_DMA_I,
     NEXT_SCC_DMA_I,
-    NEXT_SND_I
+    NEXT_SND_I,
+    NEXT_NUM_IRQS
 };
 
 #endif /* NEXT_CUBE_H */
diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c
index 6b4bcfd4b9b..5a8fc24ed35 100644
--- a/hw/m68k/next-cube.c
+++ b/hw/m68k/next-cube.c
@@ -734,10 +734,6 @@  static const MemoryRegionOps dma_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-/*
- * TODO: set the shift numbers as values in the enum, so the first switch
- * will not be needed
- */
 static void next_irq(void *opaque, int number, int level)
 {
     NeXTPC *s = NEXT_PC(opaque);
@@ -838,19 +834,8 @@  static void next_irq(void *opaque, int number, int level)
     }
 }
 
-static void next_serial_irq(void *opaque, int n, int level)
-{
-    /* DPRINTF("SCC IRQ NUM %i\n",n); */
-    if (n) {
-        next_irq(opaque, NEXT_SCC_DMA_I, level);
-    } else {
-        next_irq(opaque, NEXT_SCC_I, level);
-    }
-}
-
 static void next_escc_init(DeviceState *pcdev)
 {
-    qemu_irq *ser_irq = qemu_allocate_irqs(next_serial_irq, pcdev, 2);
     DeviceState *dev;
     SysBusDevice *s;
 
@@ -866,8 +851,8 @@  static void next_escc_init(DeviceState *pcdev)
 
     s = SYS_BUS_DEVICE(dev);
     sysbus_realize_and_unref(s, &error_fatal);
-    sysbus_connect_irq(s, 0, ser_irq[0]);
-    sysbus_connect_irq(s, 1,  ser_irq[1]);
+    sysbus_connect_irq(s, 0, qdev_get_gpio_in(pcdev, NEXT_SCC_I));
+    sysbus_connect_irq(s, 1, qdev_get_gpio_in(pcdev, NEXT_SCC_DMA_I));
     sysbus_mmio_map(s, 0, 0x2118000);
 }
 
@@ -886,6 +871,8 @@  static void next_pc_realize(DeviceState *dev, Error **errp)
     NeXTPC *s = NEXT_PC(dev);
     SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
 
+    qdev_init_gpio_in(dev, next_irq, NEXT_NUM_IRQS);
+
     memory_region_init_io(&s->mmiomem, OBJECT(s), &mmio_ops, s,
                           "next.mmio", 0xD0000);
     memory_region_init_io(&s->scrmem, OBJECT(s), &scr_ops, s,