From nobody Sat Feb 7 08:23:15 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1528307468103415.08650091527863; Wed, 6 Jun 2018 10:51:08 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 259543082154; Wed, 6 Jun 2018 17:51:06 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 89E6F1001640; Wed, 6 Jun 2018 17:51:05 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id CFBA84CA80; Wed, 6 Jun 2018 17:51:04 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w56Hp0Zt016094 for ; Wed, 6 Jun 2018 13:51:00 -0400 Received: by smtp.corp.redhat.com (Postfix) id A05043083327; Wed, 6 Jun 2018 17:51:00 +0000 (UTC) Received: from mx1.redhat.com (ext-mx09.extmail.prod.ext.phx2.redhat.com [10.5.110.38]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 96E40309128B for ; Wed, 6 Jun 2018 17:50:58 +0000 (UTC) Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0063.outbound.protection.outlook.com [104.47.42.63]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 57122F0CFB for ; Wed, 6 Jun 2018 17:50:57 +0000 (UTC) Received: from wsp141597wss.amd.com (165.204.78.1) by DM5PR12MB2456.namprd12.prod.outlook.com (2603:10b6:4:b4::37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.820.15; Wed, 6 Jun 2018 17:50:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0wemSeQyDO+xHP+c7FQ2e0vsWHbP4WmkujVXCUMUZHk=; b=mrf+JFQuNuQ0ObpGlxv2PL2K5X4COFCtKLqTl4u+Tp89FlvlqXRS1raxeyY9RnuCPU+LScjaJbOsUWx4ZL0ILlgGZpPgW3i17IbqTf8qnu30c3TemHqku+Z6YRpRdMXPYAOF7HYfvP/JqJ3llz0CiYfflNkpSKhAeRtaX8/kLaY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; From: Brijesh Singh To: libvir-list@redhat.com Date: Wed, 6 Jun 2018 12:50:07 -0500 Message-Id: <20180606175017.104019-2-brijesh.singh@amd.com> In-Reply-To: <20180606175017.104019-1-brijesh.singh@amd.com> References: <20180606175017.104019-1-brijesh.singh@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: SN4PR0201CA0014.namprd02.prod.outlook.com (2603:10b6:803:2b::24) To DM5PR12MB2456.namprd12.prod.outlook.com (2603:10b6:4:b4::37) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DM5PR12MB2456; X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB2456; 3:sMO3gVdkUzo+ikfLg7+ASdk07+U/ylzcs9CKtsK4dwPHBqSfz9ibEZfuWT0PtkLX42uBg5NJbiur+8Tu/2R4sPMkin96iulkEDf4Fs9+BymJWFD/keOC/9qydvxpLv9MhcWlzwr7ZYI+PXsnutoTVMJiMYbDoNmmEgvVqSy6Cc7kuYbSqwnyFCOmyvIy6ypM/LPBFXBj3wJB3c+dsacBVLjNNDjz3ckjoURlygnMN4ZPEvgFaGOlWKuQLZX6wTXT; 25:hVRhrruW0Y3kVYU2QbXQXTsWPPIkYN1W3z76SI0WKW8BcjoD0m6xnqNQu9Xy8kSRTgCnOQQqKUqflQXe1bSgd6g6qL+jKW/pn6eDhTf4GPFckGEYBXHBeeEIbEX7nm2NKiG/YLgw984uq2h6ROU7nXb7EPFo/Jbh9obb/yjLjCxUa69o25fjXQc8opDJjBUeNahv8kv7gkzBZ2pgVBtDth3izkWKlwiOWME7Di4rwfHEm7s0zoMXSjEljjyU0bGnDfcKWo0CAkaAO/j7j46GDTdtCEesutDjSU7equoZewV5F4Nc0wQw9bu21isd66snmCIBMY54Gm07UOfXPtaRkw==; 31:IyxtVgWf1QBoEOXOfaiuSfAKGiHApnnA/CbBGYw80KILv3tAQTRmxZmGKiCwsF1kQk4BhPxYyuGFAJfEjFk13pRyyaE5z5Uex7TJ0ljcntwTrrEbovP6JhrBYl/d3DRbEMmplqPsFN/BSlPTJ2l2KO+s9gv/Zo8GzsqY6AFQOzLc7ymSIuKzCxc5+rFfF7wf+bfeWABem45L+TW9HJNYAOqqyCTBlPusekPq1kKCZxg= X-MS-TrafficTypeDiagnostic: DM5PR12MB2456: X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB2456; 20:su1NBLarIazcMZjYRU3YXx/cd5OXPUqDKe9t2ETlQv7EC8w2RkBIeCBGKE6ENoQcjlvTbNhs6qjuCz06dis61XIBDwD23fkz+vVJJhiBgMzdfdCNdj5gNxz7YjKnRCLNSEB3ubqcpxFePY9HPiBsxEaj6B6QToNfWvA4d9GL+gR36VaoVbWP9B22d/DxfhhwOofCjssHvw4Jg9dafWSL5cWujbTLQpOizsp/yALvV8awSArP8FDJkGcNMWYLBEB+LE3wTyVQ5QmyfudZ8pNxVfjgr1gOTx5MG9c+z7IqxnXF3Cu/05MfNa2ceafy3UHXLDSeIvUyPtOUjyTUnXl3C/EoNMCuBm6n/WS96ghktjiHDiuoWdInubC+O8nNWZN7MdTIh+B2kMRATjFGTJXVepniywi7ZTak3oWwgmYMj3sSINeZW/oZf1Ao7MvzWbzORrHZGMSeCF+R27PAraSEtQPkKa4L3lRVgjZBiZvQARCxYJvMEeR5/kW/o8SE2CUt; 4:t9v6WDkE5CQyflSQeLA5bYz1qE7EjJJgQhgbXehsT7vXo/DAhadktuCCQuif/9oijn8PvwcW/wd3y+3wKfvK2VJXpLEfvD2WLURapOdzYddM2XdHnxWE6BUHCvziEmZ7a4LW6CisSYUdwqiEzWDdl7xB1vr7QKbCz9wqEw/drxgO8oU90/Ig3zGxtudCR+miJqhHOyAqZbJDxowYcjADSlp9P0h8DlDrBpOrIOhvGL49EEZgnlsRFTrX/6P+b+n+sDHX3gAQrXlB+B86WcBSWzr5dAJWZg6aL9kcYO7iVzuMTPL++EPPrZXBBkOFjtGk X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:DM5PR12MB2456; BCL:0; PCL:0; RULEID:; SRVR:DM5PR12MB2456; X-Forefront-PRVS: 06952FC175 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(346002)(376002)(39860400002)(39380400002)(396003)(199004)(189003)(2906002)(2351001)(305945005)(6116002)(3846002)(7736002)(59450400001)(1076002)(2361001)(7696005)(50226002)(8936002)(52116002)(51416003)(76176011)(5660300001)(48376002)(81156014)(8676002)(36756003)(81166006)(4326008)(386003)(53416004)(53936002)(26005)(106356001)(105586002)(186003)(97736004)(16526019)(50466002)(316002)(16586007)(54906003)(25786009)(47776003)(66066001)(68736007)(86362001)(6486002)(575784001)(6916009)(6666003)(956004)(476003)(11346002)(2616005)(44832011)(486006)(446003)(478600001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB2456; H:wsp141597wss.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR12MB2456; 23:gjj1odlCIU42nFfYa9ScU7EO4K5n4q4rCnQz4gtml?= =?us-ascii?Q?WJRXRoF8ItNUTYWx6LddOyqanPgzGQNjAEfZC5qD/kwJXuPkEOll4IoHS0Ew?= =?us-ascii?Q?3fQxkVegniE1zLuCloCAGcUk+Ofcgyrsh8cOqsZVG0s92Uj/OJa/g+02vHct?= =?us-ascii?Q?VOAkY9UA84qxD08h/gkcYo9U/ipUlSeVtsCqDdLYvGv1qmhRBMSa34vcsb/y?= =?us-ascii?Q?0Kgh3cWnEtUfD8kfTupn3gj+C4/5gz6RxiIQiPZoL1TSIJ7FmAdszhpitFsB?= =?us-ascii?Q?wRng9LcFKZ5jeGgPVWG/yHh18iEPGEnZTqpBzOLtzvh49FMPwodloNYNRomh?= =?us-ascii?Q?SY792mAfKsRe88vHQYpGFlbCo0ws+Sf554YQFBHQq3AEuq+hm0gfOIMfcomg?= =?us-ascii?Q?9o1+l87xPBY8Ei2EAMy/WPSGrGf/OM3jEJHWGB2gu87cI/2zcfKsT5M+SJCd?= =?us-ascii?Q?cmGIIaucNqlNmKPUIZ30HIlsD+48n7/64Lzkh4BU4fBK4ZVriNzYLaKtaz6Q?= =?us-ascii?Q?x242ix6NS/wGBh4uZVzbkM6QXWhuyWYrebDBl2SE2ZvPQ8Ev1zzmORRMJ78L?= =?us-ascii?Q?9NNQ3sq6LviE1NO7sQyzBoMTAeXrATNg9pF5b50fFtIbt2bcHPGekvtginGD?= =?us-ascii?Q?ddIJOS8JqWIrOQgT3cFMgUAT9GzGbak/GmxYm/uuSuKmnbEXddTd2YKaKUW1?= =?us-ascii?Q?GvMUd9viXpEUGfMPTfpb0BhPwWWfarpDTORTgJh8DDAivuJgG+Zk2G+KrhX8?= =?us-ascii?Q?ALa5rd0sT1hCRg53urlCZMrkWK5n9m2F/8ODlhtDHG+CjDGDESXFP9ljmsXC?= =?us-ascii?Q?TJIE2srGv25CcF3LSvRpYpSYMZPmiO0x+QQrPXChnoKIM14SU5E2tdsLM7VH?= =?us-ascii?Q?tFt+Y35TEsL0MtjPkYrs5WHPYbrzHZPX1ZFxaqxvqxkXwXU0f+6zI1th8SXC?= =?us-ascii?Q?4e05SdoXkuZcSqT2LOdy/P98IWHCyTFKkrVia9rMkVcV+Zi2GzX/MGsSYezO?= =?us-ascii?Q?9bXkmu+ke4eNoWmj6KzlxqKJ30S3LUid/sEbz7EvS37kFYXOyTyfzsYH3eqC?= =?us-ascii?Q?JIpEdJNGDkz3iL8DwNOLwDqJvlNbFhTfNNCeampoBunPpUwFk5lQgKszG9uB?= =?us-ascii?Q?IaPS6JGCAxm6hIsKP1dMF5/LKQKoqUDgDORK6OL7QBdYAqSyDS42WAXda7RL?= =?us-ascii?Q?CDTPEXFDMsNGzavLSAGA2oQeXMgtl3XHOR2cbM1I/sLvgFKRBb1WZrEvIGmb?= =?us-ascii?Q?T5/UdHbH+gv79fpCg11JDwHG4nXneTov2rpN5/pqrb3K2NANxYj+waHoUBcj?= =?us-ascii?Q?aof7l/Apb8S9N/KpRkRFhRgabZwWfSteNJ1vxFJ/zN2?= X-Microsoft-Antispam-Message-Info: /5dFJSL8NGFnSr9ceragLwhFMGKEggpFJ3uC/UPhax+NyhQY/OeJHCI94hfzzTLQsPvJIN6wj+m+I8LKZUZ/TGxJy0/IHPDUSP9vxD0WaiAbyIT4M4W2av5gGYPI4qwf3GB7OXfHBgcw5lJYouAK1UalP8l9eYE5ASJKef6jyC/jbzNyrtgdhuojJwxedRkB X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB2456; 6:/CYFGn3r/jDsymN9ImJ8LjAcMyQNMHT1esn0hSNLXfWTEHb3xtms5XS0EoAKlT8ZtFiz08OsQ5BH4GF7mefUf8AaoJtxdn1VM7d15mMG8HS5TYD85NDHDloHy3n52m9hQOkeI+6QXhViJ3p+JPkjpAlir1mWGg5i0Zmvnuv+eCEpAMXyDVMxm9JYmHDpozah8ciq0gFgk1UyonlbVfG/jOOs5vRTpzuOk7P+CdYa7E3EHthXr2ETVtwfF2UN0cfvCnvKpKMCg+lC1ZLoP2jyjNRnrZTnZbxFTlURc0+40oc1QLl5EjFD13G9qkk/RKEwTyPfUxRoy6hoFHF4+Z5ZSntjiAQYkq/0U7R53DkEksvHV7Kysx2M53PCBHyvI5vfJpZtBlzvpIGwzvpeIrVW7cUvFVknFP3SWrm7jUw5yqPcw14LIpO99iPUGOLAJ9IsckahFzEP46ny9eZhXk4Q0w==; 5:cGe21JlJjPRPzM8maX0/GdU/EKhChIfe2x61Rxkom0kL+18km7lz5VMoKHyZO7kEy/Rc5RWa0Ph1BEIkSydUgh+4oQHw2gfOUacC0hpnf2fT+40x6t0VTFKHt5zIlLfkQHCigy3rHLd0NQclbS9gWPMYJK9ZYC1WJdIQLO1GUyU=; 24:xIzuQrOoHokEC/iFmfSc3V+FAavzIHC9JmSjMkOfvx3XBt/MEWuIN15dSPN8zxVqi5bqxfGWd5WNmC8sf+/Ekb5dbEvid1UUpyyXe31/eqU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB2456; 7:56uROxnpqmR2DIQsisP5ySAlFinFAY06nfYVscR7w9KKBBE+R9qJBZJIhJp0xBstPyFDAeDAsZK4cILzK/BVmvOdMhvxmgwcvh+e3yprnQtKpIwzfHXrqp00FPXSaCFXadQlydwO6LhIXMNCrkyqKVIU8cwsfYt1XwT9rfoKmzaTWYSlaEMNunIHFB2WFqz3WoeoVLzkk8PgvgRF8eqPnYJlH4ehY6flVzyJ1Q54lnnJrW/srExO8nzpOKYQrKTp; 20:zK2M5hGAeuWcWYMSltuZDGd/CxRDzuyep2uZmfu48NoAlhmuPW4Qd94CvfuP7WQ1H82GjtDiGKy9kadK9JYGYt90viRXDQSGX+V5BGVTCU4BHk+JlJC665CP3kQw1bBulVd/a4gZptgbd7Q7Ffa1IrPKPRKEWK0L2njSrlqquUGnTXayc1Y8A+/g8oykQhrv/olBybcph0n8nLpls+zeENF9wuck+R58Jcn9aO//GLAzeZeIdGJMJTzPkXAhqDj5 X-MS-Office365-Filtering-Correlation-Id: 89153301-e597-4c75-1f83-08d5cbd60a02 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2018 17:50:49.0394 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 89153301-e597-4c75-1f83-08d5cbd60a02 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB2456 X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 207 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 06 Jun 2018 17:50:57 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 06 Jun 2018 17:50:57 +0000 (UTC) for IP:'104.47.42.63' DOMAIN:'mail-by2nam03on0063.outbound.protection.outlook.com' HELO:'NAM03-BY2-obe.outbound.protection.outlook.com' FROM:'brijesh.singh@amd.com' RCPT:'' X-RedHat-Spam-Score: -0.021 (DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, T_DKIMWL_WL_MED) 104.47.42.63 mail-by2nam03on0063.outbound.protection.outlook.com 104.47.42.63 mail-by2nam03on0063.outbound.protection.outlook.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.38 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.26 X-loop: libvir-list@redhat.com Cc: Tom Lendacky , Jon Grimm , Brijesh Singh , Borislav Petkov Subject: [libvirt] [PATCH v8 01/11] qemu: provide support to query the SEV capability X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Wed, 06 Jun 2018 17:51:06 +0000 (UTC) X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" QEMU version >=3D 2.12 provides support for launching an encrypted VMs on AMD x86 platform using Secure Encrypted Virtualization (SEV) feature. This patch adds support to query the SEV capability from the qemu. Signed-off-by: Brijesh Singh Reviewed-by: Erik Skultety --- src/conf/domain_capabilities.c | 12 ++++ src/conf/domain_capabilities.h | 16 +++++ src/libvirt_private.syms | 2 +- src/qemu/qemu_capabilities.c | 35 ++++++++++ src/qemu/qemu_capabilities.h | 2 +- src/qemu/qemu_capspriv.h | 4 ++ src/qemu/qemu_monitor.c | 10 +++ src/qemu/qemu_monitor.h | 3 + src/qemu/qemu_monitor_json.c | 79 ++++++++++++++++++= ++++ src/qemu/qemu_monitor_json.h | 3 + .../caps_2.12.0.x86_64.replies | 10 +++ tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml | 3 +- 12 files changed, 176 insertions(+), 3 deletions(-) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index c20358e..3589777 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -67,6 +67,18 @@ virDomainCapsStringValuesFree(virDomainCapsStringValuesP= tr values) } =20 =20 +void +virSEVCapabilitiesFree(virSEVCapability *cap) +{ + if (!cap) + return; + + VIR_FREE(cap->pdh); + VIR_FREE(cap->cert_chain); + VIR_FREE(cap); +} + + static void virDomainCapsDispose(void *obj) { diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index b0eb4aa..30b3272 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -137,6 +137,22 @@ struct _virDomainCapsCPU { virDomainCapsCPUModelsPtr custom; }; =20 +/* + * SEV capabilities + */ +typedef struct _virSEVCapability virSEVCapability; +typedef virSEVCapability *virSEVCapabilityPtr; +struct _virSEVCapability { + char *pdh; + char *cert_chain; + unsigned int cbitpos; + unsigned int reduced_phys_bits; +}; + +void +virSEVCapabilitiesFree(virSEVCapability *capabilities); + + struct _virDomainCaps { virObjectLockable parent; =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 5540391..59a2efd 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -185,7 +185,7 @@ virDomainCapsEnumClear; virDomainCapsEnumSet; virDomainCapsFormat; virDomainCapsNew; - +virSEVCapabilitiesFree; =20 # conf/domain_conf.h virBlkioDeviceArrayClear; diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index b20149b..70cf1e5 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -494,6 +494,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, /* 305 */ "vhost-vsock", "chardev-fd-pass", + "sev-guest", ); =20 =20 @@ -560,6 +561,8 @@ struct _virQEMUCaps { size_t ngicCapabilities; virGICCapability *gicCapabilities; =20 + virSEVCapability *sevCapabilities; + virQEMUCapsHostCPUData kvmCPU; virQEMUCapsHostCPUData tcgCPU; }; @@ -1131,6 +1134,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[= ] =3D { { "hda-output", QEMU_CAPS_HDA_OUTPUT }, { "vmgenid", QEMU_CAPS_DEVICE_VMGENID }, { "vhost-vsock-device", QEMU_CAPS_DEVICE_VHOST_VSOCK }, + { "sev-guest", QEMU_CAPS_SEV_GUEST }, }; =20 static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[]= =3D { @@ -2067,6 +2071,16 @@ virQEMUCapsSetGICCapabilities(virQEMUCapsPtr qemuCap= s, } =20 =20 +void +virQEMUCapsSetSEVCapabilities(virQEMUCapsPtr qemuCaps, + virSEVCapability *capabilities) +{ + virSEVCapabilitiesFree(qemuCaps->sevCapabilities); + + qemuCaps->sevCapabilities =3D capabilities; +} + + static int virQEMUCapsProbeQMPCommands(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon) @@ -2650,6 +2664,21 @@ virQEMUCapsProbeQMPGICCapabilities(virQEMUCapsPtr qe= muCaps, } =20 =20 +static int +virQEMUCapsProbeQMPSEVCapabilities(virQEMUCapsPtr qemuCaps, + qemuMonitorPtr mon) +{ + virSEVCapability *caps =3D NULL; + + if (qemuMonitorGetSEVCapabilities(mon, &caps) < 0) + return -1; + + virQEMUCapsSetSEVCapabilities(qemuCaps, caps); + + return 0; +} + + bool virQEMUCapsCPUFilterFeatures(const char *name, void *opaque) @@ -4049,6 +4078,12 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, virQEMUCapsClear(qemuCaps, QEMU_CAPS_DEVICE_VFIO_CCW); } =20 + /* Probe for SEV capabilities */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SEV_GUEST)) { + if (virQEMUCapsProbeQMPSEVCapabilities(qemuCaps, mon) < 0) + virQEMUCapsClear(qemuCaps, QEMU_CAPS_SEV_GUEST); + } + ret =3D 0; cleanup: return ret; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index f60dfb1..7390271 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -478,6 +478,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ /* 305 */ QEMU_CAPS_DEVICE_VHOST_VSOCK, /* -device vhost-vsock-* */ QEMU_CAPS_CHARDEV_FD_PASS, /* Passing pre-opened FDs for chardevs */ + QEMU_CAPS_SEV_GUEST, /* -object sev-guest,... */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; @@ -615,5 +616,4 @@ bool virQEMUCapsGuestIsNative(virArch host, =20 bool virQEMUCapsCPUFilterFeatures(const char *name, void *opaque); - #endif /* __QEMU_CAPABILITIES_H__*/ diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h index 989d183..29d7639 100644 --- a/src/qemu/qemu_capspriv.h +++ b/src/qemu/qemu_capspriv.h @@ -90,6 +90,10 @@ virQEMUCapsSetGICCapabilities(virQEMUCapsPtr qemuCaps, virGICCapability *capabilities, size_t ncapabilities); =20 +void +virQEMUCapsSetSEVCapabilities(virQEMUCapsPtr qemuCaps, + virSEVCapability *capabilities); + int virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon, diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 215135a..fd6bce9 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3850,6 +3850,16 @@ qemuMonitorGetGICCapabilities(qemuMonitorPtr mon, =20 =20 int +qemuMonitorGetSEVCapabilities(qemuMonitorPtr mon, + virSEVCapability **capabilities) +{ + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONGetSEVCapabilities(mon, capabilities); +} + + +int qemuMonitorNBDServerStart(qemuMonitorPtr mon, const char *host, unsigned int port, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 4384372..75d5d98 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -711,6 +711,9 @@ int qemuMonitorSetMigrationCapabilities(qemuMonitorPtr = mon, int qemuMonitorGetGICCapabilities(qemuMonitorPtr mon, virGICCapability **capabilities); =20 +int qemuMonitorGetSEVCapabilities(qemuMonitorPtr mon, + virSEVCapability **capabilities); + typedef enum { QEMU_MONITOR_MIGRATE_BACKGROUND =3D 1 << 0, QEMU_MONITOR_MIGRATE_NON_SHARED_DISK =3D 1 << 1, /* migration with non-= shared storage with full disk copy */ diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index e8a46d2..ba0da9a 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6401,6 +6401,85 @@ qemuMonitorJSONGetGICCapabilities(qemuMonitorPtr mon, return ret; } =20 + +int +qemuMonitorJSONGetSEVCapabilities(qemuMonitorPtr mon, + virSEVCapability **capabilities) +{ + int ret =3D -1; + virJSONValuePtr cmd; + virJSONValuePtr reply =3D NULL; + virJSONValuePtr caps; + virSEVCapability *capability =3D NULL; + const char *pdh =3D NULL, *cert_chain =3D NULL; + unsigned int cbitpos, reduced_phys_bits; + + *capabilities =3D NULL; + + if (!(cmd =3D qemuMonitorJSONMakeCommand("query-sev-capabilities", + NULL))) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + goto cleanup; + + + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + goto cleanup; + + caps =3D virJSONValueObjectGetObject(reply, "return"); + + if (virJSONValueObjectGetNumberUint(caps, "cbitpos", &cbitpos) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-sev-capabilities reply was missing" + " 'cbitpos' field")); + goto cleanup; + } + + if (virJSONValueObjectGetNumberUint(caps, "reduced-phys-bits", + &reduced_phys_bits) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-sev-capabilities reply was missing" + " 'reduced-phys-bits' field")); + goto cleanup; + } + + if (!(pdh =3D virJSONValueObjectGetString(caps, "pdh"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-sev-capabilities reply was missing" + " 'pdh' field")); + goto cleanup; + } + + if (!(cert_chain =3D virJSONValueObjectGetString(caps, "cert-chain")))= { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-sev-capabilities reply was missing" + " 'cert-chain' field")); + goto cleanup; + } + + if (VIR_ALLOC(capability) < 0) + goto cleanup; + + if (VIR_STRDUP(capability->pdh, pdh) < 0) + goto cleanup; + + if (VIR_STRDUP(capability->cert_chain, cert_chain) < 0) + goto cleanup; + + capability->cbitpos =3D cbitpos; + capability->reduced_phys_bits =3D reduced_phys_bits; + VIR_STEAL_PTR(*capabilities, capability); + ret =3D 0; + + cleanup: + virSEVCapabilitiesFree(capability); + virJSONValueFree(cmd); + virJSONValueFree(reply); + + return ret; +} + static virJSONValuePtr qemuMonitorJSONBuildInetSocketAddress(const char *host, const char *port) diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 2ae0faa..4c10574 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -152,6 +152,9 @@ int qemuMonitorJSONSetMigrationCapabilities(qemuMonitor= Ptr mon, int qemuMonitorJSONGetGICCapabilities(qemuMonitorPtr mon, virGICCapability **capabilities); =20 +int qemuMonitorJSONGetSEVCapabilities(qemuMonitorPtr mon, + virSEVCapability **capabilities); + int qemuMonitorJSONMigrate(qemuMonitorPtr mon, unsigned int flags, const char *uri); diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies b/tests/= qemucapabilitiesdata/caps_2.12.0.x86_64.replies index c40046b..ace3537 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies @@ -18996,6 +18996,16 @@ } =20 { + "return" : { + "reduced-phys-bits": 1, + "cbitpos": 47, + "cert-chain": "AQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAA", + "pdh": "AQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAO= AAA" + }, + "id": "libvirt-52" +} + +{ "return": { }, "id": "libvirt-1" diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemu= capabilitiesdata/caps_2.12.0.x86_64.xml index 038c92c..eb757cc 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml @@ -207,9 +207,10 @@ + 2011090 0 - 390813 + 391059 v2.12.0-rc0 x86_64 --=20 2.7.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list