On 04/27/2014 12:45 PM, Paolo Bonzini wrote:
> Il 27/04/2014 12:30, Toralf Förster ha scritto:
>> Signed-off-by: Toralf Förster <[email protected]>
>> ---
>>  arch/x86/kvm/x86.c | 23 ++++++++++-------------
>>  1 file changed, 10 insertions(+), 13 deletions(-)
>>
>> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
>> index 8b8fc0b..93cf454 100644
>> --- a/arch/x86/kvm/x86.c
>> +++ b/arch/x86/kvm/x86.c
>> @@ -5680,20 +5680,17 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
>>      kvm_x86_ops->get_cs_db_l_bits(vcpu, &cs_db, &cs_l);
>>      longmode = is_long_mode(vcpu) && cs_l == 1;
>>
>> -    if (!longmode) {
>> -        param = ((u64)kvm_register_read(vcpu, VCPU_REGS_RDX) << 32) |
>> -            (kvm_register_read(vcpu, VCPU_REGS_RAX) & 0xffffffff);
>> -        ingpa = ((u64)kvm_register_read(vcpu, VCPU_REGS_RBX) << 32) |
>> -            (kvm_register_read(vcpu, VCPU_REGS_RCX) & 0xffffffff);
>> -        outgpa = ((u64)kvm_register_read(vcpu, VCPU_REGS_RDI) << 32) |
>> -            (kvm_register_read(vcpu, VCPU_REGS_RSI) & 0xffffffff);
>> -    }
>>  #ifdef CONFIG_X86_64
>> -    else {
>> -        param = kvm_register_read(vcpu, VCPU_REGS_RCX);
>> -        ingpa = kvm_register_read(vcpu, VCPU_REGS_RDX);
>> -        outgpa = kvm_register_read(vcpu, VCPU_REGS_R8);
>> -    }
>> +    param = kvm_register_read(vcpu, VCPU_REGS_RCX);
>> +    ingpa = kvm_register_read(vcpu, VCPU_REGS_RDX);
>> +    outgpa = kvm_register_read(vcpu, VCPU_REGS_R8);
>> +#else
>> +    param = ((u64)kvm_register_read(vcpu, VCPU_REGS_RDX) << 32) |
>> +        (kvm_register_read(vcpu, VCPU_REGS_RAX) & 0xffffffff);
>> +    ingpa = ((u64)kvm_register_read(vcpu, VCPU_REGS_RBX) << 32) |
>> +        (kvm_register_read(vcpu, VCPU_REGS_RCX) & 0xffffffff);
>> +    outgpa = ((u64)kvm_register_read(vcpu, VCPU_REGS_RDI) << 32) |
>> +        (kvm_register_read(vcpu, VCPU_REGS_RSI) & 0xffffffff);
>>  #endif
>>
>>      code = param & 0xffff;
>>
> 
> No, wait, it's only superfluous in the sense that you don't need
> longmode for !CONFIG_X86_64.  It's definitely needed for CONFIG_X86_64,
> because the guest can run in 32-bit mode.
> 
> Paolo
> 

Ah, so the following would work, but looks too ugly, right ? :


#ifdef CONFIG_X86_64
        if (!longmode) {
#endif
                param = ((u64)kvm_register_read(vcpu, VCPU_REGS_RDX) << 32) |
                        (kvm_register_read(vcpu, VCPU_REGS_RAX) & 0xffffffff);
                ingpa = ((u64)kvm_register_read(vcpu, VCPU_REGS_RBX) << 32) |
                        (kvm_register_read(vcpu, VCPU_REGS_RCX) & 0xffffffff);
                outgpa = ((u64)kvm_register_read(vcpu, VCPU_REGS_RDI) << 32) |
                        (kvm_register_read(vcpu, VCPU_REGS_RSI) & 0xffffffff);
#ifdef CONFIG_X86_64
        }
        else {
                param = kvm_register_read(vcpu, VCPU_REGS_RCX);
                ingpa = kvm_register_read(vcpu, VCPU_REGS_RDX);
                outgpa = kvm_register_read(vcpu, VCPU_REGS_R8);
        }
#endif

-- 
Toralf

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to