From patchwork Thu Nov 24 16:30:39 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Kagan X-Patchwork-Id: 9446359 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 8F728606DB for ; Fri, 25 Nov 2016 00:05:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7D63627F9A for ; Fri, 25 Nov 2016 00:05:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 70C8727FA1; Fri, 25 Nov 2016 00:05:23 +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.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C508327F9A for ; Fri, 25 Nov 2016 00:05:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752625AbcKYAFU (ORCPT ); Thu, 24 Nov 2016 19:05:20 -0500 Received: from mail-db5eur01on0130.outbound.protection.outlook.com ([104.47.2.130]:64192 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750698AbcKYAFQ (ORCPT ); Thu, 24 Nov 2016 19:05:16 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=XVyD296oYlqwBtR1lSZvDSWw6wni0LrnGsyhgfrcMLs=; b=gdyKv8tEEt0nMCfT4WHDlxzHhxfA6GStyY659opwK61Hs6L1GrAnwa/nvnCeyjPaBJXQtn0vNcxYn0kGE2iHc6c88QfPDNngmgNRE5k8UFvfsP5MMhtD67c86kJKXlH0VqSGLixPkuELYRorQHmPU9k7XnQPKBElrOI6D99y9A4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=rkagan@virtuozzo.com; Received: from rkaganb.sw.ru (195.214.232.10) by VI1PR0802MB2478.eurprd08.prod.outlook.com (10.175.26.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.734.8; Thu, 24 Nov 2016 16:31:11 +0000 From: Roman Kagan To: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , "Paolo Bonzini" , CC: Denis Lunev , Roman Kagan Subject: [PATCH] kvm/x86: skip async_pf when in guest mode Date: Thu, 24 Nov 2016 19:30:39 +0300 Message-ID: <20161124163039.6847-1-rkagan@virtuozzo.com> X-Mailer: git-send-email 2.9.3 MIME-Version: 1.0 X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: VI1PR06CA0005.eurprd06.prod.outlook.com (10.162.116.143) To VI1PR0802MB2478.eurprd08.prod.outlook.com (10.175.26.21) X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2478; 2:0rlEVfzK1sKHKGd+NsD2CN78FXMeX+9R1UdzfBUYTw7ihkOEFevSaqcWj5ENLNPs6lrQiHuVrklGAkbPxtLI1NAauW7BlLlB9B1Ynt6jTW0h/RMdUI7zdO3ePs1tKjjMv87glhKgg6VWd7S8+uMi+J93AHMM/bsvlYIhuhGHqEE=; 3:hLyYagQqNHlVD1MTCC4tS9yeu0du6nJorKT1vhmJtksfZs92tCmBv3IYDuyLKiHAvtKlX7kxRNJHe7ZHbq4HhDdQZTG1KnW/hwMAeZYz0ywyOwHu65aMtZVhMB+qH8uNmjGyBMbsSon0vVzNrJo+iorogz9dkw8YEkNekMV5FJA=; 25:ZKVtOSYGKjDvk1/W69kntr40OO4JYPp3NqfMyLsMJvlownsI545JJho7hhMeMwrBp/1hA5leXu8ZF1hzC68Va3Cz/MwaVdghpl9YtilUFR/pS+17N5hxACer/2IdlOQ2Z9LjSCkfHRJrmKkyVg9pWi91TLxNYKe5lNT7D04AtnnjS7EJ5D2FKJZI0WQuS1Jx+bN/Cx59RIQruXQdrHYMlsjN4r5Tf/k8KDqGR4baLaDZIqX8dU4P7Aq5yKYGLVl7ruhNmCXtUCD0horaz2SAy4NKz3WvphjBv/lZIALogkuQZa5QzBVO5MBp9JnbnFrE8SNyYhWjVLnnG3u7Awb833vTxXtwZgI+eYZwgXadBXxXn7JEWl9h2fEpX7YHEyE1XHP4PVOe+b2d+z48qUL09QKFZZgzrJUINUZQaSwooOEDpFzrcbqhVPAJe0mwWIcjaB3RCIelxBLGK1eFegFvuQ== X-MS-Office365-Filtering-Correlation-Id: cc0c70c7-4e43-4a48-ef5b-08d414874da4 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:VI1PR0802MB2478; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2478; 31:8aB7ttwIJmyAFYPp3U9250sfiJYLaFwXW//PX27UPsC1V793VdudSReNDsgh6tDleOPBrpyyq/EjIIxGVYTuqycOhl1p7lzRqsCkhezyGwHbqREW9ts4T/REOzfBA6K+EbsuLZDtYr7qGYE4tTsRQq+ybDwa79F0vkF0J1NcNqqja0K7v6vGPIbN4TEoqdGyePEBEN4URXeCF3vYPevdfgjX53w3n2spjth9u6HsIjzwkDsO7vbUml1UJ7U9y7zLJcdpSEdB8GgTLw6vZUTnmQ==; 20:WmDEnOFVf3brj8ibp5RM+uJVvYe3HOPLcSJl4Xqe+unb8/v/rJOMu2c5scZroW43CWvyJe9opCbPHX/99TUlyPumvyzu15Qx8QVyUWQuA6GM4CLofn3hpdPBtEsvzQ9cGe/2RGpMAxcHhMcqF8bFlB5+Xe8c5g68xdPW7OtmVDc= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6060326)(6045199)(6040361)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6061324)(6041248)(20161123562025)(20161123564025)(20161123555025)(2016111802025)(20161123558021)(20161123560025)(6043046); SRVR:VI1PR0802MB2478; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0802MB2478; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2478; 4:J7Hk9SqmjHZXpS2AvQidAwb+FPnOSQ/PqWfVLW6P+MG2HXhMN9jjc5Fhtxc6Rx8wMAF6AwQ1Qdn82lLgGjfgEYXNYQQBfofzSyini688BIIKR96sbTS7JEZjDcxkcDxgpvNZGagNkRWlGpSW7g/hOWSMXxfIue7Pv4jRDBjDlmUIgftNqPOZDCkMvz/veayhMoMPt/2CnKeAA0WFcu49/GDD5M1pdZoqm6Z4c+30bDd6E2lod2+GGH7Xf4eMaAkJp6z6fxWhgdpu4oWjobkGaOgFlyMII6Hma4/XRQb0RLY1nE7UfotJ6c284tUZYGS/7x8ar7Q1YaaZZAHAWAt90tx5iBYYAWR9QeTEIRrRMBMz8kcOeGtaHUA5ivrJznoCx2XuMUvrYfR7/PUeM7DlTq4Dm4wcCqxDG+rpOiikFBegD8uWRrzhSd3OpNZ0ym9cYzmgu4A9NlWZR/lmugSq5ygrn5/8KO5WeSq1qR6xVRRDbuIVZ7PucLfDUxyKcS6GBA8bMHZFRZZFbW9vBSRxEVu57uRcILNzLkt0qdxIGoqeZxL/NhFYoY1FUm/rGGXAQtnnDxptGiEe6JFlo/SC/BVWB0T3B3r+rhmDfJdL4u1SiPWB8jXfGeMHFNmG5NO3zy9RLnmcnuwOTeYMQAFdff3wrkpZrOyKkeS3RPK58kaSXYEh55GcyexeN3Sxf6yxD570xMW24oc+dttvv/YnZFGLLYvc3QCPS3U8PbvVR8U= X-Forefront-PRVS: 0136C1DDA4 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(189002)(39410400001)(107886002)(7846002)(69596002)(8676002)(4001430100002)(38730400001)(53416004)(50466002)(305945005)(48376002)(97736004)(42186005)(105586002)(5001770100001)(106356001)(5660300001)(7736002)(6666003)(86362001)(5003940100001)(50986999)(47776003)(77096005)(66066001)(101416001)(6116002)(81166006)(36756003)(4326007)(2906002)(50226002)(189998001)(81156014)(68736007)(3846002)(1076002)(33646002)(39380400001)(39390400001)(39400400001)(92566002); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0802MB2478; H:rkaganb.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2478; 23:WBG09buWNMhA1QQx49S/ySx2EwOxNGYXffVIBZb?= =?us-ascii?Q?5s/LIQ60q+AT4G1TIlAJTHxvnbSrKXokF6XOgadSWyFGpvAXSdxoFbeOI3F3?= =?us-ascii?Q?moAs6FEC29TP3pZl1t9g/cD1+wxYZ1o4+eqqM0vWII/nFRoU8QCFLfnYV0Ch?= =?us-ascii?Q?KOGTcJMdy5fo9nZfsTxb8wG8oYOd418vWpJyphOPSpKmsQSLzqMPo+Y2l/V4?= =?us-ascii?Q?zU93djBoOAuoqKsIFsES90782KlIcHPTM/92Fv+tYwArFwHlIjcI4UGYE/zp?= =?us-ascii?Q?jgvxy4d/Cmkwbl7rglCystLAG1ce0ftmPW8TavpU0YFzVGWwBlGQ1hKbVGJp?= =?us-ascii?Q?YfFPUfqo3gYhZ+XgtX4DV6UFwZV48aOkpWUO+35wLC23p2k9kZLGb/TUNvKN?= =?us-ascii?Q?SRIkj/c1QwCLdMqJcpRyyGMj+sikblEj6LhbFUtM6Ib1gm4l5NFMXBviESC0?= =?us-ascii?Q?2qYcl7wNiNLhz3TKDWfqPAJcLdv1k6/B3tkaJhSYA21W5PhUzQYU6JdUIld2?= =?us-ascii?Q?J97DRiRrQoqOdY46JAHJVUFOq84c2UPvQh7+9bTv4SzqA7C9DTHCXTCv8fFf?= =?us-ascii?Q?wbqPhA214WCLpWuOQDr50sK0LxqHsjXWdR8fiRmG8C/O4Wgh7h5jeBy5BYVs?= =?us-ascii?Q?VgQvckKIsENAgzL4bIq0yaAmFhsca8DF0LaYcPzIR2NiCsMWl4ngkO8j/4ld?= =?us-ascii?Q?mFI8hcQ52xgwGAeL8h0YtIafxPSWzoJ4A1b0tq/rrcaLoH/gcJJwsUGno/+4?= =?us-ascii?Q?KACFVQV+LVs4TaLrAEdMnQt/4LviMEK1Yfgtf1Tu/7MT7VAV8Puhl6CoSw30?= =?us-ascii?Q?kn1VbFnQa0NhdZp/NOx125MMYtb7aig1+YX1q5rh9iCzlB81QK4gmxeL3uQi?= =?us-ascii?Q?KYseqw66jMz0zSROvS7yddwKqM8IrSNVzS7OKCoqOidABt4tJ7GRItAeOR/W?= =?us-ascii?Q?Wm9iO1Wkmb/+hNxUwcqpEB72djCVUkbaXBLT6lRgUEXwiH9p6yjmCzEhB/aC?= =?us-ascii?Q?nfJ+t/FSew1oaGfP1OUQc3AnXosd9huLSndFfpadhvVO8KJry+Jhwi9bc5sv?= =?us-ascii?Q?Ps9mx8j0ig9Z0vsoGxulAP6dcu7wimY8ZpuWs7snMFzc3KznrGSKavFvDJj4?= =?us-ascii?Q?qZ73I/buLXyN6U260jE8pH85VMoenSQpcRkJW9vwnw4sBKIHmmTcbENFvyvE?= =?us-ascii?Q?GJPjU9Cg29tWNuG7j4OcHQDmvar21uCBaFD2NtX/y/0kRWct7aPT39fOXNQ?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2478; 6:mIp6fj8j/gQmieX+TheLL+io6HP174IFvoPqj05xKzYhyW3IPTo8zHvCiY81TodIBHylnjtCGXHm+QZy8h/UAzHauKv4ivbSlPudkDY3nxpwwNqMvzingMp4uSCyEUQZqiIlwrbrv5uLaX3528m2sRzC0sYYQgpOSbFxu5hK2msBg2Dym7vcYmuCfGsK0kGRgqegXEToM2ha3podlPmdtLzKtyvFjW4iozTI1sI4OcAYec0eeJc96f0QYmeZFmMFNSbKsNew2EbuwM4GVGz2n4Wo+26XtNo4u3uz9o87nL44YqNagt3D76D+pKyxywsYPudQ3LYv+c9eO/k07Aw/U9VaDl2WvBP66wvmmGBGRnk=; 5:VnC4EBsTN1bjuX74gsFGGbOdP756BMdrsFmJp0UZVMyoTKgEr7CGYVYf989n9tqr6ceJoK5k3vyfk7TdQywdhbiLBzs2rhlYICE37zUtyH/1WuEEh66UPRiOrrKO6mPGuSSxU3KZx00DCmfGen6DcsXJKiPyj5xnUdnBRuycWVg=; 24:RbmJ40FUgeBCIvyolM8uCdDq5nlvf+5Pm0nweJDshwxvz4I7AtlJ/0EPkayALP5pO/o6KNyTScI8AwENsbfgsFP+XdoEuuK9AmS7lld6RjA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2478; 7:gLpURv61CU6ry9QL/7WkQp7/eHAWfiP5VqifLsGHcaDgBDqGgjQFfSZTi7y9a+Vtggw/YNA/+RLwNdR/HNNypPUQJtil8FtxUDdHqetvOehooX9rpd+hS0mIrCM4szKhmdv4kW0IYQ3SkHo9z2PewtcTn4DwGu9C2dHEX3jFEXiO4NNQROslzO49s+9je22BJa4Vpe0kLRZPkiuV7i2Zb96aEWNPS2ZXXJSp93AeP72Y6hfE5+BQcF8+feh9DTQPPEKG07TCKeWq8fMY4wmMoehqYVrZF1rSdIq6neM6k/aPXeDbCLRWtOFVPzVeI7G0Sc79iR2Zit46IMFRmZzvj09I0QEBtb2lV+p8hRkFgYI=; 20:YsaT4MLorttXjOP0KoMAGZH+RyzQ3zwSKhhB/WuNRvtBsHKFuQ8engXXgr9PHPX2VLSMpvvmxoubzuhUaCpbZzdtx1v5ERElp5EVLLGM4tf3NFDji3yI60XYF/Wj+bfmKLp6bqRDPFCJnpKMH8l6yf/fiEfF1zpSxg53OVGDIQY= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2016 16:31:11.7223 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2478 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Async pagefault machinery assumes communication with L1 guests only: all the state -- MSRs, apf area addresses, etc, -- are for L1. However, it currently doesn't check if the vCPU is running L1 or L2, and may inject To reproduce the problem, use a host with swap enabled, run a VM on it, run a nested VM on top, and set RSS limit for L1 on the host via /sys/fs/cgroup/memory/machine.slice/machine-*.scope/memory.limit_in_bytes to swap it out (you may need to tighten and release it once or twice, or create some memory load inside L1). Very quickly L2 guest starts receiving pagefaults with bogus %cr2 (apf tokens from the host actually), and L1 guest starts accumulating tasks stuck in D state in kvm_async_pf_task_wait. To avoid that, only do async_pf stuff when executing L1 guest. Note: this patch only fixes x86; other async_pf-capable arches may also need something similar. Signed-off-by: Roman Kagan --- arch/x86/kvm/mmu.c | 2 +- arch/x86/kvm/x86.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index d9c7e98..cdafc61 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c @@ -3510,7 +3510,7 @@ static bool try_async_pf(struct kvm_vcpu *vcpu, bool prefault, gfn_t gfn, if (!async) return false; /* *pfn has correct page already */ - if (!prefault && can_do_async_pf(vcpu)) { + if (!prefault && !is_guest_mode(vcpu) && can_do_async_pf(vcpu)) { trace_kvm_try_async_get_page(gva, gfn); if (kvm_find_async_pf_gfn(vcpu, gfn)) { trace_kvm_async_pf_doublefault(gva, gfn); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 04c5d96..bf11fe4 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6864,7 +6864,8 @@ static int vcpu_run(struct kvm_vcpu *vcpu) break; } - kvm_check_async_pf_completion(vcpu); + if (!is_guest_mode(vcpu)) + kvm_check_async_pf_completion(vcpu); if (signal_pending(current)) { r = -EINTR;