From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753352AbdESPMr (ORCPT ); Fri, 19 May 2017 11:12:47 -0400 Received: from mail-cys01nam02on0082.outbound.protection.outlook.com ([104.47.37.82]:42656 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750933AbdESPMo (ORCPT ); Fri, 19 May 2017 11:12:44 -0400 Authentication-Results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=amd.com; From: Brijesh Singh To: , , , , CC: , , , , , Subject: [PATCH v2] KVM: x86: Avoid guest page table walk when gpa_available is set Date: Fri, 19 May 2017 11:12:29 -0400 Message-ID: <1495206749-25393-1-git-send-email-brijesh.singh@amd.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: BN6PR1001CA0018.namprd10.prod.outlook.com (10.174.84.31) To CY1PR12MB0150.namprd12.prod.outlook.com (10.161.173.20) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY1PR12MB0150: X-MS-Office365-Filtering-Correlation-Id: 8defcfb9-93f8-45d8-1cd1-08d49ec97f48 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081)(201703131423075)(201703031133081);SRVR:CY1PR12MB0150; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0150;3:Gu461dpN6XgJx6UjCn7+XG8R+TDoTY+ITnucEN2VZ0FIiJLWsJw/hIKWunFBxRZY7u7dx5qjcUYFC9fs0zm0cN9sS2mw5jno98FjJeJyCE08A0W9xSUheTj6NoRF0ayYDj9g8VzifALCqhg6a00YeL7mT0JivsFZY91nJnbIhYLwo+ZIVA0SWzLv4vz/CcwsuE76MhK7IDQYKgTcUnyFzbDK3wHYN0byfU+B9/fAHVjPqf6bqqOo4GFJjBqzBXIKHxmUMMbR1iTuddwZmRsB2cZRwX3AyZcoqdqt/hjvn/DJvfMQ+d4xtRspaSyQcrW2IHNguYB+kYQQOZixfuUPmgqMPgdG3bCjF+ZCiabJ1xY=;25:/NcB/arDNQXiZ821FkZTSK1jlkLCnWi5i6kF4TOd3frKnUFyOP+O6hZjUhlys7ZQgn/nKQDmo2ekWME+fKamZw2grATpjfluKSIy4SUxPs6NfIGhUk4wHGXMFvVde7FfxSdD9GsHgD7suRXkmRoZVY/DmkGo7FtuMyAFNL88ARKH7lFP3cOKTQxQk9gf0J2VOxwzzIElTLvgRPpoWEbZep5C2RFVNla3ejGZuDwyqcWsHJ/HBIV+sWvO+Z44y8rkZOr+XBA5YMIatRU7C2JsxrmRNInXbfv6obUpnhdlfRvieTANzbSbHVH3kyaAuehw2YW2GLmNY0F1j8f6rA2R7DJ+Q2PF374E8rwCcnqlIFKsZ0hUT24qvXqJKQrkWrDl8zY/biyoS4NEtLtulPz4aOi5Uwja50z3r59zho8bWmnvNk6fvXtZujlMOvq3PMtElfGIq1LbfdoliNPFx+4gmklryesgwKSv91k3l3x88yE= X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0150;31:zVod10gYvPvZTfZghl2PwjDj1xsDVENfFJgbWgHZFzb8txAapM7KhGLvlD3zZy7o2vuL36c41XiNUYdBrLdSmSGi1i9DV1PyiP0ZSQsFGLHGFAwHUNS+ztnf6Vyu2E2vCC24cPVlEbp9ApoZo7HnpF0cN5qlixCw5qTBZ9aOd2V80lTvhFTfDKD0WWbeFAQ6Q4YTqEUU5BH4XQwK6oFwtmDObI7aVlQ3wz0mSLYUjXo=;20:YWiXFrYJnvY9N13O8LY/wGonquGAs4tXUb1bv/3KIZAQNQmzGYsHPGjhZXnrBlUwNnsaL/tLx35W23TCmCHthUV5aONzgV+SltQDmc5vtAj4dOe/3GS3HJ5ijG/9Hne2rAafgMflqdEzwEUGpk3oovYWpOgNSLnGRpcIwKx2EN0rVtucq+30rZQyYZ6zFay5nyLYWF9roIbZYQXeNpxU6goWLdfPinyDWEnSlmX6xfsJjKwaFECVLJjr0vumTgZaefGQ9/QB2ZClkLHPRkQU0AvbPMsMm9ybvcaQFNNqCFDebiyFCRKcmZMbsL9CRBe2d8AtCzkOt5ckE2zvFjVHyJWvftNrTQnLOS4hc2XNI9Gjro6eOb5T9nWgQ8flGs5B8IlL3QY7D/IXAoMyPi9TryV3aKqwf/51HNfc0xx2M6u5n4FoT7hwibwhXM1Md1NQtQQhT7TPCJaosulWprvaBozZe8LZPMhXt8InzAEb8cb8SM83C1K+Uh32TVVnT82n X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(6055026)(6041248)(20161123562025)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123555025)(6072148);SRVR:CY1PR12MB0150;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0150; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0150;4:g42w+z+D5K1b9bHDEHiYDvCOEpBcltiUU15gP1s3PpEx2wpRW+sZvaMW7HhqDUfFi2iD5N7n2GX4p8skR7tKYJQYyz4FbbpHylq5G/kUfPLwC1rxXSi+AIk3ufgEHL56xHP8DD1ectVyqf4LI4CdV0mlAEs9wXEEI5Z9IMQ4lLrVl6K0rC/Mp+42ohepCSY9X1NJonhMRAeGzfqoeFw2tH8YYsmcfWFW0gt6uHmeCzbyz6RJGDzePRjZAy4f692zsfhkuFfEADNaGCCW+ToAaH08F/pM2zXcM1DYm8eIp8D6c5vzP5IsPyImsJ7NPPUdVMCK+1e3lFlkMy3ZpXmUOZXQHRcjwLbEhNNaNxyfz/oS7SeeBn9pxePC2IP0s0Qwsnh4H2Jqz5FJITWsl+1uYLNNctEmNGN9RThGACUJRJljHzKaa8jVIxvknhoQrsqJyY1Qf1mfXvpa9/Ly5iukUc/HPJsfXhKr0mnx3uheSU7ZGjAxCNOk6Wc/Ngbzq2PrMunw9WtKSiD7Dfyxe1K/3tGyh56ext4dMaedGvUjf+VhIFVe63xWFsT5YgydG+5nutURlV2chgntLRFCelT+tTYNgnoIxXUC91iiQCo/PR0Vb2klaWimyY0VgZfXnWIuhkGNz67HAb6EZFZzzBhMed8e/3WawQYcO1wAe46f7WJ5E+qaH5D/Z2iS+KCml/6RUVKxNZ9+FA4cpp6EhvfTH5fQK12uDl3zCudTSSKKi8a6vb/g3IenZjznlMwrxW1tTifzPHaMv9YNKnSURQ3dV5uM/X5YQStiCqlqMzeIdJ58q3A83sbC3V520bJSoMje/KN93ECeLiIjlnsvOJj10Q== X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39450400003)(39840400002)(39410400002)(39860400002)(39400400002)(39850400002)(209900001)(25786009)(4326008)(50986999)(66066001)(2201001)(50466002)(48376002)(189998001)(50226002)(6666003)(2906002)(81166006)(42186005)(8676002)(966005)(478600001)(36756003)(53376002)(53416004)(86362001)(33646002)(38730400002)(305945005)(3846002)(7736002)(5003940100001)(6306002)(54906002)(6486002)(5660300001)(53936002)(6606295002);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR12MB0150;H:brijesh-build-machine.amd.com;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR12MB0150;23:iXEPOjwavnrfWmYkRgPrZaYMWXLlHFW6/0flrYm5t?= =?us-ascii?Q?3Ez8v53LokmU7eIG1bfPZZh8y8jHlAhi6O8VwH4ldGS5vj3bsEGGfUHnbvpV?= =?us-ascii?Q?hl29yjhA18rjLqQJPMiJTTAKrDiIAGo4pC2le7uhQ0v3Y2UOs+Gtjb6Z4jmv?= =?us-ascii?Q?Py+81lmVRB0mfupSjJaQLoIDHTZRb7TFHLlCMMHQiuOPIMrEPnd9CbhefYqn?= =?us-ascii?Q?1iMI3XuhonU8LduZUX2ogRJ92HCidcJV0RuuFIcyShxwLPRlNS/U7tOy/xgF?= =?us-ascii?Q?8yoJf0ggpE3Mxpp0ybsmABwtj2n4+trnJ+VaXQiwD9Tn42IV5H0qCRbenYw/?= =?us-ascii?Q?6SBisq7OIgKKQ9M1PswwvEcpVN/FF417mFt9M7nFKDc5h3Gb0zdwGnVS3KmH?= =?us-ascii?Q?mQbRj8kyW71a7R0fwkFV7Y1Qf8wFeXTWJSFVk7kE2VkU92/3/jT4nF1U5VAs?= =?us-ascii?Q?KHzG/RhyqNHbjqEKMJRRBbi+s5BOnGzsDzkGH65QOnSfngTTjG7rDOEg08VQ?= =?us-ascii?Q?vYDQRVodrvm5s4XtgSNBzDvPzOe6Y+h83F+7R60k9Mh3ky9gX4gWEsRo4iHe?= =?us-ascii?Q?gvQyDHXsqJMTXysTygU7h97uSaJeIE2+I2m3Ogkv3CKprb+m0ZVSJ3WgwlOA?= =?us-ascii?Q?P1lT92THRKqA3rlq8bU+4dwOqoCnWLrV1+ht8SuzVYp8mstTwIkYUS/WBcUd?= =?us-ascii?Q?VWUm16ZU2sl/008+NpTonmWL9hbx6iWzG0EJS2mJZOM6CTeSgOi0W101hEuo?= =?us-ascii?Q?AEkddRUgEvxwyXOzAZ8V1Z4Y8Z2o1Bmy8gms3bOexNkZEiw+ZlVInJGQL3p1?= =?us-ascii?Q?NeQD/Ks87LpKl7ft9pg1vMVGmLspiUi3VL/1A+QXRwXkX9D0ldWZ31lVdJEM?= =?us-ascii?Q?SPDMk8BjEljqVlmqPjLrpp4B3LAJwJdrwGztxMS3QYKhZbFSS+FZtGTnZGo3?= =?us-ascii?Q?PNGGz8f16eyyIWHjVAxXZoyGj0NjzGgwv7LKD66L6bnlSGtb9oRjtHQSCUdT?= =?us-ascii?Q?SwWfrdD7wZ+VSgqMpbAywg46yF1CHdVS3pnD1w4mEc7IxWsInv3KiFhLhAoF?= =?us-ascii?Q?02xryY=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0150;6:R4befvjZVjjjJm2aASnJVnwHy/aCj7Ks+6tP5PF62NHcyoxlBCESm4RoBQTjwRlAiotRhNbxZxxGiz5pbG6dFvHzkg6R3WefeJN9vri3VOcC493KauaZN+DB7kQO0ap59uYD3wTVkHQv7RwAYa8BHj3TSCMSESQSXCb8QNAmWjKKxb4jtqlK0oEDzO+0IB9lKtxp1Pplv5meyD6nufzBtB9kKubBv9FLobYRME4ogCWVSxzlX/asLj6ZfEbEXzRBRg+DFA+eb+LB5O1xasIwbq2wmIGXkQUJGjKW74zfjSIl9RzHmTkkQnZtbLZdkvcph2cBbIjLA0MXmaZ4ET0T6uj5pGgNyIqtP9AZa2oQFVyU++DuL0GlYeHswNuEkZY3m6U16AnLktukNyl/pxDzbMywClJRz0U6p3wM+XEvBdkBEqxQ+kr3jNuocjMh7Wp4ZZh8NK0isa0NRTwsvkVRa/uruEFoWBx6AU0HWXXO4a6n9oyrjbu9hO5CesP4bfpvAgjSLAmYrgCJZ7dNfgdmLkI/bxxTMeeKjQt5PBihqhE=;5:XuFvUZP0AJCY/EKQRDDT125SAGLMcRhEmqtsNZyZDjmB7S+ai/axglnD7n8xyLYPCJcQ6gIM8xML1WS5GkMw7jrkCm4p6acHckezbocnGr6Lqv6l9trTKill3TAowcjSpkNzwLzurYox2xqCJbRO7g==;24:7PwjXdXN3HBo7ganQ9etrlhtWmNE4pU2o8lICA6OXy/2kECSgncEVTdgz1yxRUj0tuEJ9Ccf/CQMcq/2/ct5x+gxZ8ofCeuQUDJNArZGncc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0150;7:i7HbAZi5sIjG5tqilPHQUSvPyzjpgVylEpB/94QI2SvEkBJbzACY3HBmcZJgM0OzV8GNEj7vGoxwKJ8tDO2l9cJ7NAi7H5pqgpsa3u0LvLbKW/59zMR9qIOtp3+/k7dLBnw7IemwI74Bus02uBCfPxSRx2uSO6lSEYopltMxWX4coeZ3R02vYlKVoGUvQRrOcFOzt0BrMY27QeRLcsDIn80rfq1IRfNn3xIm1l6ub2JD7bbpYrbdF5Z9SCA6dHmwQUDpBQ1FyWF/UJOGROkBUS1nvi9BtDSTnKQQBdj/RehXAu9rr/2DVLXeVzgbwSBpxV5V6z5lpVMB/KGpsgjwcQ==;20:jdVCEyeU9ywITDgYu2bXcm8cJex1655fPNPZqMC6WbdDGevRJvkl8PH9K8O4WDG4kx+UFsMLSY4aj3GGd8Y51y0Q085i8Id0VMm3GwgbxBpT7schduXVdLAbfKlC4TXT2iQ/D4iDI83PZ9D0qxVpIe43KnZGlBhfhZ4/dkockqayhp89BvoLDwxO0xrWxthdA4Yv3egnDeuIYIkidEXig5ASt987Q2aINlv8iAI4KKpvbtAxDY4tFyIi2AR1pLro X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 15:12:41.5418 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0150 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Brijesh Singh On AMD hardware when a guest causes a NPF which requires emulation, the vcpu->arch.gpa_available flag is set to indicate that cr2 contains a valid GPA. Currently, emulator_read_write_onepage() makes use of gpa_available flag to avoid a guest page walk for a known MMIO regions. Lets not limit the gpa_available optimization to just MMIO region. The patch extends the check to avoid page walk whenever gpa_available flag is set. Signed-off-by: Brijesh Singh --- v1: http://marc.info/?l=kvm&m=149304930814202&w=2 Changes in v2: - move gpa_val setting in pf_interception arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/svm.c | 4 ++++ arch/x86/kvm/x86.c | 14 +++++++------- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 695605e..cc87e00 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -678,6 +678,7 @@ struct kvm_vcpu_arch { /* GPA available (AMD only) */ bool gpa_available; + gpa_t gpa_val; }; struct kvm_lpage_info { diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index c27ac69..27fb563 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -2070,9 +2070,13 @@ static void svm_set_dr7(struct kvm_vcpu *vcpu, unsigned long value) static int pf_interception(struct vcpu_svm *svm) { u64 fault_address = svm->vmcb->control.exit_info_2; + struct kvm_vcpu *vcpu = &svm->vcpu; u64 error_code; int r = 1; + /* On #NPF, exit_info_2 contains a valid GPA */ + vcpu->arch.gpa_val = fault_address; + switch (svm->apf_reason) { default: error_code = svm->vmcb->control.exit_info_1; diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index b54125b..d2d88ed 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -4634,16 +4634,16 @@ static int emulator_read_write_onepage(unsigned long addr, void *val, */ if (vcpu->arch.gpa_available && emulator_can_use_gpa(ctxt) && - vcpu_is_mmio_gpa(vcpu, addr, exception->address, write) && (addr & ~PAGE_MASK) == (exception->address & ~PAGE_MASK)) { - gpa = exception->address; - goto mmio; - } + gpa = vcpu->arch.gpa_val; + ret = vcpu_is_mmio_gpa(vcpu, addr, gpa, write); + } else { - ret = vcpu_mmio_gva_to_gpa(vcpu, addr, &gpa, exception, write); + ret = vcpu_mmio_gva_to_gpa(vcpu, addr, &gpa, exception, write); - if (ret < 0) - return X86EMUL_PROPAGATE_FAULT; + if (ret < 0) + return X86EMUL_PROPAGATE_FAULT; + } /* For APIC access vmexit */ if (ret) -- 2.7.4