diff mbox

[3/4] kvm: nVMX: Introduce/rename enums for VMCS field encodings

Message ID 20170706195218.98520-4-jmattson@google.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jim Mattson July 6, 2017, 7:52 p.m. UTC
A new vmcs_field_type enum is introduced, which describes the 'type'
of a VMCS field. The old vmcs_field_type enum is renamed to
vmcs_field_width, since it actually refers to the width rather than
the type of a VMCS field.

Signed-off-by: Jim Mattson <jmattson@google.com>
---
 arch/x86/kvm/vmx.c | 63 +++++++++++++++++++++++++++++++-----------------------
 1 file changed, 36 insertions(+), 27 deletions(-)

Comments

Paolo Bonzini July 7, 2017, 8:25 a.m. UTC | #1
On 06/07/2017 21:52, Jim Mattson wrote:
> A new vmcs_field_type enum is introduced, which describes the 'type'
> of a VMCS field. The old vmcs_field_type enum is renamed to
> vmcs_field_width, since it actually refers to the width rather than
> the type of a VMCS field.
> 
> Signed-off-by: Jim Mattson <jmattson@google.com>
> ---
>  arch/x86/kvm/vmx.c | 63 +++++++++++++++++++++++++++++++-----------------------
>  1 file changed, 36 insertions(+), 27 deletions(-)
> 
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index 345a413621c5..2d0fe813fa34 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -7197,18 +7197,27 @@ static int handle_vmresume(struct kvm_vcpu *vcpu)
>  	return nested_vmx_run(vcpu, false);
>  }
>  
> +enum vmcs_field_width {
> +	VMCS_FIELD_WIDTH_U16 = 0,
> +	VMCS_FIELD_WIDTH_U64 = 1,
> +	VMCS_FIELD_WIDTH_U32 = 2,
> +	VMCS_FIELD_WIDTH_NATURAL = 3,
> +	VMCS_FIELD_WIDTHS = 4
> +};
> +
>  enum vmcs_field_type {
> -	VMCS_FIELD_TYPE_U16 = 0,
> -	VMCS_FIELD_TYPE_U64 = 1,
> -	VMCS_FIELD_TYPE_U32 = 2,
> -	VMCS_FIELD_TYPE_NATURAL_WIDTH = 3
> +	VMCS_FIELD_TYPE_CONTROL = 0,
> +	VMCS_FIELD_TYPE_DATA = 1,
> +	VMCS_FIELD_TYPE_GUEST = 2,
> +	VMCS_FIELD_TYPE_HOST = 3,
> +	VMCS_FIELD_TYPES = 4
>  };
>  
> -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 */
> -		return VMCS_FIELD_TYPE_U32;
> -	return (field >> 13) & 0x3 ;
> +		return VMCS_FIELD_WIDTH_U32;
> +	return (field >> 13) & 0x3;
>  }
>  
>  static inline int vmcs_field_readonly(unsigned long field)
> @@ -7234,17 +7243,17 @@ static inline int vmcs12_read_any(struct kvm_vcpu *vcpu,
>  
>  	p = ((char *)(get_vmcs12(vcpu))) + offset;
>  
> -	switch (vmcs_field_type(field)) {
> -	case VMCS_FIELD_TYPE_NATURAL_WIDTH:
> +	switch (vmcs_field_width(field)) {
> +	case VMCS_FIELD_WIDTH_NATURAL:
>  		*ret = *((natural_width *)p);
>  		return 0;
> -	case VMCS_FIELD_TYPE_U16:
> +	case VMCS_FIELD_WIDTH_U16:
>  		*ret = *((u16 *)p);
>  		return 0;
> -	case VMCS_FIELD_TYPE_U32:
> +	case VMCS_FIELD_WIDTH_U32:
>  		*ret = *((u32 *)p);
>  		return 0;
> -	case VMCS_FIELD_TYPE_U64:
> +	case VMCS_FIELD_WIDTH_U64:
>  		*ret = *((u64 *)p);
>  		return 0;
>  	default:
> @@ -7261,17 +7270,17 @@ static inline int vmcs12_write_any(struct kvm_vcpu *vcpu,
>  	if (offset < 0)
>  		return offset;
>  
> -	switch (vmcs_field_type(field)) {
> -	case VMCS_FIELD_TYPE_U16:
> +	switch (vmcs_field_width(field)) {
> +	case VMCS_FIELD_WIDTH_U16:
>  		*(u16 *)p = field_value;
>  		return 0;
> -	case VMCS_FIELD_TYPE_U32:
> +	case VMCS_FIELD_WIDTH_U32:
>  		*(u32 *)p = field_value;
>  		return 0;
> -	case VMCS_FIELD_TYPE_U64:
> +	case VMCS_FIELD_WIDTH_U64:
>  		*(u64 *)p = field_value;
>  		return 0;
> -	case VMCS_FIELD_TYPE_NATURAL_WIDTH:
> +	case VMCS_FIELD_WIDTH_NATURAL:
>  		*(natural_width *)p = field_value;
>  		return 0;
>  	default:
> @@ -7285,17 +7294,17 @@ static u64 vmcs_read_any(unsigned long field)
>  {
>  	u64 field_value;
>  
> -	switch (vmcs_field_type(field)) {
> -	case VMCS_FIELD_TYPE_U16:
> +	switch (vmcs_field_width(field)) {
> +	case VMCS_FIELD_WIDTH_U16:
>  		field_value = vmcs_read16(field);
>  		break;
> -	case VMCS_FIELD_TYPE_U32:
> +	case VMCS_FIELD_WIDTH_U32:
>  		field_value = vmcs_read32(field);
>  		break;
> -	case VMCS_FIELD_TYPE_U64:
> +	case VMCS_FIELD_WIDTH_U64:
>  		field_value = vmcs_read64(field);
>  		break;
> -	case VMCS_FIELD_TYPE_NATURAL_WIDTH:
> +	case VMCS_FIELD_WIDTH_NATURAL:
>  		field_value = vmcs_readl(field);
>  		break;
>  	}
> @@ -7328,17 +7337,17 @@ static void copy_shadow_to_vmcs12(struct vcpu_vmx *vmx)
>  
>  static void vmcs_write_any(unsigned long field, u64 field_value)
>  {
> -	switch (vmcs_field_type(field)) {
> -	case VMCS_FIELD_TYPE_U16:
> +	switch (vmcs_field_width(field)) {
> +	case VMCS_FIELD_WIDTH_U16:
>  		vmcs_write16(field, (u16)field_value);
>  		break;
> -	case VMCS_FIELD_TYPE_U32:
> +	case VMCS_FIELD_WIDTH_U32:
>  		vmcs_write32(field, (u32)field_value);
>  		break;
> -	case VMCS_FIELD_TYPE_U64:
> +	case VMCS_FIELD_WIDTH_U64:
>  		vmcs_write64(field, (u64)field_value);
>  		break;
> -	case VMCS_FIELD_TYPE_NATURAL_WIDTH:
> +	case VMCS_FIELD_WIDTH_NATURAL:
>  		vmcs_writel(field, (long)field_value);
>  		break;
>  	}
> 

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Jim Mattson July 7, 2017, 7:53 p.m. UTC | #2
Please abandon this change for now.

On Fri, Jul 7, 2017 at 1:25 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>
>
> On 06/07/2017 21:52, Jim Mattson wrote:
>> A new vmcs_field_type enum is introduced, which describes the 'type'
>> of a VMCS field. The old vmcs_field_type enum is renamed to
>> vmcs_field_width, since it actually refers to the width rather than
>> the type of a VMCS field.
>>
>> Signed-off-by: Jim Mattson <jmattson@google.com>
>> ---
>>  arch/x86/kvm/vmx.c | 63 +++++++++++++++++++++++++++++++-----------------------
>>  1 file changed, 36 insertions(+), 27 deletions(-)
>>
>> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
>> index 345a413621c5..2d0fe813fa34 100644
>> --- a/arch/x86/kvm/vmx.c
>> +++ b/arch/x86/kvm/vmx.c
>> @@ -7197,18 +7197,27 @@ static int handle_vmresume(struct kvm_vcpu *vcpu)
>>       return nested_vmx_run(vcpu, false);
>>  }
>>
>> +enum vmcs_field_width {
>> +     VMCS_FIELD_WIDTH_U16 = 0,
>> +     VMCS_FIELD_WIDTH_U64 = 1,
>> +     VMCS_FIELD_WIDTH_U32 = 2,
>> +     VMCS_FIELD_WIDTH_NATURAL = 3,
>> +     VMCS_FIELD_WIDTHS = 4
>> +};
>> +
>>  enum vmcs_field_type {
>> -     VMCS_FIELD_TYPE_U16 = 0,
>> -     VMCS_FIELD_TYPE_U64 = 1,
>> -     VMCS_FIELD_TYPE_U32 = 2,
>> -     VMCS_FIELD_TYPE_NATURAL_WIDTH = 3
>> +     VMCS_FIELD_TYPE_CONTROL = 0,
>> +     VMCS_FIELD_TYPE_DATA = 1,
>> +     VMCS_FIELD_TYPE_GUEST = 2,
>> +     VMCS_FIELD_TYPE_HOST = 3,
>> +     VMCS_FIELD_TYPES = 4
>>  };
>>
>> -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 */
>> -             return VMCS_FIELD_TYPE_U32;
>> -     return (field >> 13) & 0x3 ;
>> +             return VMCS_FIELD_WIDTH_U32;
>> +     return (field >> 13) & 0x3;
>>  }
>>
>>  static inline int vmcs_field_readonly(unsigned long field)
>> @@ -7234,17 +7243,17 @@ static inline int vmcs12_read_any(struct kvm_vcpu *vcpu,
>>
>>       p = ((char *)(get_vmcs12(vcpu))) + offset;
>>
>> -     switch (vmcs_field_type(field)) {
>> -     case VMCS_FIELD_TYPE_NATURAL_WIDTH:
>> +     switch (vmcs_field_width(field)) {
>> +     case VMCS_FIELD_WIDTH_NATURAL:
>>               *ret = *((natural_width *)p);
>>               return 0;
>> -     case VMCS_FIELD_TYPE_U16:
>> +     case VMCS_FIELD_WIDTH_U16:
>>               *ret = *((u16 *)p);
>>               return 0;
>> -     case VMCS_FIELD_TYPE_U32:
>> +     case VMCS_FIELD_WIDTH_U32:
>>               *ret = *((u32 *)p);
>>               return 0;
>> -     case VMCS_FIELD_TYPE_U64:
>> +     case VMCS_FIELD_WIDTH_U64:
>>               *ret = *((u64 *)p);
>>               return 0;
>>       default:
>> @@ -7261,17 +7270,17 @@ static inline int vmcs12_write_any(struct kvm_vcpu *vcpu,
>>       if (offset < 0)
>>               return offset;
>>
>> -     switch (vmcs_field_type(field)) {
>> -     case VMCS_FIELD_TYPE_U16:
>> +     switch (vmcs_field_width(field)) {
>> +     case VMCS_FIELD_WIDTH_U16:
>>               *(u16 *)p = field_value;
>>               return 0;
>> -     case VMCS_FIELD_TYPE_U32:
>> +     case VMCS_FIELD_WIDTH_U32:
>>               *(u32 *)p = field_value;
>>               return 0;
>> -     case VMCS_FIELD_TYPE_U64:
>> +     case VMCS_FIELD_WIDTH_U64:
>>               *(u64 *)p = field_value;
>>               return 0;
>> -     case VMCS_FIELD_TYPE_NATURAL_WIDTH:
>> +     case VMCS_FIELD_WIDTH_NATURAL:
>>               *(natural_width *)p = field_value;
>>               return 0;
>>       default:
>> @@ -7285,17 +7294,17 @@ static u64 vmcs_read_any(unsigned long field)
>>  {
>>       u64 field_value;
>>
>> -     switch (vmcs_field_type(field)) {
>> -     case VMCS_FIELD_TYPE_U16:
>> +     switch (vmcs_field_width(field)) {
>> +     case VMCS_FIELD_WIDTH_U16:
>>               field_value = vmcs_read16(field);
>>               break;
>> -     case VMCS_FIELD_TYPE_U32:
>> +     case VMCS_FIELD_WIDTH_U32:
>>               field_value = vmcs_read32(field);
>>               break;
>> -     case VMCS_FIELD_TYPE_U64:
>> +     case VMCS_FIELD_WIDTH_U64:
>>               field_value = vmcs_read64(field);
>>               break;
>> -     case VMCS_FIELD_TYPE_NATURAL_WIDTH:
>> +     case VMCS_FIELD_WIDTH_NATURAL:
>>               field_value = vmcs_readl(field);
>>               break;
>>       }
>> @@ -7328,17 +7337,17 @@ static void copy_shadow_to_vmcs12(struct vcpu_vmx *vmx)
>>
>>  static void vmcs_write_any(unsigned long field, u64 field_value)
>>  {
>> -     switch (vmcs_field_type(field)) {
>> -     case VMCS_FIELD_TYPE_U16:
>> +     switch (vmcs_field_width(field)) {
>> +     case VMCS_FIELD_WIDTH_U16:
>>               vmcs_write16(field, (u16)field_value);
>>               break;
>> -     case VMCS_FIELD_TYPE_U32:
>> +     case VMCS_FIELD_WIDTH_U32:
>>               vmcs_write32(field, (u32)field_value);
>>               break;
>> -     case VMCS_FIELD_TYPE_U64:
>> +     case VMCS_FIELD_WIDTH_U64:
>>               vmcs_write64(field, (u64)field_value);
>>               break;
>> -     case VMCS_FIELD_TYPE_NATURAL_WIDTH:
>> +     case VMCS_FIELD_WIDTH_NATURAL:
>>               vmcs_writel(field, (long)field_value);
>>               break;
>>       }
>>
>
> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
diff mbox

Patch

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 345a413621c5..2d0fe813fa34 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -7197,18 +7197,27 @@  static int handle_vmresume(struct kvm_vcpu *vcpu)
 	return nested_vmx_run(vcpu, false);
 }
 
+enum vmcs_field_width {
+	VMCS_FIELD_WIDTH_U16 = 0,
+	VMCS_FIELD_WIDTH_U64 = 1,
+	VMCS_FIELD_WIDTH_U32 = 2,
+	VMCS_FIELD_WIDTH_NATURAL = 3,
+	VMCS_FIELD_WIDTHS = 4
+};
+
 enum vmcs_field_type {
-	VMCS_FIELD_TYPE_U16 = 0,
-	VMCS_FIELD_TYPE_U64 = 1,
-	VMCS_FIELD_TYPE_U32 = 2,
-	VMCS_FIELD_TYPE_NATURAL_WIDTH = 3
+	VMCS_FIELD_TYPE_CONTROL = 0,
+	VMCS_FIELD_TYPE_DATA = 1,
+	VMCS_FIELD_TYPE_GUEST = 2,
+	VMCS_FIELD_TYPE_HOST = 3,
+	VMCS_FIELD_TYPES = 4
 };
 
-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 */
-		return VMCS_FIELD_TYPE_U32;
-	return (field >> 13) & 0x3 ;
+		return VMCS_FIELD_WIDTH_U32;
+	return (field >> 13) & 0x3;
 }
 
 static inline int vmcs_field_readonly(unsigned long field)
@@ -7234,17 +7243,17 @@  static inline int vmcs12_read_any(struct kvm_vcpu *vcpu,
 
 	p = ((char *)(get_vmcs12(vcpu))) + offset;
 
-	switch (vmcs_field_type(field)) {
-	case VMCS_FIELD_TYPE_NATURAL_WIDTH:
+	switch (vmcs_field_width(field)) {
+	case VMCS_FIELD_WIDTH_NATURAL:
 		*ret = *((natural_width *)p);
 		return 0;
-	case VMCS_FIELD_TYPE_U16:
+	case VMCS_FIELD_WIDTH_U16:
 		*ret = *((u16 *)p);
 		return 0;
-	case VMCS_FIELD_TYPE_U32:
+	case VMCS_FIELD_WIDTH_U32:
 		*ret = *((u32 *)p);
 		return 0;
-	case VMCS_FIELD_TYPE_U64:
+	case VMCS_FIELD_WIDTH_U64:
 		*ret = *((u64 *)p);
 		return 0;
 	default:
@@ -7261,17 +7270,17 @@  static inline int vmcs12_write_any(struct kvm_vcpu *vcpu,
 	if (offset < 0)
 		return offset;
 
-	switch (vmcs_field_type(field)) {
-	case VMCS_FIELD_TYPE_U16:
+	switch (vmcs_field_width(field)) {
+	case VMCS_FIELD_WIDTH_U16:
 		*(u16 *)p = field_value;
 		return 0;
-	case VMCS_FIELD_TYPE_U32:
+	case VMCS_FIELD_WIDTH_U32:
 		*(u32 *)p = field_value;
 		return 0;
-	case VMCS_FIELD_TYPE_U64:
+	case VMCS_FIELD_WIDTH_U64:
 		*(u64 *)p = field_value;
 		return 0;
-	case VMCS_FIELD_TYPE_NATURAL_WIDTH:
+	case VMCS_FIELD_WIDTH_NATURAL:
 		*(natural_width *)p = field_value;
 		return 0;
 	default:
@@ -7285,17 +7294,17 @@  static u64 vmcs_read_any(unsigned long field)
 {
 	u64 field_value;
 
-	switch (vmcs_field_type(field)) {
-	case VMCS_FIELD_TYPE_U16:
+	switch (vmcs_field_width(field)) {
+	case VMCS_FIELD_WIDTH_U16:
 		field_value = vmcs_read16(field);
 		break;
-	case VMCS_FIELD_TYPE_U32:
+	case VMCS_FIELD_WIDTH_U32:
 		field_value = vmcs_read32(field);
 		break;
-	case VMCS_FIELD_TYPE_U64:
+	case VMCS_FIELD_WIDTH_U64:
 		field_value = vmcs_read64(field);
 		break;
-	case VMCS_FIELD_TYPE_NATURAL_WIDTH:
+	case VMCS_FIELD_WIDTH_NATURAL:
 		field_value = vmcs_readl(field);
 		break;
 	}
@@ -7328,17 +7337,17 @@  static void copy_shadow_to_vmcs12(struct vcpu_vmx *vmx)
 
 static void vmcs_write_any(unsigned long field, u64 field_value)
 {
-	switch (vmcs_field_type(field)) {
-	case VMCS_FIELD_TYPE_U16:
+	switch (vmcs_field_width(field)) {
+	case VMCS_FIELD_WIDTH_U16:
 		vmcs_write16(field, (u16)field_value);
 		break;
-	case VMCS_FIELD_TYPE_U32:
+	case VMCS_FIELD_WIDTH_U32:
 		vmcs_write32(field, (u32)field_value);
 		break;
-	case VMCS_FIELD_TYPE_U64:
+	case VMCS_FIELD_WIDTH_U64:
 		vmcs_write64(field, (u64)field_value);
 		break;
-	case VMCS_FIELD_TYPE_NATURAL_WIDTH:
+	case VMCS_FIELD_WIDTH_NATURAL:
 		vmcs_writel(field, (long)field_value);
 		break;
 	}