[PATCH 05/13] i386: hvf: Use ins_len to advance IP

Roman Bolshakov posted 13 patches 5 years, 8 months ago
Maintainers: Richard Henderson <rth@twiddle.net>, Paolo Bonzini <pbonzini@redhat.com>, Eduardo Habkost <ehabkost@redhat.com>, Roman Bolshakov <r.bolshakov@yadro.com>
[PATCH 05/13] i386: hvf: Use ins_len to advance IP
Posted by Roman Bolshakov 5 years, 8 months ago
There's no need to read VMCS twice, instruction length is already
available in ins_len.

Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
---
 target/i386/hvf/hvf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c
index 9ccdb7e7c7..8ff1d25521 100644
--- a/target/i386/hvf/hvf.c
+++ b/target/i386/hvf/hvf.c
@@ -871,7 +871,7 @@ int hvf_vcpu_exec(CPUState *cpu)
             } else {
                 simulate_wrmsr(cpu);
             }
-            RIP(env) += rvmcs(cpu->hvf_fd, VMCS_EXIT_INSTRUCTION_LENGTH);
+            RIP(env) += ins_len;
             store_regs(cpu);
             break;
         }
-- 
2.26.1


Re: [PATCH 05/13] i386: hvf: Use ins_len to advance IP
Posted by Philippe Mathieu-Daudé 5 years, 8 months ago
On 5/28/20 9:37 PM, Roman Bolshakov wrote:
> There's no need to read VMCS twice, instruction length is already
> available in ins_len.
> 
> Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
> ---
>  target/i386/hvf/hvf.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c
> index 9ccdb7e7c7..8ff1d25521 100644
> --- a/target/i386/hvf/hvf.c
> +++ b/target/i386/hvf/hvf.c
> @@ -871,7 +871,7 @@ int hvf_vcpu_exec(CPUState *cpu)
>              } else {
>                  simulate_wrmsr(cpu);
>              }
> -            RIP(env) += rvmcs(cpu->hvf_fd, VMCS_EXIT_INSTRUCTION_LENGTH);
> +            RIP(env) += ins_len;

I'd feel safer if you change ins_len to uint64_t first.

>              store_regs(cpu);
>              break;
>          }
> 


Re: [PATCH 05/13] i386: hvf: Use ins_len to advance IP
Posted by Paolo Bonzini 5 years, 8 months ago
On 04/06/20 08:39, Philippe Mathieu-Daudé wrote:
>>                  simulate_wrmsr(cpu);
>>              }
>> -            RIP(env) += rvmcs(cpu->hvf_fd, VMCS_EXIT_INSTRUCTION_LENGTH);
>> +            RIP(env) += ins_len;
> I'd feel safer if you change ins_len to uint64_t first.
> 

Why?  It will never be more than 15 (it's also a 32-bit field in the VMCS).

Paolo


Re: [PATCH 05/13] i386: hvf: Use ins_len to advance IP
Posted by Philippe Mathieu-Daudé 5 years, 8 months ago
On 6/4/20 8:15 PM, Paolo Bonzini wrote:
> On 04/06/20 08:39, Philippe Mathieu-Daudé wrote:
>>>                  simulate_wrmsr(cpu);
>>>              }
>>> -            RIP(env) += rvmcs(cpu->hvf_fd, VMCS_EXIT_INSTRUCTION_LENGTH);
>>> +            RIP(env) += ins_len;
>> I'd feel safer if you change ins_len to uint64_t first.
>>
> 
> Why?  It will never be more than 15 (it's also a 32-bit field in the VMCS).

Indeed, I am now seeing the comment in target/i386/hvf/vmcs.h:132

  /* 32-bit read-only data fields */
  #define VMCS_EXIT_INSTRUCTION_LENGTH 0x0000440C

So:
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Thanks Paolo.