From patchwork Wed Jul 27 17:09:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 9250191 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 EE21260757 for ; Wed, 27 Jul 2016 17:12:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E0354219AC for ; Wed, 27 Jul 2016 17:12:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D3FBA26861; Wed, 27 Jul 2016 17:12:39 +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=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 59699219AC for ; Wed, 27 Jul 2016 17:12:39 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bSSLB-0004Jv-Gc; Wed, 27 Jul 2016 17:09:53 +0000 Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bSSLA-0004Is-JP for xen-devel@lists.xen.org; Wed, 27 Jul 2016 17:09:52 +0000 Received: from [193.109.254.147] by server-5.bemta-14.messagelabs.com id 8A/6D-02116-FDAE8975; Wed, 27 Jul 2016 17:09:51 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrBLMWRWlGSWpSXmKPExsVysyfVTff+qxn hBs+nclks+biYxYHR4+ju30wBjFGsmXlJ+RUJrBmTnxxgL3gtUrH0xGyWBsbzfF2MXBxCAhsZ JX4sX8EC4ZxmlHg+5xuQw8nBJqApcefzJyYQW0RAWuLa58uMIEXMAm2MEmtnT2UESQgLREn8e boZzGYRUJXo2nOFHcTmFXCWWH7nIZgtISAncfLYZFYQm1PARaLjehvYUCGgmjl797FOYORewM iwilGjOLWoLLVI19BQL6koMz2jJDcxMwfIM9HLTS0uTkxPzUlMKtZLzs/dxAj0MQMQ7GA8s8L 5EKMkB5OSKC/XsxnhQnxJ+SmVGYnFGfFFpTmpxYcYZTg4lCR4374EygkWpaanVqRl5gCDDSYt wcGjJMK7ASTNW1yQmFucmQ6ROsWoKCXOexUkIQCSyCjNg2uDBfglRlkpYV5GoEOEeApSi3IzS 1DlXzGKczAqCfOKAeNFiCczrwRu+iugxUxAi4tjwRaXJCKkpBoY24xvdfX8/Bn7LHXRujceD0 x0XSc/+vC8aWHC4l1uv0pn3D/ELB5/bJJTqkFfdc511vavloec6x/u+xp+UCDmmKeauK9w68t COatHTY1vA3O5/VnqZ34ROsqasL20+5SicsLBD5osG0O2L3POitBScz7loWQnr6Gn7iQtUOKY yvMwXGhGprwSS3FGoqEWc1FxIgB2gxj6awIAAA== X-Env-Sender: julien.grall@arm.com X-Msg-Ref: server-10.tower-27.messagelabs.com!1469639390!56354628!1 X-Originating-IP: [217.140.101.70] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 8.77; banners=-,-,- X-VirusChecked: Checked Received: (qmail 49653 invoked from network); 27 Jul 2016 17:09:50 -0000 Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by server-10.tower-27.messagelabs.com with SMTP; 27 Jul 2016 17:09:50 -0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A1F372F; Wed, 27 Jul 2016 10:11:06 -0700 (PDT) Received: from e108454-lin.cambridge.arm.com (e108454-lin.cambridge.arm.com [10.1.218.32]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2F4DD3F213; Wed, 27 Jul 2016 10:09:49 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xen.org Date: Wed, 27 Jul 2016 18:09:36 +0100 Message-Id: <1469639378-9244-5-git-send-email-julien.grall@arm.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1469639378-9244-1-git-send-email-julien.grall@arm.com> References: <1469639378-9244-1-git-send-email-julien.grall@arm.com> Cc: andre.przywara@arm.com, Julien Grall , sstabellini@kernel.org, steve.capper@arm.com, wei.chen@linaro.org Subject: [Xen-devel] [PATCH v2 4/6] xen/arm: traps: MMIO should only be emulated for fault translation X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP The function do_trap_data_abort_guest assumes that a stage-2 data abort can only be taken for a translation fault or permission fault today. Whilst this is true today, it might not be in the future. Rather than emulating the MMIO for any fault other than the permission one, print a warning message when the fault is not handled by Xen. Signed-off-by: Julien Grall Reviewed-by: Stefano Stabellini --- Changes in v2: - Add Stefano's reviewed-by --- xen/arch/arm/traps.c | 51 ++++++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index 28982a4..ea105f2 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -2467,35 +2467,40 @@ static void do_trap_data_abort_guest(struct cpu_user_regs *regs, /* Trap was triggered by mem_access, work here is done */ if ( !rc ) return; + break; } - break; - } - - if ( dabt.s1ptw ) - goto bad_data_abort; + case FSC_FLT_TRANS: + if ( dabt.s1ptw ) + goto bad_data_abort; - /* XXX: Decode the instruction if ISS is not valid */ - if ( !dabt.valid ) - goto bad_data_abort; + /* XXX: Decode the instruction if ISS is not valid */ + if ( !dabt.valid ) + goto bad_data_abort; - /* - * Erratum 766422: Thumb store translation fault to Hypervisor may - * not have correct HSR Rt value. - */ - if ( check_workaround_766422() && (regs->cpsr & PSR_THUMB) && dabt.write ) - { - rc = decode_instruction(regs, &info.dabt); - if ( rc ) + /* + * Erratum 766422: Thumb store translation fault to Hypervisor may + * not have correct HSR Rt value. + */ + if ( check_workaround_766422() && (regs->cpsr & PSR_THUMB) && + dabt.write ) { - gprintk(XENLOG_DEBUG, "Unable to decode instruction\n"); - goto bad_data_abort; + rc = decode_instruction(regs, &info.dabt); + if ( rc ) + { + gprintk(XENLOG_DEBUG, "Unable to decode instruction\n"); + goto bad_data_abort; + } } - } - if (handle_mmio(&info)) - { - advance_pc(regs, hsr); - return; + if ( handle_mmio(&info) ) + { + advance_pc(regs, hsr); + return; + } + break; + default: + gprintk(XENLOG_WARNING, "Unsupported DFSC: HSR=%#x DFSC=%#x\n", + hsr.bits, dabt.dfsc); } bad_data_abort: