From patchwork Sun Dec 16 23:56:27 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Ogilvie X-Patchwork-Id: 206763 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 2F6822C0087 for ; Mon, 17 Dec 2012 12:17:48 +1100 (EST) Received: from localhost ([::1]:60617 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TkO5P-0004Cm-2Y for incoming@patchwork.ozlabs.org; Sun, 16 Dec 2012 18:57:35 -0500 Received: from eggs.gnu.org ([208.118.235.92]:60731) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TkO4m-0002Ox-BC for qemu-devel@nongnu.org; Sun, 16 Dec 2012 18:56:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TkO4j-0007IF-Ic for qemu-devel@nongnu.org; Sun, 16 Dec 2012 18:56:56 -0500 Received: from qmta11.emeryville.ca.mail.comcast.net ([76.96.27.211]:34675) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TkO4j-0007DZ-BF for qemu-devel@nongnu.org; Sun, 16 Dec 2012 18:56:53 -0500 Received: from omta17.emeryville.ca.mail.comcast.net ([76.96.30.73]) by qmta11.emeryville.ca.mail.comcast.net with comcast id cPSU1k0051afHeLABPwsVU; Sun, 16 Dec 2012 23:56:52 +0000 Received: from mmogilvi.homeip.net ([75.70.117.91]) by omta17.emeryville.ca.mail.comcast.net with comcast id cPwr1k00S1yPlfP8dPwrQb; Sun, 16 Dec 2012 23:56:52 +0000 Received: by mmogilvi.homeip.net (Postfix, from userid 501) id 479561E9601B; Sun, 16 Dec 2012 16:56:51 -0700 (MST) From: Matthew Ogilvie To: qemu-devel@nongnu.org Date: Sun, 16 Dec 2012 16:56:27 -0700 Message-Id: <1355702189-6994-9-git-send-email-mmogilvi_qemu@miniinfo.net> X-Mailer: git-send-email 1.7.10.2.484.gcd07cc5 In-Reply-To: <1355702189-6994-1-git-send-email-mmogilvi_qemu@miniinfo.net> References: <1355702189-6994-1-git-send-email-mmogilvi_qemu@miniinfo.net> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=comcast.net; s=q20121106; t=1355702212; bh=5p00spAq0KOXoCcg0vzWsFjd5IUZWC3OFJ//WjOE4P0=; h=Received:Received:Received:From:To:Subject:Date:Message-Id; b=hNhRMKdBUJ+AhVF7ZfGgPCb7cZeMi6EHSkCWe5rdv4813ZRfxJzOVmgnSUpFNpCeY Yx+GFNYDc3hFolpfFsUBWser+PJApRCyC2V9TimmXMiBArcNhsZ2RCNUJjhRrV6ogW 6+dHq2dBoTs/aSEhVnUmWcN/htS6MugF9jovwfxBDshrYAfseEngatSHjAL4vfHa9U gN+0Gyg3A92uexdiM6tAhYblo/yyP4zCFryEOUrrPnVJHxGxlyCCRuwXPw+yABe7wB a/w8zeVMUCrhY60v5bG9ldB4MRJHoXJT/Ff5nDIdGSTQhCaaW9sR1A2vRzELbSw+6v n0yuYrmUbk+lw== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 76.96.27.211 Cc: "Maciej W. Rozycki" , Jan Kiszka , Matthew Ogilvie , Gleb Natapov Subject: [Qemu-devel] [PATCH v8 08/10] qtest: fix qemu_irq_intercept_out() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org For the 8259 (at least), we need to modify the entries in gpio_out (which is pointing at PICCommonState::int_out) in-place rather than change it to point to a totally different table. The 8259 sends its output to int_out even if gpio_out is a different table. Signed-off-by: Matthew Ogilvie --- hw/irq.c | 11 ++++++++--- hw/irq.h | 2 +- qtest.c | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/hw/irq.c b/hw/irq.c index f4e2a78..60fa152 100644 --- a/hw/irq.c +++ b/hw/irq.c @@ -129,8 +129,13 @@ void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n) } } -void qemu_irq_intercept_out(qemu_irq **gpio_out, qemu_irq_handler handler, int n) +void qemu_irq_intercept_out(qemu_irq *gpio_out, qemu_irq_handler handler, int n) { - qemu_irq *old_irqs = *gpio_out; - *gpio_out = qemu_allocate_irqs(handler, old_irqs, n); + int i; + qemu_irq *old_irqs = qemu_allocate_irqs(NULL, NULL, n); + for (i = 0; i < n; i++) { + *old_irqs[i] = *gpio_out[i]; + gpio_out[i]->handler = handler; + gpio_out[i]->opaque = old_irqs; + } } diff --git a/hw/irq.h b/hw/irq.h index 610e6b7..8dc26cf 100644 --- a/hw/irq.h +++ b/hw/irq.h @@ -52,6 +52,6 @@ qemu_irq *qemu_irq_proxy(qemu_irq **target, int n); /* For internal use in qtest. Similar to qemu_irq_split, but operating on an existing vector of qemu_irq. */ void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n); -void qemu_irq_intercept_out(qemu_irq **gpio_out, qemu_irq_handler handler, int n); +void qemu_irq_intercept_out(qemu_irq *gpio_out, qemu_irq_handler handler, int n); #endif diff --git a/qtest.c b/qtest.c index fbfab4e..6965910 100644 --- a/qtest.c +++ b/qtest.c @@ -232,7 +232,7 @@ static void qtest_process_command(CharDriverState *chr, gchar **words) } if (words[0][14] == 'o') { - qemu_irq_intercept_out(&dev->gpio_out, qtest_irq_handler, dev->num_gpio_out); + qemu_irq_intercept_out(dev->gpio_out, qtest_irq_handler, dev->num_gpio_out); } else { qemu_irq_intercept_in(dev->gpio_in, qtest_irq_handler, dev->num_gpio_in); }