Re: [PATCH v7 2/4] KVM: introduce kvm_arch_intc_initialized and use it in irqfd

2015-01-16 Thread André Przywara
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 
> Acked-by: Christoffer Dall 
> 
> ---
> 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 

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 linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v7 2/4] KVM: introduce kvm_arch_intc_initialized and use it in irqfd

2015-01-16 Thread André Przywara
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.au...@linaro.org
 Acked-by: Christoffer Dall christoffer.d...@linaro.org
 
 ---
 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.przyw...@arm.com

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 linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH v7 2/4] KVM: introduce kvm_arch_intc_initialized and use it in irqfd

2015-01-15 Thread Eric Auger
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 
Acked-by: Christoffer Dall 

---
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
+ * 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;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH v7 2/4] KVM: introduce kvm_arch_intc_initialized and use it in irqfd

2015-01-15 Thread Eric Auger
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.au...@linaro.org
Acked-by: Christoffer Dall christoffer.d...@linaro.org

---
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
+ * 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;
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/