From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Michael Roth <michael.roth@amd.com>
Cc: qemu-devel@nongnu.org, "Connor Kuehl" <ckuehl@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
"James Bottomley" <jejb@linux.ibm.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
"Tom Lendacky" <thomas.lendacky@amd.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Dov Murik" <dovmurik@linux.ibm.com>,
"David Gibson" <david@gibson.dropbear.id.au>,
kvm@vger.kernel.org, "Eduardo Habkost" <ehabkost@redhat.com>,
"Brijesh Singh" <brijesh.singh@amd.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Eric Blake" <eblake@redhat.com>
Subject: Re: [RFC PATCH v2 12/12] i386/sev: update query-sev QAPI format to handle SEV-SNP
Date: Fri, 3 Sep 2021 16:27:56 +0100 [thread overview]
Message-ID: <YTI+/A/ejS/tlYMf@redhat.com> (raw)
In-Reply-To: <20210826222627.3556-13-michael.roth@amd.com>
On Thu, Aug 26, 2021 at 05:26:27PM -0500, Michael Roth wrote:
> Most of the current 'query-sev' command is relevant to both legacy
> SEV/SEV-ES guests and SEV-SNP guests, with 2 exceptions:
>
> - 'policy' is a 64-bit field for SEV-SNP, not 32-bit, and
> the meaning of the bit positions has changed
> - 'handle' is not relevant to SEV-SNP
If the host supports SEV-SNP guests, is it still possible for mgmt
app to create guests using the "legacy" SEV/SEV-ES approach ? ie
is the hardware backwards compatible, or is it strictly required
to always create SEV-SNP guests when the hardware is capable ?
The code here seems to imply a non-backwards compatible approach,
mandating use of SEV-SNP guests on such capable kernel/hardware.
> To address this, this patch adds a new 'sev-type' field that can be
> used as a discriminator to select between SEV and SEV-SNP-specific
> fields/formats without breaking compatibility for existing management
> tools (so long as management tools that add support for launching
> SEV-SNP guest update their handling of query-sev appropriately).
>
> The corresponding HMP command has also been fixed up similarly.
>
> Signed-off-by: Michael Roth <michael.roth@amd.com>
> ---
> qapi/misc-target.json | 71 +++++++++++++++++++++++++++++++++---------
> target/i386/monitor.c | 29 +++++++++++++----
> target/i386/sev.c | 22 +++++++------
> target/i386/sev_i386.h | 3 ++
> 4 files changed, 95 insertions(+), 30 deletions(-)
>
> diff --git a/qapi/misc-target.json b/qapi/misc-target.json
> index 3b05ad3dbf..80f994ff9b 100644
> --- a/qapi/misc-target.json
> +++ b/qapi/misc-target.json
> @@ -81,6 +81,49 @@
> 'send-update', 'receive-update' ],
> 'if': 'TARGET_I386' }
>
> +##
> +# @SevGuestType:
> +#
> +# An enumeration indicating the type of SEV guest being run.
> +#
> +# @sev: The guest is a legacy SEV or SEV-ES guest.
> +# @sev-snp: The guest is an SEV-SNP guest.
> +#
> +# Since: 6.2
> +##
> +{ 'enum': 'SevGuestType',
> + 'data': [ 'sev', 'sev-snp' ],
> + 'if': 'TARGET_I386' }
> +
> +##
> +# @SevGuestInfo:
> +#
> +# Information specific to legacy SEV/SEV-ES guests.
> +#
> +# @policy: SEV policy value
> +#
> +# @handle: SEV firmware handle
> +#
> +# Since: 2.12
> +##
> +{ 'struct': 'SevGuestInfo',
> + 'data': { 'policy': 'uint32',
> + 'handle': 'uint32' },
> + 'if': 'TARGET_I386' }
> +
> +##
> +# @SevSnpGuestInfo:
> +#
> +# Information specific to SEV-SNP guests.
> +#
> +# @policy: SEV-SNP policy value
> +#
> +# Since: 6.2
> +##
> +{ 'struct': 'SevSnpGuestInfo',
> + 'data': { 'policy': 'uint64' },
> + 'if': 'TARGET_I386' }
> +
> ##
> # @SevInfo:
> #
> @@ -94,25 +137,25 @@
> #
> # @build-id: SEV FW build id
> #
> -# @policy: SEV policy value
> -#
> # @state: SEV guest state
> #
> -# @handle: SEV firmware handle
> +# @sev-type: Type of SEV guest being run
> #
> # Since: 2.12
> ##
> -{ 'struct': 'SevInfo',
> - 'data': { 'enabled': 'bool',
> - 'api-major': 'uint8',
> - 'api-minor' : 'uint8',
> - 'build-id' : 'uint8',
> - 'policy' : 'uint32',
> - 'state' : 'SevState',
> - 'handle' : 'uint32'
> - },
> - 'if': 'TARGET_I386'
> -}
> +{ 'union': 'SevInfo',
> + 'base': { 'enabled': 'bool',
> + 'api-major': 'uint8',
> + 'api-minor' : 'uint8',
> + 'build-id' : 'uint8',
> + 'state' : 'SevState',
> + 'sev-type' : 'SevGuestType' },
> + 'discriminator': 'sev-type',
> + 'data': {
> + 'sev': 'SevGuestInfo',
> + 'sev-snp': 'SevSnpGuestInfo' },
> + 'if': 'TARGET_I386' }
> +
>
> ##
> # @query-sev:
> diff --git a/target/i386/monitor.c b/target/i386/monitor.c
> index 119211f0b0..85a8bc2bef 100644
> --- a/target/i386/monitor.c
> +++ b/target/i386/monitor.c
> @@ -692,20 +692,37 @@ void hmp_info_sev(Monitor *mon, const QDict *qdict)
> {
> SevInfo *info = sev_get_info();
>
> - if (info && info->enabled) {
> - monitor_printf(mon, "handle: %d\n", info->handle);
> + if (!info || !info->enabled) {
> + monitor_printf(mon, "SEV is not enabled\n");
> + goto out;
> + }
> +
> + if (sev_snp_enabled()) {
> monitor_printf(mon, "state: %s\n", SevState_str(info->state));
> monitor_printf(mon, "build: %d\n", info->build_id);
> monitor_printf(mon, "api version: %d.%d\n",
> info->api_major, info->api_minor);
> monitor_printf(mon, "debug: %s\n",
> - info->policy & SEV_POLICY_NODBG ? "off" : "on");
> - monitor_printf(mon, "key-sharing: %s\n",
> - info->policy & SEV_POLICY_NOKS ? "off" : "on");
> + info->u.sev_snp.policy & SEV_SNP_POLICY_DBG ? "on"
> + : "off");
> + monitor_printf(mon, "SMT allowed: %s\n",
> + info->u.sev_snp.policy & SEV_SNP_POLICY_SMT ? "on"
> + : "off");
> + monitor_printf(mon, "SEV type: %s\n", SevGuestType_str(info->sev_type));
> } else {
> - monitor_printf(mon, "SEV is not enabled\n");
> + monitor_printf(mon, "handle: %d\n", info->u.sev.handle);
> + monitor_printf(mon, "state: %s\n", SevState_str(info->state));
> + monitor_printf(mon, "build: %d\n", info->build_id);
> + monitor_printf(mon, "api version: %d.%d\n",
> + info->api_major, info->api_minor);
> + monitor_printf(mon, "debug: %s\n",
> + info->u.sev.policy & SEV_POLICY_NODBG ? "off" : "on");
> + monitor_printf(mon, "key-sharing: %s\n",
> + info->u.sev.policy & SEV_POLICY_NOKS ? "off" : "on");
> + monitor_printf(mon, "SEV type: %s\n", SevGuestType_str(info->sev_type));
> }
>
> +out:
> qapi_free_SevInfo(info);
> }
>
> diff --git a/target/i386/sev.c b/target/i386/sev.c
> index 72a6146295..fac2755e68 100644
> --- a/target/i386/sev.c
> +++ b/target/i386/sev.c
> @@ -704,25 +704,27 @@ sev_get_info(void)
> {
> SevInfo *info;
> SevCommonState *sev_common = SEV_COMMON(MACHINE(qdev_get_machine())->cgs);
> - SevGuestState *sev_guest =
> - (SevGuestState *)object_dynamic_cast(OBJECT(sev_common),
> - TYPE_SEV_GUEST);
>
> info = g_new0(SevInfo, 1);
> info->enabled = sev_enabled();
>
> if (info->enabled) {
> - if (sev_guest) {
> - info->handle = sev_guest->handle;
> - }
> info->api_major = sev_common->api_major;
> info->api_minor = sev_common->api_minor;
> info->build_id = sev_common->build_id;
> info->state = sev_common->state;
> - /* we only report the lower 32-bits of policy for SNP, ok for now... */
> - info->policy =
> - (uint32_t)object_property_get_uint(OBJECT(sev_common),
> - "policy", NULL);
> +
> + if (sev_snp_enabled()) {
> + info->sev_type = SEV_GUEST_TYPE_SEV_SNP;
> + info->u.sev_snp.policy =
> + object_property_get_uint(OBJECT(sev_common), "policy", NULL);
> + } else {
> + info->sev_type = SEV_GUEST_TYPE_SEV;
> + info->u.sev.handle = SEV_GUEST(sev_common)->handle;
> + info->u.sev.policy =
> + (uint32_t)object_property_get_uint(OBJECT(sev_common),
> + "policy", NULL);
> + }
> }
>
> return info;
> diff --git a/target/i386/sev_i386.h b/target/i386/sev_i386.h
> index e0e1a599be..948d8f1079 100644
> --- a/target/i386/sev_i386.h
> +++ b/target/i386/sev_i386.h
> @@ -28,6 +28,9 @@
> #define SEV_POLICY_DOMAIN 0x10
> #define SEV_POLICY_SEV 0x20
>
> +#define SEV_SNP_POLICY_SMT 0x10000
> +#define SEV_SNP_POLICY_DBG 0x80000
> +
> extern bool sev_es_enabled(void);
> extern bool sev_snp_enabled(void);
> extern uint64_t sev_get_me_mask(void);
> --
> 2.25.1
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
WARNING: multiple messages have this Message-ID (diff)
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Michael Roth <michael.roth@amd.com>
Cc: "Tom Lendacky" <thomas.lendacky@amd.com>,
"Brijesh Singh" <brijesh.singh@amd.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
kvm@vger.kernel.org, "Michael S . Tsirkin" <mst@redhat.com>,
"Connor Kuehl" <ckuehl@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"James Bottomley" <jejb@linux.ibm.com>,
qemu-devel@nongnu.org, "Eric Blake" <eblake@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
"Dov Murik" <dovmurik@linux.ibm.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"David Gibson" <david@gibson.dropbear.id.au>
Subject: Re: [RFC PATCH v2 12/12] i386/sev: update query-sev QAPI format to handle SEV-SNP
Date: Fri, 3 Sep 2021 16:27:56 +0100 [thread overview]
Message-ID: <YTI+/A/ejS/tlYMf@redhat.com> (raw)
In-Reply-To: <20210826222627.3556-13-michael.roth@amd.com>
On Thu, Aug 26, 2021 at 05:26:27PM -0500, Michael Roth wrote:
> Most of the current 'query-sev' command is relevant to both legacy
> SEV/SEV-ES guests and SEV-SNP guests, with 2 exceptions:
>
> - 'policy' is a 64-bit field for SEV-SNP, not 32-bit, and
> the meaning of the bit positions has changed
> - 'handle' is not relevant to SEV-SNP
If the host supports SEV-SNP guests, is it still possible for mgmt
app to create guests using the "legacy" SEV/SEV-ES approach ? ie
is the hardware backwards compatible, or is it strictly required
to always create SEV-SNP guests when the hardware is capable ?
The code here seems to imply a non-backwards compatible approach,
mandating use of SEV-SNP guests on such capable kernel/hardware.
> To address this, this patch adds a new 'sev-type' field that can be
> used as a discriminator to select between SEV and SEV-SNP-specific
> fields/formats without breaking compatibility for existing management
> tools (so long as management tools that add support for launching
> SEV-SNP guest update their handling of query-sev appropriately).
>
> The corresponding HMP command has also been fixed up similarly.
>
> Signed-off-by: Michael Roth <michael.roth@amd.com>
> ---
> qapi/misc-target.json | 71 +++++++++++++++++++++++++++++++++---------
> target/i386/monitor.c | 29 +++++++++++++----
> target/i386/sev.c | 22 +++++++------
> target/i386/sev_i386.h | 3 ++
> 4 files changed, 95 insertions(+), 30 deletions(-)
>
> diff --git a/qapi/misc-target.json b/qapi/misc-target.json
> index 3b05ad3dbf..80f994ff9b 100644
> --- a/qapi/misc-target.json
> +++ b/qapi/misc-target.json
> @@ -81,6 +81,49 @@
> 'send-update', 'receive-update' ],
> 'if': 'TARGET_I386' }
>
> +##
> +# @SevGuestType:
> +#
> +# An enumeration indicating the type of SEV guest being run.
> +#
> +# @sev: The guest is a legacy SEV or SEV-ES guest.
> +# @sev-snp: The guest is an SEV-SNP guest.
> +#
> +# Since: 6.2
> +##
> +{ 'enum': 'SevGuestType',
> + 'data': [ 'sev', 'sev-snp' ],
> + 'if': 'TARGET_I386' }
> +
> +##
> +# @SevGuestInfo:
> +#
> +# Information specific to legacy SEV/SEV-ES guests.
> +#
> +# @policy: SEV policy value
> +#
> +# @handle: SEV firmware handle
> +#
> +# Since: 2.12
> +##
> +{ 'struct': 'SevGuestInfo',
> + 'data': { 'policy': 'uint32',
> + 'handle': 'uint32' },
> + 'if': 'TARGET_I386' }
> +
> +##
> +# @SevSnpGuestInfo:
> +#
> +# Information specific to SEV-SNP guests.
> +#
> +# @policy: SEV-SNP policy value
> +#
> +# Since: 6.2
> +##
> +{ 'struct': 'SevSnpGuestInfo',
> + 'data': { 'policy': 'uint64' },
> + 'if': 'TARGET_I386' }
> +
> ##
> # @SevInfo:
> #
> @@ -94,25 +137,25 @@
> #
> # @build-id: SEV FW build id
> #
> -# @policy: SEV policy value
> -#
> # @state: SEV guest state
> #
> -# @handle: SEV firmware handle
> +# @sev-type: Type of SEV guest being run
> #
> # Since: 2.12
> ##
> -{ 'struct': 'SevInfo',
> - 'data': { 'enabled': 'bool',
> - 'api-major': 'uint8',
> - 'api-minor' : 'uint8',
> - 'build-id' : 'uint8',
> - 'policy' : 'uint32',
> - 'state' : 'SevState',
> - 'handle' : 'uint32'
> - },
> - 'if': 'TARGET_I386'
> -}
> +{ 'union': 'SevInfo',
> + 'base': { 'enabled': 'bool',
> + 'api-major': 'uint8',
> + 'api-minor' : 'uint8',
> + 'build-id' : 'uint8',
> + 'state' : 'SevState',
> + 'sev-type' : 'SevGuestType' },
> + 'discriminator': 'sev-type',
> + 'data': {
> + 'sev': 'SevGuestInfo',
> + 'sev-snp': 'SevSnpGuestInfo' },
> + 'if': 'TARGET_I386' }
> +
>
> ##
> # @query-sev:
> diff --git a/target/i386/monitor.c b/target/i386/monitor.c
> index 119211f0b0..85a8bc2bef 100644
> --- a/target/i386/monitor.c
> +++ b/target/i386/monitor.c
> @@ -692,20 +692,37 @@ void hmp_info_sev(Monitor *mon, const QDict *qdict)
> {
> SevInfo *info = sev_get_info();
>
> - if (info && info->enabled) {
> - monitor_printf(mon, "handle: %d\n", info->handle);
> + if (!info || !info->enabled) {
> + monitor_printf(mon, "SEV is not enabled\n");
> + goto out;
> + }
> +
> + if (sev_snp_enabled()) {
> monitor_printf(mon, "state: %s\n", SevState_str(info->state));
> monitor_printf(mon, "build: %d\n", info->build_id);
> monitor_printf(mon, "api version: %d.%d\n",
> info->api_major, info->api_minor);
> monitor_printf(mon, "debug: %s\n",
> - info->policy & SEV_POLICY_NODBG ? "off" : "on");
> - monitor_printf(mon, "key-sharing: %s\n",
> - info->policy & SEV_POLICY_NOKS ? "off" : "on");
> + info->u.sev_snp.policy & SEV_SNP_POLICY_DBG ? "on"
> + : "off");
> + monitor_printf(mon, "SMT allowed: %s\n",
> + info->u.sev_snp.policy & SEV_SNP_POLICY_SMT ? "on"
> + : "off");
> + monitor_printf(mon, "SEV type: %s\n", SevGuestType_str(info->sev_type));
> } else {
> - monitor_printf(mon, "SEV is not enabled\n");
> + monitor_printf(mon, "handle: %d\n", info->u.sev.handle);
> + monitor_printf(mon, "state: %s\n", SevState_str(info->state));
> + monitor_printf(mon, "build: %d\n", info->build_id);
> + monitor_printf(mon, "api version: %d.%d\n",
> + info->api_major, info->api_minor);
> + monitor_printf(mon, "debug: %s\n",
> + info->u.sev.policy & SEV_POLICY_NODBG ? "off" : "on");
> + monitor_printf(mon, "key-sharing: %s\n",
> + info->u.sev.policy & SEV_POLICY_NOKS ? "off" : "on");
> + monitor_printf(mon, "SEV type: %s\n", SevGuestType_str(info->sev_type));
> }
>
> +out:
> qapi_free_SevInfo(info);
> }
>
> diff --git a/target/i386/sev.c b/target/i386/sev.c
> index 72a6146295..fac2755e68 100644
> --- a/target/i386/sev.c
> +++ b/target/i386/sev.c
> @@ -704,25 +704,27 @@ sev_get_info(void)
> {
> SevInfo *info;
> SevCommonState *sev_common = SEV_COMMON(MACHINE(qdev_get_machine())->cgs);
> - SevGuestState *sev_guest =
> - (SevGuestState *)object_dynamic_cast(OBJECT(sev_common),
> - TYPE_SEV_GUEST);
>
> info = g_new0(SevInfo, 1);
> info->enabled = sev_enabled();
>
> if (info->enabled) {
> - if (sev_guest) {
> - info->handle = sev_guest->handle;
> - }
> info->api_major = sev_common->api_major;
> info->api_minor = sev_common->api_minor;
> info->build_id = sev_common->build_id;
> info->state = sev_common->state;
> - /* we only report the lower 32-bits of policy for SNP, ok for now... */
> - info->policy =
> - (uint32_t)object_property_get_uint(OBJECT(sev_common),
> - "policy", NULL);
> +
> + if (sev_snp_enabled()) {
> + info->sev_type = SEV_GUEST_TYPE_SEV_SNP;
> + info->u.sev_snp.policy =
> + object_property_get_uint(OBJECT(sev_common), "policy", NULL);
> + } else {
> + info->sev_type = SEV_GUEST_TYPE_SEV;
> + info->u.sev.handle = SEV_GUEST(sev_common)->handle;
> + info->u.sev.policy =
> + (uint32_t)object_property_get_uint(OBJECT(sev_common),
> + "policy", NULL);
> + }
> }
>
> return info;
> diff --git a/target/i386/sev_i386.h b/target/i386/sev_i386.h
> index e0e1a599be..948d8f1079 100644
> --- a/target/i386/sev_i386.h
> +++ b/target/i386/sev_i386.h
> @@ -28,6 +28,9 @@
> #define SEV_POLICY_DOMAIN 0x10
> #define SEV_POLICY_SEV 0x20
>
> +#define SEV_SNP_POLICY_SMT 0x10000
> +#define SEV_SNP_POLICY_DBG 0x80000
> +
> extern bool sev_es_enabled(void);
> extern bool sev_snp_enabled(void);
> extern uint64_t sev_get_me_mask(void);
> --
> 2.25.1
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2021-09-03 15:28 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-26 22:26 [RFC PATCH v2 00/12] Add AMD Secure Nested Paging (SEV-SNP) support Michael Roth
2021-08-26 22:26 ` [RFC PATCH v2 01/12] i386/sev: introduce "sev-common" type to encapsulate common SEV state Michael Roth
2021-09-01 14:18 ` Markus Armbruster
2021-09-03 15:11 ` Michael Roth
2021-08-26 22:26 ` [RFC PATCH v2 02/12] linux-header: add the SNP specific command Michael Roth
2021-09-03 20:36 ` Dov Murik
2021-09-03 20:36 ` Dov Murik
2021-09-07 14:27 ` Michael Roth
2021-08-26 22:26 ` [RFC PATCH v2 03/12] i386/sev: introduce 'sev-snp-guest' object Michael Roth
2021-09-01 14:29 ` Markus Armbruster
2021-09-03 15:15 ` Michael Roth
2021-09-03 21:12 ` Dov Murik
2021-09-03 21:12 ` Dov Murik
2021-09-07 14:20 ` Michael Roth
2021-08-26 22:26 ` [RFC PATCH v2 04/12] i386/sev: initialize SNP context Michael Roth
2021-09-05 7:07 ` Dov Murik
2021-09-05 7:07 ` Dov Murik
2021-09-05 13:58 ` Brijesh Singh
2021-09-05 17:09 ` Dov Murik
2021-09-05 17:09 ` Dov Murik
2021-09-05 9:19 ` Dov Murik
2021-09-05 9:19 ` Dov Murik
2021-09-05 14:05 ` Brijesh Singh
2021-09-05 17:03 ` Dov Murik
2021-09-05 17:03 ` Dov Murik
2021-08-26 22:26 ` [RFC PATCH v2 05/12] i386/sev: add the SNP launch start context Michael Roth
2021-08-26 22:26 ` [RFC PATCH v2 06/12] i386/sev: add support to encrypt BIOS when SEV-SNP is enabled Michael Roth
2021-08-26 22:26 ` [RFC PATCH v2 07/12] i386/sev: populate secrets and cpuid page and finalize the SNP launch Michael Roth
2021-09-03 20:24 ` Dov Murik
2021-09-03 20:24 ` Dov Murik
2021-09-07 16:18 ` Michael Roth
2021-08-26 22:26 ` [RFC PATCH v2 08/12] target/i386: set SEV-SNP CPUID bit when SNP enabled Michael Roth
2021-08-26 22:26 ` [RFC PATCH v2 09/12] target/i386: allow versioned CPUs to specify new cache_info Michael Roth
2021-08-26 22:26 ` [RFC PATCH v2 10/12] target/i386: add new EPYC CPU versions with updated cache_info Michael Roth
2021-08-26 22:26 ` [RFC PATCH v2 11/12] i386/sev: sev-snp: add support for CPUID validation Michael Roth
2021-09-05 10:02 ` Dov Murik
2021-09-05 10:02 ` Dov Murik
2021-09-07 16:50 ` Michael Roth
2021-09-07 17:44 ` Dov Murik
2021-09-07 17:44 ` Dov Murik
2021-08-26 22:26 ` [RFC PATCH v2 12/12] i386/sev: update query-sev QAPI format to handle SEV-SNP Michael Roth
2021-09-01 14:14 ` Markus Armbruster
2021-09-03 15:13 ` Michael Roth
2021-09-03 15:30 ` Daniel P. Berrangé
2021-09-03 15:30 ` Daniel P. Berrangé
2021-09-03 15:43 ` Michael Roth
2021-09-03 15:43 ` Michael Roth via
2021-09-03 15:58 ` Daniel P. Berrangé
2021-09-03 15:58 ` Daniel P. Berrangé
2021-09-03 16:01 ` Daniel P. Berrangé
2021-09-03 16:01 ` Daniel P. Berrangé
2021-09-04 5:41 ` Markus Armbruster
2021-09-07 11:52 ` Dr. David Alan Gilbert
2021-09-07 11:52 ` Dr. David Alan Gilbert
2021-09-07 14:33 ` Michael Roth
2021-09-07 14:33 ` Michael Roth via
2021-09-03 15:27 ` Daniel P. Berrangé [this message]
2021-09-03 15:27 ` Daniel P. Berrangé
2021-11-16 9:23 ` [RFC PATCH v2 00/12] Add AMD Secure Nested Paging (SEV-SNP) support Daniel P. Berrangé
2021-11-16 9:23 ` Daniel P. Berrangé
2021-11-16 11:54 ` Brijesh Singh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YTI+/A/ejS/tlYMf@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=brijesh.singh@amd.com \
--cc=ckuehl@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=dgilbert@redhat.com \
--cc=dovmurik@linux.ibm.com \
--cc=eblake@redhat.com \
--cc=ehabkost@redhat.com \
--cc=jejb@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=michael.roth@amd.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=thomas.lendacky@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.