From patchwork Mon Sep 30 13:32:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Roger_Pau_Monn=C3=A9?= X-Patchwork-Id: 11166719 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5A5FB1902 for ; Mon, 30 Sep 2019 13:34:37 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 368C9215EA for ; Mon, 30 Sep 2019 13:34:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="bynA17zY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 368C9215EA Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iEvnp-0005US-IN; Mon, 30 Sep 2019 13:33:25 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iEvno-0005TO-CO for xen-devel@lists.xenproject.org; Mon, 30 Sep 2019 13:33:24 +0000 X-Inumbo-ID: dda73a2d-e386-11e9-96d3-12813bfff9fa Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142]) by localhost (Halon) with ESMTPS id dda73a2d-e386-11e9-96d3-12813bfff9fa; Mon, 30 Sep 2019 13:33:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1569850400; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4yOccHXsrLKixDZORdzfIHT5/uP4KQJuS4A78hqM23A=; b=bynA17zY44ZcE7OdaVs6SHLORCyZo2Le6KDdFlekvRS6m1EQXwQI1/oM PWqxReCVTWmXOEYvCqv/CVLC1IlVlIfvmvfA33jzx7RsPIVLWQ4Jt9g+9 viOfv+zfHK+93nqq6c/3M5uSt/Xz6rxDJqrvGD5W7vSeCRst8k0IAKLlG I=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa1.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: zF6D/gTLeKXu9/f/6Rzq9IQ2Kxzq9BqmZDzs59NLVMu64+Ri6FGMLWg0mO9TVlAasFI/pHZj5l KmiRqVYFQtKAtKLexr9Tz0dQvE/S8IWAk3DKvoUcC+Tqy/Tmj7XACVG3wrvuJSmJCIpLUOlwrZ zJQbzeMvWbLdXgQpN8v+C/S7s/skT/l76mSqs7Eb0/4s3SOyBH60okj4A6er6qLExr83dCb/p2 Crw2Rx1TXd9KsqRiMaHlifEM/Pf2VI8yNbupTokmDO/dw5KqPwMhExLWSqGq15jzfWa84KqDfY 4eE= X-SBRS: 2.7 X-MesageID: 6322260 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.64,567,1559534400"; d="scan'208";a="6322260" From: Roger Pau Monne To: Date: Mon, 30 Sep 2019 15:32:29 +0200 Message-ID: <20190930133238.49868-2-roger.pau@citrix.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190930133238.49868-1-roger.pau@citrix.com> References: <20190930133238.49868-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v3 01/10] ioreq: terminate cf8 handling at hypervisor level X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Andrew Cooper , Paul Durrant , Wei Liu , Jan Beulich , Roger Pau Monne Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Do not forward accesses to cf8 to external emulators, decoding of PCI accesses is handled by Xen, and emulators can request handling of config space accesses of devices using the provided ioreq interface. Fully terminate cf8 accesses at the hypervisor level, by improving the existing hvm_access_cf8 helper to also handle register reads, and always return X86EMUL_OKAY in order to terminate the emulation. Note that without this change in the absence of some external emulator that catches accesses to cf8 read requests to the register would misbehave, as the ioreq internal handler did not handle those. Signed-off-by: Roger Pau Monné Reviewed-by: Paul Durrant --- Changes since v2: - Allow ioreq servers to map 0xcf8 and 0xcfc, even if those are handled by the hypervisor. Changes since v1: - New in this version. --- xen/arch/x86/hvm/ioreq.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/hvm/ioreq.c b/xen/arch/x86/hvm/ioreq.c index d347144096..5e503ce498 100644 --- a/xen/arch/x86/hvm/ioreq.c +++ b/xen/arch/x86/hvm/ioreq.c @@ -1518,11 +1518,15 @@ static int hvm_access_cf8( { struct domain *d = current->domain; - if ( dir == IOREQ_WRITE && bytes == 4 ) + if ( bytes != 4 ) + return X86EMUL_OKAY; + + if ( dir == IOREQ_WRITE ) d->arch.hvm.pci_cf8 = *val; + else + *val = d->arch.hvm.pci_cf8; - /* We always need to fall through to the catch all emulator */ - return X86EMUL_UNHANDLEABLE; + return X86EMUL_OKAY; } void hvm_ioreq_init(struct domain *d)