From nobody Wed Nov 5 13:34:48 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 14980632337859.394053932399174; Wed, 21 Jun 2017 09:40:33 -0700 (PDT) Received: from localhost ([::1]:55107 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dNigA-0004CP-Ct for importer@patchew.org; Wed, 21 Jun 2017 12:40:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35335) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dNiSJ-0007Fw-UG for qemu-devel@nongnu.org; Wed, 21 Jun 2017 12:26:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dNiSH-0004db-8G for qemu-devel@nongnu.org; Wed, 21 Jun 2017 12:26:11 -0400 Received: from mail-ve1eur01on0106.outbound.protection.outlook.com ([104.47.1.106]:64350 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dNiSG-0004dC-N9 for qemu-devel@nongnu.org; Wed, 21 Jun 2017 12:26:09 -0400 Received: from rkaganb.sw.ru (195.214.232.6) by HE1PR08MB0842.eurprd08.prod.outlook.com (2a01:111:e400:59b2::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1178.14; Wed, 21 Jun 2017 16:26:01 +0000 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=zgcVjTGGjNKKbRPWEJBb9vfHaFgdvqNjMhRe0WXMKbE=; b=Uvgd4DzqUoHpi1Z48yS8aYEEEjfbrb+janKEk6gOpR+9b7NVImqewU+uDWnWUOGYQQjy1c099sRHZPtHcA5TgvB7KmeEehgoi1EKyJrtknpwmlNIIqEirh8etDbpgbm8sW3USTieGd0DNapxzz162mbi6XryLBiF/VT/frVAxPc= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Roman Kagan To: qemu-devel@nongnu.org, Paolo Bonzini , Eduardo Habkost Date: Wed, 21 Jun 2017 19:24:15 +0300 Message-Id: <20170621162424.10462-15-rkagan@virtuozzo.com> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170621162424.10462-1-rkagan@virtuozzo.com> References: <20170621162424.10462-1-rkagan@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HK2P15301CA0022.APCP153.PROD.OUTLOOK.COM (2603:1096:202:1::32) To HE1PR08MB0842.eurprd08.prod.outlook.com (2a01:111:e400:59b2::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9c745090-0ba0-4c9a-3f61-08d4b8c23790 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:HE1PR08MB0842; X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0842; 3:VJZUzlmm4HjRcJtPSI9s+/OUlSclgziM+jB09kxQcETWlaBpDHAJAonhreFVGoqw7ul1HBpB6HB8eBa2bQzFbdZEbyk36sywq9uOp/yty/+1McQS5NbJQK+RUB0Ye0/gtbBXj1prYkd7Zid19kweC7f0Jy2jZ5yv+suOFnrGqcMza0es8NkEPvtzzfd/noMEkN6pxfAPWZRzmrQFD+sVVWdh2ou4yxiZgX5cXHOotgyyWLvUqQYUOTskynz64MxsPGG2Jm0GSeBdisXS3cjchaTnkrLx8eTwNVrTBvNKbadru8+3X2Y1GYtWqv5rT2AUlPkUTQeTBDGaPEV6jebvsQ==; 25:jjBTC9l3R8UJ/PJ/CfCHL+TWNuc14ADdpb/j47XcFATpL8bHBGwqQDDf2hA92i0SOZNulvSisiMWatUJ28rF75G/OjB9IRjCim8aoErfUgKIPSUfS5zckVnaDHf2ChsQEeITqLIW8IdXEHQWdWPwwgYVo4X7w5FB3WImu5Lv9QybZEVSN51zacr6rPTPeVJYXoLJU5uVe3PykTuB8nfPk+hzylDvU26IZNp/8E5nyj6VQ7QrLozdkZXRstkHPj78j33ijjLjc8pRlBytwfeErKuUyYg9CdhReU+bRqLtLXq1UN1vZIVKcmJQhmnaerGn6L5ntxBvX/kro9ipX/ozqzaUMRsw7JJJpiNRT8XT4M9GkMS9vIyR2/xRrl+EV1b6eBbt3zzbXIo8kaVx+6VgnPj+JspAr3vdB7GKTr/jVX/LApIt10VYBANzCsDDohnpIcHnKUyDIbxCKmNGjlCBj1MxJ/RJqjc0YEpnXKdVWjA= X-MS-TrafficTypeDiagnostic: HE1PR08MB0842: X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0842; 31:HAuSAG6VWQa67nPLUnUaCJ028reFGLFdr/bvZMJy3fdjX2np9WTWoxyTSRJpOUOygmAA43fEvju+b4yGMUrBkkz6qK4iv81PJHzew+mkYey0zj80fuv0ZASV/NnYqRWS+JKCS7YYmqAyFVbTSJ2SHABPCsZxXFM4BeYNip8bUA3GjD5+pjxAUCt0z784kM3W4q18n+ReXlh4YmJJYAuTcw0iFXGOOTNVPFhoskMGZZA=; 20:uAsyPtMWJrHS3PDuM++4q8lrl0xs7bKxiINfLMBgEzNSdRVa7u/C520gm/j5jCMFGjr+4u2YPLI/7TpsxVrw8PdNQF6IvxhfwsMx5ZxwWrGtw+QBbDQkbKojwuqcIPKmAHrLa7PUVSirddSNdRi4a3iwWA3mcgRaO+LbrkVzs5dr58yE14K9tdiDBOvf2AO4ZxbIQoIMNhXz4NejJzpmXvc3l4j4E+3V2uaLDdX7u7KKFmYPGgHdjWIIUdvPJ2EWu4HLzBrwn6nkpIRDjKH8YskNIpDyf6dy8TUnzAxlFQ+BtFHwEbOwaqT/NXziZdhAQ0ebyMWOUbMWgiyFasu337v16In3k11qUJc3rmnsF4XtPEaa+Bk/Zvq2JvejgjML8CpTeUI2/l8eB/E4EWTxzC3dlS5eMlxArqUX/Tqybnk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(6041248)(20161123555025)(20161123558100)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR08MB0842; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR08MB0842; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR08MB0842; 4:gUxuqHmqn/GTVjlt6IqY2Uhr2vKEOoW0PWAAXXKZN8?= =?us-ascii?Q?EbhBYomKhqITh7kpayW8xcl45/ML07OKVOm4LTnNZNYaHXIPYlAfIDO+ZmBi?= =?us-ascii?Q?A5CBmnATHqWG0uz3OpP+yMZGdD7XXNyFlu39JZEqWCnbJv0F/msC3jPok4/x?= =?us-ascii?Q?KtxZSoxOC3k1jlMZmjl5//bSmb9B0aP0mun4UnlU82AN8rI1U12oiS1ZOT/G?= =?us-ascii?Q?/VhS9/yngizg1hDMcxFpNR7ECGz2Db/jbnZySjUw2bFqZ931JTqceHSFSVF7?= =?us-ascii?Q?t3Iw3hqzxpA7Ux7bPxJpGbCZpgNr+EWaarI6gXo2k1y6cUrgCp4jkRyfQKbR?= =?us-ascii?Q?KJFdb+KOHXj1bR0YYPBCVyNk4OPS6pMwF+kLI3q+e4BpaqhDxyHLyALs0Bmc?= =?us-ascii?Q?zqlLRz48OamBEGHaTdA85e36yRVMILRHV4yb7shdsC1r3kEKDRsJ6y49X+mS?= =?us-ascii?Q?fE5uEecOJIQaIiQkbpO/KTXQXlMxhuqtOg35m2UZOR00hbAdf59w+AXG5vCX?= =?us-ascii?Q?2Fd2lX495pIk5kEiB0B8TWQjx4pP2UNiIjzuMN71C1wpzaDCdIvnoOqFf/qk?= =?us-ascii?Q?HN02l2p4DQkZPiPXCvpWY8JfylrQLoScReBJTF3vi7gEX2g/1nUEn36nTgRc?= =?us-ascii?Q?KiiyyshjJ80zw0/rFhdO3FCdQHgsRkBp7SGdO8aKrwS4SfR2eviEN/DwuHKH?= =?us-ascii?Q?mx5D8JGi4nPxEojAZGOTFfgU4yFF/4h5aOElM3/HQ/HUK2INY3XrvCSkrjgr?= =?us-ascii?Q?Fb/shm0fa6R91Eh4jIUN5IfMPfdA0NUOgVh2arj+IXp0psIN/PrxJYPQDYZb?= =?us-ascii?Q?Bx9Ci94Y2UPty7k1Uu9gBngqwjN+rTAm0DhSqKhzwKrjMtzDSq97IYVdVZfV?= =?us-ascii?Q?i5emlzjJJ7TRH34D9M3xPNGRGbT+7+D0P3GIdc1qXFXPXefGoeERU+3MiX5D?= =?us-ascii?Q?9bAzc9bhZ+S/r0IFybJMxibxemeBQ+P56JqllalwRcCH0j7+WzcCCuuzQ+ai?= =?us-ascii?Q?p6EMhTE5CAx3Zo5QY0JZ3lstlKZ6K8J5256jqvGKuecnR8yOjYVi6FkoGf/L?= =?us-ascii?Q?H6oLF2jV2iUCa7N2GDQ6vvJbGfJEY7yfHLYTfiN1GeN2v/w25StW6IUI2T2C?= =?us-ascii?Q?xxS6kdtwtObrAh2z5amp8qJxsQuLYC?= X-Forefront-PRVS: 0345CFD558 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39410400002)(39840400002)(39450400003)(53936002)(50226002)(305945005)(81166006)(7736002)(6486002)(189998001)(8676002)(50986999)(76176999)(66066001)(6116002)(3846002)(2906002)(47776003)(25786009)(5660300001)(36756003)(5890100001)(1076002)(5003940100001)(6506006)(53416004)(42186005)(6666003)(4326008)(2950100002)(6512007)(38730400002)(86362001)(478600001)(33646002)(54906002)(50466002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR08MB0842; H:rkaganb.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR08MB0842; 23:f95OLIvpEw6cGub7JiA3Z6EkTdWwax+SBqi1cT2VV?= =?us-ascii?Q?ybpfHwgz9AZ1Aw4YRIYPSzCX5jGkFh2I7SxLhLuBf2FbrMJQV/ufUZHCpI6Y?= =?us-ascii?Q?DlVrgxz0KmyE5ZZwjcQ0v8Eptlv49bE7Qn+jhI4hDmJRTIWIQc+UeG5+218M?= =?us-ascii?Q?yMqu7KGM6sUh5zlCoEB9Ys4u5jV+77DVw8HkbBey+Ldxd3qBhc8DpJRIWVeh?= =?us-ascii?Q?Cw3zTMnf1iX501l/0vDKylvslnGvj95V7XsswmEPE5ENYYf3Q1/4D1b4xLDs?= =?us-ascii?Q?0+pEgLO7IecVLRtjPnQxmbLT9OgYlrWS22qQMgT1K542DqGIH2DjMHY09la0?= =?us-ascii?Q?NmyAWSgieg80yrgkIYjRPZ8xRG1Nhh4OOObfeI7grJ4R6VPLeoAqevLulwg7?= =?us-ascii?Q?GlcpVr1vMRfpIqwQHee6khfRupfptmzwPuA7Lu1jjSwxMmb/Aj1zTOYK+qqb?= =?us-ascii?Q?3F4fJDVAYOgkeJFul+dMe4aPj8Mjgb5MBc89FvK+WcoOUf9LgCGFFt3oyV/q?= =?us-ascii?Q?wg6bh7dze10HUgoPPcp8G7vWDA/r5IknPS01UVm3eCfA8hWWmsnFxC2uR5BB?= =?us-ascii?Q?zY/ig53+O9jNO5dwASyQL6lLY27Y4E0rmOei3AsFq5qSfJxJcJ5p4aklPnL1?= =?us-ascii?Q?rujKeRtoVtVRKbsUz1Y4TlG+zqObNTNVKa/RFhM53PEHsHYqwtElAEzGPN2u?= =?us-ascii?Q?iAflbyZsN0GhAMRVk/4vCEhWywnEqbPU8ZoK3B3XE3wEYAemo99cYN9Gf4UZ?= =?us-ascii?Q?ve7csaQ0Apsa0kjVj7D9VcPNCmUnmb7jCALGxszQc4mgLyOQAtTb7EQzTqPa?= =?us-ascii?Q?mWTV0DFAuveRZbI3yIVxRR/cGv2E2NAEdS9AzSXYqqzDedkODjMSRZAt6gwf?= =?us-ascii?Q?UBb+fd2w2CFX8MGG+jlzASf7F0/ktxNGnESaH2fNhJZIWNPtbtVE4V4FcbjZ?= =?us-ascii?Q?r/Ubd7oIN1K/WSXA5I+O095HfwDXBxr+ZPDq/Ae+slGZKqqwwKPcQ0lrb2u9?= =?us-ascii?Q?kngbBCZMP9agPd6Z4OlzcgVDDExDcy+cb5K6GS4c9+q9w=3D=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR08MB0842; 6:BgrVGk+TTwOcUIcsDp65I7yiYU30uDcqOOKkU5eW1S?= =?us-ascii?Q?CFeodKd2bBjJ23T/C0aIUIKXmFwKEebwbm+x6JvFnyFhh0St3YvL1KIH9cNt?= =?us-ascii?Q?R8P8XnBXhVPHq2Kw7i2xkfoxhXIerssdKaV5SRUKLgUyWyzjIdlI7p3F8TBS?= =?us-ascii?Q?1go75i9CQ8RDGd/H80BaxD9DI4PPRx2Hp3jG2+7BOOIhMMoiibmJ9uzXpNXm?= =?us-ascii?Q?we38lFTC2le4LuEmXueW+7vVxmRuLDV/kK1L2L2TdaJ1+Oe0zRw0dCT0HBbD?= =?us-ascii?Q?HiP8qd4d/uvpByFZTkpQtdaDy2G4z8NlvSpGVXRM+DxeSdCQDVNJmLL2iSU6?= =?us-ascii?Q?bbTJruw8qrObgW4Q457eyt/mBIv5UEBeSbyrmMJ5l+06ggfpjVvi4sSrTgkP?= =?us-ascii?Q?4lWObEdkVA6RgtjAm+MF4FRedbMHkE+T/TE/UQQt+mdk/aeH3ktuQ0j+Tirv?= =?us-ascii?Q?pEGqJv5dYYph2LgHA8mGCw0hUNmdum9rInIrc5+f/fxR36sj5W8JCVEqte0Y?= =?us-ascii?Q?GVqkrUmg0eNO9upEj5qeeYbso18qznbsjBTGP0CegjDaZifKbrGJuXHmfEje?= =?us-ascii?Q?OJazwGU1rSHCs0lxj4VmiSHzIbRkk2HkJKP1CojEGqEHsw+9G/th0z91yq5Q?= =?us-ascii?Q?/DxJORBaqPwG+umkN+xyo11oFHwPCAxztxdISBrmdyCSiaXGXTUheCQrl2Aa?= =?us-ascii?Q?Sv5DJ7xe57hNsvCWEx9kC0rvChuetmXw8E/iI1qdkbycl+r8E3elOHX49hZp?= =?us-ascii?Q?qVgGN3FhzUGsOvx4BpwgKvGNiIA7vVmu3HKGlfgWOyXusfMLxsInL0mv3FSq?= =?us-ascii?Q?WdIH+LaA1uQAwK2BBQUKyROI/rJRqUec4i74q4W4dK2TtBkDLQW33coQwIm0?= =?us-ascii?Q?NWmAvfiPxzNVRFLqrO/4SrEJtQpTQQ6LluZq5rhCrPy8e1OdQaqhyYM9zaPz?= =?us-ascii?Q?hIcWdElflsSOjwyZYH1c8jVquB3h4UYSjUgmDnGVOrPYrhoXhc8mW+y/jxjS?= =?us-ascii?Q?k=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0842; 5:Rq8DXBpB4xJp/qa1+/becSYidQzApfh39tcU/WkgItWwOr17857VVL96H31L10YLrPJRx2Jx4ZiVQS0rsPl1a2U7KRMQLqceszRfAcXziqDUQVz8YOuYonz5RCA0ywmuldyj5qUnfLgKi2cC7w3jzNQgPWql52I8bDdWdB3vPo1RXlo/IZJqHbj1ObXGK8OReNZvqlQFgphWKTC3WcY3+MA7qZ0YY9ejPZFOW2kEXF380B+D0eOSUCQxYisv0xT4k5moJEWJWzjfzBYQr7j9x5JW/Rucrm6hYbfhUf7Ky78WiacvswGe4/Z/EEbkg1c+T/ws5j1Qh8yB1G5jofF14puD/aHsvhh3fiV9xcigIVJ7mj4kjnZSjkPM9BO/KZOKWoIfDdBxP974+GnhOT4IiYPwmyue7IGAr/GgwpABCFS+eOyyiNKUc1kiOZOClHEGhGBLWXq598tRnzAcsqoYin4XbiRNmsFewLevUF0rS3APDNoDeRIetrK0jg94YvF7; 24:I/P/M6Xgs5n5k1lYNyDFD7aR4pQDpN7ncuLHanzbXl+aI74elNPASiRYy60jOEV4yEy5VHHVUGarustj4sYJ0LIcEBeYJ/htf6F7HU0OsVg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0842; 7:lr1Vd5RYRGVazsBamenCw24huztVS5xLbVv2ExpDj/Cg4iOWG6bZD74aorfWXs3j3Cm4UASDxAFysYgA/xaVoX/GI9m8N+8Lrk+n5Lz/O+eVkI67kna6CsdHOm62BBwL8KiX8EX4iBKE1cuNmjnPRYyOxKKfxguDVpkhng6SKXkXp8xhesWSMmcBCvzo0G7TcDMpn6UoVe7X8l9EkOtru6It8tqR4gsOmLdviEpVi4PcWgwHF8VwcaPMd4qav5onRKygPBawtXRNHmlPrQEExRgfNTaKpEqlvJy8jrrXbJmO+OGSIXWgcbfOhpjh5S06Lsx4MQQkAOPagGdD03MwsdorezO8mRpOad6AN2iffV3go3NYLExTgyL496J3hAVWdiNmG6SSojD/HvCe0sd5jPRL4K72Jz1H9wRb8Gg1xJigEMgPMeQWCax0NYDz1/bRVLs0hwIeipN2RODybtQB3EufEBxYFGciyY+ZB/c+OZaqW1u9+aD0c/IfnNnz6PwTM2eQLJ0aYyBInhYDOrQq7HBRhlHOHDPNVfiQbemXXwhJZ7RhxLWqjAFBavJzT2/fluRYsPDaVgzirUVxkhGfCh+769HwW4WvyFIhcWAcFWC4TX7i6G/8w4JzTb3A/Fgiy3dP51Y2NiEpPpFeDhySzPM6xeqULfCUzPaQPGfMPC8zDDpnoBRWEODIPjT6L9sUk/PFWMXjEWfCYgGSDZUwesRsH+C7QUtyuo+qrlbSFnNmLEm4xs+Vi/ZaVLVx9lxawo25MeMcSJFwA99KUVyueocCF4OWiJtLVSdxIlACr5M= X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0842; 20:pb72Hd/J0MDr3e8msR5bGHoqjrjYXJpSdkw5hWdlfOkTU35gIJLmZ4UN2Oduj2a8uZt0GLSxIPvwrGuIxfNdqoxZKuHtcPZBmQbVAUd8nnrXO4U2Axhf6EkCAGqH/IS6NN5NTMX0UuVAJCVuMNAdwQ7RXl+d5mRzICk+SnSp4vg= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jun 2017 16:26:01.7384 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB0842 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.1.106 Subject: [Qemu-devel] [PATCH v2 14/23] hyperv: qom-ify SynIC X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Denis V . Lunev" , Evgeny Yakovlev , Igor Mammedov Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make Hyper-V SynIC a device which is attached as a child to X86CPU. For now it only makes SynIC visibile in the qom hierarchy, and maintains its internal fields in sync with the respecitve msrs of the parent cpu (the fields will be used in followup patches). Signed-off-by: Roman Kagan --- v1 -> v2: - was patch 13 in v1 - drop unnecessary QOM properties (but keep the fields) - move KVM_CAP_HYPERV_SYNIC setting and SynIC creation to hyperv_init_vcpu target/i386/hyperv.h | 4 ++ target/i386/hyperv.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++= +++- target/i386/kvm.c | 14 ++++++- target/i386/machine.c | 9 ++++ 4 files changed, 134 insertions(+), 4 deletions(-) diff --git a/target/i386/hyperv.h b/target/i386/hyperv.h index af5fc05..20bbd7b 100644 --- a/target/i386/hyperv.h +++ b/target/i386/hyperv.h @@ -34,4 +34,8 @@ int kvm_hv_sint_route_set_sint(HvSintRoute *sint_route); uint32_t hyperv_vp_index(X86CPU *cpu); X86CPU *hyperv_find_vcpu(uint32_t vp_index); =20 +void hyperv_synic_add(X86CPU *cpu); +void hyperv_synic_reset(X86CPU *cpu); +void hyperv_synic_update(X86CPU *cpu); + #endif diff --git a/target/i386/hyperv.c b/target/i386/hyperv.c index 012c79d..eff612c 100644 --- a/target/i386/hyperv.c +++ b/target/i386/hyperv.c @@ -13,12 +13,27 @@ =20 #include "qemu/osdep.h" #include "qemu/main-loop.h" +#include "qapi/error.h" +#include "hw/qdev-properties.h" #include "hyperv.h" #include "hyperv_proto.h" =20 +typedef struct SynICState { + DeviceState parent_obj; + + X86CPU *cpu; + + bool enabled; + hwaddr msg_page_addr; + hwaddr evt_page_addr; +} SynICState; + +#define TYPE_SYNIC "hyperv-synic" +#define SYNIC(obj) OBJECT_CHECK(SynICState, (obj), TYPE_SYNIC) + struct HvSintRoute { uint32_t sint; - X86CPU *cpu; + SynICState *synic; int gsi; EventNotifier sint_set_notifier; EventNotifier sint_ack_notifier; @@ -37,6 +52,37 @@ X86CPU *hyperv_find_vcpu(uint32_t vp_index) return X86_CPU(qemu_get_cpu(vp_index)); } =20 +static SynICState *get_synic(X86CPU *cpu) +{ + SynICState *synic =3D + SYNIC(object_resolve_path_component(OBJECT(cpu), "synic")); + assert(synic); + return synic; +} + +static void synic_update_msg_page_addr(SynICState *synic) +{ + uint64_t msr =3D synic->cpu->env.msr_hv_synic_msg_page; + hwaddr new_addr =3D (msr & HV_SIMP_ENABLE) ? (msr & TARGET_PAGE_MASK) = : 0; + + synic->msg_page_addr =3D new_addr; +} + +static void synic_update_evt_page_addr(SynICState *synic) +{ + uint64_t msr =3D synic->cpu->env.msr_hv_synic_evt_page; + hwaddr new_addr =3D (msr & HV_SIEFP_ENABLE) ? (msr & TARGET_PAGE_MASK)= : 0; + + synic->evt_page_addr =3D new_addr; +} + +static void synic_update(SynICState *synic) +{ + synic->enabled =3D synic->cpu->env.msr_hv_synic_control & HV_SYNIC_ENA= BLE; + synic_update_msg_page_addr(synic); + synic_update_evt_page_addr(synic); +} + int kvm_hv_handle_exit(X86CPU *cpu, struct kvm_hyperv_exit *exit) { CPUX86State *env =3D &cpu->env; @@ -65,6 +111,7 @@ int kvm_hv_handle_exit(X86CPU *cpu, struct kvm_hyperv_ex= it *exit) default: return -1; } + synic_update(get_synic(cpu)); return 0; case KVM_EXIT_HYPERV_HCALL: { uint16_t code; @@ -95,6 +142,7 @@ HvSintRoute *hyperv_sint_route_new(uint32_t vp_index, ui= nt32_t sint, HvSintAckClb sint_ack_clb, void *sint_ack_clb_data) { + SynICState *synic; HvSintRoute *sint_route; EventNotifier *ack_notifier; int r, gsi; @@ -105,6 +153,8 @@ HvSintRoute *hyperv_sint_route_new(uint32_t vp_index, u= int32_t sint, return NULL; } =20 + synic =3D get_synic(cpu); + sint_route =3D g_new0(HvSintRoute, 1); r =3D event_notifier_init(&sint_route->sint_set_notifier, false); if (r) { @@ -135,7 +185,7 @@ HvSintRoute *hyperv_sint_route_new(uint32_t vp_index, u= int32_t sint, sint_route->gsi =3D gsi; sint_route->sint_ack_clb =3D sint_ack_clb; sint_route->sint_ack_clb_data =3D sint_ack_clb_data; - sint_route->cpu =3D cpu; + sint_route->synic =3D synic; sint_route->sint =3D sint; sint_route->refcount =3D 1; =20 @@ -189,3 +239,60 @@ int kvm_hv_sint_route_set_sint(HvSintRoute *sint_route) { return event_notifier_set(&sint_route->sint_set_notifier); } + +static void synic_realize(DeviceState *dev, Error **errp) +{ + Object *obj =3D OBJECT(dev); + SynICState *synic =3D SYNIC(dev); + + synic->cpu =3D X86_CPU(obj->parent); +} + +static void synic_reset(DeviceState *dev) +{ + SynICState *synic =3D SYNIC(dev); + synic_update(synic); +} + +static void synic_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + dc->realize =3D synic_realize; + dc->reset =3D synic_reset; + dc->user_creatable =3D false; +} + +void hyperv_synic_add(X86CPU *cpu) +{ + Object *obj; + + obj =3D object_new(TYPE_SYNIC); + object_property_add_child(OBJECT(cpu), "synic", obj, &error_abort); + object_unref(obj); + object_property_set_bool(obj, true, "realized", &error_abort); +} + +void hyperv_synic_reset(X86CPU *cpu) +{ + device_reset(DEVICE(get_synic(cpu))); +} + +void hyperv_synic_update(X86CPU *cpu) +{ + synic_update(get_synic(cpu)); +} + +static const TypeInfo synic_type_info =3D { + .name =3D TYPE_SYNIC, + .parent =3D TYPE_DEVICE, + .instance_size =3D sizeof(SynICState), + .class_init =3D synic_class_init, +}; + +static void synic_register_types(void) +{ + type_register_static(&synic_type_info); +} + +type_init(synic_register_types) diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 9bf7f08..eaa2df3 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -648,8 +648,7 @@ static int hyperv_handle_properties(CPUState *cs) env->features[FEAT_HYPERV_EAX] |=3D HV_VP_RUNTIME_AVAILABLE; } if (cpu->hyperv_synic) { - if (!has_msr_hv_synic || - kvm_vcpu_enable_cap(cs, KVM_CAP_HYPERV_SYNIC, 0)) { + if (!has_msr_hv_synic) { fprintf(stderr, "Hyper-V SynIC is not supported by kernel\n"); return -ENOSYS; } @@ -700,6 +699,15 @@ static int hyperv_init_vcpu(X86CPU *cpu) } } =20 + if (cpu->hyperv_synic) { + if (kvm_vcpu_enable_cap(CPU(cpu), KVM_CAP_HYPERV_SYNIC, 0)) { + fprintf(stderr, "failed to enable Hyper-V SynIC\n"); + return -ENOSYS; + } + + hyperv_synic_add(cpu); + } + return 0; } =20 @@ -1084,6 +1092,8 @@ void kvm_arch_reset_vcpu(X86CPU *cpu) for (i =3D 0; i < ARRAY_SIZE(env->msr_hv_synic_sint); i++) { env->msr_hv_synic_sint[i] =3D HV_SINT_MASKED; } + + hyperv_synic_reset(cpu); } } =20 diff --git a/target/i386/machine.c b/target/i386/machine.c index ded5e34..90cc3a9 100644 --- a/target/i386/machine.c +++ b/target/i386/machine.c @@ -7,6 +7,7 @@ #include "hw/i386/pc.h" #include "hw/isa/isa.h" #include "migration/cpu.h" +#include "hyperv.h" =20 #include "sysemu/kvm.h" =20 @@ -629,11 +630,19 @@ static bool hyperv_synic_enable_needed(void *opaque) return false; } =20 +static int hyperv_synic_post_load(void *opaque, int version_id) +{ + X86CPU *cpu =3D opaque; + hyperv_synic_update(cpu); + return 0; +} + static const VMStateDescription vmstate_msr_hyperv_synic =3D { .name =3D "cpu/msr_hyperv_synic", .version_id =3D 1, .minimum_version_id =3D 1, .needed =3D hyperv_synic_enable_needed, + .post_load =3D hyperv_synic_post_load, .fields =3D (VMStateField[]) { VMSTATE_UINT64(env.msr_hv_synic_control, X86CPU), VMSTATE_UINT64(env.msr_hv_synic_evt_page, X86CPU), --=20 2.9.4