* [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
* 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
* [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
* 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
* [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
* 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
* [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
* 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
* [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
* 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
* [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
* 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
* [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 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).