Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp712394ybe; Thu, 5 Sep 2019 04:56:16 -0700 (PDT) X-Google-Smtp-Source: APXvYqwxp08cWBbBYa0fUZNuXRgEOemvVA2Nm0tUPFZanZzqHJX/W2snE1o4waHjYf4AKGGANI/J X-Received: by 2002:a17:902:b605:: with SMTP id b5mr2962698pls.103.1567684576455; Thu, 05 Sep 2019 04:56:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567684576; cv=none; d=google.com; s=arc-20160816; b=EbdEeeUKZYlqA6/o3fW/Yd8ZDFNhMT996cWrG55JiFnb+rTsFMLYAWD9ASyOO+ZCFx Iek7mpXWGwtCiWVK3pvui7ONre0CFqvMMSqOZD/8QP2fH+vM1glx+6dTdkWSwKiENYFf INxRh13fx7m/xo1RtmbNatj2zr0rXeGnkt/MVQam1K/EbGULsEmu7XmLDbW6wN7imYhx uUAAxwwXRnNVeYStHdJI5tDM/Yhfil7PtfzYuUvvWmnZ/ETZHk56hcVAeB6CumYfDv2O gBze5ggUt2lbvHur0jY3Nor12+3cq5FE6BPs7fnFXoS7XBJgIQmGXSJ2vAJKQNIUEVZL cFxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:organization:user-agent :references:in-reply-to:subject:cc:to:from:message-id:date; bh=hlWAWpO4fYSqz8Wr94MLlF2Ko757fQw1GK/b1iWqg5c=; b=dc9yUUbQU0ViK3AnN8qFhdYCTWvDHcCbdF7z7dfCC9bJA6X9BxyuSz8MYPKYQT6dV4 ZQA6bdO6+Bo5zndzoQgsgc0RaTpM3aDgRYUTCrvu2PUi+Hrx1s2BTWVd3l5QL+iqALQ4 efBg/k0uS4bzSw/f8mh5pqqvaZFAJLZu9Xt0m9BhS20tRR6xAJyD38R/Tup/bU0CaB++ sptB6qS2gsRLENUEkHMSwILiWG3YuH/qkW0Hia7ZgxPPIhC96GYNHF86asZ4MT024rV0 Fc55XS/5E83aHme2d/WcnGOTytXCOaCtsUVy7bCjJp9nHN3XjmBm1M9TyvUEUX3DUcR8 yyUw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w14si1986931pfi.64.2019.09.05.04.56.00; Thu, 05 Sep 2019 04:56:16 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732191AbfIEJLn (ORCPT + 99 others); Thu, 5 Sep 2019 05:11:43 -0400 Received: from foss.arm.com ([217.140.110.172]:39876 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731167AbfIEJLn (ORCPT ); Thu, 5 Sep 2019 05:11:43 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D8C7F344; Thu, 5 Sep 2019 02:11:42 -0700 (PDT) Received: from big-swifty.misterjones.org (unknown [10.1.27.38]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 649103F67D; Thu, 5 Sep 2019 02:11:40 -0700 (PDT) Date: Thu, 05 Sep 2019 10:11:38 +0100 Message-ID: <86lfv3rtth.wl-maz@kernel.org> From: Marc Zyngier To: Heinrich Schuchardt Cc: James Morse , Julien Thierry , Suzuki K Pouloze , Peter Maydell , Stefan Hajnoczi , =?UTF-8?B?IkRhbmllbCBQIC4gQmVycmFuZ8OpIg==?= , linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/1] KVM: inject data abort if instruction cannot be decoded In-Reply-To: <754fb77a-aace-e0aa-a5bb-a6c6bcff9890@gmx.de> References: <20190904180736.29009-1-xypron.glpk@gmx.de> <86r24vrwyh.wl-maz@kernel.org> <754fb77a-aace-e0aa-a5bb-a6c6bcff9890@gmx.de> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 EasyPG/1.0.0 Emacs/26 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) Organization: Approximate MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 05 Sep 2019 09:28:42 +0100, Heinrich Schuchardt wrote: > > On 9/5/19 10:03 AM, Marc Zyngier wrote: > > [Please use my kernel.org address. My arm.com address will disappear shortly] > > > > On Wed, 04 Sep 2019 19:07:36 +0100, > > Heinrich Schuchardt wrote: > >> > >> If an application tries to access memory that is not mapped, an error > >> ENOSYS, "load/store instruction decoding not implemented" may occur. > >> QEMU will hang with a register dump. > >> > >> Instead create a data abort that can be handled gracefully by the > >> application running in the virtual environment. > >> > >> Now the virtual machine can react to the event in the most appropriate > >> way - by recovering, by writing an informative log, or by rebooting. > >> > >> Signed-off-by: Heinrich Schuchardt > >> --- > >> virt/kvm/arm/mmio.c | 4 ++-- > >> 1 file changed, 2 insertions(+), 2 deletions(-) > >> > >> diff --git a/virt/kvm/arm/mmio.c b/virt/kvm/arm/mmio.c > >> index a8a6a0c883f1..0cbed7d6a0f4 100644 > >> --- a/virt/kvm/arm/mmio.c > >> +++ b/virt/kvm/arm/mmio.c > >> @@ -161,8 +161,8 @@ int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run, > >> if (ret) > >> return ret; > >> } else { > >> - kvm_err("load/store instruction decoding not implemented\n"); > >> - return -ENOSYS; > >> + kvm_inject_dabt(vcpu, kvm_vcpu_get_hfar(vcpu)); > >> + return 1; > > > > How can you tell that the access would fault? You have no idea at that > > stage (the kernel doesn't know about the MMIO ranges that userspace > > handles). All you know is that you're faced with a memory access that > > you cannot emulate in the kernel. Injecting a data abort at that stage > > is not something that the architecture allows. > > > > If you want to address this, consider forwarding the access to > > userspace. You'll only need an instruction decoder (supporting T1, T2, > > A32 and A64) and a S1 page table walker (one per page table format, > > all three of them) to emulate the access (having taken care of > > stopping all the other vcpus to make sure there is no concurrent > > modification of the page tables). You'll then be able to return the > > result of the access back to the kernel. > > If I understand you right, the problem has to be fixed in QEMU and not > in KVM. It is a shared responsibility. > Is there an example of such a forwarding already available in QEMU? Yes. That's how we ask userspace (QEMU) to perform a MMIO access on behalf of the guest (see how the run structure is populated and the vcpu thread returns to userspace). > > > > Of course, the best thing would be to actually fix the guest so that > > it doesn't use non-emulatable MMIO accesses. In general, that the sign > > of a bug in low-level accessors. > > My problem was to find out where in my guest (U-Boot running UEFI SCT) > the problem occurred. With this patch U-Boot gave me the relative > address in Shell.efi and I was able to locate what was wrong in U-Boot's > UEFI implementation. I understand that there is a need for more precise information. I'm just wary of adding debug features that become something that people rely on, despite being in contradiction with the architecture. I can help with the kernel side of the reporting, should someone want to tackle the userspace side of it. Thanks, M. -- Jazz is not dead, it just smells funny.