All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: "Naveen N Rao (AMD)" <naveen@kernel.org>
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
	qemu-devel <qemu-devel@nongnu.org>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Eric Blake" <eblake@redhat.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	"Zhao Liu" <zhao1.liu@intel.com>,
	"Nikunj A Dadhania" <nikunj@amd.com>,
	"Tom Lendacky" <thomas.lendacky@amd.com>,
	"Michael Roth" <michael.roth@amd.com>,
	"Roy Hopkins" <roy.hopkins@randomman.co.uk>,
	"Srikanth Aithal" <srikanth.aithal@amd.com>,
	"Kim Phillips" <kim.phillips@amd.com>,
	"Joerg Roedel" <joro@8bytes.org>
Subject: Re: [PATCH v4 6/9] target/i386: SEV: Add support for enabling debug-swap SEV feature
Date: Mon, 01 Jun 2026 13:52:00 +0200	[thread overview]
Message-ID: <87v7c27a1r.fsf@pond.sub.org> (raw)
In-Reply-To: <416e7b156e49f95958f8c5c8549b48a88c1995fc.1779281646.git.naveen@kernel.org> (Naveen N. Rao's message of "Wed, 20 May 2026 18:57:59 +0530")

"Naveen N Rao (AMD)" <naveen@kernel.org> writes:

> Add support for enabling debug-swap VMSA SEV feature in SEV-ES and
> SEV-SNP guests through a new "debug-swap" boolean property on SEV guest
> objects. Though the boolean property is available for plain SEV guests,
> check_sev_features() has a check that rejects attempts to enable any SEV
> feature for a plain SEV guest.

Why does it make sense to add the property to objects where it's not
supported?

> Though this SEV feature is called "Debug virtualization" in the APM, KVM
> calls this "debug swap" so use the same name for consistency.

Thanks for explaining this.

> Sample command-line:
>   -machine q35,confidential-guest-support=sev0 \
>   -object sev-snp-guest,id=sev0,cbitpos=51,reduced-phys-bits=1,debug-swap=on
>
> Restrict debug-swap to SEV-SNP guests at this time due to a
> compatibility issue with SEV-ES pflash devices.

What are these issues?

> Signed-off-by: Naveen N Rao (AMD) <naveen@kernel.org>
> ---
>  target/i386/sev.h |  1 +
>  target/i386/sev.c | 26 ++++++++++++++++++++++++++
>  qapi/qom.json     |  7 ++++++-
>  3 files changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/target/i386/sev.h b/target/i386/sev.h
> index b84ca3ce0b67..d19a39669747 100644
> --- a/target/i386/sev.h
> +++ b/target/i386/sev.h
> @@ -47,6 +47,7 @@ bool sev_snp_enabled(void);
>  #define SEV_SNP_POLICY_DBG      0x80000
>  
>  #define SVM_SEV_FEAT_SNP_ACTIVE     BIT(0)
> +#define SVM_SEV_FEAT_DEBUG_SWAP     BIT(5)
>  
>  typedef struct SevKernelLoaderContext {
>      char *setup_data;
> diff --git a/target/i386/sev.c b/target/i386/sev.c
> index 4553fe4d6e4a..4532b1b6a484 100644
> --- a/target/i386/sev.c
> +++ b/target/i386/sev.c
> @@ -328,6 +328,11 @@ sev_set_guest_state(SevCommonState *sev_common, SevState new_state)
>      sev_common->state = new_state;
>  }
>  
> +static bool is_sev_feature_set(SevCommonState *sev_common, uint64_t feature)
> +{
> +    return !!(sev_common->sev_features & feature);
> +}
> +
>  static void sev_set_feature(SevCommonState *sev_common, uint64_t feature, bool set)
>  {
>      if (set) {
> @@ -527,6 +532,12 @@ static int check_sev_features(SevCommonState *sev_common, uint64_t sev_features,
>              __func__);
>          return -1;
>      }
> +    if (sev_features && sev_es_enabled() && !sev_snp_enabled()) {
> +        error_setg(errp,
> +                   "%s: SEV features are not supported with SEV-ES at this time",
> +                   __func__);

Once again, I'm confused about SEV.  Remind me: what kinds of SEV guests
exist?  The commit message suggests "plain", "ES", "SNP".  What do
sev_es_enabled() and sev_snp_enabled() return for each of these?

What are the "SEV features"?  Can we expect users to know?  I suspect
they need to know to fix the problem!

Are they exactly debug-swap?

__func__ in an error message meant for users is an anti-pattern.  Not an
objection to this patch; it matches existing errors around here.

> +        return -1;
> +    }
>      if (sev_features && !sev_es_enabled()) {
>          error_setg(errp,
>                     "%s: SEV features require either SEV-ES or SEV-SNP to be enabled",
> @@ -2800,6 +2811,16 @@ static int cgs_set_guest_policy(ConfidentialGuestPolicyType policy_type,
>      return 0;
>  }
>  
> +static bool sev_common_get_debug_swap(Object *obj, Error **errp)
> +{
> +    return is_sev_feature_set(SEV_COMMON(obj), SVM_SEV_FEAT_DEBUG_SWAP);
> +}
> +
> +static void sev_common_set_debug_swap(Object *obj, bool value, Error **errp)
> +{
> +    sev_set_feature(SEV_COMMON(obj), SVM_SEV_FEAT_DEBUG_SWAP, value);
> +}
> +
>  static void
>  sev_common_class_init(ObjectClass *oc, const void *data)
>  {
> @@ -2825,6 +2846,11 @@ sev_common_class_init(ObjectClass *oc, const void *data)
>                                     sev_common_set_kernel_hashes);
>      object_class_property_set_description(oc, "kernel-hashes",
>              "add kernel hashes to guest firmware for measured Linux boot");
> +    object_class_property_add_bool(oc, "debug-swap",
> +                                   sev_common_get_debug_swap,
> +                                   sev_common_set_debug_swap);
> +    object_class_property_set_description(oc, "debug-swap",
> +            "enable virtualization of debug registers");
>  }
>  
>  static void
> diff --git a/qapi/qom.json b/qapi/qom.json
> index dd45ac1087c3..e2bb716b603e 100644
> --- a/qapi/qom.json
> +++ b/qapi/qom.json
> @@ -1017,6 +1017,10 @@
>  #     designated guest firmware page for measured boot with -kernel
>  #     (default: false) (since 6.2)
>  #
> +# @debug-swap: enable virtualization of debug registers,
> +#     only supported on SEV-ES and SEV-SNP guests
> +#     (default: false) (since 11.1)
> +#
>  # Features:
>  #
>  # @confidential-guest-reset: If present, the hypervisor supports
> @@ -1028,7 +1032,8 @@
>    'data': { '*sev-device': 'str',
>              '*cbitpos': 'uint32',
>              'reduced-phys-bits': 'uint32',
> -            '*kernel-hashes': 'bool' },
> +            '*kernel-hashes': 'bool',
> +            '*debug-swap': 'bool' },
>    'features': ['confidential-guest-reset']}
>  
>  ##

This is SevCommonProperties, the common base type of SevGuestProperties
(configuration for sev-guest QOM objects) and SevSnpGuestProperties
(sev-snp-guest objects).

So, all SEV objects have property @debug-swap.  I figure the check you
add to check_sev_features() rejects it for certain SEV objects.  I don't
quite understand for which ones.



  reply	other threads:[~2026-06-01 11:52 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-20 13:27 [PATCH v4 0/9] target/i386: SEV: Add support for enabling VMSA SEV features Naveen N Rao (AMD)
2026-05-20 13:27 ` [PATCH v4 1/9] target/i386: SEV: Generalize handling of SVM_SEV_FEAT_SNP_ACTIVE Naveen N Rao (AMD)
2026-05-20 13:27 ` [PATCH v4 2/9] target/i386: SEV: Ensure SEV features are only set through qemu cli or IGVM Naveen N Rao (AMD)
2026-05-20 13:27 ` [PATCH v4 3/9] target/i386: SEV: Consolidate SEV feature validation to common init path Naveen N Rao (AMD)
2026-05-20 13:27 ` [PATCH v4 4/9] target/i386: SEV: Validate that SEV-ES is enabled when VMSA features are used Naveen N Rao (AMD)
2026-05-20 13:27 ` [PATCH v4 5/9] target/i386: SEV: Enable use of KVM_SEV_INIT2 for SEV-ES guests Naveen N Rao (AMD)
2026-05-20 13:27 ` [PATCH v4 6/9] target/i386: SEV: Add support for enabling debug-swap SEV feature Naveen N Rao (AMD)
2026-06-01 11:52   ` Markus Armbruster [this message]
2026-06-02  7:26     ` Naveen N Rao
2026-05-20 13:28 ` [PATCH v4 7/9] target/i386: SEV: Add support for enabling Secure TSC " Naveen N Rao (AMD)
2026-05-20 13:28 ` [PATCH v4 8/9] target/i386: SEV: Add support for setting TSC frequency for Secure TSC Naveen N Rao (AMD)
2026-05-20 13:28 ` [PATCH v4 9/9] target/i386: SEV: Refactor check_sev_features() Naveen N Rao (AMD)

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=87v7c27a1r.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=joro@8bytes.org \
    --cc=kim.phillips@amd.com \
    --cc=michael.roth@amd.com \
    --cc=mtosatti@redhat.com \
    --cc=naveen@kernel.org \
    --cc=nikunj@amd.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=roy.hopkins@randomman.co.uk \
    --cc=srikanth.aithal@amd.com \
    --cc=thomas.lendacky@amd.com \
    --cc=zhao1.liu@intel.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.