Re: [PATCH 1/2] arch/x86/kvm/x86.c: remove superflous check condition

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Il 27/04/2014 13:40, Toralf Förster ha scritto:
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 <toralf.foerster@xxxxxx>
---
 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


Yep. :) Note that GCC correctly reports no warning, because it looks through is_long_mode. In the end, #ifdef in the code can just be removed. Please compile-test it on 32-bit though (well, I will too before committing but...).

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




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux