From patchwork Tue Jan 9 13:21:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Dovgalyuk X-Patchwork-Id: 10152037 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 4E5B660223 for ; Tue, 9 Jan 2018 13:22:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 46DBF28631 for ; Tue, 9 Jan 2018 13:22:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3B1AA289A8; Tue, 9 Jan 2018 13:22:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id EAE7528631 for ; Tue, 9 Jan 2018 13:22:42 +0000 (UTC) Received: from localhost ([::1]:52503 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eYtrV-0003h4-Sl for patchwork-qemu-devel@patchwork.kernel.org; Tue, 09 Jan 2018 08:22:41 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46906) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eYtq1-0002Xq-PW for qemu-devel@nongnu.org; Tue, 09 Jan 2018 08:21:10 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eYtpy-0007Df-LM for qemu-devel@nongnu.org; Tue, 09 Jan 2018 08:21:09 -0500 Received: from mail.ispras.ru ([83.149.199.45]:42548) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eYtpy-0007D8-CP for qemu-devel@nongnu.org; Tue, 09 Jan 2018 08:21:06 -0500 Received: from PASHAISP (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 0DA6F54006A; Tue, 9 Jan 2018 16:21:05 +0300 (MSK) From: "Pavel Dovgalyuk" To: "'Peter Maydell'" References: <20171116115926.16627-1-pbonzini@redhat.com> <20171116115926.16627-8-pbonzini@redhat.com> <001b01d361e9$d46ace40$7d406ac0$@ru> In-Reply-To: Date: Tue, 9 Jan 2018 16:21:05 +0300 Message-ID: <004401d3894c$b3fc90f0$1bf5b2d0$@ru> MIME-Version: 1.0 X-Mailer: Microsoft Office Outlook 12.0 Content-Language: ru Thread-Index: AdNh/jFDIcx5SCYKQoW1VYaJfmejegnTeu8Q X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: Re: [Qemu-devel] [PULL 07/11] cpu-exec: don't overwrite exception_index X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 'Paolo Bonzini' , 'QEMU Developers' , 'Pavel Dovgalyuk' Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP > From: Peter Maydell [mailto:peter.maydell@linaro.org] > On 20 November 2017 at 11:06, Peter Maydell wrote: > > On 20 November 2017 at 10:25, Pavel Dovgalyuk wrote: > >>> From: Peter Maydell [mailto:peter.maydell@linaro.org] > >>> On 17 November 2017 at 20:26, Paolo Bonzini wrote: > >>> > On 17/11/2017 21:07, Peter Maydell wrote: > >>> >> Hi. This commit breaks booting of Debian on aarch64 virt board. > >>> >> (repro instructions for creating the image available at: > >>> >> https://translatedcode.wordpress.com/2017/07/24/installing-debian-on-qemus-64-bit-arm- > virt- > >>> board/) > >>> >> The guest kernel never prints anything to the serial port. > >>> >> > >>> >> Reverting this commit fixes master for me, so I plan to do > >>> >> that on Monday. > >>> > > >>> > Maybe you can also test moving the atomic_set inside the "if". It does > >>> > seem to be a genuine bugfix. > >>> > >>> No, that doesn't help: guest still sits there like a lemon. > >> > >> Maybe this is a more complex problem? > >> I tried removing this if and aarch64 still does not work. > > > > Reverting the commit fixes it for me; I have that going through > > build tests and will push the revert later today. > > Revert pushed to git master. > > More generally, this commit seems to assume that QEMU always > does: > * set exception_index to something > * handle that > * clear exception_index to -1 > > but it's not clear to me that it's actually always the case > that it gets cleared back to -1. I tried to get some logs with the following code. It prints that there was an exception 5 and it was overwritten by the standard code. Fixed code prevents this overwrite. I guess that one of the following is true: - unfixed version misses some exceptions - fixed version processes some exceptions twice (e.g., when there is no clear exception) Pavel Dovgalyuk diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index 280200f..fa810f7 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -605,6 +605,8 @@ static inline bool cpu_handle_interrupt(CPUState *cpu, /* Finally, check if we need to exit to the main loop. */ if (unlikely(atomic_read(&cpu->exit_request) || (use_icount && cpu->icount_decr.u16.low + cpu->icount_extra == 0))) + if (cpu->exception_index != -1 && cpu->exception_index != EXCP_INTERRUP + qemu_log("overwriting excp_index %x\n", cpu->exception_index); atomic_set(&cpu->exit_request, 0); cpu->exception_index = EXCP_INTERRUPT; return true;