From patchwork Thu Jun 22 16:24:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Volodymyr Babchuk X-Patchwork-Id: 9804753 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 6994D60234 for ; Thu, 22 Jun 2017 16:27:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 590682870C for ; Thu, 22 Jun 2017 16:27:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4D74328711; Thu, 22 Jun 2017 16:27:59 +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.1 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID 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 7DBB82870C for ; Thu, 22 Jun 2017 16:27:58 +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 1dO4vI-00011Z-Hj; Thu, 22 Jun 2017 16:25:36 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dO4vG-00010z-S8 for xen-devel@lists.xen.org; Thu, 22 Jun 2017 16:25:35 +0000 Received: from [193.109.254.147] by server-9.bemta-6.messagelabs.com id 94/63-03557-E7FEB495; Thu, 22 Jun 2017 16:25:34 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA1WSa0gUURiGPTOz22hOjLvGfm0auBFuG95IwiC hCMuUKKF+6B8bbdxd2HV1ZjUrFMUyW1k0BW8IKkqKkJiGiSGZlzQlTSWlQkII835JWgQxm3FG s/Pr/Xje97znwEfiqg2FlmQz7CyXzFh0Sg/CFISFBWSuRscG1xUSYfXrdcRFFNn/Zgu7ieIU5 uQEW8Ydhak534lS5hMzPjWXoWw0GuVAHiRB5+BQuzxGiAOiixBUlDh3BxXtxGC5s17hQKQwJE JV42kHcieVdCg0V48eErU3fRwmNyaQ6MfpPAQ53a2Y6FfTEdBQrhE9BH0K3g72EaKm6ChofPJ yVwN9Ar6MPMVF7U5Hw6NvM3KvA0HjbDEuBbzgQ8WP3QBOA7ybm8OlsB90b1XgYgDoQgTtw9u7 QEX7Q9fWkmzyhf6PVXLbdRj6tSlrG2xNbRJSeFsJM4VTSgkYoMvVrpRApxJathfkhAVGyl/Jp mtQmV+MSaZeBawtDysk8JiCul6bpH0g/+sfuWKRgKaSMvmxrsMw3dIqkwkP6CotxYqQvvLAby sP/LYGYU1Iz7NcOssFnA0OTODMRpPdypgtASHB5wKtLM8zRtbCJPCBiTZrKxKWwU04HWj7RUw POkZiuqNUGx8dqzqSYLt738TwpnguzcLyPciHJHVADS4LzItjjWxGktkibNQeBtJT501ZvguY 4lMYK282SmgI+Wk1VPaKAGgRmNKS92N7uziOfLVqCgkPUXmmsJzVbP+fLyANiXRq6pJ4i6c52 b5/+4JQjAnFc32RYrGd+Ye02eiZ4+di5noeRPrNPKwOWzeoy50D8cXTPp1JPqtNr7XqG2c+1+ wMvHeHW7/b9NX90zX+4a7UB26rSH91atJVMpbbFLNY+3w2IvL8SuXtCx04mZqZdbKhwHhFE5p l6UEGt/q48p3LuQX9zsBU77W1qHG1ft4r3RU2HsQthd/rmtURvIkJMeAcz/wFzmZl6YYDAAA= X-Env-Sender: Volodymyr_Babchuk@epam.com X-Msg-Ref: server-7.tower-27.messagelabs.com!1498148731!104416483!1 X-Originating-IP: [104.47.2.56] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.19; banners=-,-,- X-VirusChecked: Checked Received: (qmail 41491 invoked from network); 22 Jun 2017 16:25:32 -0000 Received: from mail-db5eur01on0056.outbound.protection.outlook.com (HELO EUR01-DB5-obe.outbound.protection.outlook.com) (104.47.2.56) by server-7.tower-27.messagelabs.com with AES256-SHA256 encrypted SMTP; 22 Jun 2017 16:25:32 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=EPAM.onmicrosoft.com; s=selector1-epam-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=TGvaR0UxDBZmmtsPEERtSzj9nxfDZ/gFH55u3WWbrds=; b=f4Pc0dZTalHmkWSM7ICTR1zQ6mvjHHm+WB7VL3+fCGQp4GbswiR8YZubW2s6uz850rOdvBs1H65HJYNlZDIk/LT8LzvcxSUBqD2thpfBlrzarPJkpbV0U6ZCAmQmqrbjtxcn0Plzys2YvtWXuilQuWJWQois8vhu9baFd8YxRVQ= Received: from EPUAKYIW2556.kyiv.epam.com (85.223.209.58) by HE1PR03MB3098.eurprd03.prod.outlook.com (2603:10a6:7:5e::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1178.14; Thu, 22 Jun 2017 16:25:29 +0000 Received: by EPUAKYIW2556.kyiv.epam.com (sSMTP sendmail emulation); Thu, 22 Jun 2017 19:25:24 +0300 From: Volodymyr Babchuk To: xen-devel@lists.xen.org Date: Thu, 22 Jun 2017 19:24:59 +0300 Message-Id: <1498148700-10758-4-git-send-email-volodymyr_babchuk@epam.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1498148700-10758-1-git-send-email-volodymyr_babchuk@epam.com> References: <1497449445-23112-1-git-send-email-volodymyr_babchuk@epam.com> <1498148700-10758-1-git-send-email-volodymyr_babchuk@epam.com> MIME-Version: 1.0 X-Originating-IP: [85.223.209.58] X-ClientProxiedBy: AM3PR04CA0128.eurprd04.prod.outlook.com (2603:10a6:207::12) To HE1PR03MB3098.eurprd03.prod.outlook.com (2603:10a6:7:5e::27) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8b2002aa-2132-4445-46b5-08d4b98b4c90 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:HE1PR03MB3098; X-Microsoft-Exchange-Diagnostics: 1; HE1PR03MB3098; 3:1ZPvNzIKB/Xe+9GuJcQW/wZ9pFQMcKvgJbxI0arxP7YOvFSzlVtn8aP0w+4exZXZLOErl6gUrpR31bLz44n8G23S1vT5Npq+hJll4XHWGiHR0aqGWDM2Gx4d3+IS+t9vqWj331aDLCp8b0KUTZIVSARGzLl6guTbMyEGUWkGn86ntonfc3dZ//gSBgOUoTTvmdM8SE6hz+qnwC4/8e6ljrESEMOCiqjZ3W6Ov9VMEZdqH0bqLsVoK9nv+adUq3Hh3Bz2OHLFZgzEusAHzG8nQffuPnpgY2JFuzUUSb/ScXN2RX4kzLOjJDExFdIBMpBpXej9E2Hx3cW2CwOFG1g4fg==; 25:PJ6vKcikRitFY3a1x+ypfsqEuV1RhVU2Hr2kd93fs24Y0G0blfcI5y8+CfOsLTqfgCTNuFZmKLU9zzn6BXMXZYvXcqNCk+AuIEh63VUz7nG0P7CUbAPJcET5VIbhfhVnjhGiAWjtdV60SlkYhgqJ3O29McDgA/wFtaOjIO4jJxU+HVj101yQNRf/ldAQYXA30S8vpV4d/Fm/q6jSy0WkYkWOX3qdDOX6Ces+ry8+fH2A77WW4NsWzz/EXvUcV5rhN3hSdhHt6DUSi5nbm/0dHn6+mkazrWvHHZAyZpbOUaoRFT0cCoJKJn8zfdK3iOE+4AMNJ1rYOTdvyyc0f9a/ZDNq942W3OA508JdC4k6XwB9uz3YKZ8QNTqJb8H4AydYLQmlvyxzTKtXnrVB7i2eiaW2Q58Qf3l/EvThRPsJmcoAZnOVDlvzR1Tmv7rVSZOB+SOdx268eidkYhv52gDIaS9fEONA5EeXsHJEVHkLlq0= X-MS-TrafficTypeDiagnostic: HE1PR03MB3098: X-Microsoft-Exchange-Diagnostics: 1; HE1PR03MB3098; 31:ExzwWctMY1LlwSO0VkJDhbp2JBslGWmd3YDldJJEi/AjwlNottl7xXSbUEcLaXX9sNe7EE1IrxeSfMEB6UKCvBYDEW9wGJr9LXit+TUHLq5EoLlY87XC22Y5hnrJcbBaInFTJ44HVjfBT6YQXmvsvBKnYy5qkrH15WB/X3WuP0AOX2j+Pruo2niWzAqRN/YmwgLIAkUOp7EZoicyXAj9T56pZ5DwmbuvS2Us8tvbuxTk3teRY+n9Mht+pydl3f60; 20:S2rQu4iF1f4Aes+YOnRmOydiJWzLfTxlXPCrdx8WHv+Wz0QHM5W5+A8cqoYl/8Zf5sdctCPK3mdxmHxZz3+zUctQKgsgqQjBqlECGpmgCBXRg90npsvqNz8xuRFRBe/nwEAJkWQMrP860SXM4FilRV3aadO01cSvYpIJf3sLzoyh3y7JOph1QDKKppDW0jApt1JXStBgaZ92xU35KmlFdYcbPreTPWyXXJQ04KTs6NMiuFudc+nQmkANlijsUWC2OlGwD/hDhFqW3w3Q1KBWSVDl94M1UXVS87NgyK99vK9IVirNGfLDnIPEts09bz7frpWN8lbLyJ+N8QhJv251kseog6+teD8OG824tW+D1AlJN/iQ9dYTU7xg6iaBklfa5blsS2heOmk8v+8VDfENcXmyLb2a1luMTjJMaVbVx1jA3lZ00gA7V+oE4XaFmAflmgAPwN2xY6LEzIkGwNbjaWdGhjxZpvtXU96lrRdmhmI0yQj7t/t86EDtKH+KmaDc X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(4114951738403)(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(6041248)(20161123558100)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123555025)(20161123562025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR03MB3098; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR03MB3098; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR03MB3098; 4:B+2mKJd75DxTc292e61c/PRYRcRPhipGoPVWLUBGOZ?= =?us-ascii?Q?quTZlLMl5tePiwVHsaFbw7NHF8xxxJXu5DcZvNLXabjW4i4BOsddSXKzj2ry?= =?us-ascii?Q?LsI4gaWcE3dN7wKz4FnnT9LuTbwQJh17N+4jkyqqDuNk33gajHME2QeaPYLZ?= =?us-ascii?Q?ozhmae9IaWiwWjkkIhChs5lTGo566wIr2+LrvrdAhpyF2PdPpo2x0y778/pK?= =?us-ascii?Q?5npmhY4CcEPuRGJLeXnEz/PyBq28UzEW7/LZG3wME3SuJ6lqnwpF7zZAej7T?= =?us-ascii?Q?FmowDkVhb7HQf7eOAR0fUehfsEcvZRg7Sjd44YJwDmKYGcZibo5dgGGS3WpA?= =?us-ascii?Q?F6kU6qZkm2gd1guzIt/gVPP0cLdC6l9uT1vm0Nvw2s8TEtG0Z8R/lOED8WRl?= =?us-ascii?Q?xyjL/kazZxzJnQ/BgC7SnYk/NHGzkgmBKnhFZuFFO/FhyhP0vnqHmYoBIw7j?= =?us-ascii?Q?il6h8HhCLlknKvaTbWK9aSR6TkE2wyygm1dfUtehsW5InlGOIF85k7FJBigw?= =?us-ascii?Q?Zena9JuJsvRmVW3AI/oHatCEZ3XCl3lAuYDscj9PKFQW3DEkvVJsAdYSBrZc?= =?us-ascii?Q?01U9WjcqmSASSpaNpNbFX7W2NLCq/Peu61sjYUcvozDFyiWCJBTgMbOzqT7F?= =?us-ascii?Q?/+f6qjaBrDQIYjsLdwHmnNlf3AhGOsXYLFLdsl2Ce71EcNJWb+uFbFxWjdSz?= =?us-ascii?Q?PVAbP4kLSZZ+gXoEbsbZ1CfV4/crk+RE+EDlZ5vTADuQbiz/UzPIqhzK7upK?= =?us-ascii?Q?vJa2DFCv2Eov1jBHCtQ9lxAbsQGgVQmPJna7rUyLWf1k3kNYKbJej8RJs/ci?= =?us-ascii?Q?BhUiFgzUvMGiaNKXqUWItvRuLamCb3SdDhQ5aLlwJoisCBH7QmoGTR2axzWA?= =?us-ascii?Q?quYgUrLHzB1YypAgIDLRKYauIjFGCPf4pv0/e5yvdNNqUqQevRDPuPXlnQuh?= =?us-ascii?Q?WpEJ5RVbNx76Cln70SpNWoh9gmPe7NLJEkTo8cvRPvDX91Z2bhIBBLhY7Tbd?= =?us-ascii?Q?umLbvbqxjh0Wig3lY6vHIDX9m1CgzdX/0XJR+Gk/8TG+EtgfrnQIIoy/H8NM?= =?us-ascii?Q?0GBnL2+//zym35NtjZ2ekWsdpVXwab24hXimHiS6DJcTA9D/l7ix9tQH8fZM?= =?us-ascii?Q?v1+IgzZlzDrQ0PtaqKJAZdCkpbRZf2hx+y6zQg7NmeKy90pBfmryFRy67z2z?= =?us-ascii?Q?Oz3LXBrc1pD9pgDU0gY8RI2JwoPZORJ8UJG8HLaNSRvMENb9cRYi7vRw=3D?= =?us-ascii?Q?=3D?= X-Forefront-PRVS: 03468CBA43 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(39410400002)(39450400003)(39850400002)(39400400002)(39860400002)(305945005)(5660300001)(2906002)(81166006)(72206003)(8676002)(5003940100001)(80792005)(38730400002)(36756003)(33646002)(107886003)(50226002)(53936002)(54906002)(2361001)(110136004)(478600001)(2351001)(86362001)(42186005)(122856001)(50466002)(6666003)(7736002)(189998001)(6116002)(3846002)(48376002)(47776003)(4326008)(6916009)(66066001)(2950100002)(76176999)(50986999)(81973001); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR03MB3098; H:EPUAKYIW2556.kyiv.epam.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR03MB3098; 23:ixu5nHfAXQvGjBqfeyd2CdiCWJsielI8r1z+JEkNO?= =?us-ascii?Q?jRLVeKBpm2bM0ZndDaD+VLsdtVWqqHm8a4ImYx9iFIQZHb0l5hJz0HkAxI3O?= =?us-ascii?Q?rWys6JMfe9u1e3rpMqoRR4vKT0StMMeXNydTlE00g9yFw/gm/GWqp1rM+P3F?= =?us-ascii?Q?Pan5PGjLWh3j8ND1qzr9vCH8UlsMqceQ9NoMFvLa1DVRmtn0+PB0Edq2ys4b?= =?us-ascii?Q?UG1bgxreU9E30BvT02lqKj58G6MuAMQNEMKMhP0LP5Ttnf6CH8quuC8IxtUN?= =?us-ascii?Q?Pw9IozTV9uwCDHHPYveGtDuMFKMKfCcjt7imQdv7aYsZBrqvpszY6VG31bzH?= =?us-ascii?Q?X8nN8EE5PLXjBXWo6Y7/kgXHMoAiLNIItceBM6x/jQr7AqITUNIZ+ETdxkv1?= =?us-ascii?Q?2PRojm2/ww8DQB4RJI6k/qaXBbGIE+CD3YvJjD9O1YY71fRgndUx2VvgHMJZ?= =?us-ascii?Q?DLJ0tcZoWc7cbgT1FgnqwoaCqhDA44UJrhtK/utzQK63IhYwXTpN6y+CLnkg?= =?us-ascii?Q?YsH/nGjVkW3dOtnb7hCffvfQ4bliEocc/lG/MQLkW8KEApCeEOeNY+stVAJG?= =?us-ascii?Q?7z0lQGtG8hCMGSjJNw5UC+mVcHVgu/5T6pmV4Xu6hcGizNeDRSVXwBk7zzZn?= =?us-ascii?Q?yNcK08Ggl4McTltLHcQ3XyNUOitfwbjmSKDL6d2a76vAUS0Eq20hteFCIs5g?= =?us-ascii?Q?r6TRP2f9TBoY9wQLY3q7tzcura3hJ5nABGyZPP1FRhZGsBATRJjaJdKEPlHK?= =?us-ascii?Q?Y33q28682qwQ3Z9986SIe9fMVuhKL7M+3lqMvu8eswnjn56X/CKX3b+hCLo8?= =?us-ascii?Q?bOzhfeNoqkfjArX2hvYWcEjvorP1KZJmr4/3vrE5AKTfPOGTU7ekd43IbQCq?= =?us-ascii?Q?yXYw9UzzdmbXlwiv0EGPHM4nNhv6eCl7qH6TLWMdv1cPG2IfgTcdJsxs6GNd?= =?us-ascii?Q?SzTVpGsstV6NgHrQkxal+9H3xRrFYkKNjRtbJ7UrFkQcVAYv0QlnUyNugnbV?= =?us-ascii?Q?yo5mwwQefVWWTkWuKebUtfIH78h0svTfkagxAabarnkzJbtXuvPt6Vn5kQW3?= =?us-ascii?Q?oKZVy5EJRhtvMwwFDd+PrFRmxg2v7rn3500mIwfa5YnMSZhATB+Y2xmRNduI?= =?us-ascii?Q?GPllsB71YI=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR03MB3098; 6:Qd356N+dkkc4xKEB4oHhKNxQkEskL/vaAVIWuG4UXY?= =?us-ascii?Q?lFvhv+eEzFzt19wXm3pxF6uUL54bkaejXXGZIlqh32SPoUPwgCAy92ajs8rR?= =?us-ascii?Q?jz8dNyBh7LZzoxT8oV8DORPJIFVG/ZeKIE3EFJyqe2c7C9ZE7cQmlG780aHM?= =?us-ascii?Q?15/p0dVzCkcXFSloq6lGTTS7cW2quf9zPYjQnm1XHanUQHOjY8JvNveN1BJ6?= =?us-ascii?Q?WRqu9d5LGoXSclh3VkNH6GdSUsTPDMs1B32LK5uJyUpvllN53qmdcz7T8IWP?= =?us-ascii?Q?Nai2+FNqgT53PKECyXGZrf6sDO5DupGVPhOtS+NTakKWxKg6bngPwl4iE2my?= =?us-ascii?Q?MM5rpXxSwqTE2ZjSVH/kShUvArw6gQH9TZsbfJLe9eeT9z+grbXFNrhUc2cA?= =?us-ascii?Q?WsYM0qrb/A6n+7iATz4Ai39KSaBAxVvkclZ57bQ2JlnpxnVfXGmlJdq7JHo/?= =?us-ascii?Q?ZU4Hm3SRHKb2iAjYUnmfBSOi9aTRNCnMXGCotQv4R5mkYEhepvJ2hYU9ix9R?= =?us-ascii?Q?304dWaUBliSFDzIV/xXSm3kIkYAORI7OMQh3C3sa19bbat4FBKRKRvEc9Lsd?= =?us-ascii?Q?4Eaxir71mMWqHVj5xrZdIdcekNZs2yEzXj+D9ygo57BWmXkJGDTtTIJDppyA?= =?us-ascii?Q?IygLEg0qxJtf3MiuI+BIzgqUdaFWyf2f0r3F+zNr0D/ufDhn2IPZW6YAnEMa?= =?us-ascii?Q?jSG6SyWgzl2SlYWiHb+S9UOwOq+QGgBoUuTra4syzhTWGTqOLYvq/33uXxKo?= =?us-ascii?Q?1KDUcjRIPpgG7SxUZDuarZfDDrHa9Ah9vwY6aqNR3PoRDYVH7KtmX8bdvhTV?= =?us-ascii?Q?81TsQSebd+8ryF+UmZLgOU5SVua7xbdkwTwk7+OacvUtk/Dci8ctQgnku26A?= =?us-ascii?Q?1LFMSF/lO8UlWLwt3d+ZMvuwM9+md0A0cvXqfA2wuJ5AUVck5GN8ltkWmCPm?= =?us-ascii?Q?c4ZJlESqTXrVvf8fQuAt7B31NxTI9I+dtQfJo/zXnD8GXfYbtipS48AmDWSO?= =?us-ascii?Q?I=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR03MB3098; 5:91TjLp8oFejITMRxi0FkgBcq7bgZGbPsYqkGtTNkKn38OsZHP7ISXsVKiNRorRasKDw/0Om+eofU0RhE2+WwNe83sCZQt0w/iZ+mR3ABC+bomYpXJvvlK4Wy6WRRaFPp4HD6W0vwZOphC45mZbj2TXzoNnKqoX1mmDB2xueGkZmuSnNwCsxgoRFqG4Q8CrB6SwcucRco/KFAZ/gGWxgvBLB0NfXkXvfK7ei9VdRYndE4Fitu6IPgVQzvdBySvzFWKtTDL13mbSFx2W2YlbOpyTQ4ZfFl0ZP44ME2MyKe5JOzWiKf7pzswTqDtdm4cWsCUh0+j+DnS8GeM5h32MS7WxeP73o9Ordva8ijsu6toGc46QP1lPMgiO2G8BNS5u6BC9j2/jEeDG3DWuc8IUSO+u5DvdJlS9msyd2oFWeKDozWjJ8keulnxIhwiCicuCgduWCpXDk1fJHoiIWjYJ1JPVUeATdsWymsxdLgcF/CaGDB673zveSHjhlQ8yZgk+Mv; 24:uvE1MrnkxuFtU+sIQyCat4DJZUGOinKWIIdOCbPLnabEswNc3ddP6TJkyIjr+17k6z/m2g6tcUBjV3ovCKs/5bVDPbJl1jW5GxYgZuVG8Q0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR03MB3098; 7:JVgI2WQLERCHJw8e37MxBGYzqwN8cJuQB9RzrLRL45NtCuOPGgHWRc89vumBQkaXZGOUy2vYshqAEVYjmHdrChB+jqAmaB520U3ctX15zPjUuBbJ7B8ApPSKIlyHu+ZPztJwiZ9eMYTqd1y5Dq3XSu4Idu7CRA5Gc1nSIJmNYlcy16U7T46dIMki583YSd76wdwmdwwtsaViJPTlMW92n4L99DvET97VSaeECZ6qbZVGpKY8Y+ZTUx/BGm5x1rpKCzKkcqpVu8u9hzYKqUQtXrb2P/mIQLIbLuf4aPnPHqgUyePFhMjfOhSaxP2/NFtELdhuX9rxZ4XJt6UYYZzZ1ArpCV39P8L2dGiAyVLlnUKed0oR+xPZSArmch9OueiAw5r7bfMu/rJHtJ2o2d3uMWU31eCegSkPOaSWT7ZRdV3ZrTp9UtpRbXNpyIiZPx5nBN6WjcSGYSQoVfAC7FJR0BtVJr3EDxTsVvCHFRA6HtULGhq3lWuH0VOZY45f0azBoKWRYrME9ns3reAfyTziG+cJ34ckEsev1YUHIMka2JAoCuY9QKKrIm2XN/iDL6VeWlz5b7gH2AYoCEOb5AJ8AAIKLtRAEcnyDTjqDG3kaApCuKHheuzfbyc4a57Ok5adVoWYMq3js0rBqIbglka6RRUxI5+VapziClRxENyUPlzcm/jPgiMG4E1MQxzamHpd8WNpelDCwIz2eU//kw4RfHl+knsEMyiMhls5fxj0WG2wMi+Mio7FsSXwa6GzsnNm736R2hyIWMfBcROfb7Shoz//fecy7yzkSKcOowWCNFk= X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2017 16:25:29.7198 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR03MB3098 Cc: Julien Grall , Stefano Stabellini , Volodymyr Babchuk Subject: [Xen-devel] [PATCH v2 3/4] arm: traps: handle PSCI calls inside `vsmc.c` 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: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP PSCI is part of HVC/SMC interface, so it should be handled in appropriate place: `vsmc.c`. This patch just moves PSCI handler calls from `traps.c` to `vsmc.c`. PSCI is considered as two different "services" in terms of SMCCC. Older PSCI 1.0 is treated as "architecture service", while never PSCI 2.0 is defined as "standard secure service". Signed-off-by: Volodymyr Babchuk Reviewed-by: Oleksandr Andrushchenko Reviewed-by: Oleksandr Tyshchenko --- Splitted this patch into two. Now this patch does not change the way, how PSCI code accesses the arguments. --- xen/arch/arm/traps.c | 124 ++++------------------------------ xen/arch/arm/vsmc.c | 136 ++++++++++++++++++++++++++++++++++++++ xen/include/public/arch-arm/smc.h | 5 ++ 3 files changed, 153 insertions(+), 112 deletions(-) diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index 66242e5..e806474 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -39,7 +39,6 @@ #include #include #include -#include #include #include #include @@ -1450,113 +1449,6 @@ static void do_debug_trap(struct cpu_user_regs *regs, unsigned int code) } #endif -/* helper function for checking arm mode 32/64 bit */ -static inline int psci_mode_check(struct domain *d, register_t fid) -{ - return !( is_64bit_domain(d)^( (fid & PSCI_0_2_64BIT) >> 30 ) ); -} - -static void do_trap_psci(struct cpu_user_regs *regs) -{ - register_t fid = get_user_reg(regs,0); - - /* preloading in case psci_mode_check fails */ - set_user_reg(regs, 0, PSCI_INVALID_PARAMETERS); - switch( fid ) - { - case PSCI_cpu_off: - { - uint32_t pstate = get_user_reg(regs, 1); - perfc_incr(vpsci_cpu_off); - set_user_reg(regs, 0, do_psci_cpu_off(pstate)); - } - break; - case PSCI_cpu_on: - { - uint32_t vcpuid = get_user_reg(regs, 1); - register_t epoint = get_user_reg(regs, 2); - perfc_incr(vpsci_cpu_on); - set_user_reg(regs, 0, do_psci_cpu_on(vcpuid, epoint)); - } - break; - case PSCI_0_2_FN_PSCI_VERSION: - perfc_incr(vpsci_version); - set_user_reg(regs, 0, do_psci_0_2_version()); - break; - case PSCI_0_2_FN_CPU_OFF: - perfc_incr(vpsci_cpu_off); - set_user_reg(regs, 0, do_psci_0_2_cpu_off()); - break; - case PSCI_0_2_FN_MIGRATE_INFO_TYPE: - perfc_incr(vpsci_migrate_info_type); - set_user_reg(regs, 0, do_psci_0_2_migrate_info_type()); - break; - case PSCI_0_2_FN_MIGRATE_INFO_UP_CPU: - case PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU: - perfc_incr(vpsci_migrate_info_up_cpu); - if ( psci_mode_check(current->domain, fid) ) - set_user_reg(regs, 0, do_psci_0_2_migrate_info_up_cpu()); - break; - case PSCI_0_2_FN_SYSTEM_OFF: - perfc_incr(vpsci_system_off); - do_psci_0_2_system_off(); - set_user_reg(regs, 0, PSCI_INTERNAL_FAILURE); - break; - case PSCI_0_2_FN_SYSTEM_RESET: - perfc_incr(vpsci_system_reset); - do_psci_0_2_system_reset(); - set_user_reg(regs, 0, PSCI_INTERNAL_FAILURE); - break; - case PSCI_0_2_FN_CPU_ON: - case PSCI_0_2_FN64_CPU_ON: - perfc_incr(vpsci_cpu_on); - if ( psci_mode_check(current->domain, fid) ) - { - register_t vcpuid = get_user_reg(regs, 1); - register_t epoint = get_user_reg(regs, 2); - register_t cid = get_user_reg(regs, 3); - set_user_reg(regs, 0, - do_psci_0_2_cpu_on(vcpuid, epoint, cid)); - } - break; - case PSCI_0_2_FN_CPU_SUSPEND: - case PSCI_0_2_FN64_CPU_SUSPEND: - perfc_incr(vpsci_cpu_suspend); - if ( psci_mode_check(current->domain, fid) ) - { - uint32_t pstate = get_user_reg(regs, 1); - register_t epoint = get_user_reg(regs, 2); - register_t cid = get_user_reg(regs, 3); - set_user_reg(regs, 0, - do_psci_0_2_cpu_suspend(pstate, epoint, cid)); - } - break; - case PSCI_0_2_FN_AFFINITY_INFO: - case PSCI_0_2_FN64_AFFINITY_INFO: - perfc_incr(vpsci_cpu_affinity_info); - if ( psci_mode_check(current->domain, fid) ) - { - register_t taff = get_user_reg(regs, 1); - uint32_t laff = get_user_reg(regs, 2); - set_user_reg(regs, 0, - do_psci_0_2_affinity_info(taff, laff)); - } - break; - case PSCI_0_2_FN_MIGRATE: - case PSCI_0_2_FN64_MIGRATE: - perfc_incr(vpsci_cpu_migrate); - if ( psci_mode_check(current->domain, fid) ) - { - uint32_t tcpu = get_user_reg(regs, 1); - set_user_reg(regs, 0, do_psci_0_2_migrate(tcpu)); - } - break; - default: - domain_crash_synchronous(); - return; - } -} - #ifdef CONFIG_ARM_64 #define HYPERCALL_RESULT_REG(r) (r)->x0 #define HYPERCALL_ARG1(r) (r)->x0 @@ -2888,8 +2780,12 @@ asmlinkage void do_trap_guest_sync(struct cpu_user_regs *regs) return do_debug_trap(regs, hsr.iss & 0x00ff); #endif if ( hsr.iss == 0 ) - return do_trap_psci(regs); - do_trap_hypercall(regs, (register_t *)®s->r12, hsr.iss); + { + if ( !vsmc_handle_call(regs) ) + domain_crash_synchronous(); + } + else + do_trap_hypercall(regs, (register_t *)®s->r12, hsr.iss); break; #ifdef CONFIG_ARM_64 case HSR_EC_HVC64: @@ -2900,8 +2796,12 @@ asmlinkage void do_trap_guest_sync(struct cpu_user_regs *regs) return do_debug_trap(regs, hsr.iss & 0x00ff); #endif if ( hsr.iss == 0 ) - return do_trap_psci(regs); - do_trap_hypercall(regs, ®s->x16, hsr.iss); + { + if ( !vsmc_handle_call(regs) ) + domain_crash_synchronous(); + } + else + do_trap_hypercall(regs, ®s->x16, hsr.iss); break; case HSR_EC_SMC64: /* diff --git a/xen/arch/arm/vsmc.c b/xen/arch/arm/vsmc.c index 10c4acd..5f10fd1 100644 --- a/xen/arch/arm/vsmc.c +++ b/xen/arch/arm/vsmc.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -43,6 +44,14 @@ /* Number of functions currently supported by Hypervisor Service. */ #define XEN_SMCCC_FUNCTION_COUNT 3 +/* Standard Service version. Check comment for Hypervisor Service for rules */ +#define SSC_SMCCC_MAJOR_REVISION 0 +#define SSC_SMCCC_MINOR_REVISION 1 + +/* Number of functions currently supported by Standard Service Service. */ +#define SSC_SMCCC_FUNCTION_COUNT 13 + + /* SMCCC interface for hypervisor. Tell about itself. */ static bool handle_hypervisor(struct cpu_user_regs *regs) { @@ -65,6 +74,127 @@ static bool handle_hypervisor(struct cpu_user_regs *regs) return false; } +/* old (arvm7) PSCI interface */ +static bool handle_arch(struct cpu_user_regs *regs) +{ + switch ( get_user_reg(regs,0) & 0xFFFFFFFF ) + { + case PSCI_cpu_off: + { + uint32_t pstate = get_user_reg(regs, 1); + perfc_incr(vpsci_cpu_off); + set_user_reg(regs, 0, do_psci_cpu_off(pstate)); + } + return true; + case PSCI_cpu_on: + { + uint32_t vcpuid = get_user_reg(regs, 1); + register_t epoint = get_user_reg(regs, 2); + perfc_incr(vpsci_cpu_on); + set_user_reg(regs, 0, do_psci_cpu_on(vcpuid, epoint)); + } + return true; + } + return false; +} + +/* helper function for checking arm mode 32/64 bit */ +static inline int psci_mode_check(struct domain *d, register_t fid) +{ + return !( is_64bit_domain(d)^( (fid & PSCI_0_2_64BIT) >> 30 ) ); +} + +/* PSCI 2.0 interface */ +static bool handle_ssc(struct cpu_user_regs *regs) +{ + register_t fid = get_user_reg(regs, 0); + + switch ( ARM_SMCCC_FUNC_NUM(fid) ) + { + case ARM_SMCCC_FUNC_NUM(PSCI_0_2_FN_PSCI_VERSION): + perfc_incr(vpsci_version); + set_user_reg(regs, 0, do_psci_0_2_version()); + return true; + case ARM_SMCCC_FUNC_NUM(PSCI_0_2_FN_CPU_OFF): + perfc_incr(vpsci_cpu_off); + set_user_reg(regs, 0, do_psci_0_2_cpu_off()); + return true; + case ARM_SMCCC_FUNC_NUM(PSCI_0_2_FN_MIGRATE_INFO_TYPE): + perfc_incr(vpsci_migrate_info_type); + set_user_reg(regs, 0, do_psci_0_2_migrate_info_type()); + return true; + case ARM_SMCCC_FUNC_NUM(PSCI_0_2_FN_MIGRATE_INFO_UP_CPU): + perfc_incr(vpsci_migrate_info_up_cpu); + if ( psci_mode_check(current->domain, fid) ) + set_user_reg(regs, 0, do_psci_0_2_migrate_info_up_cpu()); + return true; + case ARM_SMCCC_FUNC_NUM(PSCI_0_2_FN_SYSTEM_OFF): + perfc_incr(vpsci_system_off); + do_psci_0_2_system_off(); + set_user_reg(regs, 0, PSCI_INTERNAL_FAILURE); + return true; + case ARM_SMCCC_FUNC_NUM(PSCI_0_2_FN_SYSTEM_RESET): + perfc_incr(vpsci_system_reset); + do_psci_0_2_system_reset(); + set_user_reg(regs, 0, PSCI_INTERNAL_FAILURE); + return true; + case ARM_SMCCC_FUNC_NUM(PSCI_0_2_FN_CPU_ON): + perfc_incr(vpsci_cpu_on); + if ( psci_mode_check(current->domain, fid) ) + { + register_t vcpuid = get_user_reg(regs, 1); + register_t epoint = get_user_reg(regs, 2); + register_t cid = get_user_reg(regs, 3); + set_user_reg(regs, 0, + do_psci_0_2_cpu_on(vcpuid, epoint, cid)); + } + return true; + case ARM_SMCCC_FUNC_NUM(PSCI_0_2_FN_CPU_SUSPEND): + perfc_incr(vpsci_cpu_suspend); + if ( psci_mode_check(current->domain, fid) ) + { + uint32_t pstate = get_user_reg(regs, 1); + register_t epoint = get_user_reg(regs, 2); + register_t cid = get_user_reg(regs, 3); + set_user_reg(regs, 0, + do_psci_0_2_cpu_suspend(pstate, epoint, cid)); + } + return true; + case ARM_SMCCC_FUNC_NUM(PSCI_0_2_FN_AFFINITY_INFO): + perfc_incr(vpsci_cpu_affinity_info); + if ( psci_mode_check(current->domain, fid) ) + { + register_t taff = get_user_reg(regs, 1); + uint32_t laff = get_user_reg(regs,2); + set_user_reg(regs, 0, + do_psci_0_2_affinity_info(taff, laff)); + } + return true; + case ARM_SMCCC_FUNC_NUM(PSCI_0_2_FN_MIGRATE): + perfc_incr(vpsci_cpu_migrate); + if ( psci_mode_check(current->domain, fid) ) + { + uint32_t tcpu = get_user_reg(regs, 1); + set_user_reg(regs, 0, do_psci_0_2_migrate(tcpu)); + } + return true; + case ARM_SMCCC_FUNC_CALL_COUNT: + set_user_reg(regs, 0, SSC_SMCCC_FUNCTION_COUNT); + return true; + case ARM_SMCCC_FUNC_CALL_UID: + set_user_reg(regs, 0, SSC_SMCCC_UID.a[0]); + set_user_reg(regs, 1, SSC_SMCCC_UID.a[1]); + set_user_reg(regs, 2, SSC_SMCCC_UID.a[2]); + set_user_reg(regs, 3, SSC_SMCCC_UID.a[3]); + return true; + case ARM_SMCCC_FUNC_CALL_REVISION: + set_user_reg(regs, 0, SSC_SMCCC_MAJOR_REVISION); + set_user_reg(regs, 1, SSC_SMCCC_MINOR_REVISION); + return true; + } + return false; +} + /** * vsmc_handle_call() - handle SMC/HVC call according to ARM SMCCC */ @@ -105,6 +235,12 @@ int vsmc_handle_call(struct cpu_user_regs *regs) case ARM_SMCCC_OWNER_HYPERVISOR: handled = handle_hypervisor(regs); break; + case ARM_SMCCC_OWNER_ARCH: + handled = handle_arch(regs); + break; + case ARM_SMCCC_OWNER_STANDARD: + handled = handle_ssc(regs); + break; } if ( !handled ) diff --git a/xen/include/public/arch-arm/smc.h b/xen/include/public/arch-arm/smc.h index aac292a..6a5a556 100644 --- a/xen/include/public/arch-arm/smc.h +++ b/xen/include/public/arch-arm/smc.h @@ -42,4 +42,9 @@ typedef struct { 0x9a, 0xcf, 0x79, 0xd1, \ 0x8d, 0xde, 0xe6, 0x67) +/* Standard Service Call UID. Randomly generated with 3rd party tool */ +#define SSC_SMCCC_UID ARM_SMCCC_UID(0xf863386f, 0x4b39, 0x4cbd, \ + 0x92, 0x20, 0xce, 0x16, \ + 0x41, 0xe5, 0x9f, 0x6f) + #endif /* __XEN_PUBLIC_ARCH_ARM_SMC_H__ */