From: Paolo Bonzini <pbonzini@redhat.com>
To: Eric Auger <eric.auger@linaro.org>,
eric.auger@st.com, qemu-devel@nongnu.org,
peter.maydell@linaro.org, peter.crosthwaite@xilinx.com,
alex.williamson@redhat.com
Cc: b.reynal@virtualopensystems.com, christoffer.dall@linaro.org,
vikrams@codeaurora.org, patches@linaro.org
Subject: Re: [Qemu-devel] [RESEND PATCH v16 3/6] kvm-all.c: add qemu_irq/gsi hash table and utility routines
Date: Wed, 24 Jun 2015 11:53:53 +0200 [thread overview]
Message-ID: <558A7E31.8010303@redhat.com> (raw)
In-Reply-To: <1434386038-9246-4-git-send-email-eric.auger@linaro.org>
On 15/06/2015 18:33, Eric Auger wrote:
> VFIO platform device needs to setup irqfd but it does not know the
> gsi corresponding to the device qemu_irq. This series proposes to
> store a hash table in kvm_state using the qemu_irq as key and the gsi
> as a value.
>
> kvm_irqchip_set_qemuirq_gsi allows to insert such a pair. The interrupt
> controller is supposed to use it.
>
> kvm_irqchip_[add, remove]_irqfd_notifier allows to setup/tear down
> irqfd directly from the qemu_irq.
>
> Signed-off-by: Eric Auger <eric.auger@linaro.org>
> Tested-by: Vikram Sethi <vikrams@codeaurora.org>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>
> v15 -> v16:
> - Added Vikram's T-b
>
> v13 -> v14:
> - correct checkpatch warning
>
> v2 -> v3 (integration into VFIO series v13):
> - rename kvm_irqchip_[add, remove]_qemuirq_irqfd_notifier into
> kvm_irqchip_[add, remove]_irqfd_notifier. Possible since legacy
> functions were also renamed with _gsi suffix.
>
> V1 -> v2:
> - qemu_irq get_gsi callback replaced by hash table stored in kvm
> ---
> include/sysemu/kvm.h | 6 ++++++
> kvm-all.c | 37 +++++++++++++++++++++++++++++++++++++
> 2 files changed, 43 insertions(+)
>
> diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
> index acb3025..ba612fc 100644
> --- a/include/sysemu/kvm.h
> +++ b/include/sysemu/kvm.h
> @@ -19,6 +19,7 @@
> #include "qemu/queue.h"
> #include "qom/cpu.h"
> #include "exec/memattrs.h"
> +#include "hw/irq.h"
>
> #ifdef CONFIG_KVM
> #include <linux/kvm.h>
> @@ -420,6 +421,11 @@ int kvm_irqchip_add_irqfd_notifier_gsi(KVMState *s, EventNotifier *n,
> EventNotifier *rn, int virq);
> int kvm_irqchip_remove_irqfd_notifier_gsi(KVMState *s, EventNotifier *n,
> int virq);
> +int kvm_irqchip_add_irqfd_notifier(KVMState *s, EventNotifier *n,
> + EventNotifier *rn, qemu_irq irq);
> +int kvm_irqchip_remove_irqfd_notifier(KVMState *s, EventNotifier *n,
> + qemu_irq irq);
> +void kvm_irqchip_set_qemuirq_gsi(KVMState *s, qemu_irq irq, int gsi);
> void kvm_pc_gsi_handler(void *opaque, int n, int level);
> void kvm_pc_setup_irq_routing(bool pci_enabled);
> void kvm_init_irq_routing(KVMState *s);
> diff --git a/kvm-all.c b/kvm-all.c
> index 730b818..939bfc4 100644
> --- a/kvm-all.c
> +++ b/kvm-all.c
> @@ -37,6 +37,7 @@
> #include "exec/address-spaces.h"
> #include "qemu/event_notifier.h"
> #include "trace.h"
> +#include "hw/irq.h"
>
> #include "hw/boards.h"
>
> @@ -98,6 +99,7 @@ struct KVMState
> * unsigned, and treating them as signed here can break things */
> unsigned irq_set_ioctl;
> unsigned int sigmask_len;
> + GHashTable *gsimap;
> #ifdef KVM_CAP_IRQ_ROUTING
> struct kvm_irq_routing *irq_routes;
> int nr_allocated_irq_routes;
> @@ -1339,6 +1341,39 @@ int kvm_irqchip_remove_irqfd_notifier_gsi(KVMState *s, EventNotifier *n,
> false);
> }
>
> +int kvm_irqchip_add_irqfd_notifier(KVMState *s, EventNotifier *n,
> + EventNotifier *rn, qemu_irq irq)
> +{
> + gpointer key, gsi;
> + gboolean found = g_hash_table_lookup_extended(s->gsimap, irq, &key, &gsi);
> +
> + if (!found) {
> + return -ENXIO;
> + } else {
> + return kvm_irqchip_add_irqfd_notifier_gsi(s, n, rn,
> + GPOINTER_TO_UINT(gsi));
> + }
> +}
> +
> +int kvm_irqchip_remove_irqfd_notifier(KVMState *s, EventNotifier *n,
> + qemu_irq irq)
> +{
> + gpointer key, gsi;
> + gboolean found = g_hash_table_lookup_extended(s->gsimap, irq, &key, &gsi);
> +
> + if (!found) {
> + return -ENXIO;
> + } else {
> + return kvm_irqchip_remove_irqfd_notifier_gsi(s, n,
> + GPOINTER_TO_INT(gsi));
> + }
> +}
> +
> +void kvm_irqchip_set_qemuirq_gsi(KVMState *s, qemu_irq irq, int gsi)
> +{
> + g_hash_table_insert(s->gsimap, irq, GINT_TO_POINTER(gsi));
> +}
> +
> static int kvm_irqchip_create(MachineState *machine, KVMState *s)
> {
> int ret;
> @@ -1371,6 +1406,8 @@ static int kvm_irqchip_create(MachineState *machine, KVMState *s)
>
> kvm_init_irq_routing(s);
>
> + s->gsimap = g_hash_table_new(g_direct_hash, g_direct_equal);
> +
> return 0;
> }
>
>
next prev parent reply other threads:[~2015-06-24 9:54 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-15 16:33 [Qemu-devel] [RESEND PATCH v16 0/6] KVM platform device passthrough Eric Auger
2015-06-15 16:33 ` [Qemu-devel] [RESEND PATCH v16 1/6] hw/arm/sysbus-fdt: enable vfio-calxeda-xgmac dynamic instantiation Eric Auger
2015-06-16 8:29 ` Peter Maydell
2015-06-16 8:44 ` Eric Auger
2015-06-16 8:57 ` Peter Maydell
2015-06-15 16:33 ` [Qemu-devel] [RESEND PATCH v16 2/6] kvm: rename kvm_irqchip_[add, remove]_irqfd_notifier with gsi suffix Eric Auger
2015-06-24 9:53 ` Paolo Bonzini
2015-06-15 16:33 ` [Qemu-devel] [RESEND PATCH v16 3/6] kvm-all.c: add qemu_irq/gsi hash table and utility routines Eric Auger
2015-06-24 9:53 ` Paolo Bonzini [this message]
2015-06-26 11:41 ` Peter Maydell
2015-06-26 11:56 ` Eric Auger
2015-06-15 16:33 ` [Qemu-devel] [RESEND PATCH v16 4/6] intc: arm_gic_kvm: set the qemu_irq/gsi mapping Eric Auger
2015-06-24 9:54 ` Paolo Bonzini
2015-06-26 11:43 ` Peter Maydell
2015-06-26 11:59 ` Eric Auger
2015-06-15 16:33 ` [Qemu-devel] [RESEND PATCH v16 5/6] sysbus: add irq_routing_notifier Eric Auger
2015-06-15 16:33 ` [Qemu-devel] [RESEND PATCH v16 6/6] hw/vfio/platform: add irqfd support Eric Auger
2015-06-26 11:57 ` Peter Maydell
2015-06-26 12:19 ` Eric Auger
2015-06-26 16:21 ` Alex Williamson
2015-06-26 16:26 ` Paolo Bonzini
2015-06-26 16:31 ` Eric Auger
2015-06-26 16:46 ` Alex Williamson
2015-06-22 7:56 ` [Qemu-devel] [RESEND PATCH v16 0/6] KVM platform device passthrough Eric Auger
2015-06-24 9:55 ` Paolo Bonzini
2015-06-24 9:59 ` Eric Auger
2015-06-24 10:10 ` Paolo Bonzini
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=558A7E31.8010303@redhat.com \
--to=pbonzini@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=b.reynal@virtualopensystems.com \
--cc=christoffer.dall@linaro.org \
--cc=eric.auger@linaro.org \
--cc=eric.auger@st.com \
--cc=patches@linaro.org \
--cc=peter.crosthwaite@xilinx.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=vikrams@codeaurora.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).