From nobody Wed May 14 16:08:34 2025 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 1528221629189306.573415782727; Tue, 5 Jun 2018 11:00:29 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8191F316B76D; Tue, 5 Jun 2018 18:00:27 +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 4E7A78E185; Tue, 5 Jun 2018 18:00:27 +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 D8C484CA85; Tue, 5 Jun 2018 18:00:26 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w55I0AcY029052 for ; Tue, 5 Jun 2018 14:00:10 -0400 Received: by smtp.corp.redhat.com (Postfix) id CD6F7600C9; Tue, 5 Jun 2018 18:00:10 +0000 (UTC) Received: from mx1.redhat.com (ext-mx03.extmail.prod.ext.phx2.redhat.com [10.5.110.27]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B845B60170 for ; Tue, 5 Jun 2018 18:00:03 +0000 (UTC) Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0085.outbound.protection.outlook.com [104.47.34.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5932878ED4 for ; Tue, 5 Jun 2018 18:00:01 +0000 (UTC) Received: from wsp141597wss.amd.com (165.204.78.1) by BL0PR12MB2452.namprd12.prod.outlook.com (2603:10b6:207:4e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.820.11; Tue, 5 Jun 2018 17:59:52 +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=y1bNsofhCY3EYD9zmoswS9LE2pe2aQilE3zTADBkXo4=; b=wdSCU8wU+Gnp4G0Q2piOGwCLENB2GpqHbf1IfI5BoQ7B7zJRV81Wx9vfYlnWM5vDEXQXKaDaFYOYsi5un/tEt5scHYb5dKbCr/zrSZ8oJ6hqaKZGoxjxYa5x/+7TZ9MN6x6RVL3TuMuFTNFOKvXw5zK6UQg6gee0Xf45V19FgNE= From: Brijesh Singh To: libvir-list@redhat.com Date: Tue, 5 Jun 2018 12:59:23 -0500 Message-Id: <20180605175932.62322-2-brijesh.singh@amd.com> In-Reply-To: <20180605175932.62322-1-brijesh.singh@amd.com> References: <20180605175932.62322-1-brijesh.singh@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: SN4PR0501CA0018.namprd05.prod.outlook.com (2603:10b6:803:40::31) To BL0PR12MB2452.namprd12.prod.outlook.com (2603:10b6:207:4e::11) 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:BL0PR12MB2452; X-Microsoft-Exchange-Diagnostics: 1; BL0PR12MB2452; 3:O+28lejnPNdofQ9a8TkKozCpDsj/S9bjVY+5T68XF9Qfr9YT8VcINwXpZq5wzWxMs+q4CssYIEdY3ZSiWAaK2ej39RnMfRix11SREzTl3MgzDr0H6WwRmk/EqgRJ8APelfuIJJ891afhswohcG3c0m1V2p9Vd6DRD4GG6v9vkir5uF72sfpwSFOwSQcEdpfR6dfAcIGi/71rYERDy4jHHcBVAamRhNy/RjXGt2X+f7gpiqW7bgAxdX3y9DikqVHf; 25:aic2qHuy+N3ciFveOMnqo6vrpbJM6s8et9jMh7nkP1zATRWNPklHTf5v1c5sruj4qqPYNOBiKp/qU5/W6nUJGsaafXz7BMwBwZB6dJ89LWJN3OyWYix5CGfpFEhf1LWLWUHP/c6eCJ7feDeZ5meUZFmeawyDWTf1P8b9uRt8O1e3zmLE3NxOZX1pDmdzDGOVRvgwApl0gfwISHLu5++AJ6hicxnlYNc7K1gnF3W7R2EeSVMKpibDnFfW1e2X3ZMTuxujEjhsrAu3S8hT1s7FAmJqJlul37x+YpiSJf1IrLFlxZ8y7CvbE57ZqVDuq1p5LZFIo2Hn/S60W4Ausezf6w==; 31:Qdd7sa9mrmzB/IG3HnJ12HPAdGTaZ0n10tgrNLjOy9Qc+jwwNSVFuO48sLo8ruSKvOKh4ovix6PGkA56W16ZRqsFnV52iXf9OnZEw8oqenDDztyRCtKUZe+HDeW/sokf/PBRYSdgsNgTEK6CQQLV5cZqcvUpvhADG+zeFa1RL+gjx+leJdPjx+E90SRvdHwr8YqEom+Kn9tqAQpsouXN1MhycLM1r+kdDfMweuq7WUU= X-MS-TrafficTypeDiagnostic: BL0PR12MB2452: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; X-Microsoft-Exchange-Diagnostics: 1; BL0PR12MB2452; 20:JJ5UteP2V7OnuMsAmnrorFdwEWZ/k+kT7++gdOJkgFyPLcGHPOBaiYK4RKlhGT5iWfYmJ0wLlqcdLf/3779JBRQn7I0BmhiQj0JyOrQ73Y5PRPqI3o/AaxKIrsviZ7ItS4D+tMhYZnBuQlUn8b+8VRrTPJWx3E3nyal8lbCH0yR05jKbmXCuaWlPY+xeTKMo2XNomEpMzLLuat+7XUIhhHvaYIk6C+SR5Ngplqkv89B5ww7K+A1Sga+Nk0NvYG+lCBPDSQJeOuuIP+XXg0vdmje8UO/oIwcQvfrMRm+5dWu7npWJ5qtHmoUtR7q0oNic6/Khmoc4rfWxXEcJ/IpUsgIGppW5jmB8I9GgcfYPAI1WWU/8M2TVOPMuXsI9v7slnAV7WjtGlIcEvqYeknSIOQyXePg2AZNo4bDBFgUSumqZgEQdT9Qyo4Om+/0knVUFyti+mrAUwKBxYOBOAQ4VlSAsKFk5QjCnqjx+sfYOOHnf/tODnkaCyQeVwJ5m55gU; 4:KREIW5LjgCzzfxnaJqqp0pyQICX6qUWCmTM0605Z4PsJ79cmKm3avL0NAF4Oib46B3YB4bLpnsfc0HUDv8CfgeLZE+DMQTzYn7ldAlX07Gl5nw/udpJcoBaTKqDRqUFFVi7/MViWlfBInsYLOqavGBLuwzJB109eGI6pvB0zKciVGpARBNpwLiaa363+d2dd6gzM7+WI9Ozwq6DgMce2f1Jyux6bemzMRt/mhILmUxQgK9qeCWinDv6MAhUhuf962WrEqULz7eS6sA649A5M8WmyomR5AMvyn1WBPwsQVNoBRGJSoChIZDfttZNvHU73 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)(5005006)(8121501046)(3002001)(3231254)(944501410)(52105095)(93006095)(93001095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(6072148)(201708071742011)(7699016); SRVR:BL0PR12MB2452; BCL:0; PCL:0; RULEID:; SRVR:BL0PR12MB2452; X-Forefront-PRVS: 0694C54398 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(366004)(396003)(346002)(39860400002)(376002)(199004)(189003)(6916009)(1076002)(59450400001)(7696005)(2361001)(386003)(106356001)(2906002)(52116002)(53416004)(4326008)(68736007)(105586002)(8676002)(81156014)(76176011)(6486002)(2351001)(25786009)(81166006)(54906003)(36756003)(6116002)(3846002)(97736004)(47776003)(50466002)(6666003)(7736002)(44832011)(305945005)(26005)(51416003)(956004)(446003)(476003)(50226002)(86362001)(486006)(2616005)(575784001)(16586007)(478600001)(8936002)(66066001)(11346002)(53936002)(186003)(16526019)(5660300001)(316002)(48376002); DIR:OUT; SFP:1101; SCL:1; SRVR:BL0PR12MB2452; 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; BL0PR12MB2452; 23:Cr/hv8+hQBmfPoqZlNeDCR2XVBiAUmk650I6iKyj9?= =?us-ascii?Q?Uv6EwkPYPFPTjeVpBWaUVusatH7wKQPvjuf9W7j9OnlPYl03BoX/RmP4h0Wf?= =?us-ascii?Q?opiPuRgYIgPJnxDwqsLu9RJ80B9ZbO7EfJ4c6x3B3V6nT2tOVud8Sx2k0+Ul?= =?us-ascii?Q?fPL1zmgT7DjZ+2bYYUXXYPbDgYBJEmasXQzCkcQx37OB/tUJjFe1fk/n/31M?= =?us-ascii?Q?TnZ3w19jZq+HRNk0WGVRlINwXsVs2RgvHKsqZs7xM6J7HqaQ/AHLUgs5AO3r?= =?us-ascii?Q?xWEW2iMaRVd7id9WGtAWArWW5oy60JkFwfC1SfLm6oYrIEXmv0eIehap86Hp?= =?us-ascii?Q?/4bXJwV6f58i4aEG2nLKfVDfDJzYJug38tVZNfcdHLpvEM1f+p6B2zFTsMoJ?= =?us-ascii?Q?RCXMYZXNmJkZc8bmwLoHPcr3jewGXaNZUatGwk8ndcKsteSNd+TOYwBTAuX4?= =?us-ascii?Q?BLJi937kuKGAFgocMzxb4DJIVfWlJvzid/DvjkP21fQkJZG5NjkoB9BGMwmo?= =?us-ascii?Q?mPlC7rGpksD1gnkFIZ4wlpWgENrIHQz6tfFdqCDWhvKx9rh1CN9QHyJNPKNS?= =?us-ascii?Q?PFgXL5jnarqg0SgstJlePUPkYQ5BKvoMlwi9RNciAaONvlFDf+xcyLOpjq6h?= =?us-ascii?Q?fQa+hbAVatNkLlmqtwEyNH8K2DWLYwBS+xb8SDROm0E5Ba2zV8Nf4O+tDPw5?= =?us-ascii?Q?gbB5cUY8nwnO/IKlBz920IJgWavWGCYJW/0nOc7XgScXUaxCcHmLIxQvodkc?= =?us-ascii?Q?+yUDlPFN42uohaitDXts8H9fuzKwy+RPER+szmvIxEiSCBjvS2tBLvJAL6nw?= =?us-ascii?Q?hP7IS0mr4Xqm9kKyMK4433v/Z8vLVv3U9dPYqL1QS08H4Y3Vw/9XI4tRNwJT?= =?us-ascii?Q?Fh+9mBztL8zs6bDHJinhRHjtbKPkov0S45PIFK1Aj2l+EKjJokkZ+fa0Mkk4?= =?us-ascii?Q?M9pt1jJIi9vIBHqRjMibmOcmAgioJcBIUERkp9CLKoZmd9VAWNxbI580uL7W?= =?us-ascii?Q?kjfVcy924rlwX5YGrchkEz9PMePuMfndhKYCoJtcoVr01gigrzUx+X5nEtlD?= =?us-ascii?Q?U9huSEC2rPh0ATc50yQHinpYuQR4VwqnwOa+2uMNIEYrufJf3WbhcjsOcjX6?= =?us-ascii?Q?Jcozo/Ftv6y4/GgdSyY0UdVzX+682xGBEa+8zZmwnJB0WyhThpwxDWpel2jT?= =?us-ascii?Q?4rL37HebELRLcKRynT39dJWhGWQb7JgjyKA/AWasdyqh1xxvJ0g30QpyzsiL?= =?us-ascii?Q?42KKhhrdax3ZULonAa4CBesa7HyolteMCqAGSstM07NAYpomr48H+jmoliVl?= =?us-ascii?Q?cePoMlcCJsJ6j8DrnfwER3BjD6WPOeRn14f60Ov8gMM?= X-Microsoft-Antispam-Message-Info: lsD49oE2sVCAlpL9GPTF5pVCFCl3fkNpFXgDAQ8GaLu2omxG+QMaakS/MmZdXzh4CedL8S88odUo995TX5p7SfA+s9ree+c/n6Mxme72NeCHe8CrhDpyh/aN05fyxetgeKqIl05Bg0+rzmfcr1Tnlnhex64Mdc/DqKHQl8Zj0mpa7beYp+Cbv0/Fj+gnkuhc X-Microsoft-Exchange-Diagnostics: 1; BL0PR12MB2452; 6:8Dzoc+fc5JT7wFodll9GgcTc63XoUd+sR89REQGSYgZTpPyzjMdO4iuNe42SaQJL6CWi2TgmtzIYNFtP0XpoU8RLqr8ImurWD76GgI4MIasvCof95l+CcYLNbuHQjpSZi4zToSGxrul7se3sK0oKGevgRf/XoRkHFzH9Srvm2IJ9A/uyXpYb7rNhvqctTZCiifs4Sc2YfkDR1OOU88DNVFQblzIG7umRh+yVFMK256ZS+0HhWrvbH9T43+IXGasYQxbp94uwEDpq73wzwTSPcO1c16XRUVeXKV1JrVEpnx2P3OlW1O6v92355iA1fkJalp1WUjKBuKUTICSgGJCrtxayYLYzot3QoHWyRmTn88x8Bg3/RVer8BM8Dlz/JS3I4O+PZ3cVdkAEZMhErJ8ZFaFyxaV/1saBP/oWP8uNckyrQr1DBlZyCg4cOmUcymsPGyvr/ecLUGQUcrhWPdn9Mg==; 5:h8mnS7ZayHhJpGUjeaiD4FmlDNBy3RjlOthWDg/AhqZz1IUhOaTQENJEhDBU5koi6w809WmHDEMr0/3uzS5j352C61L54GjAaZ89QOazXENYU5ryFKL/hyLtBr4mLxdiZ6JH03ouGAKPuG8bUEM8pj0dlgJNr2vOoEhU/El3200=; 24:2KxwRsai/8+h1o31IjCIfOatpJVcf/enPGEX5o7VFnFPRJNIWptDa2iBSXabq3ZePV3R6/XY098JdkBJOIECIixrV6NIOCUkp6dyDHK4RWI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BL0PR12MB2452; 7:6nEcHd+/GI3bV9MLeBT+8GGXHL+ekc5o75BhzJBCvsRjiNrBosP7oTjxe1c7OiuZ6yUnY4+gBWSv26Xc6lZddsa9461Cfb3Wjc83Y/nZoPRDYPVOOp/3Q/u6HkGJ6cgvwXfDZrDGpz9WUkxPM44TvhMyFXPipS25dKLTCAZ56MTsDXJ9Psqww4d9kFsyl+rU/KfzdIh67jAqvrqV+OEQy0E7vsKY7eEMVmj5s9Q6XAzVRS6L4q9yYJ/Jm51pw57U; 20:24UBPoKG3LMgoaO47Q7Yahge0oN/wzzpdEwjdySm/hpmE6xq8BGQlvYndKxBzT7jN2qjFKyeY2iq8Y3jyZp2Z3h5aoDJEYojEZUvkVBAaZxe4sGQffS4Mil/8ZGN4c6Ws1WSSslO/cmzjV6jDsiWT6hoLWfQH70xSntB+iUU13BXgQyahuQuuJFVawknK5mmtpFEqh0CtWUGjXvCoCT9vLcdKEJngq9TKPh7+v5bvzhake8JDS6iwkSKS9b4sTVX X-MS-Office365-Filtering-Correlation-Id: 36ce0182-bd4c-41e0-5c6a-08d5cb0e23a6 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2018 17:59:52.6365 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 36ce0182-bd4c-41e0-5c6a-08d5cb0e23a6 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB2452 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.27]); Tue, 05 Jun 2018 18:00:01 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 05 Jun 2018 18:00:01 +0000 (UTC) for IP:'104.47.34.85' DOMAIN:'mail-by2nam01on0085.outbound.protection.outlook.com' HELO:'NAM01-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.34.85 mail-by2nam01on0085.outbound.protection.outlook.com 104.47.34.85 mail-by2nam01on0085.outbound.protection.outlook.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.27 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Cc: Tom Lendacky , Jon Grimm , Brijesh Singh , Borislav Petkov Subject: [libvirt] [PATCH v7 1/9] 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.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.41]); Tue, 05 Jun 2018 18:00:28 +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 --- 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 26969ed..2c3665d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -493,6 +493,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, =20 /* 305 */ "vhost-vsock", + "sev-guest", ); =20 =20 @@ -559,6 +560,8 @@ struct _virQEMUCaps { size_t ngicCapabilities; virGICCapability *gicCapabilities; =20 + virSEVCapability *sevCapabilities; + virQEMUCapsHostCPUData kvmCPU; virQEMUCapsHostCPUData tcgCPU; }; @@ -1130,6 +1133,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 { @@ -2066,6 +2070,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) @@ -2648,6 +2662,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) @@ -4043,6 +4072,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 f2aecef..ad25e6c 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -477,6 +477,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ =20 /* 305 */ QEMU_CAPS_DEVICE_VHOST_VSOCK, /* -device vhost-vsock-* */ + QEMU_CAPS_SEV_GUEST, /* -object sev-guest,... */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; @@ -614,5 +615,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 fea039e..32aeefa 100644 --- a/src/qemu/qemu_capspriv.h +++ b/src/qemu/qemu_capspriv.h @@ -89,6 +89,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 b0c63c6..d1e4d74 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3841,6 +3841,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 9894eba..04abd92 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -710,6 +710,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 42d7b9c..b50f719 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 964b9e8..716e299 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml @@ -206,9 +206,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