It is used to avoid dynamic memory allocation for qemu_irq arrays with known size or single qemu_irq variables.
Signed-off-by: Stefan Weil <s...@weilnetz.de> --- hw/irq.c | 15 +++++++++------ hw/irq.h | 4 ++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/hw/irq.c b/hw/irq.c index d413a0b..fd284b0 100644 --- a/hw/irq.c +++ b/hw/irq.c @@ -38,14 +38,11 @@ void qemu_set_irq(qemu_irq irq, int level) irq->handler(irq->opaque, irq->n, level); } -qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n) +void qemu_init_irqs(qemu_irq_handler handler, void *opaque, + qemu_irq *s, int n) { - qemu_irq *s; - struct IRQState *p; int i; - - s = (qemu_irq *)g_malloc0(sizeof(qemu_irq) * n); - p = (struct IRQState *)g_malloc0(sizeof(struct IRQState) * n); + struct IRQState *p = g_new0(struct IRQState, n); for (i = 0; i < n; i++) { p->handler = handler; p->opaque = opaque; @@ -53,6 +50,12 @@ qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n) s[i] = p; p++; } +} + +qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n) +{ + qemu_irq *s = g_new(qemu_irq, n); + qemu_init_irqs(handler, opaque, s, n); return s; } diff --git a/hw/irq.h b/hw/irq.h index 56c55f0..368b88f 100644 --- a/hw/irq.h +++ b/hw/irq.h @@ -23,6 +23,10 @@ static inline void qemu_irq_pulse(qemu_irq irq) qemu_set_irq(irq, 0); } +/* Initialize an array of N IRQs. */ +void qemu_init_irqs(qemu_irq_handler handler, void *opaque, + qemu_irq *irqs, int n); + /* Returns an array of N IRQs. */ qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n); void qemu_free_irqs(qemu_irq *s); -- 1.7.10