From nobody Wed Nov 5 22:37:44 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.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; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1537520975959148.15621497136397; Fri, 21 Sep 2018 02:09:35 -0700 (PDT) Received: from localhost ([::1]:54671 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g3HRI-00026h-Nb for importer@patchew.org; Fri, 21 Sep 2018 05:09:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49194) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g3Gi9-00071M-VV for qemu-devel@nongnu.org; Fri, 21 Sep 2018 04:22:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g3Gi6-0002WV-PX for qemu-devel@nongnu.org; Fri, 21 Sep 2018 04:22:49 -0400 Received: from mail-eopbgr70095.outbound.protection.outlook.com ([40.107.7.95]:44383 helo=EUR04-HE1-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 1g3Gi6-0002SR-9M for qemu-devel@nongnu.org; Fri, 21 Sep 2018 04:22:46 -0400 Received: from rkaganb.sw.ru (185.231.240.5) by AM0PR08MB3588.eurprd08.prod.outlook.com (2603:10a6:208:e1::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1143.18; Fri, 21 Sep 2018 08:22:42 +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:X-MS-Exchange-SenderADCheck; bh=wN1p1Xr5Kx/LPgFjCj5+vEKWWv+jadY9tsv6qSyIKuE=; b=gF1dBBu0Jc4keWsFJ1MeVoNBxcovxTAXCzTmB/zMaRNfVJt5WPDL1f8TlVDLlOjmue+S0/tOe91W4x+4I8CP5mNJFpZvdBLaSlZZCigV9UdeUEhUMlhV07gPZzZQXwxPqOHksdpYRSL613q0bD9ETb9tNTu8oduHmFwrvwJjads= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=rkagan@virtuozzo.com; From: Roman Kagan To: qemu-devel@nongnu.org Date: Fri, 21 Sep 2018 11:22:16 +0300 Message-Id: <20180921082217.29481-10-rkagan@virtuozzo.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180921082217.29481-1-rkagan@virtuozzo.com> References: <20180921082217.29481-1-rkagan@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [185.231.240.5] X-ClientProxiedBy: VI1P193CA0003.EURP193.PROD.OUTLOOK.COM (2603:10a6:800:bd::13) To AM0PR08MB3588.eurprd08.prod.outlook.com (2603:10a6:208:e1::30) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3099dd71-67c3-4610-e002-08d61f9b679a X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534165)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:AM0PR08MB3588; X-Microsoft-Exchange-Diagnostics: 1; AM0PR08MB3588; 3:fxNOhD4/6VbRVagiDSwNKmPet/UblddNNq2uzvTpXTvzx4L+esTF8/GILW5WDWSEPtW/AbliE/kwbTfhuy8wpUFnXFLkVanroQRaqQFWB4qLk/mp7F5v7PuM3mB4sn7yDHpycCRsPY2fqIv13o3k8Htxz5N0p5+DeT68RvPYDfqkIRatYMdGP/I+nhaaybIjCs5l3hzlXKISc6936sHIZJjKP0tTO6mUMQ0BwArPOdtxN9uowAH7XaptEZpImYO6; 25:3xTvFoD9fJ7aPbLsYR73Snh6kzRUK0ikhRuYABIaizxlmsIdm8aO2crLd7K5AIxBmzhbLJRkVie0kccf9+e8Y4rVO2F26wAICKDckitvkYZhksZ1uTAmGbTJTUd2BwvGDG1QNsGrKmC1mWuUklmB7ak8n1fK8/doA1ROe/OB14aE88R3YEDdTCaRtytxdVuacM6Pb90gqqGv+PcQAC6BS7d7uKMNQA1G/QL1NY9KkvlC5y2X3fMlnf7+p00A0n4Q2Ct46M1/pQ6DMdUmChX/iTp4q/tyN09hpn/2K1iprxvXW/Exzg3+sG9Tj9TmaaXCbvku9jCsA6vHOxdA0l+5iw==; 31:c2rZUleBgsBB4AMVSkQND2hhuYFOPair03xFJKM+BysXdvxDxOfhxKFKFthH326HqLEwn8jlK36P+vF9dNUczArakdZZwZbGTWJsyVPnhuHk/ObqaXTTrIbzpWBSkYIpMN/Ngr4NS+XX3vWhYNzcYceoYZTXoL8wMwJU0fwKjs1pSbPaPcQ0xR9C6DH2s4M3YEkAISkg5Fc72Gh3AsHgdt6SBmtB4rQcmhBBtwELvxk= X-MS-TrafficTypeDiagnostic: AM0PR08MB3588: X-Microsoft-Exchange-Diagnostics: 1; AM0PR08MB3588; 20:kEeSRZ/LQSPaIGGi1Zf+2LghTjw9/48DA/r3CfMV12rlShXxEG+J5OV5EIvwCzykec0/sajjvCyF5E65iyGUnNuy4GIyqT1AsGpCMCkvBXw5UeQO6jNY/jAPJVgzYivjA8wdmArIRfh4Af2oI3IQy7IggTlKe6Zlxh7QBstlCT660rPnl8OnqHqH1vkv7STPXsZdGCWL0tumrESuVyavRw9JvdR0dYcF1wBjRgEnLkHMKN9HmZ8yBPESbQ98kE7lB4zunQiWlUr8XKcDPtokQPJBtRSu5pomAOH8TCPC2HLXyD6wAK1fMZdmah2nHMRdctjiMYrxQ+bOS551ovjjdeyJ6ibsLzVem/tHRCAmP8q1gpEIJOXRXMO7I7x/3shdpZf9UtuAQ/PhqXB3eUSWJHGoDNBQGPbbh0ZsO6v6JFAJO+XRdUI+xsNu5a3idj5dnraH+zfdypJb/0sEqJSMlhDwklAEZ/rmhhCiLhB+ntNWYFTDphO/OAs8edTww3D0; 4:omDUbcd88KPIOqsnAug+1mB1u5tcnlOK92ojd9kgqR39zOMOplYbnCNgZMWXgAhmoR+oK80rGj/ORLd/PD91ZeNu/F9wKx8H/5Z4+7CvAfW/En3hBNawdtfvU4pZ9dF7/v7fGTyieIQ7JSesnxGsUhJC4E9sxXER8qWTHjbSaX/OvakpsT8pJLPON/P+lyXUQcouyiHZHUXoI7h3hUfN5GuoWvjhHe1Dwf3LKlQoa9CrTATmJdDMvKGdmgzcmagNRSnlJsU8eeyhAzQK/2zlqA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231355)(944501410)(52105095)(10201501046)(3002001)(149027)(150027)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123564045)(201708071742011)(7699051); SRVR:AM0PR08MB3588; BCL:0; PCL:0; RULEID:; SRVR:AM0PR08MB3588; X-Forefront-PRVS: 0802ADD973 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(346002)(136003)(396003)(39850400004)(366004)(376002)(189003)(199004)(6916009)(16526019)(5660300001)(36756003)(3846002)(54906003)(48376002)(6506007)(476003)(486006)(14444005)(52116002)(446003)(1076002)(76176011)(386003)(51416003)(186003)(6116002)(16586007)(2906002)(66066001)(6512007)(7416002)(50226002)(53936002)(25786009)(106356001)(53416004)(81166006)(47776003)(316002)(956004)(11346002)(2616005)(7736002)(8936002)(305945005)(8676002)(2351001)(105586002)(97736004)(4326008)(86362001)(6666003)(68736007)(478600001)(6486002)(2361001)(50466002)(26005)(69596002)(81156014); DIR:OUT; SFP:1102; SCL:1; SRVR:AM0PR08MB3588; H:rkaganb.sw.ru; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM0PR08MB3588; 23:bSWJz3pB+y4TkYEYE+F1SNcLpPoPc5h0fnd+UwE+T?= =?us-ascii?Q?UCugx/P59IOY8hZ2EW8OVi9tC3YYHMRetSKOO+QMNczNsJRf1V/i9ttXm4g2?= =?us-ascii?Q?CGPxDjZB/RaKWzTa4qcJ8aaJ3wh3iasKHnOq7WGH4KJ4dUbrGRbnbLzseH93?= =?us-ascii?Q?q63M2qxhPBfx/8InOxh+96SbNUpRXDq5lay6QWwI0VEwu1K3gbT+AgUIIFjd?= =?us-ascii?Q?8a7VHw4NHQljjbBA8YlW34Y+RTc2WTNamVmhMTX3XdZFUQXZ1M00zAso15WS?= =?us-ascii?Q?gs4BGLGMJsPLap47eh+e8D6XJW+D6lvktvS7gPux7SvBQy0+Kf3YZ4g72/aL?= =?us-ascii?Q?FbkAPKDT7JXW5yJy37qGyDXrtcTNtnbyPJupPH3u0tngigt7d+E7JOF65GFC?= =?us-ascii?Q?BRbQfC7GIEp/rAUDi8+y0HSvmCG7l43e7nIb3WuSeu96VxmuSJeIKfD6MRog?= =?us-ascii?Q?O/NzjVrvk3AT7t4eMXQyT+es/VOX7vxnYaYHaen2A9kJTdnkGfqsRGG4FtYX?= =?us-ascii?Q?YnfHLfX3s4K38KKWhJg8LTmOPujVmbyQrK5Jl8p+GT03V6sPuPAOl/uqRkbJ?= =?us-ascii?Q?n9Dwcu0mwhBUacImWkOTtsqCuK8LlsAVoMxT0fRtDLluywCkLRZwXNoPPv0w?= =?us-ascii?Q?vuutnEUsSE44/x2rVO3PgYR+y7ZZzYuPwBzZ3xlvLW+IuFGIIjThtYv4oFM9?= =?us-ascii?Q?Qb/NnDfnNFAYPyYPBAoqex5Kj4+6MBZXRjVLAYBpTkAD0m7f1leCcqOE2gnr?= =?us-ascii?Q?TKwEuwX9SDpWuXkuaYqMMM9VNwhBEyxMsEB1twjfFjWIkNoLD4hAtqfkKvhC?= =?us-ascii?Q?tCz8rtKRMFzpM3BTYl6t4dvCCY0tPQXDUw4eDfdfL0aFU837jY8Yy9rAItiK?= =?us-ascii?Q?iOi77ACSsnsTvXLndPGzR0LInqQW28/ZfYcNRo0/pW5VM4/gts1pXUaLdmDy?= =?us-ascii?Q?HZG0eNttTdWyUmGVHD+W+LXxgihmcYoEIblUV0t8luhgVtR8ZnuuTucpQ5lf?= =?us-ascii?Q?dfLq6Da2JJ30GlnYwuZLMwpgzecl1gpuzdz5ZRcVidW9rOuhMhSWsQJoEPd/?= =?us-ascii?Q?5J1tPTQEncvtcCS8jc6zNFNcC6ehc52IcK0lKY6lw7//vW0jSWmpyotfTCv9?= =?us-ascii?Q?5vRwgE97lBtnEeO3jdfaq1mPx5sbX+Ui9oc2BPMdRM0StDhncxwJgXZop8Sh?= =?us-ascii?Q?74u/JthAEWqObbCF0g5IuWfuM24BvXXGDYydhrJJRaseCpu7kdzrnmzLo8Z2?= =?us-ascii?Q?lW13fouo1mgHQ3qgKNSfuk3jFWSPtBQv2dq9xs5wyAkbaYZOIKpOs6AOAyUv?= =?us-ascii?Q?jZyq4UQ+BTdHf8QYChY/cKdsUy/cpYQtkYw08sag65v?= X-Microsoft-Antispam-Message-Info: x4PsLVrQqYVCBzjtyetEgsLe1mD/cbIUsCr669lG328/BINVBC/2d/63EfyU64actWDsE1f7vYeD1ZquH5IjhgajIKhXD+1YI8rxEySy1TLmy8qMA6u6EzRftnClr6gDKuU7rm9uzmwbVlqJcajyGRCJik/9IxPA0NK8a1KQZA5WEg6IbgeBnzFokQhaH12MNtYjzKKdQqD19ulaTOvThdQ/4PaprriNkBJZEDQq1rk8vrKWi63dDkf23iHXgJ2zG6Z0IXEgNPt8OD2senl9DUqZjN+MRJ17azfn4Glpa9dNk5X00iFA6tk274cW4sIn7tdY13gdH1vPC2LLzbDxIwNXduUUDmN5EmFwuVHZsig= X-Microsoft-Exchange-Diagnostics: 1; AM0PR08MB3588; 6:LlxpU0oJ5g5DR/GSfrUu6HJDbRAcD9vi/mI1HxWCt/s6xDC/TI4H7DuebK0/FDfW2CSCgTBPtL7Rs1trSfxF+2yxv0UM0GNgLiDttUO+iR+hC+WfScZgRx2WS74159pxsYYC7kC3XtaqrprEVWKWLvSRABqSWehmAH+39LhrEIjw5QlNkIUaCtr4gMoaVJJarcRsCmFpyf2r0Ine3dNZt/rndRMcfHbaQFju1yQHE5ZrTtq+H3JU9QSGFGMMz7ARaeAStlFDcN7hmksHgA0t8Qm3p16Szo1S71L6dW35fUHEgl7fHlC3n16jdPxyrfWLKhWMEXBHGgXeBohfGaFUY4X22tkTj/s1/VCaEtJ4OgdY1cls5CA9G0yRZQCoF/4FlTNz95r1tz4A6F7WjSt6N6vswPTZB+b2AR4+gfGxg2eEQlrMtTwc+6aOmDscgrXlIIdmPzaGWoxrAdbUmHGloA==; 5:y08HM6saNk3BtDwL3K1IHiC25KBglLGGiII3OD8lFtvyeAIT7ZCvAVDWcY+ltAcvErjF2SxQ0IWNUTd+/vaK/1Or/3M+Y+OEKJS4ZzRJwdd2G8Bdp02nYmwRtphBNFTGQBHUXjseAZuKBtAkmVAnmdzGfqRThcUiUxFpgRUxi8Q=; 7:BwY1fgukz51k0Sw85fuIsDg/mWyqEXxA2qwio3IYRpeaTBE99rcgQxQyfR3tpgQj79vKDAzk7FSbcwlD36xJIi8yK0tapXzizySqxYOlbKLryjxTxZReJcd3890yGzl+3zBA2MZcydH3yUvNJ4mFUC0Ib+LNmZFndmzG0SjCyVC5XVc/a2J2LrLYt6/XmDbsgVzZcXSN4G3H/T4tbLWEByQkqj+qt9ypw4hI53EMNDIKSlX2uU49Fk96/tqDE239 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM0PR08MB3588; 20:puB583PLxKGZ6j6sXEGDuqoEIu+kWqI8cC6oeKDzqSKGYjIrCL5ONlHpVN7Vjp8cg+sTSz8pjnZkH/rOnm6vQALULy7/1jvt2+oTkK7jXjnhjcpmbV/ScV7I79KEKtRJ/ledEsUvKm1DItis3Mdq8nKedsy8y+wLIfJf8O1+GAg= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Sep 2018 08:22:42.6852 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3099dd71-67c3-4610-e002-08d61f9b679a X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3588 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.7.95 Subject: [Qemu-devel] [PATCH 09/10] hyperv: process POST_MESSAGE hypercall 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: Vijayabhaskar Balakrishna , Eduardo Habkost , Konrad Rzeszutek Wilk , "Michael S. Tsirkin" , Venu Busireddy , Liran Alon , Paolo Bonzini , Si-Wei Liu , Igor Mammedov , Boris Ostrovsky , Karl Heubaum Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDMRC_1 RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add handling of POST_MESSAGE hypercall. For that, add an interface to regsiter a handler for the messages arrived from the guest on a particular connection id (IOW set up a message connection in Hyper-V speak). Signed-off-by: Roman Kagan --- include/hw/hyperv/hyperv.h | 18 ++++++++ hw/hyperv/hyperv.c | 84 ++++++++++++++++++++++++++++++++++++++ target/i386/hyperv.c | 3 ++ 3 files changed, 105 insertions(+) diff --git a/include/hw/hyperv/hyperv.h b/include/hw/hyperv/hyperv.h index df92ed7e66..597381cb01 100644 --- a/include/hw/hyperv/hyperv.h +++ b/include/hw/hyperv/hyperv.h @@ -39,6 +39,18 @@ int hyperv_post_msg(HvSintRoute *sint_route, struct hype= rv_message *msg); */ int hyperv_set_event_flag(HvSintRoute *sint_route, unsigned eventno); =20 +/* + * Handler for messages arriving from the guest via HV_POST_MESSAGE hyperc= all. + * Executed in vcpu context. + */ +typedef uint16_t (*HvMsgHandler)(const struct hyperv_post_message_input *m= sg, + void *data); +/* + * Associate @handler with the message connection @conn_id, such that @han= dler + * is called with @data when the guest executes HV_POST_MESSAGE hypercall = on + * @conn_id. If @handler is NULL clear the association. + */ +int hyperv_set_msg_handler(uint32_t conn_id, HvMsgHandler handler, void *d= ata); /* * Associate @notifier with the event connection @conn_id, such that @noti= fier * is signaled when the guest executes HV_SIGNAL_EVENT hypercall on @conn_= id. @@ -46,6 +58,12 @@ int hyperv_set_event_flag(HvSintRoute *sint_route, unsig= ned eventno); */ int hyperv_set_event_flag_handler(uint32_t conn_id, EventNotifier *notifie= r); =20 +/* + * Process HV_POST_MESSAGE hypercall: parse the data in the guest memory as + * specified in @param, and call the HvMsgHandler associated with the + * connection on the message contained therein. + */ +uint16_t hyperv_hcall_post_message(uint64_t param, bool fast); /* * Process HV_SIGNAL_EVENT hypercall: signal the EventNotifier associated = with * the connection as specified in @param. diff --git a/hw/hyperv/hyperv.c b/hw/hyperv/hyperv.c index bf361de6f6..8d70fe7705 100644 --- a/hw/hyperv/hyperv.c +++ b/hw/hyperv/hyperv.c @@ -455,6 +455,14 @@ int hyperv_sint_route_set_sint(HvSintRoute *sint_route) return event_notifier_set(&sint_route->sint_set_notifier); } =20 +typedef struct MsgHandler { + struct rcu_head rcu; + QLIST_ENTRY(MsgHandler) link; + uint32_t conn_id; + HvMsgHandler handler; + void *data; +} MsgHandler; + typedef struct EventFlagHandler { struct rcu_head rcu; QLIST_ENTRY(EventFlagHandler) link; @@ -462,15 +470,91 @@ typedef struct EventFlagHandler { EventNotifier *notifier; } EventFlagHandler; =20 +static QLIST_HEAD(, MsgHandler) msg_handlers; static QLIST_HEAD(, EventFlagHandler) event_flag_handlers; static QemuMutex handlers_mutex; =20 static void __attribute__((constructor)) hv_init(void) { + QLIST_INIT(&msg_handlers); QLIST_INIT(&event_flag_handlers); qemu_mutex_init(&handlers_mutex); } =20 +int hyperv_set_msg_handler(uint32_t conn_id, HvMsgHandler handler, void *d= ata) +{ + int ret; + MsgHandler *mh; + + qemu_mutex_lock(&handlers_mutex); + QLIST_FOREACH(mh, &msg_handlers, link) { + if (mh->conn_id =3D=3D conn_id) { + if (handler) { + ret =3D -EEXIST; + } else { + QLIST_REMOVE_RCU(mh, link); + g_free_rcu(mh, rcu); + ret =3D 0; + } + goto unlock; + } + } + + if (handler) { + mh =3D g_new(MsgHandler, 1); + mh->conn_id =3D conn_id; + mh->handler =3D handler; + mh->data =3D data; + QLIST_INSERT_HEAD_RCU(&msg_handlers, mh, link); + ret =3D 0; + } else { + ret =3D -ENOENT; + } +unlock: + qemu_mutex_unlock(&handlers_mutex); + return ret; +} + +uint16_t hyperv_hcall_post_message(uint64_t param, bool fast) +{ + uint16_t ret; + hwaddr len; + struct hyperv_post_message_input *msg; + MsgHandler *mh; + + if (fast) { + return HV_STATUS_INVALID_HYPERCALL_CODE; + } + if (param & (__alignof__(*msg) - 1)) { + return HV_STATUS_INVALID_ALIGNMENT; + } + + len =3D sizeof(*msg); + msg =3D cpu_physical_memory_map(param, &len, 0); + if (len < sizeof(*msg)) { + ret =3D HV_STATUS_INSUFFICIENT_MEMORY; + goto unmap; + } + if (msg->payload_size > sizeof(msg->payload)) { + ret =3D HV_STATUS_INVALID_HYPERCALL_INPUT; + goto unmap; + } + + ret =3D HV_STATUS_INVALID_CONNECTION_ID; + rcu_read_lock(); + QLIST_FOREACH_RCU(mh, &msg_handlers, link) { + if (mh->conn_id =3D=3D (msg->connection_id & HV_CONNECTION_ID_MASK= )) { + ret =3D mh->handler(msg, mh->data); + break; + } + } + rcu_read_unlock(); + +unmap: + cpu_physical_memory_unmap(msg, len, 0, 0); + return ret; +} + static int set_event_flag_handler(uint32_t conn_id, EventNotifier *notifie= r) { int ret; diff --git a/target/i386/hyperv.c b/target/i386/hyperv.c index 96b3b5ad7f..b264a28620 100644 --- a/target/i386/hyperv.c +++ b/target/i386/hyperv.c @@ -84,6 +84,9 @@ int kvm_hv_handle_exit(X86CPU *cpu, struct kvm_hyperv_exi= t *exit) uint64_t param =3D exit->u.hcall.params[0]; =20 switch (code) { + case HV_POST_MESSAGE: + exit->u.hcall.result =3D hyperv_hcall_post_message(param, fast= ); + break; case HV_SIGNAL_EVENT: exit->u.hcall.result =3D hyperv_hcall_signal_event(param, fast= ); break; --=20 2.17.1