All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Alexander Graf <agraf@suse.de>, Avi Kivity <avi@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>,
	qemu-devel@nongnu.org, patches@linaro.org
Subject: Re: [Qemu-devel] [PATCH 5/6] kvm: Don't assume irqchip implies MSI routing via irqfds
Date: Wed, 25 Jul 2012 17:49:29 +0200	[thread overview]
Message-ID: <50101589.2030909@siemens.com> (raw)
In-Reply-To: <1343222672-25312-6-git-send-email-peter.maydell@linaro.org>

On 2012-07-25 15:24, Peter Maydell wrote:
> Decouple another x86-specific assumption about what irqchips imply.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
>  hw/virtio-pci.c   |    4 ++--
>  kvm-all.c         |    3 ++-
>  kvm-stub.c        |    1 +
>  kvm.h             |   12 ++++++++++++
>  target-i386/kvm.c |    4 +++-
>  5 files changed, 20 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
> index 4e03f0b..98e02ef 100644
> --- a/hw/virtio-pci.c
> +++ b/hw/virtio-pci.c
> @@ -627,7 +627,7 @@ static int virtio_pci_set_guest_notifiers(void *opaque, bool assign)
>      int r, n;
>  
>      /* Must unset vector notifier while guest notifier is still assigned */
> -    if (kvm_irqchip_in_kernel() && !assign) {
> +    if (kvm_msi_via_irqfd_enabled() && !assign) {
>          msix_unset_vector_notifiers(&proxy->pci_dev);
>          g_free(proxy->vector_irqfd);
>          proxy->vector_irqfd = NULL;
> @@ -645,7 +645,7 @@ static int virtio_pci_set_guest_notifiers(void *opaque, bool assign)
>      }
>  
>      /* Must set vector notifier after guest notifier has been assigned */
> -    if (kvm_irqchip_in_kernel() && assign) {
> +    if (kvm_msi_via_irqfd_enabled() && assign) {
>          proxy->vector_irqfd =
>              g_malloc0(sizeof(*proxy->vector_irqfd) *
>                        msix_nr_vectors_allocated(&proxy->pci_dev));

These are ok.

> diff --git a/kvm-all.c b/kvm-all.c
> index a88b8ad..c624137 100644
> --- a/kvm-all.c
> +++ b/kvm-all.c
> @@ -102,6 +102,7 @@ KVMState *kvm_state;
>  bool kvm_kernel_irqchip;
>  bool kvm_async_interrupt_injection;
>  bool kvm_irqfds_allowed;
> +bool kvm_msi_via_irqfd_allowed;
>  
>  static const KVMCapabilityInfo kvm_required_capabilites[] = {
>      KVM_CAP_INFO(USER_MEMORY),
> @@ -1098,7 +1099,7 @@ int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg)
>      struct kvm_irq_routing_entry kroute;
>      int virq;
>  
> -    if (!kvm_irqchip_in_kernel()) {
> +    if (!kvm_msi_via_irqfd_enabled()) {

This is semantically wrong. Currently, this function is only used for
irqfd. But we will also use it to prepare MSI injections by KVM device
assignment. For other (yet non-existent) in-kernel sources of MSIs we
could use it as well. The proper check is some active version of
has_gsi_routing.

>          return -ENOSYS;
>      }
>  
> diff --git a/kvm-stub.c b/kvm-stub.c
> index 179e5de..6cdeb1c 100644
> --- a/kvm-stub.c
> +++ b/kvm-stub.c
> @@ -21,6 +21,7 @@ KVMState *kvm_state;
>  bool kvm_kernel_irqchip;
>  bool kvm_async_interrupt_injection;
>  bool kvm_irqfds_allowed;
> +bool kvm_msi_via_irqfd_allowed;
>  
>  int kvm_init_vcpu(CPUArchState *env)
>  {
> diff --git a/kvm.h b/kvm.h
> index 2337eb0..1449795 100644
> --- a/kvm.h
> +++ b/kvm.h
> @@ -26,6 +26,7 @@ extern int kvm_allowed;
>  extern bool kvm_kernel_irqchip;
>  extern bool kvm_async_interrupt_injection;
>  extern bool kvm_irqfds_allowed;
> +extern bool kvm_msi_via_irqfd_allowed;
>  
>  #if defined CONFIG_KVM || !defined NEED_CPU_H
>  #define kvm_enabled()           (kvm_allowed)
> @@ -47,11 +48,22 @@ extern bool kvm_irqfds_allowed;
>   * with a configuration where it is meaningful to use them).
>   */
>  #define kvm_irqfds_enabled() (kvm_irqfds_allowed)
> +/**
> + * kvm_msi_via_irqfd_enabled:
> + *
> + * Returns: true if we can route a PCI MSI (Message Signaled Interrupt)
> + * to a KVM CPU via an irqfd. This requires that the kernel supports
> + * this and that we're running in a configuration that permits it.
> + * This should be checked before calling MSI related functions such as
> + * kvm_irqchip_add_msi_route.

See above.

> + */
> +#define kvm_msi_via_irqfd_enabled() (kvm_msi_via_irqfd_allowed)
>  #else
>  #define kvm_enabled()           (0)
>  #define kvm_irqchip_in_kernel() (false)
>  #define kvm_async_interrupt_injection() (false)
>  #define kvm_irqfds_enabled() (false)
> +#define kvm_msi_via_irqfd_enabled() (false)
>  #endif
>  
>  struct kvm_run;
> diff --git a/target-i386/kvm.c b/target-i386/kvm.c
> index 8e19a4d..03db818 100644
> --- a/target-i386/kvm.c
> +++ b/target-i386/kvm.c
> @@ -2046,7 +2046,9 @@ void kvm_arch_init_irq_routing(KVMState *s)
>          no_hpet = 1;
>      }
>      /* We know at this point that we're using the in-kernel
> -     * irqchip, so we can use irqfds.
> +     * irqchip, so we can use irqfds, and on x86 we know
> +     * we can use msi via irqfd.
>       */
>      kvm_irqfds_allowed = true;
> +    kvm_msi_via_irqfd_allowed = true;
>  }
> 

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux

  reply	other threads:[~2012-07-25 15:49 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-25 13:24 [Qemu-devel] [PATCH 0/6] split out uses of kvm_irqchip_in_kernel() Peter Maydell
2012-07-25 13:24 ` [Qemu-devel] [PATCH 1/6] kvm: Decouple 'interrupt injection is async' from 'kernel irqchip' Peter Maydell
2012-07-25 15:41   ` Jan Kiszka
2012-07-25 13:24 ` [Qemu-devel] [PATCH 2/6] kvm: Rename kvm_irqchip_set_irq to kvm_inject_async_irq Peter Maydell
2012-07-25 15:43   ` Jan Kiszka
2012-07-25 15:47   ` Avi Kivity
2012-07-25 15:53     ` Jan Kiszka
2012-07-25 15:55       ` Avi Kivity
2012-07-25 15:56         ` Peter Maydell
2012-07-25 15:58           ` Jan Kiszka
2012-07-25 16:09             ` Peter Maydell
2012-07-25 16:11               ` Jan Kiszka
2012-07-25 16:18                 ` Peter Maydell
2012-07-25 16:24                   ` Peter Maydell
2012-07-25 16:28                     ` Jan Kiszka
2012-07-25 16:36                       ` Avi Kivity
2012-07-25 16:41                       ` Peter Maydell
2012-07-25 16:56                         ` Jan Kiszka
2012-07-25 16:00           ` Avi Kivity
2012-07-25 15:55     ` Peter Maydell
2012-07-25 16:02       ` Avi Kivity
2012-07-25 13:24 ` [Qemu-devel] [PATCH 3/6] kvm: Move kvm_allows_irq0_override() to target-i386 Peter Maydell
2012-07-25 15:44   ` Jan Kiszka
2012-07-25 13:24 ` [Qemu-devel] [PATCH 4/6] kvm: Don't assume irqchip-in-kernel implies irqfds Peter Maydell
2012-07-25 15:47   ` Jan Kiszka
2012-07-25 15:52     ` Peter Maydell
2012-07-25 15:54       ` Jan Kiszka
2012-07-25 13:24 ` [Qemu-devel] [PATCH 5/6] kvm: Don't assume irqchip implies MSI routing via irqfds Peter Maydell
2012-07-25 15:49   ` Jan Kiszka [this message]
2012-07-25 13:24 ` [Qemu-devel] [PATCH 6/6] kvm: Add documentation comment for kvm_irqchip_in_kernel() Peter Maydell
2012-07-25 15:40   ` Andreas Färber
2012-07-25 16:47     ` Jan Kiszka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50101589.2030909@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=agraf@suse.de \
    --cc=avi@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=patches@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.