On Wed, 5 Oct 2016 15:06:57 +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 and call it memorize as > adding the r makes it less obscure. > > Signed-off-by: Radim Krčmář <rkrc...@redhat.com> Reviewed-by: Igor Mammedov <imamm...@redhat.com> > --- > v4: > * changed the name to memorize [Igor] > * remove useless underscores in macro arguments > * merge the two macros, as it seems that the deleted one wouldn't get > other users anytime soon > --- > target-i386/kvm.c | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/target-i386/kvm.c b/target-i386/kvm.c > index 0fd664648665..0472f45fd092 100644 > --- a/target-i386/kvm.c > +++ b/target-i386/kvm.c > @@ -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)