target-arm: fix sorting issue of KVM cpreg list
authorAlvise Rigo <a.rigo@virtualopensystems.com>
Fri, 11 Oct 2013 17:38:45 +0000 (19:38 +0200)
committerEdgar E. Iglesias <edgar.iglesias@gmail.com>
Thu, 31 Oct 2013 13:00:16 +0000 (14:00 +0100)
The compare_u64 function was not sorting the KVM cpreg_list in the
right way due to the wrong returned value.  Since we are comparing
two 64bit values we can't simply return their difference if the
returned type is int.

Signed-off-by: Alvise Rigo <a.rigo@virtualopensystems.com>
Message-id: 1381513125-26802-2-git-send-email-a.rigo@virtualopensystems.com
[PMM: fixed coding style, indent and commit message formatting]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
target-arm/kvm.c

index b92e00dae037d7262e540524e50c386f94c1b881..6e5cd36faea1a5aecc62cf49a514788db36cf1fd 100644 (file)
@@ -67,7 +67,13 @@ static bool reg_syncs_via_tuple_list(uint64_t regidx)
 
 static int compare_u64(const void *a, const void *b)
 {
-    return *(uint64_t *)a - *(uint64_t *)b;
+    if (*(uint64_t *)a > *(uint64_t *)b) {
+        return 1;
+    }
+    if (*(uint64_t *)a < *(uint64_t *)b) {
+        return -1;
+    }
+    return 0;
 }
 
 int kvm_arch_init_vcpu(CPUState *cs)