On Fri, 30 Sep 2016 18:10:13 +0200 Radim Krčmář <rkrc...@redhat.com> wrote:
> Assume that KVM would have returned the same on subsequent runs. > Abstract the memoizaiton pattern into macros. s/memoi/memori/i Throughout whole patch > > Signed-off-by: Radim Krčmář <rkrc...@redhat.com> > --- > 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)