qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH v3 8/8] target-i386/kvm: cache the return value of k


From: Radim Krčmář
Subject: [Qemu-devel] [PATCH v3 8/8] target-i386/kvm: cache the return value of kvm_enable_x2apic()
Date: Fri, 30 Sep 2016 18:10:13 +0200

Assume that KVM would have returned the same on subsequent runs.
Abstract the memoizaiton pattern into macros.

Signed-off-by: Radim Krčmář <address@hidden>
---
 target-i386/kvm.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 0fd664648665..113c5bf058ba 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -129,10 +129,27 @@ static bool kvm_x2apic_api_set_flags(uint64_t flags)
     return !kvm_vm_enable_cap(s, KVM_CAP_X2APIC_API, 0, flags);
 }
 
+#define MEMOIZE_RESULT(_result, _fn) \
+    ({ \
+        static bool _memoized; \
+        if (_memoized) { \
+            return _result; \
+        } \
+        _memoized = true; \
+        _result = _fn; \
+    })
+
+#define MEMOIZE(_fn) \
+    ({ \
+        static typeof(_fn) _result; \
+        MEMOIZE_RESULT(_result, _fn); \
+    })
+
 bool kvm_enable_x2apic(void)
 {
-    return kvm_x2apic_api_set_flags(KVM_X2APIC_API_USE_32BIT_IDS |
-                                    KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK);
+    return MEMOIZE(
+             kvm_x2apic_api_set_flags(KVM_X2APIC_API_USE_32BIT_IDS |
+                                      KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK));
 }
 
 static int kvm_get_tsc(CPUState *cs)
-- 
2.10.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]