* [PATCH 0/7] hw/sysbus: Add sysbus_init_irqs and reduce SYSBUS_DEVICE_GPIO_IRQ scope
@ 2023-05-31 22:33 Philippe Mathieu-Daudé
2023-05-31 22:33 ` [PATCH 1/7] hw/arm/xlnx-versal: Do not open-code sysbus_connect_irq() Philippe Mathieu-Daudé
` (6 more replies)
0 siblings, 7 replies; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-05-31 22:33 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland,
Philippe Mathieu-Daudé
This series:
- Remove uses (out of sysbus.c) to the SYSBUS_DEVICE_GPIO_IRQ
definition, using proper SysBus API methods,
- Reduce SYSBUS_DEVICE_GPIO_IRQ scope, making it SysBus API
internal,
- Convert various for() loops iterating over sysbus_init_irq()
by calling a single sysbus_init_irqs() instead. Mostly an
automatic convertion except 4 files.
The resulting code looks nicer IMHO, and is possibly less
bug prone.
Philippe Mathieu-Daudé (7):
hw/arm/xlnx-versal: Do not open-code sysbus_connect_irq()
hw/usb/xlnx: Do not open-code sysbus_pass_irq()
hw/sysbus: Introduce sysbus_init_irqs()
hw/usb/hcd-xhci: Use sysbus_init_irqs()
hw/sysbus: Make SYSBUS_DEVICE_GPIO_IRQ API internal
hw: Simplify using sysbus_init_irqs() [automatic]
hw: Simplify using sysbus_init_irqs() [manual]
include/hw/sysbus.h | 3 +--
hw/arm/smmuv3.c | 6 +-----
hw/arm/stellaris.c | 5 +----
hw/arm/strongarm.c | 5 +----
hw/arm/versatilepb.c | 5 +----
hw/arm/xlnx-versal.c | 4 +---
hw/char/pl011.c | 5 +----
hw/char/renesas_sci.c | 5 +----
hw/core/platform-bus.c | 5 +----
hw/core/sysbus.c | 9 ++++++++-
hw/dma/pl330.c | 4 +---
hw/dma/sifive_pdma.c | 5 +----
hw/gpio/sifive_gpio.c | 5 +----
hw/i386/kvm/xen_evtchn.c | 5 +----
hw/intc/arm_gic_common.c | 20 +++++---------------
hw/intc/arm_gicv2m.c | 5 +----
hw/intc/exynos4210_combiner.c | 5 +----
hw/intc/loongarch_extioi.c | 7 ++-----
hw/intc/loongson_liointc.c | 5 +----
hw/intc/omap_intc.c | 3 +--
hw/intc/openpic.c | 6 ++----
hw/intc/slavio_intctl.c | 6 ++----
hw/misc/avr_power.c | 4 +---
hw/misc/macio/gpio.c | 5 +----
hw/misc/stm32f4xx_exti.c | 5 +----
hw/net/cadence_gem.c | 5 +----
hw/net/mcf_fec.c | 5 +----
hw/pci-host/designware.c | 5 +----
hw/pci-host/gpex.c | 2 +-
hw/pci-host/ppce500.c | 4 +---
hw/pci-host/raven.c | 4 +---
hw/pci-host/sh_pci.c | 5 +----
hw/pci-host/versatile.c | 4 +---
hw/ppc/ppc405_uc.c | 10 ++--------
hw/ppc/ppc440_uc.c | 6 ++----
hw/ppc/ppc4xx_devs.c | 4 +---
hw/ppc/ppc4xx_pci.c | 5 +----
hw/ssi/ibex_spi_host.c | 5 +----
hw/ssi/imx_spi.c | 5 +----
hw/ssi/sifive_spi.c | 5 +----
hw/ssi/xilinx_spi.c | 5 +----
hw/ssi/xilinx_spips.c | 4 +---
hw/ssi/xlnx-versal-ospi.c | 4 +---
hw/timer/allwinner-a10-pit.c | 4 +---
hw/timer/exynos4210_mct.c | 4 +---
hw/timer/hpet.c | 4 +---
hw/timer/renesas_cmt.c | 5 +----
hw/timer/renesas_tmr.c | 9 +++------
hw/timer/sifive_pwm.c | 5 +----
hw/usb/hcd-xhci-sysbus.c | 5 ++---
hw/usb/xlnx-usb-subsystem.c | 2 +-
51 files changed, 70 insertions(+), 197 deletions(-)
--
2.38.1
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 1/7] hw/arm/xlnx-versal: Do not open-code sysbus_connect_irq()
2023-05-31 22:33 [PATCH 0/7] hw/sysbus: Add sysbus_init_irqs and reduce SYSBUS_DEVICE_GPIO_IRQ scope Philippe Mathieu-Daudé
@ 2023-05-31 22:33 ` Philippe Mathieu-Daudé
2023-06-01 3:02 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 2/7] hw/usb/xlnx: Do not open-code sysbus_pass_irq() Philippe Mathieu-Daudé
` (5 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-05-31 22:33 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland,
Philippe Mathieu-Daudé
The SYSBUS_DEVICE_GPIO_IRQ definition should be internal to
the SysBus API. Here we simply open-coded sysbus_connect_irq().
Replace to use the proper API.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/arm/xlnx-versal.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/hw/arm/xlnx-versal.c b/hw/arm/xlnx-versal.c
index 69b1b99e93..de5af506f7 100644
--- a/hw/arm/xlnx-versal.c
+++ b/hw/arm/xlnx-versal.c
@@ -704,9 +704,7 @@ static void versal_unimp(Versal *s)
gpio_in);
gpio_in = qdev_get_gpio_in_named(DEVICE(s), "irq-parity-imr-dummy", 0);
- qdev_connect_gpio_out_named(DEVICE(&s->pmc.iou.slcr),
- SYSBUS_DEVICE_GPIO_IRQ, 0,
- gpio_in);
+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->pmc.iou.slcr), 0, gpio_in);
}
static void versal_realize(DeviceState *dev, Error **errp)
--
2.38.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 2/7] hw/usb/xlnx: Do not open-code sysbus_pass_irq()
2023-05-31 22:33 [PATCH 0/7] hw/sysbus: Add sysbus_init_irqs and reduce SYSBUS_DEVICE_GPIO_IRQ scope Philippe Mathieu-Daudé
2023-05-31 22:33 ` [PATCH 1/7] hw/arm/xlnx-versal: Do not open-code sysbus_connect_irq() Philippe Mathieu-Daudé
@ 2023-05-31 22:33 ` Philippe Mathieu-Daudé
2023-06-01 3:04 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 3/7] hw/sysbus: Introduce sysbus_init_irqs() Philippe Mathieu-Daudé
` (4 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-05-31 22:33 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland,
Philippe Mathieu-Daudé
The SYSBUS_DEVICE_GPIO_IRQ definition should be internal to
the SysBus API. Here we simply open-coded sysbus_pass_irq().
Replace to use the proper API.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/usb/xlnx-usb-subsystem.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/usb/xlnx-usb-subsystem.c b/hw/usb/xlnx-usb-subsystem.c
index d8deeb6ced..462ce6c3ff 100644
--- a/hw/usb/xlnx-usb-subsystem.c
+++ b/hw/usb/xlnx-usb-subsystem.c
@@ -49,7 +49,7 @@ static void versal_usb2_realize(DeviceState *dev, Error **errp)
}
sysbus_init_mmio(sbd, &s->dwc3_mr);
sysbus_init_mmio(sbd, &s->usb2Ctrl_mr);
- qdev_pass_gpios(DEVICE(&s->dwc3.sysbus_xhci), dev, SYSBUS_DEVICE_GPIO_IRQ);
+ sysbus_pass_irq(sbd, SYS_BUS_DEVICE(&s->dwc3.sysbus_xhci));
}
static void versal_usb2_init(Object *obj)
--
2.38.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 3/7] hw/sysbus: Introduce sysbus_init_irqs()
2023-05-31 22:33 [PATCH 0/7] hw/sysbus: Add sysbus_init_irqs and reduce SYSBUS_DEVICE_GPIO_IRQ scope Philippe Mathieu-Daudé
2023-05-31 22:33 ` [PATCH 1/7] hw/arm/xlnx-versal: Do not open-code sysbus_connect_irq() Philippe Mathieu-Daudé
2023-05-31 22:33 ` [PATCH 2/7] hw/usb/xlnx: Do not open-code sysbus_pass_irq() Philippe Mathieu-Daudé
@ 2023-05-31 22:33 ` Philippe Mathieu-Daudé
2023-06-01 3:08 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 4/7] hw/usb/hcd-xhci: Use sysbus_init_irqs() Philippe Mathieu-Daudé
` (3 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-05-31 22:33 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland,
Philippe Mathieu-Daudé
The SysBus API currently only provides a method to initialize
a single IRQ: sysbus_init_irq(). When we want to initialize
multiple SysBus IRQs, we have to call this function multiple
times. In order to allow further simplifications, introduce
the sysbus_init_irqs() method.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/sysbus.h | 1 +
hw/core/sysbus.c | 7 ++++++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h
index 3564b7b6a2..bc174b2dc3 100644
--- a/include/hw/sysbus.h
+++ b/include/hw/sysbus.h
@@ -70,6 +70,7 @@ typedef void FindSysbusDeviceFunc(SysBusDevice *sbdev, void *opaque);
void sysbus_init_mmio(SysBusDevice *dev, MemoryRegion *memory);
MemoryRegion *sysbus_mmio_get_region(SysBusDevice *dev, int n);
void sysbus_init_irq(SysBusDevice *dev, qemu_irq *p);
+void sysbus_init_irqs(SysBusDevice *dev, qemu_irq *p, unsigned count);
void sysbus_pass_irq(SysBusDevice *dev, SysBusDevice *target);
void sysbus_init_ioports(SysBusDevice *dev, uint32_t ioport, uint32_t size);
diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
index 35f902b582..a1b4c362c9 100644
--- a/hw/core/sysbus.c
+++ b/hw/core/sysbus.c
@@ -175,10 +175,15 @@ void sysbus_mmio_map_overlap(SysBusDevice *dev, int n, hwaddr addr,
sysbus_mmio_map_common(dev, n, addr, true, priority);
}
+void sysbus_init_irqs(SysBusDevice *dev, qemu_irq *p, unsigned count)
+{
+ qdev_init_gpio_out_named(DEVICE(dev), p, SYSBUS_DEVICE_GPIO_IRQ, count);
+}
+
/* Request an IRQ source. The actual IRQ object may be populated later. */
void sysbus_init_irq(SysBusDevice *dev, qemu_irq *p)
{
- qdev_init_gpio_out_named(DEVICE(dev), p, SYSBUS_DEVICE_GPIO_IRQ, 1);
+ sysbus_init_irqs(dev, p, 1);
}
/* Pass IRQs from a target device. */
--
2.38.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 4/7] hw/usb/hcd-xhci: Use sysbus_init_irqs()
2023-05-31 22:33 [PATCH 0/7] hw/sysbus: Add sysbus_init_irqs and reduce SYSBUS_DEVICE_GPIO_IRQ scope Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2023-05-31 22:33 ` [PATCH 3/7] hw/sysbus: Introduce sysbus_init_irqs() Philippe Mathieu-Daudé
@ 2023-05-31 22:33 ` Philippe Mathieu-Daudé
2023-06-01 3:09 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 5/7] hw/sysbus: Make SYSBUS_DEVICE_GPIO_IRQ API internal Philippe Mathieu-Daudé
` (2 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-05-31 22:33 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland,
Philippe Mathieu-Daudé
The SYSBUS_DEVICE_GPIO_IRQ definition should be internal to
the SysBus API. Use the recently introduced sysbus_init_irqs()
method to avoid using this internal definition.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/usb/hcd-xhci-sysbus.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/hw/usb/hcd-xhci-sysbus.c b/hw/usb/hcd-xhci-sysbus.c
index faf57b4797..e512849b34 100644
--- a/hw/usb/hcd-xhci-sysbus.c
+++ b/hw/usb/hcd-xhci-sysbus.c
@@ -40,9 +40,6 @@ static void xhci_sysbus_realize(DeviceState *dev, Error **errp)
if (!qdev_realize(DEVICE(&s->xhci), NULL, errp)) {
return;
}
- s->irq = g_new0(qemu_irq, s->xhci.numintrs);
- qdev_init_gpio_out_named(dev, s->irq, SYSBUS_DEVICE_GPIO_IRQ,
- s->xhci.numintrs);
if (s->xhci.dma_mr) {
s->xhci.as = g_malloc0(sizeof(AddressSpace));
address_space_init(s->xhci.as, s->xhci.dma_mr, NULL);
@@ -50,6 +47,8 @@ static void xhci_sysbus_realize(DeviceState *dev, Error **errp)
s->xhci.as = &address_space_memory;
}
+ s->irq = g_new0(qemu_irq, s->xhci.numintrs);
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, s->xhci.numintrs);
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->xhci.mem);
}
--
2.38.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 5/7] hw/sysbus: Make SYSBUS_DEVICE_GPIO_IRQ API internal
2023-05-31 22:33 [PATCH 0/7] hw/sysbus: Add sysbus_init_irqs and reduce SYSBUS_DEVICE_GPIO_IRQ scope Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2023-05-31 22:33 ` [PATCH 4/7] hw/usb/hcd-xhci: Use sysbus_init_irqs() Philippe Mathieu-Daudé
@ 2023-05-31 22:33 ` Philippe Mathieu-Daudé
2023-06-01 3:10 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 6/7] hw: Simplify using sysbus_init_irqs() [automatic] Philippe Mathieu-Daudé
2023-05-31 22:33 ` [PATCH 7/7] hw: Simplify using sysbus_init_irqs() [manual] Philippe Mathieu-Daudé
6 siblings, 1 reply; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-05-31 22:33 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland,
Philippe Mathieu-Daudé
Since we don't have any use of the SYSBUS_DEVICE_GPIO_IRQ definition
outside of sysbus.c, we can reduce its scope, making it internal to
the API.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/sysbus.h | 2 --
hw/core/sysbus.c | 2 ++
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h
index bc174b2dc3..cdd83c555e 100644
--- a/include/hw/sysbus.h
+++ b/include/hw/sysbus.h
@@ -26,8 +26,6 @@ OBJECT_DECLARE_TYPE(SysBusDevice, SysBusDeviceClass,
* classes overriding it are not required to invoke its implementation.
*/
-#define SYSBUS_DEVICE_GPIO_IRQ "sysbus-irq"
-
struct SysBusDeviceClass {
/*< private >*/
DeviceClass parent_class;
diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
index a1b4c362c9..f0ba57dcbf 100644
--- a/hw/core/sysbus.c
+++ b/hw/core/sysbus.c
@@ -24,6 +24,8 @@
#include "monitor/monitor.h"
#include "exec/address-spaces.h"
+#define SYSBUS_DEVICE_GPIO_IRQ "sysbus-irq"
+
static void sysbus_dev_print(Monitor *mon, DeviceState *dev, int indent);
static char *sysbus_get_fw_dev_path(DeviceState *dev);
--
2.38.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 6/7] hw: Simplify using sysbus_init_irqs() [automatic]
2023-05-31 22:33 [PATCH 0/7] hw/sysbus: Add sysbus_init_irqs and reduce SYSBUS_DEVICE_GPIO_IRQ scope Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2023-05-31 22:33 ` [PATCH 5/7] hw/sysbus: Make SYSBUS_DEVICE_GPIO_IRQ API internal Philippe Mathieu-Daudé
@ 2023-05-31 22:33 ` Philippe Mathieu-Daudé
2023-06-01 3:11 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 7/7] hw: Simplify using sysbus_init_irqs() [manual] Philippe Mathieu-Daudé
6 siblings, 1 reply; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-05-31 22:33 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland,
Philippe Mathieu-Daudé
Change created mechanically using the following coccinelle
semantic patch:
@@
expression array;
identifier i;
expression sbd, count;
@@
- for (i = 0; i < count; i++) {
- sysbus_init_irq(sbd, &array[i]);
- }
+ sysbus_init_irqs(sbd, array, count);
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/arm/smmuv3.c | 6 +-----
hw/arm/stellaris.c | 5 +----
hw/arm/strongarm.c | 5 +----
hw/arm/versatilepb.c | 5 +----
hw/char/pl011.c | 5 +----
hw/char/renesas_sci.c | 5 +----
hw/core/platform-bus.c | 5 +----
hw/dma/pl330.c | 4 +---
hw/dma/sifive_pdma.c | 5 +----
hw/gpio/sifive_gpio.c | 5 +----
hw/i386/kvm/xen_evtchn.c | 5 +----
hw/intc/arm_gic_common.c | 20 +++++---------------
hw/intc/arm_gicv2m.c | 5 +----
hw/intc/exynos4210_combiner.c | 5 +----
hw/intc/loongarch_extioi.c | 6 ++----
hw/intc/loongson_liointc.c | 5 +----
hw/intc/openpic.c | 6 ++----
hw/intc/slavio_intctl.c | 6 ++----
hw/misc/avr_power.c | 4 +---
hw/misc/macio/gpio.c | 5 +----
hw/misc/stm32f4xx_exti.c | 5 +----
hw/net/cadence_gem.c | 5 +----
hw/net/mcf_fec.c | 5 +----
hw/pci-host/designware.c | 5 +----
hw/pci-host/ppce500.c | 4 +---
hw/pci-host/raven.c | 4 +---
hw/pci-host/sh_pci.c | 5 +----
hw/pci-host/versatile.c | 4 +---
hw/ppc/ppc405_uc.c | 10 ++--------
hw/ppc/ppc440_uc.c | 6 ++----
hw/ppc/ppc4xx_devs.c | 4 +---
hw/ppc/ppc4xx_pci.c | 5 +----
hw/ssi/ibex_spi_host.c | 5 +----
hw/ssi/imx_spi.c | 5 +----
hw/ssi/sifive_spi.c | 5 +----
hw/ssi/xilinx_spi.c | 5 +----
hw/ssi/xilinx_spips.c | 4 +---
hw/ssi/xlnx-versal-ospi.c | 4 +---
hw/timer/allwinner-a10-pit.c | 4 +---
hw/timer/exynos4210_mct.c | 4 +---
hw/timer/hpet.c | 4 +---
hw/timer/renesas_cmt.c | 5 +----
hw/timer/sifive_pwm.c | 5 +----
43 files changed, 52 insertions(+), 177 deletions(-)
diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c
index 932f009697..f080d97d3f 100644
--- a/hw/arm/smmuv3.c
+++ b/hw/arm/smmuv3.c
@@ -1692,11 +1692,7 @@ static const MemoryRegionOps smmu_mem_ops = {
static void smmu_init_irq(SMMUv3State *s, SysBusDevice *dev)
{
- int i;
-
- for (i = 0; i < ARRAY_SIZE(s->irq); i++) {
- sysbus_init_irq(dev, &s->irq[i]);
- }
+ sysbus_init_irqs(dev, s->irq, ARRAY_SIZE(s->irq));
}
static void smmu_reset_hold(Object *obj)
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
index f7e99baf62..4bf9ef05c8 100644
--- a/hw/arm/stellaris.c
+++ b/hw/arm/stellaris.c
@@ -934,11 +934,8 @@ static void stellaris_adc_init(Object *obj)
DeviceState *dev = DEVICE(obj);
StellarisADCState *s = STELLARIS_ADC(obj);
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
- int n;
- for (n = 0; n < 4; n++) {
- sysbus_init_irq(sbd, &s->irq[n]);
- }
+ sysbus_init_irqs(sbd, s->irq, 4);
memory_region_init_io(&s->iomem, obj, &stellaris_adc_ops, s,
"adc", 0x1000);
diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
index cc73145053..f785dcf08e 100644
--- a/hw/arm/strongarm.c
+++ b/hw/arm/strongarm.c
@@ -658,7 +658,6 @@ static void strongarm_gpio_initfn(Object *obj)
DeviceState *dev = DEVICE(obj);
StrongARMGPIOInfo *s = STRONGARM_GPIO(obj);
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
- int i;
qdev_init_gpio_in(dev, strongarm_gpio_set, 28);
qdev_init_gpio_out(dev, s->handler, 28);
@@ -667,9 +666,7 @@ static void strongarm_gpio_initfn(Object *obj)
"gpio", 0x1000);
sysbus_init_mmio(sbd, &s->iomem);
- for (i = 0; i < 11; i++) {
- sysbus_init_irq(sbd, &s->irqs[i]);
- }
+ sysbus_init_irqs(sbd, s->irqs, 11);
sysbus_init_irq(sbd, &s->irqX);
}
diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c
index 05b9462a5b..6a5b1fc53e 100644
--- a/hw/arm/versatilepb.c
+++ b/hw/arm/versatilepb.c
@@ -160,12 +160,9 @@ static void vpb_sic_init(Object *obj)
DeviceState *dev = DEVICE(obj);
vpb_sic_state *s = VERSATILE_PB_SIC(obj);
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
- int i;
qdev_init_gpio_in(dev, vpb_sic_set_irq, 32);
- for (i = 0; i < 32; i++) {
- sysbus_init_irq(sbd, &s->parent[i]);
- }
+ sysbus_init_irqs(sbd, s->parent, 32);
s->irq = 31;
memory_region_init_io(&s->iomem, obj, &vpb_sic_ops, s,
"vpb-sic", 0x1000);
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index 77bbc2a982..2056e32385 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -442,13 +442,10 @@ static void pl011_init(Object *obj)
{
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
PL011State *s = PL011(obj);
- int i;
memory_region_init_io(&s->iomem, OBJECT(s), &pl011_ops, s, "pl011", 0x1000);
sysbus_init_mmio(sbd, &s->iomem);
- for (i = 0; i < ARRAY_SIZE(s->irq); i++) {
- sysbus_init_irq(sbd, &s->irq[i]);
- }
+ sysbus_init_irqs(sbd, s->irq, ARRAY_SIZE(s->irq));
s->clk = qdev_init_clock_in(DEVICE(obj), "clk", pl011_clock_update, s,
ClockUpdate);
diff --git a/hw/char/renesas_sci.c b/hw/char/renesas_sci.c
index 1c63467290..d404976279 100644
--- a/hw/char/renesas_sci.c
+++ b/hw/char/renesas_sci.c
@@ -286,15 +286,12 @@ static void rsci_init(Object *obj)
{
SysBusDevice *d = SYS_BUS_DEVICE(obj);
RSCIState *sci = RSCI(obj);
- int i;
memory_region_init_io(&sci->memory, OBJECT(sci), &sci_ops,
sci, "renesas-sci", 0x8);
sysbus_init_mmio(d, &sci->memory);
- for (i = 0; i < SCI_NR_IRQ; i++) {
- sysbus_init_irq(d, &sci->irq[i]);
- }
+ sysbus_init_irqs(d, sci->irq, SCI_NR_IRQ);
timer_init_ns(&sci->timer, QEMU_CLOCK_VIRTUAL, txend, sci);
}
diff --git a/hw/core/platform-bus.c b/hw/core/platform-bus.c
index b8487b26b6..5e75324434 100644
--- a/hw/core/platform-bus.c
+++ b/hw/core/platform-bus.c
@@ -182,7 +182,6 @@ static void platform_bus_realize(DeviceState *dev, Error **errp)
{
PlatformBusDevice *pbus;
SysBusDevice *d;
- int i;
d = SYS_BUS_DEVICE(dev);
pbus = PLATFORM_BUS_DEVICE(dev);
@@ -193,9 +192,7 @@ static void platform_bus_realize(DeviceState *dev, Error **errp)
pbus->used_irqs = bitmap_new(pbus->num_irqs);
pbus->irqs = g_new0(qemu_irq, pbus->num_irqs);
- for (i = 0; i < pbus->num_irqs; i++) {
- sysbus_init_irq(d, &pbus->irqs[i]);
- }
+ sysbus_init_irqs(d, pbus->irqs, pbus->num_irqs);
/* some devices might be initialized before so update used IRQs map */
plaform_bus_refresh_irqs(pbus);
diff --git a/hw/dma/pl330.c b/hw/dma/pl330.c
index e7e67dd8b6..d1c24fa7b8 100644
--- a/hw/dma/pl330.c
+++ b/hw/dma/pl330.c
@@ -1620,9 +1620,7 @@ static void pl330_realize(DeviceState *dev, Error **errp)
s->manager.is_manager = true;
s->irq = g_new0(qemu_irq, s->num_events);
- for (i = 0; i < s->num_events; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, s->num_events);
qdev_init_gpio_in(dev, pl330_dma_stop_irq, PL330_PERIPH_NUM);
diff --git a/hw/dma/sifive_pdma.c b/hw/dma/sifive_pdma.c
index 1dd88f3479..61c138323b 100644
--- a/hw/dma/sifive_pdma.c
+++ b/hw/dma/sifive_pdma.c
@@ -454,15 +454,12 @@ static const MemoryRegionOps sifive_pdma_ops = {
static void sifive_pdma_realize(DeviceState *dev, Error **errp)
{
SiFivePDMAState *s = SIFIVE_PDMA(dev);
- int i;
memory_region_init_io(&s->iomem, OBJECT(dev), &sifive_pdma_ops, s,
TYPE_SIFIVE_PDMA, SIFIVE_PDMA_REG_SIZE);
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
- for (i = 0; i < SIFIVE_PDMA_IRQS; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, SIFIVE_PDMA_IRQS);
}
static void sifive_pdma_class_init(ObjectClass *klass, void *data)
diff --git a/hw/gpio/sifive_gpio.c b/hw/gpio/sifive_gpio.c
index 78bf29e996..fcb863a3ef 100644
--- a/hw/gpio/sifive_gpio.c
+++ b/hw/gpio/sifive_gpio.c
@@ -362,10 +362,7 @@ static void sifive_gpio_realize(DeviceState *dev, Error **errp)
TYPE_SIFIVE_GPIO, SIFIVE_GPIO_SIZE);
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->mmio);
-
- for (int i = 0; i < s->ngpio; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, s->ngpio);
qdev_init_gpio_in(DEVICE(s), sifive_gpio_set, s->ngpio);
qdev_init_gpio_out(DEVICE(s), s->output, s->ngpio);
diff --git a/hw/i386/kvm/xen_evtchn.c b/hw/i386/kvm/xen_evtchn.c
index 3048329474..12c4419907 100644
--- a/hw/i386/kvm/xen_evtchn.c
+++ b/hw/i386/kvm/xen_evtchn.c
@@ -303,16 +303,13 @@ void xen_evtchn_create(void)
{
XenEvtchnState *s = XEN_EVTCHN(sysbus_create_simple(TYPE_XEN_EVTCHN,
-1, NULL));
- int i;
xen_evtchn_singleton = s;
qemu_mutex_init(&s->port_lock);
s->gsi_bh = aio_bh_new(qemu_get_aio_context(), gsi_assert_bh, s);
- for (i = 0; i < IOAPIC_NUM_PINS; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(s), &s->gsis[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(s), s->gsis, IOAPIC_NUM_PINS);
/*
* The Xen scheme for encoding PIRQ# into an MSI message is not
diff --git a/hw/intc/arm_gic_common.c b/hw/intc/arm_gic_common.c
index a379cea395..1742c752eb 100644
--- a/hw/intc/arm_gic_common.c
+++ b/hw/intc/arm_gic_common.c
@@ -143,22 +143,12 @@ void gic_init_irqs_and_mmio(GICState *s, qemu_irq_handler handler,
i += (GIC_INTERNAL * s->num_cpu);
qdev_init_gpio_in(DEVICE(s), handler, i);
- for (i = 0; i < s->num_cpu; i++) {
- sysbus_init_irq(sbd, &s->parent_irq[i]);
- }
- for (i = 0; i < s->num_cpu; i++) {
- sysbus_init_irq(sbd, &s->parent_fiq[i]);
- }
- for (i = 0; i < s->num_cpu; i++) {
- sysbus_init_irq(sbd, &s->parent_virq[i]);
- }
- for (i = 0; i < s->num_cpu; i++) {
- sysbus_init_irq(sbd, &s->parent_vfiq[i]);
- }
+ sysbus_init_irqs(sbd, s->parent_irq, s->num_cpu);
+ sysbus_init_irqs(sbd, s->parent_fiq, s->num_cpu);
+ sysbus_init_irqs(sbd, s->parent_virq, s->num_cpu);
+ sysbus_init_irqs(sbd, s->parent_vfiq, s->num_cpu);
if (s->virt_extn) {
- for (i = 0; i < s->num_cpu; i++) {
- sysbus_init_irq(sbd, &s->maintenance_irq[i]);
- }
+ sysbus_init_irqs(sbd, s->maintenance_irq, s->num_cpu);
}
/* Distributor */
diff --git a/hw/intc/arm_gicv2m.c b/hw/intc/arm_gicv2m.c
index d564b857eb..8167d5886c 100644
--- a/hw/intc/arm_gicv2m.c
+++ b/hw/intc/arm_gicv2m.c
@@ -135,7 +135,6 @@ static const MemoryRegionOps gicv2m_ops = {
static void gicv2m_realize(DeviceState *dev, Error **errp)
{
ARMGICv2mState *s = ARM_GICV2M(dev);
- int i;
if (s->num_spi > GICV2M_NUM_SPI_MAX) {
error_setg(errp,
@@ -151,9 +150,7 @@ static void gicv2m_realize(DeviceState *dev, Error **errp)
return;
}
- for (i = 0; i < s->num_spi; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->spi[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->spi, s->num_spi);
msi_nonbroken = true;
kvm_gsi_direct_mapping = true;
diff --git a/hw/intc/exynos4210_combiner.c b/hw/intc/exynos4210_combiner.c
index 4ba448fdb1..eb793e5623 100644
--- a/hw/intc/exynos4210_combiner.c
+++ b/hw/intc/exynos4210_combiner.c
@@ -309,16 +309,13 @@ static void exynos4210_combiner_init(Object *obj)
DeviceState *dev = DEVICE(obj);
Exynos4210CombinerState *s = EXYNOS4210_COMBINER(obj);
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
- unsigned int i;
/* Allocate general purpose input signals and connect a handler to each of
* them */
qdev_init_gpio_in(dev, exynos4210_combiner_handler, IIC_NIRQ);
/* Connect SysBusDev irqs to device specific irqs */
- for (i = 0; i < IIC_NGRP; i++) {
- sysbus_init_irq(sbd, &s->output_irq[i]);
- }
+ sysbus_init_irqs(sbd, s->output_irq, IIC_NGRP);
memory_region_init_io(&s->iomem, obj, &exynos4210_combiner_ops, s,
"exynos4210-combiner", IIC_REGION_SIZE);
diff --git a/hw/intc/loongarch_extioi.c b/hw/intc/loongarch_extioi.c
index 0e7a3e32f3..db941de20e 100644
--- a/hw/intc/loongarch_extioi.c
+++ b/hw/intc/loongarch_extioi.c
@@ -273,11 +273,9 @@ static void loongarch_extioi_instance_init(Object *obj)
{
SysBusDevice *dev = SYS_BUS_DEVICE(obj);
LoongArchExtIOI *s = LOONGARCH_EXTIOI(obj);
- int i, cpu, pin;
+ int cpu, pin;
- for (i = 0; i < EXTIOI_IRQS; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, EXTIOI_IRQS);
qdev_init_gpio_in(DEVICE(obj), extioi_setirq, EXTIOI_IRQS);
diff --git a/hw/intc/loongson_liointc.c b/hw/intc/loongson_liointc.c
index cc11b544cb..37b5f473d4 100644
--- a/hw/intc/loongson_liointc.c
+++ b/hw/intc/loongson_liointc.c
@@ -221,13 +221,10 @@ static void irq_handler(void *opaque, int irq, int level)
static void loongson_liointc_init(Object *obj)
{
struct loongson_liointc *p = LOONGSON_LIOINTC(obj);
- int i;
qdev_init_gpio_in(DEVICE(obj), irq_handler, 32);
- for (i = 0; i < NUM_PARENTS; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(obj), &p->parent_irq[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(obj), p->parent_irq, NUM_PARENTS);
memory_region_init_io(&p->mmio, obj, &pic_ops, p,
TYPE_LOONGSON_LIOINTC, R_END);
diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c
index c757adbe53..da9b833c33 100644
--- a/hw/intc/openpic.c
+++ b/hw/intc/openpic.c
@@ -1505,7 +1505,7 @@ static void openpic_realize(DeviceState *dev, Error **errp)
{
SysBusDevice *d = SYS_BUS_DEVICE(dev);
OpenPICState *opp = OPENPIC(dev);
- int i, j;
+ int i;
int list_count = 0;
static const MemReg list_le[] = {
{"glb", &openpic_glb_ops_le,
@@ -1597,9 +1597,7 @@ static void openpic_realize(DeviceState *dev, Error **errp)
for (i = 0; i < opp->nb_cpus; i++) {
opp->dst[i].irqs = g_new0(qemu_irq, OPENPIC_OUTPUT_NB);
- for (j = 0; j < OPENPIC_OUTPUT_NB; j++) {
- sysbus_init_irq(d, &opp->dst[i].irqs[j]);
- }
+ sysbus_init_irqs(d, opp->dst[i].irqs, OPENPIC_OUTPUT_NB);
opp->dst[i].raised.queue_size = IRQQUEUE_SIZE_BITS;
opp->dst[i].raised.queue = bitmap_new(IRQQUEUE_SIZE_BITS);
diff --git a/hw/intc/slavio_intctl.c b/hw/intc/slavio_intctl.c
index f7e59ba643..e2a3bd3e86 100644
--- a/hw/intc/slavio_intctl.c
+++ b/hw/intc/slavio_intctl.c
@@ -419,7 +419,7 @@ static void slavio_intctl_init(Object *obj)
DeviceState *dev = DEVICE(obj);
SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
- unsigned int i, j;
+ unsigned int i;
char slave_name[45];
qdev_init_gpio_in(dev, slavio_set_irq_all, 32 + MAX_CPUS);
@@ -430,9 +430,7 @@ static void slavio_intctl_init(Object *obj)
for (i = 0; i < MAX_CPUS; i++) {
snprintf(slave_name, sizeof(slave_name),
"slave-interrupt-controller-%i", i);
- for (j = 0; j < MAX_PILS; j++) {
- sysbus_init_irq(sbd, &s->cpu_irqs[i][j]);
- }
+ sysbus_init_irqs(sbd, s->cpu_irqs[i], MAX_PILS);
memory_region_init_io(&s->slaves[i].iomem, OBJECT(s),
&slavio_intctl_mem_ops,
&s->slaves[i], slave_name, INTCTL_SIZE);
diff --git a/hw/misc/avr_power.c b/hw/misc/avr_power.c
index a5412f2cfe..5c6806ecbc 100644
--- a/hw/misc/avr_power.c
+++ b/hw/misc/avr_power.c
@@ -83,10 +83,8 @@ static void avr_mask_init(Object *dev)
memory_region_init_io(&s->iomem, dev, &avr_mask_ops, s, TYPE_AVR_MASK,
0x01);
sysbus_init_mmio(busdev, &s->iomem);
+ sysbus_init_irqs(busdev, s->irq, 8);
- for (int i = 0; i < 8; i++) {
- sysbus_init_irq(busdev, &s->irq[i]);
- }
s->val = 0x00;
}
diff --git a/hw/misc/macio/gpio.c b/hw/misc/macio/gpio.c
index 4deb330471..bfbcf4ed87 100644
--- a/hw/misc/macio/gpio.c
+++ b/hw/misc/macio/gpio.c
@@ -153,11 +153,8 @@ static void macio_gpio_init(Object *obj)
{
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
MacIOGPIOState *s = MACIO_GPIO(obj);
- int i;
- for (i = 0; i < 10; i++) {
- sysbus_init_irq(sbd, &s->gpio_extirqs[i]);
- }
+ sysbus_init_irqs(sbd, s->gpio_extirqs, 10);
memory_region_init_io(&s->gpiomem, OBJECT(s), &macio_gpio_ops, obj,
"gpio", 0x30);
diff --git a/hw/misc/stm32f4xx_exti.c b/hw/misc/stm32f4xx_exti.c
index 02e7810046..3bfefbf49b 100644
--- a/hw/misc/stm32f4xx_exti.c
+++ b/hw/misc/stm32f4xx_exti.c
@@ -135,11 +135,8 @@ static const MemoryRegionOps stm32f4xx_exti_ops = {
static void stm32f4xx_exti_init(Object *obj)
{
STM32F4xxExtiState *s = STM32F4XX_EXTI(obj);
- int i;
- for (i = 0; i < NUM_INTERRUPT_OUT_LINES; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(obj), s->irq, NUM_INTERRUPT_OUT_LINES);
memory_region_init_io(&s->mmio, obj, &stm32f4xx_exti_ops, s,
TYPE_STM32F4XX_EXTI, 0x400);
diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
index 42ea2411a2..2a2293e0cc 100644
--- a/hw/net/cadence_gem.c
+++ b/hw/net/cadence_gem.c
@@ -1606,7 +1606,6 @@ static NetClientInfo net_gem_info = {
static void gem_realize(DeviceState *dev, Error **errp)
{
CadenceGEMState *s = CADENCE_GEM(dev);
- int i;
address_space_init(&s->dma_as,
s->dma_mr ? s->dma_mr : get_system_memory(), "dma");
@@ -1626,9 +1625,7 @@ static void gem_realize(DeviceState *dev, Error **errp)
return;
}
- for (i = 0; i < s->num_priority_queues; ++i) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, s->num_priority_queues);
qemu_macaddr_default_if_unset(&s->conf.macaddr);
diff --git a/hw/net/mcf_fec.c b/hw/net/mcf_fec.c
index 8aa27bd322..34d5ecce5e 100644
--- a/hw/net/mcf_fec.c
+++ b/hw/net/mcf_fec.c
@@ -651,13 +651,10 @@ static void mcf_fec_instance_init(Object *obj)
{
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
mcf_fec_state *s = MCF_FEC_NET(obj);
- int i;
memory_region_init_io(&s->iomem, obj, &mcf_fec_ops, s, "fec", 0x400);
sysbus_init_mmio(sbd, &s->iomem);
- for (i = 0; i < FEC_NUM_IRQ; i++) {
- sysbus_init_irq(sbd, &s->irq[i]);
- }
+ sysbus_init_irqs(sbd, s->irq, FEC_NUM_IRQ);
}
static Property mcf_fec_properties[] = {
diff --git a/hw/pci-host/designware.c b/hw/pci-host/designware.c
index 9e183caa48..b75fd3d5f5 100644
--- a/hw/pci-host/designware.c
+++ b/hw/pci-host/designware.c
@@ -668,11 +668,8 @@ static void designware_pcie_host_realize(DeviceState *dev, Error **errp)
PCIHostState *pci = PCI_HOST_BRIDGE(dev);
DesignwarePCIEHost *s = DESIGNWARE_PCIE_HOST(dev);
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
- size_t i;
- for (i = 0; i < ARRAY_SIZE(s->pci.irqs); i++) {
- sysbus_init_irq(sbd, &s->pci.irqs[i]);
- }
+ sysbus_init_irqs(sbd, s->pci.irqs, ARRAY_SIZE(s->pci.irqs));
memory_region_init_io(&s->mmio,
OBJECT(s),
diff --git a/hw/pci-host/ppce500.c b/hw/pci-host/ppce500.c
index 38814247f2..98ee49e4ee 100644
--- a/hw/pci-host/ppce500.c
+++ b/hw/pci-host/ppce500.c
@@ -446,9 +446,7 @@ static void e500_pcihost_realize(DeviceState *dev, Error **errp)
h = PCI_HOST_BRIDGE(dev);
s = PPC_E500_PCI_HOST_BRIDGE(dev);
- for (i = 0; i < ARRAY_SIZE(s->irq); i++) {
- sysbus_init_irq(sbd, &s->irq[i]);
- }
+ sysbus_init_irqs(sbd, s->irq, ARRAY_SIZE(s->irq));
for (i = 0; i < PCI_NUM_PINS; i++) {
s->irq_num[i] = s->first_pin_irq + i;
diff --git a/hw/pci-host/raven.c b/hw/pci-host/raven.c
index 9a11ac4b2b..dd22964c27 100644
--- a/hw/pci-host/raven.c
+++ b/hw/pci-host/raven.c
@@ -239,9 +239,7 @@ static void raven_pcihost_realizefn(DeviceState *d, Error **errp)
int i;
if (s->is_legacy_prep) {
- for (i = 0; i < PCI_NUM_PINS; i++) {
- sysbus_init_irq(dev, &s->pci_irqs[i]);
- }
+ sysbus_init_irqs(dev, s->pci_irqs, PCI_NUM_PINS);
} else {
/* According to PReP specification section 6.1.6 "System Interrupt
* Assignments", all PCI interrupts are routed via IRQ 15 */
diff --git a/hw/pci-host/sh_pci.c b/hw/pci-host/sh_pci.c
index 77e7bbc65f..6aade6e5d7 100644
--- a/hw/pci-host/sh_pci.c
+++ b/hw/pci-host/sh_pci.c
@@ -121,11 +121,8 @@ static void sh_pci_device_realize(DeviceState *dev, Error **errp)
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
SHPCIState *s = SH_PCI_HOST_BRIDGE(dev);
PCIHostState *phb = PCI_HOST_BRIDGE(s);
- int i;
- for (i = 0; i < 4; i++) {
- sysbus_init_irq(sbd, &s->irq[i]);
- }
+ sysbus_init_irqs(sbd, s->irq, 4);
phb->bus = pci_register_root_bus(dev, "pci",
sh_pci_set_irq, sh_pci_map_irq,
s->irq,
diff --git a/hw/pci-host/versatile.c b/hw/pci-host/versatile.c
index 60d4e7cd92..3eb9ad6f5c 100644
--- a/hw/pci-host/versatile.c
+++ b/hw/pci-host/versatile.c
@@ -412,9 +412,7 @@ static void pci_vpb_realize(DeviceState *dev, Error **errp)
object_initialize(&s->pci_dev, sizeof(s->pci_dev), TYPE_VERSATILE_PCI_HOST);
- for (i = 0; i < 4; i++) {
- sysbus_init_irq(sbd, &s->irq[i]);
- }
+ sysbus_init_irqs(sbd, s->irq, 4);
if (s->realview) {
mapfn = pci_vpb_rv_map_irq;
diff --git a/hw/ppc/ppc405_uc.c b/hw/ppc/ppc405_uc.c
index 0cc68178ad..5faa40a9d4 100644
--- a/hw/ppc/ppc405_uc.c
+++ b/hw/ppc/ppc405_uc.c
@@ -265,11 +265,8 @@ static void ppc405_dma_realize(DeviceState *dev, Error **errp)
{
Ppc405DmaState *dma = PPC405_DMA(dev);
Ppc4xxDcrDeviceState *dcr = PPC4xx_DCR_DEVICE(dev);
- int i;
- for (i = 0; i < ARRAY_SIZE(dma->irqs); i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(dma), &dma->irqs[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dma), dma->irqs, ARRAY_SIZE(dma->irqs));
ppc4xx_dcr_register(dcr, DMA0_CR0, dma, &dcr_read_dma, &dcr_write_dma);
ppc4xx_dcr_register(dcr, DMA0_CT0, dma, &dcr_read_dma, &dcr_write_dma);
@@ -702,15 +699,12 @@ static void ppc405_gpt_realize(DeviceState *dev, Error **errp)
{
Ppc405GptState *s = PPC405_GPT(dev);
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
- int i;
s->timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, &ppc4xx_gpt_cb, s);
memory_region_init_io(&s->iomem, OBJECT(s), &gpt_ops, s, "gpt", 0xd4);
sysbus_init_mmio(sbd, &s->iomem);
- for (i = 0; i < ARRAY_SIZE(s->irqs); i++) {
- sysbus_init_irq(sbd, &s->irqs[i]);
- }
+ sysbus_init_irqs(sbd, s->irqs, ARRAY_SIZE(s->irqs));
}
static void ppc405_gpt_finalize(Object *obj)
diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c
index 651263926e..89e16766e4 100644
--- a/hw/ppc/ppc440_uc.c
+++ b/hw/ppc/ppc440_uc.c
@@ -1004,7 +1004,7 @@ static void ppc460ex_pcie_realize(DeviceState *dev, Error **errp)
{
PPC460EXPCIEState *s = PPC460EX_PCIE_HOST(dev);
PCIHostState *pci = PCI_HOST_BRIDGE(dev);
- int i, id;
+ int id;
char buf[16];
switch (s->dcrn_base) {
@@ -1020,9 +1020,7 @@ static void ppc460ex_pcie_realize(DeviceState *dev, Error **errp)
}
snprintf(buf, sizeof(buf), "pcie%d-io", id);
memory_region_init(&s->iomem, OBJECT(s), buf, UINT64_MAX);
- for (i = 0; i < 4; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, 4);
snprintf(buf, sizeof(buf), "pcie.%d", id);
pci->bus = pci_register_root_bus(DEVICE(s), buf, ppc460ex_set_irq,
pci_swizzle_map_irq_fn, s, &s->iomem,
diff --git a/hw/ppc/ppc4xx_devs.c b/hw/ppc/ppc4xx_devs.c
index c1d111465d..f938ac80a4 100644
--- a/hw/ppc/ppc4xx_devs.c
+++ b/hw/ppc/ppc4xx_devs.c
@@ -193,9 +193,7 @@ static void ppc4xx_mal_realize(DeviceState *dev, Error **errp)
mal->rxctpr = g_new0(uint32_t, mal->rxcnum);
mal->rcbs = g_new0(uint32_t, mal->rxcnum);
- for (i = 0; i < ARRAY_SIZE(mal->irqs); i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &mal->irqs[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), mal->irqs, ARRAY_SIZE(mal->irqs));
ppc4xx_dcr_register(dcr, MAL0_CFG, mal, &dcr_read_mal, &dcr_write_mal);
ppc4xx_dcr_register(dcr, MAL0_ESR, mal, &dcr_read_mal, &dcr_write_mal);
diff --git a/hw/ppc/ppc4xx_pci.c b/hw/ppc/ppc4xx_pci.c
index 1d4a50fa7c..55957af77d 100644
--- a/hw/ppc/ppc4xx_pci.c
+++ b/hw/ppc/ppc4xx_pci.c
@@ -318,14 +318,11 @@ static void ppc4xx_pcihost_realize(DeviceState *dev, Error **errp)
PPC4xxPCIState *s;
PCIHostState *h;
PCIBus *b;
- int i;
h = PCI_HOST_BRIDGE(dev);
s = PPC4xx_PCI_HOST_BRIDGE(dev);
- for (i = 0; i < ARRAY_SIZE(s->irq); i++) {
- sysbus_init_irq(sbd, &s->irq[i]);
- }
+ sysbus_init_irqs(sbd, s->irq, ARRAY_SIZE(s->irq));
b = pci_register_root_bus(dev, NULL, ppc4xx_pci_set_irq,
ppc4xx_pci_map_irq, s->irq, get_system_memory(),
diff --git a/hw/ssi/ibex_spi_host.c b/hw/ssi/ibex_spi_host.c
index 1ee7d88c22..512b09d13e 100644
--- a/hw/ssi/ibex_spi_host.c
+++ b/hw/ssi/ibex_spi_host.c
@@ -589,14 +589,11 @@ static void fifo_trigger_update(void *opaque)
static void ibex_spi_host_realize(DeviceState *dev, Error **errp)
{
IbexSPIHostState *s = IBEX_SPI_HOST(dev);
- int i;
s->ssi = ssi_create_bus(dev, "ssi");
s->cs_lines = g_new0(qemu_irq, s->num_cs);
- for (i = 0; i < s->num_cs; ++i) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->cs_lines[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->cs_lines, s->num_cs);
/* Setup CONFIGOPTS Multi-register */
s->config_opts = g_new0(uint32_t, s->num_cs);
diff --git a/hw/ssi/imx_spi.c b/hw/ssi/imx_spi.c
index 189423bb3a..86c130c77b 100644
--- a/hw/ssi/imx_spi.c
+++ b/hw/ssi/imx_spi.c
@@ -458,7 +458,6 @@ static const struct MemoryRegionOps imx_spi_ops = {
static void imx_spi_realize(DeviceState *dev, Error **errp)
{
IMXSPIState *s = IMX_SPI(dev);
- int i;
s->bus = ssi_create_bus(dev, "spi");
@@ -467,9 +466,7 @@ static void imx_spi_realize(DeviceState *dev, Error **errp)
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq);
- for (i = 0; i < ECSPI_NUM_CS; ++i) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->cs_lines[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->cs_lines, ECSPI_NUM_CS);
fifo32_create(&s->tx_fifo, ECSPI_FIFO_SIZE);
fifo32_create(&s->rx_fifo, ECSPI_FIFO_SIZE);
diff --git a/hw/ssi/sifive_spi.c b/hw/ssi/sifive_spi.c
index 1b4a401ca1..928c7c5035 100644
--- a/hw/ssi/sifive_spi.c
+++ b/hw/ssi/sifive_spi.c
@@ -310,15 +310,12 @@ static void sifive_spi_realize(DeviceState *dev, Error **errp)
{
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
SiFiveSPIState *s = SIFIVE_SPI(dev);
- int i;
s->spi = ssi_create_bus(dev, "spi");
sysbus_init_irq(sbd, &s->irq);
s->cs_lines = g_new0(qemu_irq, s->num_cs);
- for (i = 0; i < s->num_cs; i++) {
- sysbus_init_irq(sbd, &s->cs_lines[i]);
- }
+ sysbus_init_irqs(sbd, s->cs_lines, s->num_cs);
memory_region_init_io(&s->mmio, OBJECT(s), &sifive_spi_ops, s,
TYPE_SIFIVE_SPI, 0x1000);
diff --git a/hw/ssi/xilinx_spi.c b/hw/ssi/xilinx_spi.c
index d4de2e7aab..e0ea0bb1cf 100644
--- a/hw/ssi/xilinx_spi.c
+++ b/hw/ssi/xilinx_spi.c
@@ -327,7 +327,6 @@ static void xilinx_spi_realize(DeviceState *dev, Error **errp)
{
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
XilinxSPI *s = XILINX_SPI(dev);
- int i;
DB_PRINT("\n");
@@ -335,9 +334,7 @@ static void xilinx_spi_realize(DeviceState *dev, Error **errp)
sysbus_init_irq(sbd, &s->irq);
s->cs_lines = g_new0(qemu_irq, s->num_cs);
- for (i = 0; i < s->num_cs; ++i) {
- sysbus_init_irq(sbd, &s->cs_lines[i]);
- }
+ sysbus_init_irqs(sbd, s->cs_lines, s->num_cs);
memory_region_init_io(&s->mmio, OBJECT(s), &spi_ops, s,
"xilinx-spi", R_MAX * 4);
diff --git a/hw/ssi/xilinx_spips.c b/hw/ssi/xilinx_spips.c
index 97009d3a5d..c696a07916 100644
--- a/hw/ssi/xilinx_spips.c
+++ b/hw/ssi/xilinx_spips.c
@@ -1294,9 +1294,7 @@ static void xilinx_spips_realize(DeviceState *dev, Error **errp)
s->cs_lines_state = g_new0(bool, s->num_cs * s->num_busses);
sysbus_init_irq(sbd, &s->irq);
- for (i = 0; i < s->num_cs * s->num_busses; ++i) {
- sysbus_init_irq(sbd, &s->cs_lines[i]);
- }
+ sysbus_init_irqs(sbd, s->cs_lines, s->num_cs * s->num_busses);
memory_region_init_io(&s->iomem, OBJECT(s), xsc->reg_ops, s,
"spi", XLNX_ZYNQMP_SPIPS_R_MAX * 4);
diff --git a/hw/ssi/xlnx-versal-ospi.c b/hw/ssi/xlnx-versal-ospi.c
index c762e0b367..b280fbedaf 100644
--- a/hw/ssi/xlnx-versal-ospi.c
+++ b/hw/ssi/xlnx-versal-ospi.c
@@ -1740,9 +1740,7 @@ static void xlnx_versal_ospi_realize(DeviceState *dev, Error **errp)
s->num_cs = 4;
s->spi = ssi_create_bus(dev, "spi0");
s->cs_lines = g_new0(qemu_irq, s->num_cs);
- for (int i = 0; i < s->num_cs; ++i) {
- sysbus_init_irq(sbd, &s->cs_lines[i]);
- }
+ sysbus_init_irqs(sbd, s->cs_lines, s->num_cs);
fifo8_create(&s->rx_fifo, RXFF_SZ);
fifo8_create(&s->tx_fifo, TXFF_SZ);
diff --git a/hw/timer/allwinner-a10-pit.c b/hw/timer/allwinner-a10-pit.c
index 971f78462a..1126d19127 100644
--- a/hw/timer/allwinner-a10-pit.c
+++ b/hw/timer/allwinner-a10-pit.c
@@ -263,9 +263,7 @@ static void a10_pit_init(Object *obj)
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
uint8_t i;
- for (i = 0; i < AW_A10_PIT_TIMER_NR; i++) {
- sysbus_init_irq(sbd, &s->irq[i]);
- }
+ sysbus_init_irqs(sbd, s->irq, AW_A10_PIT_TIMER_NR);
memory_region_init_io(&s->iomem, OBJECT(s), &a10_pit_ops, s,
TYPE_AW_A10_PIT, 0x400);
sysbus_init_mmio(sbd, &s->iomem);
diff --git a/hw/timer/exynos4210_mct.c b/hw/timer/exynos4210_mct.c
index 446bbd2b96..6a53068a1d 100644
--- a/hw/timer/exynos4210_mct.c
+++ b/hw/timer/exynos4210_mct.c
@@ -1521,9 +1521,7 @@ static void exynos4210_mct_init(Object *obj)
}
/* IRQs */
- for (i = 0; i < MCT_GT_CMP_NUM; i++) {
- sysbus_init_irq(dev, &s->g_timer.irq[i]);
- }
+ sysbus_init_irqs(dev, s->g_timer.irq, MCT_GT_CMP_NUM);
for (i = 0; i < 2; i++) {
sysbus_init_irq(dev, &s->l_timer[i].irq);
}
diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
index 6998094233..95b68f1c90 100644
--- a/hw/timer/hpet.c
+++ b/hw/timer/hpet.c
@@ -756,9 +756,7 @@ static void hpet_realize(DeviceState *dev, Error **errp)
s->hpet_id = hpet_cfg.count++;
- for (i = 0; i < HPET_NUM_IRQ_ROUTES; i++) {
- sysbus_init_irq(sbd, &s->irqs[i]);
- }
+ sysbus_init_irqs(sbd, s->irqs, HPET_NUM_IRQ_ROUTES);
if (s->num_timers < HPET_MIN_TIMERS) {
s->num_timers = HPET_MIN_TIMERS;
diff --git a/hw/timer/renesas_cmt.c b/hw/timer/renesas_cmt.c
index 69eabc678a..3fae6d40d7 100644
--- a/hw/timer/renesas_cmt.c
+++ b/hw/timer/renesas_cmt.c
@@ -225,15 +225,12 @@ static void rcmt_init(Object *obj)
{
SysBusDevice *d = SYS_BUS_DEVICE(obj);
RCMTState *cmt = RCMT(obj);
- int i;
memory_region_init_io(&cmt->memory, OBJECT(cmt), &cmt_ops,
cmt, "renesas-cmt", 0x10);
sysbus_init_mmio(d, &cmt->memory);
- for (i = 0; i < ARRAY_SIZE(cmt->cmi); i++) {
- sysbus_init_irq(d, &cmt->cmi[i]);
- }
+ sysbus_init_irqs(d, cmt->cmi, ARRAY_SIZE(cmt->cmi));
timer_init_ns(&cmt->timer[0], QEMU_CLOCK_VIRTUAL, timer_event0, cmt);
timer_init_ns(&cmt->timer[1], QEMU_CLOCK_VIRTUAL, timer_event1, cmt);
}
diff --git a/hw/timer/sifive_pwm.c b/hw/timer/sifive_pwm.c
index c664480ccf..d5f1273232 100644
--- a/hw/timer/sifive_pwm.c
+++ b/hw/timer/sifive_pwm.c
@@ -414,11 +414,8 @@ static Property sifive_pwm_properties[] = {
static void sifive_pwm_init(Object *obj)
{
SiFivePwmState *s = SIFIVE_PWM(obj);
- int i;
- for (i = 0; i < SIFIVE_PWM_IRQS; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irqs[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(obj), s->irqs, SIFIVE_PWM_IRQS);
memory_region_init_io(&s->mmio, obj, &sifive_pwm_ops, s,
TYPE_SIFIVE_PWM, 0x100);
--
2.38.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 7/7] hw: Simplify using sysbus_init_irqs() [manual]
2023-05-31 22:33 [PATCH 0/7] hw/sysbus: Add sysbus_init_irqs and reduce SYSBUS_DEVICE_GPIO_IRQ scope Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2023-05-31 22:33 ` [PATCH 6/7] hw: Simplify using sysbus_init_irqs() [automatic] Philippe Mathieu-Daudé
@ 2023-05-31 22:33 ` Philippe Mathieu-Daudé
2023-06-01 3:13 ` Richard Henderson
2023-06-01 5:59 ` Markus Armbruster
6 siblings, 2 replies; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-05-31 22:33 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland,
Philippe Mathieu-Daudé
Audit the sysbus_init_irq() calls and manually convert
to sysbus_init_irqs() when a loop is involved.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/intc/loongarch_extioi.c | 3 +--
hw/intc/omap_intc.c | 3 +--
hw/pci-host/gpex.c | 2 +-
hw/timer/renesas_tmr.c | 9 +++------
4 files changed, 6 insertions(+), 11 deletions(-)
diff --git a/hw/intc/loongarch_extioi.c b/hw/intc/loongarch_extioi.c
index db941de20e..c579636215 100644
--- a/hw/intc/loongarch_extioi.c
+++ b/hw/intc/loongarch_extioi.c
@@ -275,8 +275,7 @@ static void loongarch_extioi_instance_init(Object *obj)
LoongArchExtIOI *s = LOONGARCH_EXTIOI(obj);
int cpu, pin;
- sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, EXTIOI_IRQS);
-
+ sysbus_init_irqs(dev, s->irq, EXTIOI_IRQS);
qdev_init_gpio_in(DEVICE(obj), extioi_setirq, EXTIOI_IRQS);
for (cpu = 0; cpu < EXTIOI_CPUS; cpu++) {
diff --git a/hw/intc/omap_intc.c b/hw/intc/omap_intc.c
index 647bf324a8..f324b640e3 100644
--- a/hw/intc/omap_intc.c
+++ b/hw/intc/omap_intc.c
@@ -627,8 +627,7 @@ static void omap2_intc_init(Object *obj)
s->level_only = 1;
s->nbanks = 3;
- sysbus_init_irq(sbd, &s->parent_intr[0]);
- sysbus_init_irq(sbd, &s->parent_intr[1]);
+ sysbus_init_irqs(sbd, s->parent_intr, ARRAY_SIZE(s->parent_intr));
qdev_init_gpio_in(dev, omap_set_intr_noedge, s->nbanks * 32);
memory_region_init_io(&s->mmio, obj, &omap2_inth_mem_ops, s,
"omap2-intc", 0x1000);
diff --git a/hw/pci-host/gpex.c b/hw/pci-host/gpex.c
index a6752fac5e..7b46e3e36e 100644
--- a/hw/pci-host/gpex.c
+++ b/hw/pci-host/gpex.c
@@ -128,8 +128,8 @@ static void gpex_host_realize(DeviceState *dev, Error **errp)
sysbus_init_mmio(sbd, &s->io_ioport);
}
+ sysbus_init_irqs(sbd, s->irq, GPEX_NUM_IRQS);
for (i = 0; i < GPEX_NUM_IRQS; i++) {
- sysbus_init_irq(sbd, &s->irq[i]);
s->irq_num[i] = -1;
}
diff --git a/hw/timer/renesas_tmr.c b/hw/timer/renesas_tmr.c
index c15f654738..dd2929d6e7 100644
--- a/hw/timer/renesas_tmr.c
+++ b/hw/timer/renesas_tmr.c
@@ -428,17 +428,14 @@ static void rtmr_init(Object *obj)
{
SysBusDevice *d = SYS_BUS_DEVICE(obj);
RTMRState *tmr = RTMR(obj);
- int i;
memory_region_init_io(&tmr->memory, OBJECT(tmr), &tmr_ops,
tmr, "renesas-tmr", 0x10);
sysbus_init_mmio(d, &tmr->memory);
- for (i = 0; i < ARRAY_SIZE(tmr->ovi); i++) {
- sysbus_init_irq(d, &tmr->cmia[i]);
- sysbus_init_irq(d, &tmr->cmib[i]);
- sysbus_init_irq(d, &tmr->ovi[i]);
- }
+ sysbus_init_irqs(d, tmr->cmia, ARRAY_SIZE(tmr->cmia));
+ sysbus_init_irqs(d, tmr->cmib, ARRAY_SIZE(tmr->cmib));
+ sysbus_init_irqs(d, tmr->ovi, ARRAY_SIZE(tmr->ovi));
timer_init_ns(&tmr->timer[0], QEMU_CLOCK_VIRTUAL, timer_event0, tmr);
timer_init_ns(&tmr->timer[1], QEMU_CLOCK_VIRTUAL, timer_event1, tmr);
}
--
2.38.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 1/7] hw/arm/xlnx-versal: Do not open-code sysbus_connect_irq()
2023-05-31 22:33 ` [PATCH 1/7] hw/arm/xlnx-versal: Do not open-code sysbus_connect_irq() Philippe Mathieu-Daudé
@ 2023-06-01 3:02 ` Richard Henderson
0 siblings, 0 replies; 17+ messages in thread
From: Richard Henderson @ 2023-06-01 3:02 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland
On 5/31/23 15:33, Philippe Mathieu-Daudé wrote:
> The SYSBUS_DEVICE_GPIO_IRQ definition should be internal to
> the SysBus API. Here we simply open-coded sysbus_connect_irq().
> Replace to use the proper API.
>
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
> hw/arm/xlnx-versal.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/7] hw/usb/xlnx: Do not open-code sysbus_pass_irq()
2023-05-31 22:33 ` [PATCH 2/7] hw/usb/xlnx: Do not open-code sysbus_pass_irq() Philippe Mathieu-Daudé
@ 2023-06-01 3:04 ` Richard Henderson
0 siblings, 0 replies; 17+ messages in thread
From: Richard Henderson @ 2023-06-01 3:04 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland
On 5/31/23 15:33, Philippe Mathieu-Daudé wrote:
> The SYSBUS_DEVICE_GPIO_IRQ definition should be internal to
> the SysBus API. Here we simply open-coded sysbus_pass_irq().
> Replace to use the proper API.
>
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
> hw/usb/xlnx-usb-subsystem.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 3/7] hw/sysbus: Introduce sysbus_init_irqs()
2023-05-31 22:33 ` [PATCH 3/7] hw/sysbus: Introduce sysbus_init_irqs() Philippe Mathieu-Daudé
@ 2023-06-01 3:08 ` Richard Henderson
0 siblings, 0 replies; 17+ messages in thread
From: Richard Henderson @ 2023-06-01 3:08 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland
On 5/31/23 15:33, Philippe Mathieu-Daudé wrote:
> +void sysbus_init_irqs(SysBusDevice *dev, qemu_irq *p, unsigned count);
unsigned count does not match qdev_init_gpio_out_named int n.
Otherwise,
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 4/7] hw/usb/hcd-xhci: Use sysbus_init_irqs()
2023-05-31 22:33 ` [PATCH 4/7] hw/usb/hcd-xhci: Use sysbus_init_irqs() Philippe Mathieu-Daudé
@ 2023-06-01 3:09 ` Richard Henderson
0 siblings, 0 replies; 17+ messages in thread
From: Richard Henderson @ 2023-06-01 3:09 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland
On 5/31/23 15:33, Philippe Mathieu-Daudé wrote:
> The SYSBUS_DEVICE_GPIO_IRQ definition should be internal to
> the SysBus API. Use the recently introduced sysbus_init_irqs()
> method to avoid using this internal definition.
>
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
> hw/usb/hcd-xhci-sysbus.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 5/7] hw/sysbus: Make SYSBUS_DEVICE_GPIO_IRQ API internal
2023-05-31 22:33 ` [PATCH 5/7] hw/sysbus: Make SYSBUS_DEVICE_GPIO_IRQ API internal Philippe Mathieu-Daudé
@ 2023-06-01 3:10 ` Richard Henderson
0 siblings, 0 replies; 17+ messages in thread
From: Richard Henderson @ 2023-06-01 3:10 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland
On 5/31/23 15:33, Philippe Mathieu-Daudé wrote:
> Since we don't have any use of the SYSBUS_DEVICE_GPIO_IRQ definition
> outside of sysbus.c, we can reduce its scope, making it internal to
> the API.
>
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
> include/hw/sysbus.h | 2 --
> hw/core/sysbus.c | 2 ++
> 2 files changed, 2 insertions(+), 2 deletions(-)
Yay!
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/7] hw: Simplify using sysbus_init_irqs() [automatic]
2023-05-31 22:33 ` [PATCH 6/7] hw: Simplify using sysbus_init_irqs() [automatic] Philippe Mathieu-Daudé
@ 2023-06-01 3:11 ` Richard Henderson
0 siblings, 0 replies; 17+ messages in thread
From: Richard Henderson @ 2023-06-01 3:11 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland
On 5/31/23 15:33, Philippe Mathieu-Daudé wrote:
> Change created mechanically using the following coccinelle
> semantic patch:
>
> @@
> expression array;
> identifier i;
> expression sbd, count;
> @@
>
> - for (i = 0; i < count; i++) {
> - sysbus_init_irq(sbd, &array[i]);
> - }
> + sysbus_init_irqs(sbd, array, count);
>
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 7/7] hw: Simplify using sysbus_init_irqs() [manual]
2023-05-31 22:33 ` [PATCH 7/7] hw: Simplify using sysbus_init_irqs() [manual] Philippe Mathieu-Daudé
@ 2023-06-01 3:13 ` Richard Henderson
2023-06-01 5:59 ` Markus Armbruster
1 sibling, 0 replies; 17+ messages in thread
From: Richard Henderson @ 2023-06-01 3:13 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Markus Armbruster, Marc-André Lureau, Mark Cave-Ayland
On 5/31/23 15:33, Philippe Mathieu-Daudé wrote:
> Audit the sysbus_init_irq() calls and manually convert
> to sysbus_init_irqs() when a loop is involved.
>
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
> hw/intc/loongarch_extioi.c | 3 +--
> hw/intc/omap_intc.c | 3 +--
> hw/pci-host/gpex.c | 2 +-
> hw/timer/renesas_tmr.c | 9 +++------
> 4 files changed, 6 insertions(+), 11 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 7/7] hw: Simplify using sysbus_init_irqs() [manual]
2023-05-31 22:33 ` [PATCH 7/7] hw: Simplify using sysbus_init_irqs() [manual] Philippe Mathieu-Daudé
2023-06-01 3:13 ` Richard Henderson
@ 2023-06-01 5:59 ` Markus Armbruster
2023-06-01 8:58 ` Philippe Mathieu-Daudé
1 sibling, 1 reply; 17+ messages in thread
From: Markus Armbruster @ 2023-06-01 5:59 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Marc-André Lureau, Mark Cave-Ayland
Philippe Mathieu-Daudé <philmd@linaro.org> writes:
> Audit the sysbus_init_irq() calls and manually convert
> to sysbus_init_irqs() when a loop is involved.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> hw/intc/loongarch_extioi.c | 3 +--
> hw/intc/omap_intc.c | 3 +--
> hw/pci-host/gpex.c | 2 +-
> hw/timer/renesas_tmr.c | 9 +++------
> 4 files changed, 6 insertions(+), 11 deletions(-)
>
> diff --git a/hw/intc/loongarch_extioi.c b/hw/intc/loongarch_extioi.c
> index db941de20e..c579636215 100644
> --- a/hw/intc/loongarch_extioi.c
> +++ b/hw/intc/loongarch_extioi.c
> @@ -275,8 +275,7 @@ static void loongarch_extioi_instance_init(Object *obj)
> LoongArchExtIOI *s = LOONGARCH_EXTIOI(obj);
> int cpu, pin;
>
> - sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, EXTIOI_IRQS);
> -
> + sysbus_init_irqs(dev, s->irq, EXTIOI_IRQS);
Commit message claims "when a loop is involved". No loop here. That
work was actually done in the previous patch:
diff --git a/hw/intc/loongarch_extioi.c b/hw/intc/loongarch_extioi.c
index 0e7a3e32f3..db941de20e 100644
--- a/hw/intc/loongarch_extioi.c
+++ b/hw/intc/loongarch_extioi.c
@@ -273,11 +273,9 @@ static void loongarch_extioi_instance_init(Object *obj)
{
SysBusDevice *dev = SYS_BUS_DEVICE(obj);
LoongArchExtIOI *s = LOONGARCH_EXTIOI(obj);
- int i, cpu, pin;
+ int cpu, pin;
- for (i = 0; i < EXTIOI_IRQS; i++) {
- sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq[i]);
- }
+ sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, EXTIOI_IRQS);
qdev_init_gpio_in(DEVICE(obj), extioi_setirq, EXTIOI_IRQS);
In this patch, you merely delete a superfluous type conversion that is
present even before your series.
There are more of them in this function. Please delete them all, and in
a separate patch.
Actually, there are more elsewhere. Coccinelle script
@@
typedef SysBusDevice;
SysBusDevice *dev;
@@
- SYS_BUS_DEVICE(dev)
+ dev
finds some in hw/arm/xlnx-versal.c and hw/rx/rx62n.c, too.
Would be nice to do this for every QOM type, but I don't know how
without duplicating the semantic patch for each of them. There are
almost 150 uses os OBJECT_DECLARE_TYPE()...
You might want to address this in a separate series, to not delay this
one.
> qdev_init_gpio_in(DEVICE(obj), extioi_setirq, EXTIOI_IRQS);
>
> for (cpu = 0; cpu < EXTIOI_CPUS; cpu++) {
> diff --git a/hw/intc/omap_intc.c b/hw/intc/omap_intc.c
> index 647bf324a8..f324b640e3 100644
> --- a/hw/intc/omap_intc.c
> +++ b/hw/intc/omap_intc.c
> @@ -627,8 +627,7 @@ static void omap2_intc_init(Object *obj)
>
> s->level_only = 1;
> s->nbanks = 3;
> - sysbus_init_irq(sbd, &s->parent_intr[0]);
> - sysbus_init_irq(sbd, &s->parent_intr[1]);
> + sysbus_init_irqs(sbd, s->parent_intr, ARRAY_SIZE(s->parent_intr));
Unrolled loop. s->parent_intr[] indeed has 2 elements. Okay.
> qdev_init_gpio_in(dev, omap_set_intr_noedge, s->nbanks * 32);
> memory_region_init_io(&s->mmio, obj, &omap2_inth_mem_ops, s,
> "omap2-intc", 0x1000);
[...]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 7/7] hw: Simplify using sysbus_init_irqs() [manual]
2023-06-01 5:59 ` Markus Armbruster
@ 2023-06-01 8:58 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 17+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-06-01 8:58 UTC (permalink / raw)
To: Markus Armbruster
Cc: qemu-devel, Thomas Huth, qemu-arm, qemu-ppc, Eduardo Habkost,
Marc-André Lureau, Mark Cave-Ayland
On 1/6/23 07:59, Markus Armbruster wrote:
> Philippe Mathieu-Daudé <philmd@linaro.org> writes:
>
>> Audit the sysbus_init_irq() calls and manually convert
>> to sysbus_init_irqs() when a loop is involved.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>> hw/intc/loongarch_extioi.c | 3 +--
>> hw/intc/omap_intc.c | 3 +--
>> hw/pci-host/gpex.c | 2 +-
>> hw/timer/renesas_tmr.c | 9 +++------
>> 4 files changed, 6 insertions(+), 11 deletions(-)
>>
>> diff --git a/hw/intc/loongarch_extioi.c b/hw/intc/loongarch_extioi.c
>> index db941de20e..c579636215 100644
>> --- a/hw/intc/loongarch_extioi.c
>> +++ b/hw/intc/loongarch_extioi.c
>> @@ -275,8 +275,7 @@ static void loongarch_extioi_instance_init(Object *obj)
>> LoongArchExtIOI *s = LOONGARCH_EXTIOI(obj);
>> int cpu, pin;
>>
>> - sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, EXTIOI_IRQS);
>> -
>> + sysbus_init_irqs(dev, s->irq, EXTIOI_IRQS);
>
> Commit message claims "when a loop is involved". No loop here. That
> work was actually done in the previous patch:
>
> diff --git a/hw/intc/loongarch_extioi.c b/hw/intc/loongarch_extioi.c
> index 0e7a3e32f3..db941de20e 100644
> --- a/hw/intc/loongarch_extioi.c
> +++ b/hw/intc/loongarch_extioi.c
> @@ -273,11 +273,9 @@ static void loongarch_extioi_instance_init(Object *obj)
> {
> SysBusDevice *dev = SYS_BUS_DEVICE(obj);
> LoongArchExtIOI *s = LOONGARCH_EXTIOI(obj);
> - int i, cpu, pin;
> + int cpu, pin;
>
> - for (i = 0; i < EXTIOI_IRQS; i++) {
> - sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq[i]);
> - }
> + sysbus_init_irqs(SYS_BUS_DEVICE(dev), s->irq, EXTIOI_IRQS);
>
> qdev_init_gpio_in(DEVICE(obj), extioi_setirq, EXTIOI_IRQS);
>
> In this patch, you merely delete a superfluous type conversion that is
> present even before your series.
Right. I guess I did that automatically "why are we casting the same
type?" without even noticing.
> There are more of them in this function. Please delete them all, and in
> a separate patch.
OK.
> Actually, there are more elsewhere. Coccinelle script
>
> @@
> typedef SysBusDevice;
> SysBusDevice *dev;
> @@
> - SYS_BUS_DEVICE(dev)
> + dev
>
> finds some in hw/arm/xlnx-versal.c and hw/rx/rx62n.c, too.
>
> Would be nice to do this for every QOM type, but I don't know how
> without duplicating the semantic patch for each of them. There are
> almost 150 uses os OBJECT_DECLARE_TYPE()...
Checking all QOM macros, I counted 1076 types...
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2023-06-01 8:59 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-31 22:33 [PATCH 0/7] hw/sysbus: Add sysbus_init_irqs and reduce SYSBUS_DEVICE_GPIO_IRQ scope Philippe Mathieu-Daudé
2023-05-31 22:33 ` [PATCH 1/7] hw/arm/xlnx-versal: Do not open-code sysbus_connect_irq() Philippe Mathieu-Daudé
2023-06-01 3:02 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 2/7] hw/usb/xlnx: Do not open-code sysbus_pass_irq() Philippe Mathieu-Daudé
2023-06-01 3:04 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 3/7] hw/sysbus: Introduce sysbus_init_irqs() Philippe Mathieu-Daudé
2023-06-01 3:08 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 4/7] hw/usb/hcd-xhci: Use sysbus_init_irqs() Philippe Mathieu-Daudé
2023-06-01 3:09 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 5/7] hw/sysbus: Make SYSBUS_DEVICE_GPIO_IRQ API internal Philippe Mathieu-Daudé
2023-06-01 3:10 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 6/7] hw: Simplify using sysbus_init_irqs() [automatic] Philippe Mathieu-Daudé
2023-06-01 3:11 ` Richard Henderson
2023-05-31 22:33 ` [PATCH 7/7] hw: Simplify using sysbus_init_irqs() [manual] Philippe Mathieu-Daudé
2023-06-01 3:13 ` Richard Henderson
2023-06-01 5:59 ` Markus Armbruster
2023-06-01 8:58 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).