From nobody Wed May 14 15:52:40 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 1522678797854991.3081207628409; Mon, 2 Apr 2018 07:19:57 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 846EA80471; Mon, 2 Apr 2018 14:19:56 +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 1EEEB60BE3; Mon, 2 Apr 2018 14:19:56 +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 97E844CA97; Mon, 2 Apr 2018 14:19:55 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w32EJtqC024211 for ; Mon, 2 Apr 2018 10:19:55 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3BF355F7F7; Mon, 2 Apr 2018 14:19:55 +0000 (UTC) Received: from mx1.redhat.com (ext-mx02.extmail.prod.ext.phx2.redhat.com [10.5.110.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0B888608EF; Mon, 2 Apr 2018 14:19:53 +0000 (UTC) Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0087.outbound.protection.outlook.com [104.47.32.87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 99B2A883AB; Mon, 2 Apr 2018 14:19:51 +0000 (UTC) Received: from wsp141597wss.amd.com (165.204.78.1) by BY2PR12MB0145.namprd12.prod.outlook.com (2a01:111:e400:585a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.631.10; Mon, 2 Apr 2018 14:19:45 +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; bh=yLpu265qvoxD6T+rFwb/nnNJyOAZRDLfXWMM13Dm5a4=; b=jKGWaAgG5pcpIs5bPfue4nd+izp+r7dDc2b8OqrI9KFHgyLlYZ4PECdNABnf7ExCjJCGMLVzWZUU9cSFuozGtR3A0WEKPVxtNAqetPhlF8Payj6Y3kgTFbQ+VY9SHrkRhbPC1snlTc/HOcp6Bkl7eo4yKBAenKb9B5fSVMMhKYA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; From: Brijesh Singh To: libvir-list@redhat.com Date: Mon, 2 Apr 2018 09:18:47 -0500 Message-Id: <20180402141856.4596-2-brijesh.singh@amd.com> In-Reply-To: <20180402141856.4596-1-brijesh.singh@amd.com> References: <20180402141856.4596-1-brijesh.singh@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: SN4PR0501CA0001.namprd05.prod.outlook.com (2603:10b6:803:40::14) To BY2PR12MB0145.namprd12.prod.outlook.com (2a01:111:e400:585a::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: c2de78e6-096a-40af-f1d2-08d598a4c957 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:BY2PR12MB0145; X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 3:y3dcYFnulHcoIBeVYd503/55TifS5HNjiZOOPYbl5Z1CYyZIcwb4sfWakMTi6UQz92aPUG3HwzagotBxTF/vV6vzzqV2fsUW+ZouMHxYmYDLH7lGXl1k7FepDkEIYhsUwPc8AUAfUvrF0R8cDgvIn06pdqEGKl4sMBytHuF5Y13PEXaB6ao9sjKX718ynKAs85Uipd8muowDbFzGOIk68LMsZekSpQyJ2txG6WtFSo7MT4pePTKGhmLydBkpYrYz; 25:6gu4luaQwVBT5ViKLF9UH6ytkyYmW/8WgU4fKxfowlp+K3PFLb77dX3o/lwNOLTiTfTLXvrF2hyqcbB5gY5gS1DeXDtkHRu2VLFvhgBIjshVFcFfSjwzp1mQwq3VmDqPxoK86InJ9p2K4PWC4ETGxwci6y89p6SdzDRuUfO6mD1kts4RpoBBg7tTjpeLdjWieG0EOYKTiJTR12htdsOInxw4jq5st+OF5qXjV38P7iorzEFfyiEUQ3QPSDOImGqPDBluxiMdGljDG64V8SWOh3YwYBNEwTs8r9TNdS0KtUR92WQxzUtXfnkqk9iNozImY5vk+u+pHG4kQ4b6t2Iwxg==; 31:vJMiT3Cd2I0Vd3L5UYNBu4gelHpma7ZTInqvg1ncVcUYutp9M1OqYVDtKlAiZWm7l33PPl40uCuigvhqdXzP05Dz5lT0ewmoBv/x810a57tulAzsltiMvXepX9A8xbQt4QnlL72ArrteHwElnV2gSuawrGuSy/XmD5gsZ+nZWrvYPUdDW8jXBXtwEOWYU65wwGNe5AH6LiHqYniF2iJe5qJ5+2FOjT+R/Lg7XTrPigw= X-MS-TrafficTypeDiagnostic: BY2PR12MB0145: X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 20:sEAEQ6l+7Y/vD/GUtrJiaRDL6R/owDqdErdyD6jFQb5W8WiBya2zXnyX3p4H4MTSj45ShTjI0ezPrCR7hVQgbe6HzeyiJG6D5YYX5SXnbguMeSqkTN9UcN9V4ATqdUBeNc7MoZTAV9vv0WrevWn5BYWGiFjq907dDENvp9QmJOnI+vgzym0kwrqzpcF+D5fsiLn7RzdQ342ah8Duvx58C1wNowom1k8CCh16N3OCxdtA7Jw/2QD+XOgxJ4OQoaM0JDXXiViGYfyURlisKA/bDCrtjsMB+jxBBQ0g8Upsrf6XSTj54ISLKQDfhE4n+TharL4FjQizisbEe3U6AM4ICGgf0JSXT5xLGgA1DguatkwnKgxqsQUykQx7wG833tKyMP7QNBnoPp67PlCrgdcqxgMl2Y10NFcPS1OJ5kSD8JbcbGz9EuvupXMKKDd7RihOmz5OOnF+psM0YZ1vO9RqigEtACfYqm/w7GtlOVHULOABUIg2rXx9ZDmClqTzej8l; 4:2V/vtkAgWrpxnsRAiGQrEvHjbvN2wiL90d1PrPH6uEuG9eVa+O85tTBigz5gT6eL1ZEQN8TZTwWtkeMxWnhcjnio093OfH/d5sdu9Rc3+7tTH0hNn+8lLrK83T6kmvyL0kMBlerFsuMtO3Z7K3huhjPECJp4loVHLJhCZe1MMWSSc4eIJmEh9PCzqGdoVki6AhzIdMVktlZICGa8mPm7tW3F+8cXgofQ1bPocISe6QIPFg6A5JTNeWJFVS1xcv5ctEyBpFDUgvxt6ROXo9oNr8L+3tiyaRj2mZP6sNonTIDu+toN9BX+FCcbbScGaaXl X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(3231221)(944501327)(52105095)(6055026)(6041310)(20161123564045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(6072148)(201708071742011); SRVR:BY2PR12MB0145; BCL:0; PCL:0; RULEID:; SRVR:BY2PR12MB0145; X-Forefront-PRVS: 0630013541 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(366004)(346002)(376002)(39860400002)(39380400002)(199004)(189003)(25786009)(956004)(486005)(6916009)(36756003)(81166006)(50226002)(186003)(2870700001)(23676004)(97736004)(54906003)(316002)(478600001)(26005)(1076002)(8676002)(6486002)(2351001)(50466002)(8936002)(16526019)(106356001)(47776003)(66066001)(53936002)(4326008)(81156014)(2616005)(2361001)(486005)(476003)(7736002)(446003)(53416004)(59450400001)(6116002)(11346002)(5660300001)(551544002)(68736007)(86362001)(76176011)(105586002)(7696005)(2906002)(52116002)(305945005)(3846002)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR12MB0145; 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: =?utf-8?B?MTtCWTJQUjEyTUIwMTQ1OzIzOmFRelZXMUFZdXVPVExMRDB0ak5Gbjkwdk9Q?= =?utf-8?B?Y2xLTThMeG9ndFNVblhZSTdWMDRGV2dDUW5TSGJiN3QvLzRacVI5UmhvaFVW?= =?utf-8?B?c3ZkVG5PdWtoeTJ1U3FHWFA1U2QySER0bWVtMUl2OFd2M2VqbWhSdlIzSlZn?= =?utf-8?B?OCtNejgxakNMR2x0WmxYNlE0elgwZWpFM1FpYlRrUVBlYWZjT2FIK2dkT2hs?= =?utf-8?B?a3lFK1lXQ2VLb2l0YkNxekcyNlNURUdTRlZDQ2NwZjdXbFg0dGtxRElIRGJB?= =?utf-8?B?S0t2R20rbU9zYzVNSjlLNm84UlNLOGY0MVgwTGZudzhTWGQ5SzRCa3k1c29D?= =?utf-8?B?NDl4ZUNTamVpaGRaWU5LRm9ZSG1VSlo1M205MGtkWVhjOHZTUWhyMnhPVWwv?= =?utf-8?B?b083d2dEWnlNVXZuUldzZVFOQUFjaUtnbmNFMW02aWlFZzRIcjRTRnhYYjR5?= =?utf-8?B?cFpUSFFSNzNUcWFjdmVtdmJBSmZhKzJ4REU2ck5lT1VhcUVua1hjZEgybjMv?= =?utf-8?B?WDRXWjVVWkYyTzVGTDNEYU5PYWFibXgxb0lXZmFIc05VQ2tTOWdMUFhIeWRN?= =?utf-8?B?MTVxZTVNc05nS1UzNkJWRG9ONnhlN0VKa2hSeDhjNUNpNW5iODhMWjdNL21s?= =?utf-8?B?WStJQ1hmOGJnWnJPYjNFdUNGQ2dJYjRmUnQwL0loQmY3aTY5Qkl4RldrcmNZ?= =?utf-8?B?S1pra20ydEhNaXRlRW5nV21rSDVyMVlTeC9hTVNwejdKUmRlTVVDdXVWejBF?= =?utf-8?B?Y01IRy9yWis5dDAyVzRXdUtQaWtoMWUyRGNuUTdoaVhDcENadWZEUHI5UFJP?= =?utf-8?B?SEM1cHJNV3MzRVVENVlPbHgvSFVTWmFKd3JMTEdDY0prZG9jRmVlSDFVY0Vl?= =?utf-8?B?MHlXZWd6blgzcEIrRlBCRWd1clpRTDNuckcvVkJ0bG0xWGM5ckpqRWd2MERm?= =?utf-8?B?K2VnUmxZdExOZlRFSDk3L2tCVDVycm4zNFlhdUc3c0dtcmVxY3N5dldGTThF?= =?utf-8?B?Nk15dVhSSXpLSDhJcXR4cWlaMWRHWUZFeEdCRXN5NnJEbXFzaVg5Y1RuWThu?= =?utf-8?B?QmZoNmUrMDdNd2FYUU1NNVJvYkcxY1h2WWVzaWlqWkhhYzI3MFN3NmFzaU1x?= =?utf-8?B?WHJ2NlFwKzA4ZlN3c1U4MVN5ZlhPd0UxMEtQREo1dWNJRjFqaGF3QmNGQzUr?= =?utf-8?B?VnZOYmNYemtveVo1TFcxMHRQU2J3UkpDSTZlcnFpbGZ3VzNzS3dFN1hXR2ov?= =?utf-8?B?OURqcTFZZ2E1ZGdKWG9RQlZWaVNlb0JSZmNEOCt4YzlBZGF6MmNXZnVZTjZT?= =?utf-8?B?U0pZQ2s0OGNpUmNCS1NpWlljN0Rzb3B0VzFYMllKNGJKSGxqWkdlNXJSc2px?= =?utf-8?B?STlUa0JuMC90ZHhCRFFUY096aW03OHFqZUFnTHQvUGdpUlE1UzFzMk9qOGQ4?= =?utf-8?B?dGJuY001RThyRmJ3WHpOM3F3cjNKTUNGU0x1ZWZWb2xzc3NZL1p6MlFWR2FM?= =?utf-8?B?VUd5OEtzNlhzWXk3VE40ZDFHWlZ2WVNBbFljVG1peXpzQ1hkSEJicTQrTDZx?= =?utf-8?B?NjVyLzROMVNaVU5HbUJwcGtBVllXYk5jN2Yza0w3SGgrUlA1UWZRSmJCSEdW?= =?utf-8?B?aTBHSkxkWnN5dlF2Z3A0d3BFM0d1UVdxK0RlaEUxT1Z4Rlo3SjZGYmpvcUZQ?= =?utf-8?B?V1lJOTU5MDNLK3Q5aUdJaWdreHBmMmtPYnFpQTQ0V3RlQ2FsTUR0TmJCMWRC?= =?utf-8?B?aGJEK1J0MHlFU0RtRG1TQT09?= X-Microsoft-Antispam-Message-Info: kux/oudBbKyorqlUOq2vfwEPYxF8yXR3pabGxNxVk3REUVHKe9PCYDoJpKPIBxPoUX3QJiWo6pnggio3ouDl/egU2AR/CJm+r2sZS2fkyvVBXwxdhNkCHK0XJNSPR9oCzgayVgFJfOInh04NZFuj9RJ3ISgeY19tIKZ36Fbri1yik5r5dhhzNNkumPNp8R/2 X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 6:AxyvoG/nSmoHhm+gynVyGlQ5U80ygswhZY9V+CNbgdy1sAzevhwJb2pbHHc1aYW3cgKJk/vqv3wG/i6oaxyV2gqVgKkqj7mDUX2QCnxEYM/oAcLMeUNZsiLsBXEK3uyg9PJs58ZtOaz9gCHNkIcSYCa2nD9lLXPQEPg3eWoAYUxZEXn9ULUyKvUx7FRr8i7uWN9vijMVs4mC+ryE8C4Y+b88hSwvb51kn97yt7f+ly4shEjEE4qB5LZYYM38WOa3Xp4gp74dPbcT7I7g5Kz//w/7cTFE0VuhmD5YP/8C+tT1ceV6fjj9rgffalRSG8RVIXe4tPZBMNXI5tZd0htwbQWDuZYlIplXlQiCiplt30qIJfvaA5RVmsDmNLES0GcnajTc7YVpsT51GTyYmtxtHTZ+gnUgWizaFiDPCFBZlI/qca9IKGjpnJrrXUVj9c3mBeAEMc5jrNPRHrYHYseNgg==; 5:NTcfwnul9Sxy60q0yAmW2Vh9jhl9GG1UhFiweluLgvz3fM1hV7RRzhwYwDbrmL2y1LKq0Z982dpAB9tgPz8Yoh3Nf/WavYQz+33HPytTcLEPnGtB7mhV61iuHWK++CnT9hWf+WFGrvkWTd16c0dfrEdV6kEIqy/do3KJtKa1/Ak=; 24:gqsz34kE+K1e44HPT4ah0k7Um5VJASTCTRKQmE2gyyWz+jAS9Egvx1fvn5vzfAyng1/QcyjlB0PcohKVmp3fHaSw3OUHZmpr3IIztb6OJzI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 7:uQOUWULdUZDDQSNp2IdGPM6Er9T1dvHxP2ObdQ+ZH3SZdtlJXwr+sRbV2qB+edRN4kVXZiRf2h4aHfD4CNzYW+mQn2qBR4UkGU/mZndnmv2/de7xOL6bXnm4OKxt3B2QDZ3yqA+20Cu8N9URFE9sKuwRUcISmuqqGvLPQKgYFVj7vr/v2Xbqv7auSX41fEp9UG41obvM9O632rOo08FY3QhyKaOt8pPjCxuBjVL7Eq+Dk3mns42GeK/gLlIOV2Sc; 20:s0NMKAWpEScmTuPSafCKfU+rJqq53M6jrz2I+XNe/TeJiZmtnQ6ZJ2HHVDWHXUoQOkGfxw4P3o+0xDhaxZIcvQ+oNbBUgI+DBzQjF2wI6zrLyqcQyS3sFs4uk/azX9pZ4b5I1Jeriwodc6m+FN9L7AsY6fuwVQQ8Mcf3zju8qsZ1vwzMYAv2q6KYr4prcRQ5Cx5iUFP3aO2eqd/cfgGl4kmhTZoWCGmtfvRCWOeisFT1WYephachFo8rEV94yb9A X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Apr 2018 14:19:45.5804 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c2de78e6-096a-40af-f1d2-08d598a4c957 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR12MB0145 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.26]); Mon, 02 Apr 2018 14:19:51 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Mon, 02 Apr 2018 14:19:51 +0000 (UTC) for IP:'104.47.32.87' DOMAIN:'mail-sn1nam01on0087.outbound.protection.outlook.com' HELO:'NAM01-SN1-obe.outbound.protection.outlook.com' FROM:'brijesh.singh@amd.com' RCPT:'' X-RedHat-Spam-Score: -0.011 (DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS) 104.47.32.87 mail-sn1nam01on0087.outbound.protection.outlook.com 104.47.32.87 mail-sn1nam01on0087.outbound.protection.outlook.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.26 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Cc: Tom Lendacky , Peter Krempa , Jon Grimm , Andrea Bolognani , Brijesh Singh , Borislav Petkov Subject: [libvirt] [PATCH v5 01/10] 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Mon, 02 Apr 2018 14:19:57 +0000 (UTC) X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 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. Reviewed-by: "Daniel P. Berrang=C3=A9" Signed-off-by: Brijesh Singh --- src/conf/domain_capabilities.h | 13 ++++ src/qemu/qemu_capabilities.c | 38 +++++++++++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_capspriv.h | 4 ++ src/qemu/qemu_monitor.c | 9 +++ src/qemu/qemu_monitor.h | 3 + src/qemu/qemu_monitor_json.c | 73 ++++++++++++++++++= ++++ 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 +- 10 files changed, 156 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index fa4c1e4..72e9daf 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -137,6 +137,19 @@ 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; +}; + + struct _virDomainCaps { virObjectLockable parent; =20 diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index e54dde6..0f6e6fb 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -466,6 +466,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, /* 285 */ "virtio-mouse-ccw", "virtio-tablet-ccw", + "sev-guest", ); =20 =20 @@ -532,6 +533,8 @@ struct _virQEMUCaps { size_t ngicCapabilities; virGICCapability *gicCapabilities; =20 + virSEVCapability *sevCapabilities; + virQEMUCapsHostCPUData kvmCPU; virQEMUCapsHostCPUData tcgCPU; }; @@ -1705,6 +1708,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[= ] =3D { { "virtio-keyboard-ccw", QEMU_CAPS_DEVICE_VIRTIO_KEYBOARD_CCW }, { "virtio-mouse-ccw", QEMU_CAPS_DEVICE_VIRTIO_MOUSE_CCW }, { "virtio-tablet-ccw", QEMU_CAPS_DEVICE_VIRTIO_TABLET_CCW }, + { "sev-guest", QEMU_CAPS_SEV_GUEST }, }; =20 static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBalloon[]= =3D { @@ -2784,6 +2788,21 @@ virQEMUCapsSetGICCapabilities(virQEMUCapsPtr qemuCap= s, qemuCaps->ngicCapabilities =3D ncapabilities; } =20 +void +virQEMUCapsSetSEVCapabilities(virQEMUCapsPtr qemuCaps, + virSEVCapability *capabilities) +{ + virSEVCapability *cap =3D qemuCaps->sevCapabilities; + + if (cap) { + VIR_FREE(cap->pdh); + VIR_FREE(cap->cert_chain); + } + + VIR_FREE(qemuCaps->sevCapabilities); + + qemuCaps->sevCapabilities =3D capabilities; +} =20 static int virQEMUCapsProbeQMPCommands(virQEMUCapsPtr qemuCaps, @@ -3287,6 +3306,19 @@ virQEMUCapsProbeQMPGICCapabilities(virQEMUCapsPtr qe= muCaps, return 0; } =20 +static int +virQEMUCapsProbeQMPSEVCapabilities(virQEMUCapsPtr qemuCaps, + qemuMonitorPtr mon) +{ + virSEVCapability *caps =3D NULL; + + if (qemuMonitorGetSEVCapabilities(mon, &caps) < 0) + return -1; + + virQEMUCapsSetSEVCapabilities(qemuCaps, caps); + + return 0; +} =20 bool virQEMUCapsCPUFilterFeatures(const char *name, @@ -4768,6 +4800,12 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION)) virQEMUCapsSet(qemuCaps, QEMU_CAPS_CPU_CACHE); =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 3f3c29f..9b51cc2 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -450,6 +450,7 @@ typedef enum { /* 285 */ QEMU_CAPS_DEVICE_VIRTIO_MOUSE_CCW, /* -device virtio-mouse-ccw */ QEMU_CAPS_DEVICE_VIRTIO_TABLET_CCW, /* -device virtio-tablet-ccw */ + QEMU_CAPS_SEV_GUEST, /* -object sev-guest,... */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h index 222f336..1fa85cc 100644 --- a/src/qemu/qemu_capspriv.h +++ b/src/qemu/qemu_capspriv.h @@ -86,6 +86,10 @@ virQEMUCapsSetGICCapabilities(virQEMUCapsPtr qemuCaps, virGICCapability *capabilities, size_t ncapabilities); =20 +void +virQEMUCapsSetSEVCapabilities(virQEMUCapsPtr qemuCaps, + virSEVCapability *capabilities); + int virQEMUCapsParseHelpStr(const char *qemu, const char *str, diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index e169553..44c2dff 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -4007,6 +4007,15 @@ qemuMonitorGetGICCapabilities(qemuMonitorPtr mon, return qemuMonitorJSONGetGICCapabilities(mon, capabilities); } =20 +int +qemuMonitorGetSEVCapabilities(qemuMonitorPtr mon, + virSEVCapability **capabilities) +{ + QEMU_CHECK_MONITOR_JSON(mon); + + return qemuMonitorJSONGetSEVCapabilities(mon, capabilities); +} + =20 int qemuMonitorNBDServerStart(qemuMonitorPtr mon, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 7a22323..efd3427 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -767,6 +767,9 @@ int qemuMonitorSetMigrationCapability(qemuMonitorPtr mo= n, 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 d80c4f1..e67f7b7 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6398,6 +6398,79 @@ 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; + 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 (virJSONValueObjectGetNumberInt(caps, "cbitpos", &cbitpos) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("'cbitpos' field is missing")); + goto cleanup; + } + + if (virJSONValueObjectGetNumberInt(caps, "reduced-phys-bits", + &reduced_phys_bits) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("'reduced-phys-bits' field is missing")); + goto cleanup; + } + + if (!(pdh =3D virJSONValueObjectGetString(caps, "pdh"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("'pdh' field is missing")); + goto cleanup; + } + + if (!(cert_chain =3D virJSONValueObjectGetString(caps, "cert-chain")))= { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("'cert-chain' field is missing")); + 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; + *capabilities =3D capability; + ret =3D 0; + + cleanup: + 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 846d366..f30ff1f 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -152,6 +152,9 @@ int qemuMonitorJSONSetMigrationCapability(qemuMonitorPt= r 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 c086e04..8287bb7 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies @@ -18942,6 +18942,16 @@ } =20 { + "return" : { + "reduced-phys-bits": 1, + "cbitpos": 47, + "cert-chain": "AQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAA", + "pdh": "AQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAO= AAA" + }, + "id": "libvirt-51" +} + +{ "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 334296e..43eeef5 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml @@ -225,9 +225,10 @@ + 2011090 0 - 390060 + 390306 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