Commit cb9fb5fc authored by Sean Christopherson's avatar Sean Christopherson
Browse files

KVM: nVMX: Update VMCS12_REVISION comment to state it should never change



Rewrite the comment above VMCS12_REVISION to unequivocally state that the
ID must never change.  KVM_{G,S}ET_NESTED_STATE have been officially
supported for some time now, i.e. changing VMCS12_REVISION would break
userspace.

Opportunistically add a blurb to the CHECK_OFFSET() comment to make it
explicitly clear that new fields are allowed, i.e. that the restriction
on the layout is all about backwards compatibility.

No functional change intended.

Cc: Jim Mattson <jmattson@google.com>
Reviewed-by: default avatarJim Mattson <jmattson@google.com>
Link: https://lore.kernel.org/r/20240613190103.1054877-1-seanjc@google.com


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent 02b0d3b9
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -188,12 +188,13 @@ struct __packed vmcs12 {
};

/*
 * VMCS12_REVISION is an arbitrary id that should be changed if the content or
 * layout of struct vmcs12 is changed. MSR_IA32_VMX_BASIC returns this id, and
 * VMPTRLD verifies that the VMCS region that L1 is loading contains this id.
 * VMCS12_REVISION is KVM's arbitrary ID for the layout of struct vmcs12.  KVM
 * enumerates this value to L1 via MSR_IA32_VMX_BASIC, and checks the revision
 * ID during nested VMPTRLD to verify that L1 is loading a VMCS that adhere's
 * to KVM's virtual CPU definition.
 *
 * IMPORTANT: Changing this value will break save/restore compatibility with
 * older kvm releases.
 * DO NOT change this value, as it will break save/restore compatibility with
 * older KVM releases.
 */
#define VMCS12_REVISION 0x11e57ed0

@@ -206,7 +207,8 @@ struct __packed vmcs12 {
#define VMCS12_SIZE		KVM_STATE_NESTED_VMX_VMCS_SIZE

/*
 * For save/restore compatibility, the vmcs12 field offsets must not change.
 * For save/restore compatibility, the vmcs12 field offsets must not change,
 * although appending fields and/or filling gaps is obviously allowed.
 */
#define CHECK_OFFSET(field, loc) \
	ASSERT_STRUCT_OFFSET(struct vmcs12, field, loc)