[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH qom v3 09/14] qtest/irq: Rework IRQ interception
From: |
Peter Crosthwaite |
Subject: |
[Qemu-devel] [PATCH qom v3 09/14] qtest/irq: Rework IRQ interception |
Date: |
Thu, 25 Sep 2014 22:21:31 -0700 |
Change the qtest intercept handler to accept just the individual IRQ
being intercepted as opaque. n is still expected to be correctly set
as for the original intercepted irq. qemu_intercept_irq_in is updated
accordingly.
Then covert the qemu_irq_intercept_out call to use qdev intercept
version. This stops qtest from having to mess with the raw IRQ pointers
(still has to mess with names and counts but a step in the right
direction).
Reviewed-by: Alexander Graf <address@hidden>
Signed-off-by: Peter Crosthwaite <address@hidden>
---
changed since v1:
Create IRQ before intercept call and add extra layer of indirection on
opaque data.
hw/core/irq.c | 2 +-
qtest.c | 15 +++++++++++----
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/hw/core/irq.c b/hw/core/irq.c
index cffced0..4a580a2 100644
--- a/hw/core/irq.c
+++ b/hw/core/irq.c
@@ -140,7 +140,7 @@ void qemu_irq_intercept_in(qemu_irq *gpio_in,
qemu_irq_handler handler, int n)
for (i = 0; i < n; i++) {
*old_irqs[i] = *gpio_in[i];
gpio_in[i]->handler = handler;
- gpio_in[i]->opaque = old_irqs;
+ gpio_in[i]->opaque = &old_irqs[i];
}
}
diff --git a/qtest.c b/qtest.c
index ef0d991..bc40c6c 100644
--- a/qtest.c
+++ b/qtest.c
@@ -200,8 +200,8 @@ static void GCC_FMT_ATTR(2, 3) qtest_send(CharDriverState
*chr,
static void qtest_irq_handler(void *opaque, int n, int level)
{
- qemu_irq *old_irqs = opaque;
- qemu_set_irq(old_irqs[n], level);
+ qemu_irq old_irq = *(qemu_irq *)opaque;
+ qemu_set_irq(old_irq, level);
if (irq_levels[n] != level) {
CharDriverState *chr = qtest_chr;
@@ -263,8 +263,15 @@ static void qtest_process_command(CharDriverState *chr,
gchar **words)
continue;
}
if (words[0][14] == 'o') {
- qemu_irq_intercept_out(&ngl->out, qtest_irq_handler,
- ngl->num_out);
+ int i;
+ for (i = 0; i < ngl->num_out; ++i) {
+ qemu_irq *disconnected = g_new0(qemu_irq, 1);
+ qemu_irq icpt = qemu_allocate_irq(qtest_irq_handler,
+ disconnected, i);
+
+ *disconnected = qdev_intercept_gpio_out(dev, icpt,
+ ngl->name, i);
+ }
} else {
qemu_irq_intercept_in(ngl->in, qtest_irq_handler,
ngl->num_in);
--
2.1.0.1.g27b9230
- [Qemu-devel] [PATCH qom v3 03/14] qdev: gpio: Register GPIO outputs as QOM links, (continued)
- [Qemu-devel] [PATCH qom v3 03/14] qdev: gpio: Register GPIO outputs as QOM links, Peter Crosthwaite, 2014/09/26
- [Qemu-devel] [PATCH qom v3 04/14] qmp: qstring: Handle NULL strings, Peter Crosthwaite, 2014/09/26
- [Qemu-devel] [PATCH qom v3 05/14] qom: Allow clearing of a Link property, Peter Crosthwaite, 2014/09/26
- [Qemu-devel] [PATCH qom v3 06/14] qom: Demote already-has-a-parent to a regular error, Peter Crosthwaite, 2014/09/26
- [Qemu-devel] [PATCH qom v3 07/14] qdev: gpio: Re-impement qdev_connect_gpio QOM style, Peter Crosthwaite, 2014/09/26
- [Qemu-devel] [PATCH qom v3 08/14] qdev: gpio: Add API for intercepting a GPIO, Peter Crosthwaite, 2014/09/26
- [Qemu-devel] [PATCH qom v3 09/14] qtest/irq: Rework IRQ interception,
Peter Crosthwaite <=
- [Qemu-devel] [PATCH qom v3 10/14] irq: Remove qemu_irq_intercept_out, Peter Crosthwaite, 2014/09/26
- [Qemu-devel] [PATCH qom v3 11/14] qdev: gpio: delete NamedGPIOList::out, Peter Crosthwaite, 2014/09/26
- [Qemu-devel] [PATCH qom v3 13/14] qdev: gpio: Define qdev_pass_gpios(), Peter Crosthwaite, 2014/09/26
- [Qemu-devel] [PATCH qom v3 14/14] sysbus: Use TYPE_DEVICE GPIO functionality, Peter Crosthwaite, 2014/09/26
- [Qemu-devel] [PATCH qom v3 12/14] qdev: gpio: Remove qdev_init_gpio_out x1 restriction, Peter Crosthwaite, 2014/09/26
- Re: [Qemu-devel] [PATCH qom v3 00/14] GPIO/IRQ QOMification: Phase 2 - Getting rid of SYSBUS IRQs, Paolo Bonzini, 2014/09/26