From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=43649 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OJXmx-0007g2-GL for qemu-devel@nongnu.org; Tue, 01 Jun 2010 16:10:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OJXmv-00063j-V9 for qemu-devel@nongnu.org; Tue, 01 Jun 2010 16:10:15 -0400 Received: from mail-pz0-f196.google.com ([209.85.222.196]:56737) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OJXmv-00062W-Ql for qemu-devel@nongnu.org; Tue, 01 Jun 2010 16:10:13 -0400 Received: by pzk34 with SMTP id 34so3090105pzk.29 for ; Tue, 01 Jun 2010 13:10:06 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: <1275258946-15739-1-git-send-email-atar4qemu@gmail.com> From: Blue Swirl Date: Tue, 1 Jun 2010 20:09:13 +0000 Message-ID: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] Re: [PATCH] sparc32 esp fix spurious interrupts in chip reset List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Artyom Tarasenko Cc: qemu-devel@nongnu.org On Tue, Jun 1, 2010 at 7:56 PM, Artyom Tarasenko wrote: > 2010/6/1 Blue Swirl : >> On Sun, May 30, 2010 at 10:35 PM, Artyom Tarasenko >> wrote: >>> lower interrupt during chip reset. Otherwise the ESP_RSTAT register >>> may get out of sync with the IRQ line status. This effect became >>> visible after commit 65899fe3 >> >> Hard reset handlers should not touch qemu_irqs, because on cold start, >> the receiving end may be unprepared to handle the signal. > > Wouldn't the real hardware lower irq on the hardware reset? Yes, but since qemu_irqs have no state, and on a cold start or system reset all other devices are guaranteed to be reset, the callback would be useless. > And if it would not, would it still clear the corresponding bit in > the ESP_RSTAT register? All registers are set to zero in the lines below. > >> See >> 0d0a7e69e853639b123798877e019c3c7ee6634a, >> bc26e55a6615dc594be425d293db40d5cdcdb84b and >> 42f1ced228c9b616cfa2b69846025271618e4ef5. >> >> For ESP there are two other sources of reset: signal from DMA and chip >> reset command. On those cases, lowering IRQ makes sense. >> >> So the correct fix is to refactor the reset handling a bit. Does this >> patch also fix your test case? > > It does, but > > +static void esp_soft_reset(DeviceState *d) > +{ > + =C2=A0 =C2=A0ESPState *s =3D container_of(d, ESPState, busdev.qdev); > + > + =C2=A0 =C2=A0qemu_irq_lower(s->irq); > > Shouldn't it be esp_lower_irq(s)? What's going to happen to the > DMA_INTR bit if dma was the source of the irq? Again, the registers are zeroed in esp_hard_reset(). Thanks for testing.