From patchwork Wed Jun 14 14:10:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Volodymyr Babchuk X-Patchwork-Id: 9786363 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 9F74860384 for ; Wed, 14 Jun 2017 14:41:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 910472856E for ; Wed, 14 Jun 2017 14:41:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8578A285AE; Wed, 14 Jun 2017 14:41:29 +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 933F527F82 for ; Wed, 14 Jun 2017 14:41:28 +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 1dL9Re-0002dp-OT; Wed, 14 Jun 2017 14:38:54 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dL91K-000111-Sd for xen-devel@lists.xen.org; Wed, 14 Jun 2017 14:11:43 +0000 Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id 02/AF-02199-E1441495; Wed, 14 Jun 2017 14:11:42 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA1WSbyxVcRjH7++cc+89dE87/jRP19Xm0si/WNr wBukFWk28CG9ycLi37sXuuXTbslD+ZJFKa6QoRNmINrNhpGmLbv7U2mpiayquMEOI1D33IL37 fn/f5/P77tkeErddEMtJ1qBndWmMRimxJlSHUYC3/HhonG/nuGNA3UItEYLC+zvXsSgUL1anJ aYbEsSqgrqojK4EQ3vvVWkOmgsvRtYkQefi0NTWgfEG0WUIKm6XELyxpW9gcKW9yGyszCYJTM ZmjNcS2h+aq4ekvLanHeHD4jvEAzhdgCC3t80yZEeHweTyiAUm6IMwMTAvLkYkSdGRYNw8wz8 DfQA+vr2G89qKPgE9S41SoSsSJu/PW1CKtoHXFZMWjdMAL6amcIF1ho7H5ZZeoG8iWJ0zSQTY DbrXf2wNOUG/sYoQ9EnI3VwWCzodVqYmpAL8WwL1TdNbgAfMFtVigh6VQOuKRNAaWCwdQIKOg MqiW5gAvxTD55ZfEsHkU7BcUSgVphTwpGsQF4JVAubzywnBFMmg/EHLFm8koKFkFi9D7pW7tq 3ctW0Nwp4iN47VZbE670CfRJ06VaXXMmqNt5/vER8ty3FMKqthEjmfpHRtGzKfwmWRCHWgmbV jfWg/iSn3UXdsQuNs9yamJ19UMZzqrC5Tw3J9SEGSSqAOhZkzGx2byhpS1BrzPW3HQMqU9tTX YHNMcRmMllOnCtEAcpY7UC48R/OBKjNtB9u+xFHkJLejkEgkspVlsDqtWv9/bkIOJFLaUUH8L zJ1mn7nd5O5GDMXRw+H8MV65l8kz0EJroqYT+dPhwX+eTU2nPVs9uG061H3puaK8ecyX08vz9 z2oOZClHdykJypqR+6lIJX1c4rYzKvn4vLi360NtHtGocrfvaoMkcaXRoiVuy/BNtnZ8fe3fh eO2YstT71Jibby06x4Z9s+HZvaaP8faxja1X1UDa+J96x23vExnRhKlhJcCrGzwPXccxfD7S/ X4QDAAA= X-Env-Sender: Volodymyr_Babchuk@epam.com X-Msg-Ref: server-2.tower-31.messagelabs.com!1497449498!93941753!1 X-Originating-IP: [104.47.1.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 5508 invoked from network); 14 Jun 2017 14:11:38 -0000 Received: from mail-ve1eur01on0056.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (104.47.1.56) by server-2.tower-31.messagelabs.com with AES256-SHA256 encrypted SMTP; 14 Jun 2017 14:11:38 -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=/P2BhkT39mURBH0mrb52yQGZoEhzfcGkWTYQDIOXfo8=; b=dUGbg89NocFDLDu6iqX44ZMnUhJlS72CcAqFFSJ7fm9FQMURV8q4oY7u0/ggy5Hf/4EEFRA8bX2xBZ4s0NeCnEioiOkc+7YuuxOfcUfloeHAw86Ly7DHhiotFjekS6XvMx1fhXLWyvRRXXEhM6IihEjG+brgFaOvYu1SmerNt4Q= Received: from EPUAKYIW2556.kyiv.epam.com (85.223.209.55) by AM5PR03MB3091.eurprd03.prod.outlook.com (2603:10a6:206:19::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1178.14; Wed, 14 Jun 2017 14:11:36 +0000 Received: by EPUAKYIW2556.kyiv.epam.com (sSMTP sendmail emulation); Wed, 14 Jun 2017 17:11:32 +0300 From: Volodymyr Babchuk To: xen-devel@lists.xen.org Date: Wed, 14 Jun 2017 17:10:45 +0300 Message-Id: <1497449445-23112-3-git-send-email-volodymyr_babchuk@epam.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1497449445-23112-1-git-send-email-volodymyr_babchuk@epam.com> References: <1497449445-23112-1-git-send-email-volodymyr_babchuk@epam.com> MIME-Version: 1.0 X-Originating-IP: [85.223.209.55] X-ClientProxiedBy: AM4PR05CA0004.eurprd05.prod.outlook.com (2603:10a6:205::17) To AM5PR03MB3091.eurprd03.prod.outlook.com (2603:10a6:206:19::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ce872b57-ec9d-4ecc-a0fc-08d4b32f44c6 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:AM5PR03MB3091; X-Microsoft-Exchange-Diagnostics: 1; AM5PR03MB3091; 3:7Qou24k6kveVC3MNpNkd/5vLcCqt9Ov1BC7CCZslqagD6bEFcxAnhYbz2NBOPFCArG7QlkN+oo5d6mbt74cxzdf2qFVqLgq9aNkeo5i/W/WRuWZIywQHsA0SZoc2F1m+KWyWja4H8uUYDyne2d4NXAFEw2sEPbL9LiHzu41DmW1lwrhIoH3FqTyY3SQcDfn2cwJ8nBzTRMKvK2yS1IH/gpvuItoodbknQu4aBWkV6cOTAjyPmJGR4RUfxpF83d37cwy/wQML+JMqYmK3i1HgUq6T2XgcfUPcavsxFy83NttDXXNtxrYQC15KQNtDQkTxRUuTZYjzOWh/0nhJhQZKgw==; 25:HH6kp+K2eSSDb+oLWMADlKxBTTjXsjPExreuLzS0NUUZFgNAAdWPQ7t6sSMVSXA24VsdmsQ5gJFOq8ejlsnvu5f+G6R4iihcYyjfwlGdE3PAgP6/xADIV9nc1sfsr1czV2sv/foQZ8CvhGde6f5kYIv6PNCt6hKVBNO1z39xuoY03nrd5noqwRH24g+XYs8o1cOHo2d+6Tz5yU7pkszUb8sXl1BTFFifX+BngeX8nSxrAmmam94TeaYGsVLa4lErjoAfIWDT4hjkM9IEsjY7p/VhCYpB1lrMyAp5RRkHWO8JUhHpcGY9djIIbjS7gm5j5LXWXZPuqNhvFu0Kf7kixa+6Ghdy4rSrUNqw+qdyByDIzxMIWx/lw2jKrb/qlFn85f4wdkDbZOp0hr/6Apqr14867AHahn47nAWeDCW7vSRkapWNSVRA7fBRtLmzpHWWkruFHdqJQIufbHbXsxlmBkYjsZZIcwlTkcUVxcxQxvM= X-MS-TrafficTypeDiagnostic: AM5PR03MB3091: X-Microsoft-Exchange-Diagnostics: 1; AM5PR03MB3091; 31:XpXRgd2KmMqRslTNTCajNPs328BMyCYhOc5FjGlDGfVTf6OAqJrm6gnlaTrV3kkDlcNsNGLsVtS0Bx/iYMGAG75Szj9UM+VE58eN3XNuXHHKY1QJOMxLIf5VbCLAXKsvPHZJ0WXobywTZxw3Izr09MYJTsYdQTjQaJlrtSmiWOgVj7g65hLvHdrcogWc21iKruUpMGR266v6kdRQ9nxPmi9IbwAFk0bk6dLeZmMWDB7M3IQZYO97dxVTR6PLX842u3y4gUkEch7jGXI+o2Uakg==; 20:jhWbZC1ykLOSZxAzfPqK8jgrraY2lYECtP/B0OKxeun9F5GyWZ/WQXPDHjBaoGIjrIlggP0D8KxGg2bPbzXK40h9GzPCHdZ4dKsSQs5yrWVwwfKuJpCf1TJJYG+aeEzuSc8NCC4NWmDNJ8ZRoL4hNPbBzXzZWX5XieVcv4V4jGbcS7xpjsydLImK9VNm81f9LgqTcWC3XTx2TGResufvK050rP76HVuxLlnQSC2fiSydb01o0+gn37n5yhvRk7RpqBvSdZZLXJxjnHS5qnmvScyvwQXpZY3xZkj/6Ph63P4fG2CvgNgPB/2Cxf19DLQ4Bv08bx2LDqZ0vfqLDSQevpm2P147Q7coGZmznXroXJRKcLbDi8g7og07QWPWo/PWvNMLUnHyrn/hcrbJAI+cdD05OU/RTDGyPiZAdefpH1/Xtumf2o43v2RXQcGtXX6t81jK/QFUxWoXe9SGgW7xzmb+H25unZuD+mH5XmUYi852o6pHpg3cc9P9VU89qWsB 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)(10201501046)(3002001)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123555025)(20161123562025)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM5PR03MB3091; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM5PR03MB3091; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR03MB3091; 4:FoirbOuiw3/Mc9IVQZ9BZ2v8oQsRV8dbVCLrlMytgG?= =?us-ascii?Q?gV1lnZbTv/JVthzaQWaiKebugZS3vYBKGP6rHtuqHkZgCSuV2hd293y/J2RN?= =?us-ascii?Q?JCGYTCEtLu5msvNVdIisLA5T0kg6jORJloTEreP1cH83NKktRaTW3twsvde2?= =?us-ascii?Q?wscekSi13/TVAgb6L9qgpTXo7AeuHlT/1dU25JL4cnazRFW7vsk2qyAAvsKh?= =?us-ascii?Q?gTGLqXqdRgP2vcyEjR4IziiwWnti0As0CdYJkPw+RabwJCDakHVdrnHLSI+e?= =?us-ascii?Q?qFI/2EZHCaHe4B+tNfmk0pRdrk8PKTZXTzv6UsYf7qhPnzeMouah+qomoss3?= =?us-ascii?Q?7ijC2zCU/6IppU34/ghxlg0kL4FUvFmTiFTGfVqnJctvpX2/L9Wl5btxuGX6?= =?us-ascii?Q?cQW8SzLmdPjeoFvu6HDUOk7UQkRMFWav0ZBHx4TbwGt9hzWZmRLhzXEX1Lfv?= =?us-ascii?Q?oenz6WBIjvi8waSW0+Mp6xhxvPClLb6Q4XpPH006o7LiIfIymh2ll1zRi6I7?= =?us-ascii?Q?Ji6NNgQKb7dy/rRd9txr3ocq1roogVyz4GGjZzCmGZPGrnqFtY14ghpnF0Dr?= =?us-ascii?Q?W7TsygVVZ5a7gKpRNgKfX7BrXKqYEV9pjS7h/ie4nynSwLxPGE3rGgCyha2K?= =?us-ascii?Q?AS2MjIxaA2wcjrGZRny93I1N/huMO8Pwi1rz71pi99sU3vyNbvDR4mX4fhGa?= =?us-ascii?Q?944kc+tZ6EB6Fm1Qg4vxjyKwPcTGHiNNBa+a6T9wND+vMvYiAR6yTX0zl0DV?= =?us-ascii?Q?dqv4stWR5do5j0AN56qbhmd3Y8lMsV/rTZ7YZKj4YqpMsgd9ej7ffRc985jS?= =?us-ascii?Q?vk6phfpXDOE0EXTYIVBZqhLyNsJbNPPFzY5DymjITPIqOWqrmCJ/WmYoZ0B4?= =?us-ascii?Q?Lmkbvf57Cv67ymlrvDaP11REQnxEWMPYoiVEvW2Xh3FPIzFayEP4SYU6O1i2?= =?us-ascii?Q?RJXGdKnqwMKZhanFEyYJ4QY+IxuvrKlaYw2cUzk81Ekq08FfFTrYFCpjWfMh?= =?us-ascii?Q?4tPI3HTTIRVmvRTdzLtOvx5mqsPJ0ugi8jyEMvyjE8gKziesl9EWNtMiI2QW?= =?us-ascii?Q?LLS/ZmVxFdiZnyjQCxHDsAnH/59k9mqrJb3FBVwqmddNttLB1GEU4TMxmhNP?= =?us-ascii?Q?XblqcDQV0/mHqSh2xA0wlHNu/1BPspaiKIp5d62Ixtddi0sIqrC259362/br?= =?us-ascii?Q?xkSS0x+0CmsYdNsOTNszNJkpoKwz59+5B5/QII4RtgQxgkadUy8a5PqQ=3D?= =?us-ascii?Q?=3D?= X-Forefront-PRVS: 033857D0BD X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(39840400002)(39850400002)(39410400002)(39400400002)(39860400002)(39450400003)(36756003)(2950100002)(80792005)(6916009)(6666003)(3846002)(6116002)(5660300001)(76176999)(2351001)(2361001)(305945005)(33646002)(50986999)(47776003)(50466002)(5003940100001)(48376002)(66066001)(86362001)(42186005)(72206003)(7736002)(189998001)(8676002)(4326008)(81166006)(575784001)(50226002)(53936002)(2906002)(38730400002)(478600001)(54906002)(110136004)(107886003)(81973001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR03MB3091; H:EPUAKYIW2556.kyiv.epam.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR03MB3091; 23:5O/IvmC51rn8Al1NLS2KZxrhetkV5Q379cbgz3dNH?= =?us-ascii?Q?Prj+TlZGlrTuRcZPxGCfeDHFbsKCQBTli9Wx+/aq6NK06yojjdbCloxGItWP?= =?us-ascii?Q?ebxNRCGUPrj/WCV/N4Q+gTv8qB4Sn9Eqq91XMDSKPsx9cmJtG7d52ohIXivJ?= =?us-ascii?Q?jltHq9Y+6T0Xnp2XI+Gy0ErbDazqi8NLHuYt5Myy9qxlCr05XSvZSxM8EkgW?= =?us-ascii?Q?CSEQpwNY1A1X3yICFI9rYyVXdbQw9n64dBWD1fMqnljCL26KoHawItLWN8M9?= =?us-ascii?Q?GWvKIalIx//3ph/OBE1WygshlYOACii3HVlGZAIBi0hZhgcpfoVDu2Ex4V+j?= =?us-ascii?Q?g2kwvMUNHmE5vxuB8KxZnY+ozgc0sIwDBV6TyNir9Cn0ioBSnH4tb3UoSVog?= =?us-ascii?Q?gj3Y37XLNagRkz45DgBjtti174RlPHtHj0Azw8XRXtmSy5AdGBJ9wBch1TfL?= =?us-ascii?Q?JEY+k/vef50VS4f99uuEisD7ibv2PvE7BWQDLUCJ5YwaRBi1N0pafzKAOXL0?= =?us-ascii?Q?xOvDlSbG0V0lP3rp+0W80ZPwS0ccsi2EAlH96DbyeJ1ru4kWnANy438Aw8TN?= =?us-ascii?Q?Z2GPbHlOcjCALbTMzKtcV6AgaRefHNmCOw1ZoMoHwvsLbaGIPxNW0lD1SHFv?= =?us-ascii?Q?pT2TKhAeF0Iuq/7EsDvKi2iFgha8/g9HYeIHmgLk4kkYAQULkE9GGgUi9CwE?= =?us-ascii?Q?enFzqFr7S2JhQ9hfOW119GNCEvUBSudwd57Jc80jAovOs+H1Tqg263s3hXHs?= =?us-ascii?Q?VAApEKMXDBabrC1lKN5HVmw4K6XNBm8jfxka+iUsmPyIBGEIPdiiRayZkINw?= =?us-ascii?Q?TpxbnAjtyY6HEnhXVFDO6BCIVV3+UsvvCscfTuV0gND8tmPWH5glQdbyjOS0?= =?us-ascii?Q?AjWQjDWpbEylEoOWxLJ4+3EL9rbeanF9LhXXBZSF6YTJAlAbEolV5iejz1cu?= =?us-ascii?Q?wKkLQ3ptdmR9SLau7odB2gEmzsA+KK+lkKV1rfmu8nfrVU5WgTyxBpZoBdZF?= =?us-ascii?Q?e1K78cOvhgNvcrW/UmBmYTtQlS08S19fQSXko6FHqdOiE3HJPRY0c7ddQCTR?= =?us-ascii?Q?O6AQJ+wGljGhnr1+Yg0B1aL1OJ0fV8i1BYHopXQIzgYHknTRo3bJMDnEGdgb?= =?us-ascii?Q?joT7rv77qNJX9JJRDa9U+92RDeEOB9e?= X-Microsoft-Exchange-Diagnostics: 1; AM5PR03MB3091; 6:rC9LSJS/UjOGZQ+Ck/0LBaFH9A9j11JFP/QWlvCkMR/LCyD2gJTs5ophc+CFllqtLSJNlIUlDPX3nYI8GZOmN3wwb7QpuAKgIN6Y1aJ6+VJKC204SHUMUXeEuN09K+wR6PSrcnYWPpgUKlHn2S/Jy1mMWntWLQoxRyunnY3KxPYwnxSKWykkKQTf1xgLcCzAGYX7LUSC6MK7T1xQAPpw1OhOrzXIF++NDZz//D70+DUTYH12hKt6Jni2y1gW+ZMr3IBiBouZ3guPWyM+NGeITHVl4btOeJ9q4Y16S/9QBFitcGAGlm44ZBJ3msv6R9E1lDR3mVjxNLjIPNPx8IaXVaBvUlQmJmW80WQpafTZIsnfRSkAQcMPEXuGbK+JclDfq9/PQ4Dh/bZ+ohABfprMBoSyaApv87hYwYgMql0EBf81+dJHHEqctE8C+2wbNCgB7uLLdwpsp+bWkF7MNd+8HbuNb/Kue1oxBSJ3KMsoQyVm3Afht7vwmCUEBIAmA9NoeP8Ii62xNOfjP8vb+aJqXA== X-Microsoft-Exchange-Diagnostics: 1; AM5PR03MB3091; 5:+dmXW40f7e5m7wmrR6NOH1l5imh+q5OuWOUtPGDTJoGpo/6APRLSxQ6yYIJT4mR+pPyAo6/TepPYqSgYqZ/q8UU637g+KdEUHE9rswLHATkXzNFelVcIyl3tz5Dvcqm/1Qlpl1ZkymOE4NUHgFU95dAO08DFpPsJ1z+OR2QcZbETYfqpGUaAoAPyF9L1WZgG47lOt4lCP4G7LkfPCANXj/W6K4N7QQy9izGSaBWrTpQTtdOtYnnwYJb5CvfY5gBcnBOnKok/iIEmiBvHltfwAO0PZMPjOm9+47HM4zbX0r1WaBSI/xI55lr30HZIDxWlZN6Ltcp/v6awtHMQbfG5Rnjkx1amhwpj3XhOAmmmYxqtP8ULcxEiHrZpbAvGqqX+84Z66ULS9okYXhzLSbk43nmqDsUfGcgag/keZsABF7j4Uql5AHPDGhZmom9Xz9bdWC4kJLwZ8epDGRUG3mMM3HJXmYIcOhe87NXYqWI9ibJYPgt7mXEVPnE78/Ay3fpf; 24:c2A/bXjZU/RhrzfrCvO81kWv2UuuWjnY/WwfSZ02sRKAASdK10YUE3nzCWhyulK7ylpS4KgIeAn3s1fyq3/yBB7FHcGHGPAMj1m2dFfDikw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM5PR03MB3091; 7:sueRyuNXF4tDbQk4ivgGWATBJAaqibdbrmHTUEjquHNWkWuYaO6hy4YubHUl0hb4oJwUX05x5zgXHbYHOPJckHTIOjLx50VKEa/A294H6oAG2LXdPlyrmGzw0Rzsb5ikrrrxgzTiw9gDeOaV9SCkpTMGOn67fTFWV2PDlCuhwcj1sOm9+bl2cGXxMeaC27ZjWPK7OPgLBS6w86a4e2y0PTQNFjEZ9opQejBaZBwt54e9noL8b5GjZy1HjwOtX8XIeGej7DZssksPTAkm4wkVApjhRRWT8NzQTW06H9XiUvHDVmb/e9i4bxzgy1/qqqbGZbzUZCzXuWYLtu20fp4l8w== X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jun 2017 14:11:36.2164 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR03MB3091 X-Mailman-Approved-At: Wed, 14 Jun 2017 14:38:53 +0000 Cc: Julien Grall , Stefano Stabellini , Volodymyr Babchuk Subject: [Xen-devel] [PATCH 2/2] arm: traps: handle PSCI calls inside `smccc.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: `smccc.c`. This patch just moves PSCI handler calls from `traps.c` to `smccc.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". Also old accessors PSCI_ARG() and PSCI_RESULT_REG() were replaced with generic set_user_reg()/get_user_reg() functions. Signed-off-by: Volodymyr Babchuk Reviewed-by: Oleksandr Andrushchenko Reviewed-by: Oleksandr Tyshchenko --- xen/arch/arm/smccc.c | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++ xen/arch/arm/traps.c | 134 +++++--------------------------------------------- 2 files changed, 147 insertions(+), 122 deletions(-) diff --git a/xen/arch/arm/smccc.c b/xen/arch/arm/smccc.c index 5d10964..0014aff 100644 --- a/xen/arch/arm/smccc.c +++ b/xen/arch/arm/smccc.c @@ -42,6 +42,14 @@ #define XEN_SMCCC_MINOR_REVISION 1 #define XEN_SMCCC_FUNCTION_COUNT 3 +#define SSC_SMCCC_UID ARM_SMCCC_UID(0xf863386f, 0x4b39, 0x4cbd, \ + 0x92, 0x20, 0xce, 0x16, \ + 0x41, 0xe5, 0x9f, 0x6f) + +#define SSC_SMCCC_MAJOR_REVISION 0 +#define SSC_SMCCC_MINOR_REVISION 1 +#define SSC_SMCCC_FUNCTION_COUNT 13 + /* SMCCC interface for hypervisor. Tell about self */ static bool handle_hypervisor(struct cpu_user_regs *regs, const union hsr hsr) { @@ -64,6 +72,127 @@ static bool handle_hypervisor(struct cpu_user_regs *regs, const union hsr hsr) return false; } +/* old (arvm7) PSCI interface */ +static bool handle_arch(struct cpu_user_regs *regs, const union hsr hsr) +{ + 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, const union hsr hsr) +{ + 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) & 0xFFFFFFFF; + 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) & 0xFFFFFFFF; + 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) & 0xFFFFFFFF; + 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; +} + /** * smccc_handle_call() - handle SMC/HVC call according to ARM SMCCC */ @@ -76,6 +205,12 @@ void smccc_handle_call(struct cpu_user_regs *regs, const union hsr hsr) case ARM_SMCCC_OWNER_HYPERVISOR: handled = handle_hypervisor(regs, hsr); break; + case ARM_SMCCC_OWNER_ARCH: + handled = handle_arch(regs, hsr); + break; + case ARM_SMCCC_OWNER_STANDARD: + handled = handle_ssc(regs, hsr); + break; } if ( !handled ) diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index 2d0b058..61ddd43 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -39,7 +39,6 @@ #include #include #include -#include #include #include #include @@ -1451,123 +1450,6 @@ static void do_debug_trap(struct cpu_user_regs *regs, unsigned int code) #endif #ifdef CONFIG_ARM_64 -#define PSCI_RESULT_REG(reg) (reg)->x0 -#define PSCI_ARG(reg,n) (reg)->x##n -#define PSCI_ARG32(reg,n) (uint32_t)( (reg)->x##n & 0x00000000FFFFFFFF ) -#else -#define PSCI_RESULT_REG(reg) (reg)->r0 -#define PSCI_ARG(reg,n) (reg)->r##n -#define PSCI_ARG32(reg,n) PSCI_ARG(reg,n) -#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 = PSCI_ARG(regs,0); - - /* preloading in case psci_mode_check fails */ - PSCI_RESULT_REG(regs) = PSCI_INVALID_PARAMETERS; - switch( fid ) - { - case PSCI_cpu_off: - { - uint32_t pstate = PSCI_ARG32(regs,1); - perfc_incr(vpsci_cpu_off); - PSCI_RESULT_REG(regs) = do_psci_cpu_off(pstate); - } - break; - case PSCI_cpu_on: - { - uint32_t vcpuid = PSCI_ARG32(regs,1); - register_t epoint = PSCI_ARG(regs,2); - perfc_incr(vpsci_cpu_on); - PSCI_RESULT_REG(regs) = do_psci_cpu_on(vcpuid, epoint); - } - break; - case PSCI_0_2_FN_PSCI_VERSION: - perfc_incr(vpsci_version); - PSCI_RESULT_REG(regs) = do_psci_0_2_version(); - break; - case PSCI_0_2_FN_CPU_OFF: - perfc_incr(vpsci_cpu_off); - PSCI_RESULT_REG(regs) = do_psci_0_2_cpu_off(); - break; - case PSCI_0_2_FN_MIGRATE_INFO_TYPE: - perfc_incr(vpsci_migrate_info_type); - PSCI_RESULT_REG(regs) = 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) ) - PSCI_RESULT_REG(regs) = 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(); - PSCI_RESULT_REG(regs) = PSCI_INTERNAL_FAILURE; - break; - case PSCI_0_2_FN_SYSTEM_RESET: - perfc_incr(vpsci_system_reset); - do_psci_0_2_system_reset(); - PSCI_RESULT_REG(regs) = 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 = PSCI_ARG(regs,1); - register_t epoint = PSCI_ARG(regs,2); - register_t cid = PSCI_ARG(regs,3); - PSCI_RESULT_REG(regs) = - 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 = PSCI_ARG32(regs,1); - register_t epoint = PSCI_ARG(regs,2); - register_t cid = PSCI_ARG(regs,3); - PSCI_RESULT_REG(regs) = - 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 = PSCI_ARG(regs,1); - uint32_t laff = PSCI_ARG32(regs,2); - PSCI_RESULT_REG(regs) = - 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 = PSCI_ARG32(regs,1); - PSCI_RESULT_REG(regs) = 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 #define HYPERCALL_ARG2(r) (r)->x1 @@ -2890,8 +2772,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 ( !smccc_handle_call(regs, hsr) ) + domain_crash_synchronous(); + } + else + do_trap_hypercall(regs, (register_t *)®s->r12, hsr.iss); break; #ifdef CONFIG_ARM_64 case HSR_EC_HVC64: @@ -2902,8 +2788,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 ( !smccc_handle_call(regs, hsr) ) + domain_crash_synchronous(); + } + else + do_trap_hypercall(regs, ®s->x16, hsr.iss); break; case HSR_EC_SMC64: /*