Michael Roth <[email protected]> writes:
> For confidential guests, guest_memfd is currently used only for private
> guest memory, and normal guest memory comes from the configured memory
> backend just as it does for a non-confidential guest. It is now possible
> to use the same physical memory to back a particular GPA regardless of
> whether it is in a shared or private state. This avoids the need to
> rely on discarding memory between shared/private conversions (to avoid
> doubled memory usage), and is intended to be the primary mode of using
> guest_memfd for confidential guests moving forward, and future features
> like hugepage support will likely require it.
>
> Add an option to enable this support. Since ConfidentialGuestSupport is
> already used to track some guest_memfd-related functionality (e.g.
> whether it is required for the configured machine), similarly introduce
> this option as a property of ConfidentialGuestSupport.
>
> Also add the KVM-specific checks to enable this support, but leave the
> option disabled until other required changes are implemented for
> CGS variants that intend to make use of KVM's in-place conversion
> support.
>
> While technically the convert-in-place option could be introduced as an
> SEV-specific option, it is a given that TDX will also be introducing
> in-place conversion support based on the same guest_memfd kernel
> infrastructure, so introduce it via a new
> ConfidentialGuestSupportProperties base class that other confidential VM
> implementations can utilized for common options.
>
> Signed-off-by: Michael Roth <[email protected]>
[...]
> diff --git a/qapi/qom.json b/qapi/qom.json
> index 909add4299..20d6fefb04 100644
> --- a/qapi/qom.json
> +++ b/qapi/qom.json
> @@ -1005,6 +1005,21 @@
> 'if': 'CONFIG_IGVM',
> 'data': { 'file': 'str' } }
>
> +##
> +# @ConfidentialGuestSupportProperties:
> +#
> +# Properties for ConfidentialGuestSupport base class.
> +#
> +# @convert-in-place: If true, the same physical pages are reused
> +# when memory is converted between shared and private states.
> +# If false (default), separate allocations are used depending
> +# on whether the page is private or shared.
Any guidance on when to enable @convert-in-place?
> +#
> +# Since: 11.2
> +##
> +{ 'struct': 'ConfidentialGuestSupportProperties',
> + 'data': { '*convert-in-place': 'bool' } }
> +
> ##
> # @SevCommonProperties:
> #
> @@ -1033,6 +1048,7 @@
> # Since: 9.1
> ##
> { 'struct': 'SevCommonProperties',
> + 'base': 'ConfidentialGuestSupportProperties',
> 'data': { '*sev-device': 'str',
> '*cbitpos': 'uint32',
> 'reduced-phys-bits': 'uint32',
Can you explain why you put @convert-in-place into a new base type
instead of right here?