Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d37f4267 authored by Jim Mattson's avatar Jim Mattson Committed by Radim Krčmář
Browse files

kvm: vmx: Change vmcs_field_type to vmcs_field_width



Per the SDM, "[VMCS] Fields are grouped by width (16-bit, 32-bit,
etc.) and type (guest-state, host-state, etc.)." Previously, the width
was indicated by vmcs_field_type. To avoid confusion when we start
dealing with both field width and field type, change vmcs_field_type
to vmcs_field_width.

Signed-off-by: default avatarJim Mattson <jmattson@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
parent 5b15706d
Loading
Loading
Loading
Loading
+19 −19
Original line number Original line Diff line number Diff line
@@ -3894,17 +3894,17 @@ static void free_kvm_area(void)
	}
	}
}
}


enum vmcs_field_type {
enum vmcs_field_width {
	VMCS_FIELD_TYPE_U16 = 0,
	VMCS_FIELD_WIDTH_U16 = 0,
	VMCS_FIELD_TYPE_U64 = 1,
	VMCS_FIELD_WIDTH_U64 = 1,
	VMCS_FIELD_TYPE_U32 = 2,
	VMCS_FIELD_WIDTH_U32 = 2,
	VMCS_FIELD_TYPE_NATURAL_WIDTH = 3
	VMCS_FIELD_WIDTH_NATURAL_WIDTH = 3
};
};


static inline int vmcs_field_type(unsigned long field)
static inline int vmcs_field_width(unsigned long field)
{
{
	if (0x1 & field)	/* the *_HIGH fields are all 32 bit */
	if (0x1 & field)	/* the *_HIGH fields are all 32 bit */
		return VMCS_FIELD_TYPE_U32;
		return VMCS_FIELD_WIDTH_U32;
	return (field >> 13) & 0x3 ;
	return (field >> 13) & 0x3 ;
}
}


@@ -3919,7 +3919,7 @@ static void init_vmcs_shadow_fields(void)


	for (i = j = 0; i < max_shadow_read_only_fields; i++) {
	for (i = j = 0; i < max_shadow_read_only_fields; i++) {
		u16 field = shadow_read_only_fields[i];
		u16 field = shadow_read_only_fields[i];
		if (vmcs_field_type(field) == VMCS_FIELD_TYPE_U64 &&
		if (vmcs_field_width(field) == VMCS_FIELD_WIDTH_U64 &&
		    (i + 1 == max_shadow_read_only_fields ||
		    (i + 1 == max_shadow_read_only_fields ||
		     shadow_read_only_fields[i + 1] != field + 1))
		     shadow_read_only_fields[i + 1] != field + 1))
			pr_err("Missing field from shadow_read_only_field %x\n",
			pr_err("Missing field from shadow_read_only_field %x\n",
@@ -3938,7 +3938,7 @@ static void init_vmcs_shadow_fields(void)


	for (i = j = 0; i < max_shadow_read_write_fields; i++) {
	for (i = j = 0; i < max_shadow_read_write_fields; i++) {
		u16 field = shadow_read_write_fields[i];
		u16 field = shadow_read_write_fields[i];
		if (vmcs_field_type(field) == VMCS_FIELD_TYPE_U64 &&
		if (vmcs_field_width(field) == VMCS_FIELD_WIDTH_U64 &&
		    (i + 1 == max_shadow_read_write_fields ||
		    (i + 1 == max_shadow_read_write_fields ||
		     shadow_read_write_fields[i + 1] != field + 1))
		     shadow_read_write_fields[i + 1] != field + 1))
			pr_err("Missing field from shadow_read_write_field %x\n",
			pr_err("Missing field from shadow_read_write_field %x\n",
@@ -7511,17 +7511,17 @@ static inline int vmcs12_read_any(struct kvm_vcpu *vcpu,


	p = ((char *)(get_vmcs12(vcpu))) + offset;
	p = ((char *)(get_vmcs12(vcpu))) + offset;


	switch (vmcs_field_type(field)) {
	switch (vmcs_field_width(field)) {
	case VMCS_FIELD_TYPE_NATURAL_WIDTH:
	case VMCS_FIELD_WIDTH_NATURAL_WIDTH:
		*ret = *((natural_width *)p);
		*ret = *((natural_width *)p);
		return 0;
		return 0;
	case VMCS_FIELD_TYPE_U16:
	case VMCS_FIELD_WIDTH_U16:
		*ret = *((u16 *)p);
		*ret = *((u16 *)p);
		return 0;
		return 0;
	case VMCS_FIELD_TYPE_U32:
	case VMCS_FIELD_WIDTH_U32:
		*ret = *((u32 *)p);
		*ret = *((u32 *)p);
		return 0;
		return 0;
	case VMCS_FIELD_TYPE_U64:
	case VMCS_FIELD_WIDTH_U64:
		*ret = *((u64 *)p);
		*ret = *((u64 *)p);
		return 0;
		return 0;
	default:
	default:
@@ -7538,17 +7538,17 @@ static inline int vmcs12_write_any(struct kvm_vcpu *vcpu,
	if (offset < 0)
	if (offset < 0)
		return offset;
		return offset;


	switch (vmcs_field_type(field)) {
	switch (vmcs_field_width(field)) {
	case VMCS_FIELD_TYPE_U16:
	case VMCS_FIELD_WIDTH_U16:
		*(u16 *)p = field_value;
		*(u16 *)p = field_value;
		return 0;
		return 0;
	case VMCS_FIELD_TYPE_U32:
	case VMCS_FIELD_WIDTH_U32:
		*(u32 *)p = field_value;
		*(u32 *)p = field_value;
		return 0;
		return 0;
	case VMCS_FIELD_TYPE_U64:
	case VMCS_FIELD_WIDTH_U64:
		*(u64 *)p = field_value;
		*(u64 *)p = field_value;
		return 0;
		return 0;
	case VMCS_FIELD_TYPE_NATURAL_WIDTH:
	case VMCS_FIELD_WIDTH_NATURAL_WIDTH:
		*(natural_width *)p = field_value;
		*(natural_width *)p = field_value;
		return 0;
		return 0;
	default:
	default: