mirror of
https://github.com/qemu/qemu.git
synced 2024-11-28 14:24:02 +08:00
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);
|
||||
}
|
||||
|
||||
#define MEMORIZE(fn) \
|
||||
({ \
|
||||
static typeof(fn) _result; \
|
||||
static bool _memorized; \
|
||||
\
|
||||
if (_memorized) { \
|
||||
return _result; \
|
||||
} \
|
||||
_memorized = true; \
|
||||
_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 MEMORIZE(
|
||||
kvm_x2apic_api_set_flags(KVM_X2APIC_API_USE_32BIT_IDS |
|
||||
KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK));
|
||||
}
|
||||
|
||||
static int kvm_get_tsc(CPUState *cs)
|
||||
|
Loading…
Reference in New Issue
Block a user