From nobody Wed May 14 19:37:42 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 1522166176619279.27938471326104; Tue, 27 Mar 2018 08:56:16 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 01B9F12E384; Tue, 27 Mar 2018 15:56:15 +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 AF0185F703; Tue, 27 Mar 2018 15:56:14 +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 36E1C4CA97; Tue, 27 Mar 2018 15:56:14 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w2RFtnw0008728 for ; Tue, 27 Mar 2018 11:55:49 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5C9A35F710; Tue, 27 Mar 2018 15:55:49 +0000 (UTC) Received: from mx1.redhat.com (ext-mx07.extmail.prod.ext.phx2.redhat.com [10.5.110.31]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D9FC65F706; Tue, 27 Mar 2018 15:55:45 +0000 (UTC) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0082.outbound.protection.outlook.com [104.47.38.82]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3AE4FC049D53; Tue, 27 Mar 2018 15:55:44 +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.609.10; Tue, 27 Mar 2018 15:55:37 +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=hv9Ls+QorCMEoSI9XJeldAwzKRejfD4MoxOHI9Ic2Xmdjw+CGrCy9ZwjLNlHyDxgyaIsl90Xvwbqb6E8YeBTQwdPNuqbkyuKaKipVp2hTo11Gif8/lAzzmT6ug3HeYgB5sgkLs7aRhLSQ+447PoQ9QEXZAjVNIEXaVy8rDKdl5Y= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; From: Brijesh Singh To: libvir-list@redhat.com Date: Tue, 27 Mar 2018 10:55:07 -0500 Message-Id: <20180327155515.87611-2-brijesh.singh@amd.com> In-Reply-To: <20180327155515.87611-1-brijesh.singh@amd.com> References: <20180327155515.87611-1-brijesh.singh@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: BN6PR17CA0008.namprd17.prod.outlook.com (2603:10b6:404:65::18) 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: 7a07e94a-e35a-426c-d26b-08d593fb2fae 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:phxIe/vk6OwZEmQ/y7P572XpYjg7z97py8rMkKAHcHI+bFlC3Px//1jZB2U7c/rpJ6HSaqOXx6GHleoxYO7dQYIUql0pwBMKRkWNqZYBk+u5oWuYOI0DnvH+m5JKdlj9lpduNSq0TbpOhcXJ434MSA7QMN8jZOftJ+KcR3/SMqtuPemeW5jI5gOMlHJoS1rOgmKHuFTYMSCMzjRvzhynzyg/5JJlSpSd8+Kc8aIk/5CxEzxOvDyfuWLRqNbrkqn1; 25:DBuf4GAboonmX1lB3FpvGoS/Ulp9i0ASnSa/WjJRViHYkuYtqTto3J43j60cOBMjt07tPpdbfVapQgedG7RnVdhoG88H5vzdlXqpyOKSoB8ztKJpq9PfoYvLDjr/1kzDiU3UNorEQRkGoEomUnIkus21TQjnU3JF3XHy4z7O+UTHIzvKApaskK33tMSpTwcalABaiEEUeqyJX99UGR5lUNrZfFxs7Iq/drh7C4cxgaYWBDYQi6K9/lu0ntFrMgy1wU8faAC5ZURvbXYQA1P9izQ6dTnsi4t8YSkUAg0H+ZwXejzzAIXENu4Vw26tcwXz3nAvGympXYZv3TARlWVWwg==; 31:f1Z0pJm1j6VPf1tuefVPyb4+wWDZyvuBmAfBC9wzy2vcHmcqgUuR4ey58C9iGWoofrcoQhz4U9vTcz5wS7kx/7akwwqaMt+X2mosckUr55nDhcAeJ9Td8Hxcqq+iJco8fPfbs+A3VRe8w/+fiazJKSMRXsQidMe6kAW/CQFrI3TJcdD3XQ93c1cXye7TnvVgPVCEgIuWDSJGQwHAxE8yB0YVDDL9NNqG8tJKXscHleE= X-MS-TrafficTypeDiagnostic: BY2PR12MB0145: X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 20:U1i4JyttdfNsg1+1ye66vJzAf7JhNHZp7f9+EAVfA/bSli8ki9DesqxhuAEVbK3a3AsgS5WHAchHbpPDqb2zz5oNd698DhVqMkI01nV3Bv8NnxxNtj9TedyRPKKzd+lYe191JC9fqf97uBMvnOruNI9ANMKidgwF/fSqHM2iT+F/jcr/juQtThmej8BqorcoAyafX2evaH7qfAhaxMTu0YKitNfvoXbKpEOLHLKHQm8owiKSLeDOwO0g/d6FfHK8GK2GYw1Q+5pUWcGWl9a5la/yh+vC+FNP3G3Alv+jPCu7fIZVL/rZZru7IXitughBmx3FwMhQlnJXMINYZfW37Ia5vKtLtHY9g479BCV5rl2ouEjwGXcbLJPqMzyze2HNSIAUZgQsQMqKkDLEXDSne0dWAbt2YoBLpIdhKvWWfezP6v+IZo5iB8y5QM3RJqaANESoiwqtMb/KuWORp2VbWI2Bt0pjCyfKTXi8sV9b6jeZ7fce0V7AGYTCASJTEF/K; 4:XVMEjEsrpOdTBHKm8xthiQ5xBiSyLOk2yz9Ezy9ri3cnVxjdQBM4bx88bkAlsvJTFQyar9g9KPRmePtymGCfk5GGM5kJyj70VcOQZ/NTSDMIFs0oVY4Q8thrZbBCHG+LqAtLbDL40KIPDrrpJ8qMx1TZLpTFHq3el4vI4wByqUPSoNIwfRnqdolIFKEJPrVloG3JAsZy+6GBFRWHgh1IVCaQtoFO0g4JMiqWhypbM3Vb16CHNFfv6pKtFnz3Pf2vY5MFQxKXmy6TnCwR5z4HAdZEru/jL9nuUYnNxO9V7mZH4HyqNnwIMyfHV4jSpyqu 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)(3002001)(10201501046)(3231221)(944501327)(52105095)(93006095)(93001095)(6055026)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:BY2PR12MB0145; BCL:0; PCL:0; RULEID:; SRVR:BY2PR12MB0145; X-Forefront-PRVS: 0624A2429E X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(376002)(39380400002)(39860400002)(346002)(396003)(366004)(189003)(199004)(2870700001)(97736004)(6666003)(4326008)(6916009)(8936002)(50466002)(316002)(81166006)(50226002)(52116002)(23676004)(7696005)(53936002)(551544002)(5660300001)(3846002)(16526019)(76176011)(186003)(36756003)(68736007)(486005)(956004)(25786009)(476003)(59450400001)(8676002)(2616005)(6486002)(53416004)(106356001)(486005)(26005)(47776003)(66066001)(54906003)(7736002)(2361001)(305945005)(1076002)(81156014)(6116002)(2906002)(2351001)(446003)(86362001)(11346002)(386003)(478600001)(105586002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR12MB0145; H:wsp141597wss.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; 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?MTtCWTJQUjEyTUIwMTQ1OzIzOjMxN3pMQ0YzM0RZSXhNbUhTc1BNNHhlQ3J6?= =?utf-8?B?Z2VTcEZpdkxRazFaMEFaZEhpaVZKTnZndTk2NDRsWGt2Vi9pR0R5RkNLWFd5?= =?utf-8?B?ZjE0WlNlYWdWbUd6RE5JUFpUYWhnVjFKdzJHQU1INFhBR3prcVY1U0RjbDV0?= =?utf-8?B?RnFMeHowT1d4RVJWNXFkS0JDcmc0Z3k1NFFlblBiR2FBYjh3ZHZBdEZZR1hR?= =?utf-8?B?WUp3V0ExYjR1bm9TUlExRlZzWEdEWE93ZmVOYmVFbSttRHpWREJFUFp0THR5?= =?utf-8?B?R21YajBRSjNJMmlxWFlOTEtkZktoZ1I4bHRzbjFLMG0xelRwa1MwOHdUZUNO?= =?utf-8?B?eFJ6S3gyVkpBQmJHb2Y2WGI3TlphdkZieXVaS25xMmtCampGSWdIWFcvMFl5?= =?utf-8?B?VGdzNVcxK01BcExSWmIwYlVUMXZEY0RQdWcrMUlKZHJSaFV5TFFoUy9ZSEQr?= =?utf-8?B?ZWFrOSs4M0pMek12Nzl4Z3p1MmxNZy9xQzRqaS9MYmJpRlBnRzdSNmM3Qmh1?= =?utf-8?B?V3RzdVBvRDduUG4zT2ZhOGdQRDVqbk9lUE8wYk1za2hUYkcyYUlxVWZoMXQx?= =?utf-8?B?dzVEOVZPUU9EK0pTZitHSi9yZW8yUDlLdm52cy9UZXZoZHFFSEtlMHFGcER6?= =?utf-8?B?bis2ejRydWlwc011cVhlS2FScFVNQklKclcvd0RRUlFBUVZTMTBxUFQxWld5?= =?utf-8?B?RDNaaDkxaERScy9LUG1Ja1ZBaWFaWFQ2b3lMMlFBTExZdWlzT3VqT3MvTExz?= =?utf-8?B?QjZJTmxoN3V4d2ovVkpXU2VMNFAydmthNXFtVDZiVkRiR1NHK0VBbGJvVEhZ?= =?utf-8?B?NzZKNlRtZUVKSTRSenBYVFl0dWEvdXVWOWJvWFlTNG5UYUJ1ei9aQUdNNXhm?= =?utf-8?B?RVhvRU1DQWlNQlRkdkZOY2JJVDZBVFhUejAwQjNSQmxOYnRSa3M0UWQwMGxw?= =?utf-8?B?cWRlREl6blAzMDhVMTZOMk5TUFhOY3NLU1h0VHlvSDFIbFhKRFdzOXhEY0pT?= =?utf-8?B?NG9IZ04rL2loT0ZoODBZZHJQaTNWSnZ2M2NxUHBrOXRreWpZZWZtejZodU1C?= =?utf-8?B?SDA4a1k3QStYUVR4bFkrYThJY1gyQUNnOU5VOHZZR1NCem1sYzliamcxclBT?= =?utf-8?B?VStkbVpVaFFvVE45Qit0RTZ0b29mWmQ2THJqbDRuT2ljTkxySHF4cG9uM2w0?= =?utf-8?B?b2Z2Nmt4RXFISkw2ME5FTE9pcjlObzhQaVQ3R0crSDJLYklobC8wTm8rRnln?= =?utf-8?B?dzNmVGo4M0dFVmhzNVVvOFFwUHpBZlJuSXMyeG9YbU1qVGJscFhUZXdRTXkw?= =?utf-8?B?cW1ydGk5SjBOaFFLbmFOODdnaFNMZkhzOURpUXFnUlRRQlZzamQrUGd4MEZU?= =?utf-8?B?QUd6bDdMd1VDZmFweDNKVllYWVpTeEFwNitVOGd5QnlRNlVXWXZUaEJtMVow?= =?utf-8?B?ejJGSHdobHVwSlAvbStkVjg3Y1FGRTg0Wm5vdWJhZDc0SytxOWJ4RE9UMzll?= =?utf-8?B?cXNZQTV6UW92RzFrOU9XS2NsQjBPOXlVNldoUllJcTJkN2M4VGNkOUFzSExU?= =?utf-8?B?bERIeHlRdmZiVU9NaHhxZVJ6c2pMNituVEJ4QjdyakV4K1B5TnhZTUIwMHBP?= =?utf-8?B?MTBqOVRDM3lqeGFPdzRIMFJHR0lNT0g4NGZ2SXMwVGpwMytEL1V5ajl1NG15?= =?utf-8?B?YXh4WmdmcElZWDNXNURjNkxpeVV1cURLdXVGVlhERGZJQXoxZDlsRTIrbGUr?= =?utf-8?Q?FWdCW//dz5ywy4vnSukYQVEFpvJRex2UChifM=3D?= X-Microsoft-Antispam-Message-Info: ill9H5AvMsUZpF2ZaqXmh3+38/uM2rdKnQT6/E8TxWGHpZHkkFdr3s0C+NfAFlWegu+ZnbQlTPVrapHLFUAPrQiQ68CUYKtC/UbPR1+qIzCwGo7W3dr0EhDUJWXyzF1zqsWhZZo+1Kr+urY9cnDqVywsPMvY9BELyN3IXlSp2OnGYcqxTUc8tYxtYT9n6PaO X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 6:au0P9Uy6nW2H2bS5GnFxszXx8jbms13RPu8yBD2XUXvSQU3mDMBUuS6wVziLDJYvEAGKRvaF4tIcka/KhCCp8NQjwWMxfVU91dL3CSQ33yfJfhM6uNdvlexWEE6k/SahQT5jlWl3SIgTMcc/ugwK95IRARaXICSk+0vWGhO4IwB/owkYsS6QKDMguSZ2H47yD9+m0LuHkfUKootwrxPN+mn+gmGwqXaAUHdAGAWV2Ov2C0CN8NcXATHZp4iBZD/9WwBA8io1B/LT4tDfNDBGvn6dPzSg/cIcj7OxE5aR6BZ4RjBTjnFZL/ymwMQl1ZQgXdfYtran661mLatiODINCF5vlnaoa3EwFSPHHkZCEMggd6m9F7jkKOTeSIJvWwwmr5j61RgUPvlISXXW9cdVk3bczLxAlL1WE7Eg9TIFIT6X3TYwmEkm2BVynY3MoXokGbFPtq3u8eVEtPlVIYqlrg==; 5:Cw5Vf01EdQRYni41tSv8+9X8Zn3UI0AbXOB8d/MAO4G8NVB29MlrjMdg4cQkpAq5XgBLc+JQeOHhQn/95ZjCVssGPJu3VdzYwU7R6lqUBgaMDRkCfoT5d30L4mJ1YpCJwCaDOso3+w43Zd6YuIV0aPRcnuWLU2PllD+pOCPO3Ig=; 24:Z0w6pyCMx86sHigpD/PshyiaXRMnMYY4siB7g7dwgm5pHq7LU6wFIffZxV58G3ESGFbDWyJXs37VSTOA4dI7+omO1jUvo++SnvsUc5v6yz4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 7:cpESQVIt/ysBxIGiYuf9r5k2QqcpEwLskIwfnIM15+2wVQuu2gwy7LgeYnksy5Q+sEISlztilg+I/5Rc3GFC39NAQCG7l5CHDF0wUoRzEoSVo4RnFpfcpaNFh0RGnF2F8QWaIF6EHm7Iia3q2IYpoMI+QygjO32x0CHKHcvMEDUrx4mc7IOC+ITrtq883XLDyYvEc9gUT7YHFVOqQA1FVtG/XLf3WDnGGyCDkdmQexjzbelxMz77N/gfMpEa142q; 20:msuoQR8+y7l3Mk5nl5QpgrRL6W2q6PYxaTi1BdURZm58wD5MkC4hcUEAOAEm+eXxXfJLVE+PcneMEAYoMhuYg+QL4nFoNym8C+N9aLjinKyPIfBeMjsMvNnJD7973KDDbfg4tgQk3uEub1s1oPIriH5LPydXDz4sna/CYyR9BziFv2I+Au9/VL35vgnNNm5FHeazhx3s11PqxNOgeLaN7XFZknZZVqydjLacuS7QEn9sdTA/szZrfBkTKX1pbqc5 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2018 15:55:37.4322 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7a07e94a-e35a-426c-d26b-08d593fb2fae 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.31]); Tue, 27 Mar 2018 15:55:44 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 27 Mar 2018 15:55:44 +0000 (UTC) for IP:'104.47.38.82' DOMAIN:'mail-bl2nam02on0082.outbound.protection.outlook.com' HELO:'NAM02-BL2-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.38.82 mail-bl2nam02on0082.outbound.protection.outlook.com 104.47.38.82 mail-bl2nam02on0082.outbound.protection.outlook.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.31 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Cc: Tom Lendacky , Peter Krempa , Xiaogang Chen , Jon Grimm , Andrea Bolognani , Brijesh Singh , Borislav Petkov Subject: [libvirt] [PATCH v4 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-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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 27 Mar 2018 15:56:15 +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