target-i386/kvm: cache the return value of kvm_enable_x2apic()
Assume that KVM would have returned the same on subsequent runs. Abstract the memoizaiton pattern into macros and call it memorize as adding the r makes it less obscure. Reviewed-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Radim Krčmář <rkrcmar@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
fb506e701e
commit
2a138ec3af
|
@ -129,10 +129,23 @@ static bool kvm_x2apic_api_set_flags(uint64_t flags)
|
||||||
return !kvm_vm_enable_cap(s, KVM_CAP_X2APIC_API, 0, flags);
|
return !kvm_vm_enable_cap(s, KVM_CAP_X2APIC_API, 0, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MEMORIZE(fn) \
|
||||||
|
({ \
|
||||||
|
static typeof(fn) _result; \
|
||||||
|
static bool _memorized; \
|
||||||
|
\
|
||||||
|
if (_memorized) { \
|
||||||
|
return _result; \
|
||||||
|
} \
|
||||||
|
_memorized = true; \
|
||||||
|
_result = fn; \
|
||||||
|
})
|
||||||
|
|
||||||
bool kvm_enable_x2apic(void)
|
bool kvm_enable_x2apic(void)
|
||||||
{
|
{
|
||||||
return kvm_x2apic_api_set_flags(KVM_X2APIC_API_USE_32BIT_IDS |
|
return MEMORIZE(
|
||||||
KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK);
|
kvm_x2apic_api_set_flags(KVM_X2APIC_API_USE_32BIT_IDS |
|
||||||
|
KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int kvm_get_tsc(CPUState *cs)
|
static int kvm_get_tsc(CPUState *cs)
|
||||||
|
|
Loading…
Reference in New Issue