Hi Eric, On 01/15/2015 02:47 PM, Eric Auger wrote: > Introduce __KVM_HAVE_ARCH_INTC_INITIALIZED define and > associated kvm_arch_intc_initialized function. This latter > allows to test whether the virtual interrupt controller is initialized > and ready to accept virtual IRQ injection. On some architectures, > the virtual interrupt controller is dynamically instantiated, justifying > that kind of check. > > The new function can now be used by irqfd to check whether the > virtual interrupt controller is ready on KVM_IRQFD request. If not, > KVM_IRQFD returns -EAGAIN. > > Signed-off-by: Eric Auger <eric.auger@xxxxxxxxxx> > Acked-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx> > > --- > v6 -> v7: > - From now on, kvm_irqfd_assign calls kvm_arch_intc_initialized > (previously introduced in subsequent patch file). > - add Christoffer's ack > > v5 -> v6: > - rename function name and macro > - add kvm_arch_intc_initialized declaration in case the archi defines > the macro > --- > include/linux/kvm_host.h | 14 ++++++++++++++ > virt/kvm/eventfd.c | 3 +++ > 2 files changed, 17 insertions(+) > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index 26f1060..702036a 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -706,6 +706,20 @@ static inline wait_queue_head_t *kvm_arch_vcpu_wq(struct kvm_vcpu *vcpu) > #endif > } > > +#ifdef __KVM_HAVE_ARCH_INTC_INITIALIZED > +/* > + * returns trues if the virtual interrupt controller is initialized and Nit: true Other than that: Reviewed-by: Andre Przywara <andre.przywara@xxxxxxx> Cheers, Andre. > + * ready to accept virtual IRQ. On some architectures the virtual interrupt > + * controller is dynamically instantiated and this is not always true. > + */ > +bool kvm_arch_intc_initialized(struct kvm *kvm); > +#else > +static inline bool kvm_arch_intc_initialized(struct kvm *kvm) > +{ > + return true; > +} > +#endif > + > int kvm_arch_init_vm(struct kvm *kvm, unsigned long type); > void kvm_arch_destroy_vm(struct kvm *kvm); > void kvm_arch_sync_events(struct kvm *kvm); > diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c > index 148b239..fc5f43e 100644 > --- a/virt/kvm/eventfd.c > +++ b/virt/kvm/eventfd.c > @@ -311,6 +311,9 @@ kvm_irqfd_assign(struct kvm *kvm, struct kvm_irqfd *args) > unsigned int events; > int idx; > > + if (!kvm_arch_intc_initialized(kvm)) > + return -EAGAIN; > + > irqfd = kzalloc(sizeof(*irqfd), GFP_KERNEL); > if (!irqfd) > return -ENOMEM; > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html