From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:44988) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RTpnh-0002A3-Ad for qemu-devel@nongnu.org; Fri, 25 Nov 2011 02:02:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RTpnP-0002OC-5C for qemu-devel@nongnu.org; Fri, 25 Nov 2011 02:02:21 -0500 Received: from v220110690675601.yourvserver.net ([78.47.199.172]:53538) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RTpnO-0002Nz-Qy for qemu-devel@nongnu.org; Fri, 25 Nov 2011 02:02:03 -0500 Message-ID: <4ECF3D37.80706@weilnetz.de> Date: Fri, 25 Nov 2011 08:01:11 +0100 From: Stefan Weil MIME-Version: 1.0 References: <1322172453-26340-1-git-send-email-sw@weilnetz.de> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1.0] malta: Fix regression (i8259 interrupts did not work) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: Anthony Liguori , qemu-devel@nongnu.org, Aurelien Jarno , Avi Kivity Am 25.11.2011 00:21, schrieb Peter Maydell: > On 24 November 2011 22:07, Stefan Weil wrote: >> Commit 5632ae46d5bda798e971dae48ebb318ac2c3686a passes the address >> of i8259 to qemu_irq_proxy. i8259 was an auto variable with undefined >> value outside of mips_malta_init. This made the proxy unusable. >> >> Ethernet for example no longer worked with MIPS Malta. >> >> There is only one Malta device with one i8259, so using a static >> variable for i8259 is the simplest solution which fixes the problem. >> >> Signed-off-by: Stefan Weil >> --- >> hw/mips_malta.c | 5 ++++- >> 1 files changed, 4 insertions(+), 1 deletions(-) >> >> diff --git a/hw/mips_malta.c b/hw/mips_malta.c >> index bb49749..e4dc7fb 100644 >> --- a/hw/mips_malta.c >> +++ b/hw/mips_malta.c >> @@ -775,7 +775,10 @@ void mips_malta_init (ram_addr_t ram_size, >> int64_t kernel_entry; >> PCIBus *pci_bus; >> CPUState *env; >> - qemu_irq *i8259 = NULL, *isa_irq; >> + /* The address of i8259 is passed to qemu_irq_proxy and saved >> there, but >> + its value is set later, so it must have a fixed reserved >> address. */ >> + static qemu_irq *i8259; >> + qemu_irq *isa_irq; > > Yuck. (If boards had state structures the way devices do we'd have > somewhere to put this rather than a local static. More generally > if we have to do this kind of trick then either our device model > is wrong or we're not using it right in this specific situation...) > > -- PMM Boards normally have state structures, the device model supports this and is not wrong here. The Malta implementation simply needs conversion to qdev. This is something which will be done after QEMU 1.0. My patch is not the final solution. It's simply a hack to get a working Malta in QEMU 1.0. If the qdev solution is preferred for 1.0, I can also send a Malta qdev patch. Regards, Stefan Weil