qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Auger <eric.auger@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: b.reynal@virtualopensystems.com,
	Peter Crosthwaite <peter.crosthwaite@xilinx.com>,
	eric.auger@st.com, vikrams@codeaurora.org,
	Patch Tracking <patches@linaro.org>,
	QEMU Developers <qemu-devel@nongnu.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Christoffer Dall <christoffer.dall@linaro.org>
Subject: Re: [Qemu-devel] [RESEND PATCH v16 3/6] kvm-all.c: add qemu_irq/gsi hash table and utility routines
Date: Fri, 26 Jun 2015 13:56:00 +0200	[thread overview]
Message-ID: <558D3DD0.6060200@linaro.org> (raw)
In-Reply-To: <CAFEAcA-CZeokMRtGptQ2RZ=2CtTOhd8rFoNxndCeTfhV96pX-g@mail.gmail.com>

Hi Peter,

On 06/26/2015 01:41 PM, Peter Maydell wrote:
> On 15 June 2015 at 17:33, Eric Auger <eric.auger@linaro.org> 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>
>>
>> ---
>>
>> 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));
> 
> Why do we use GPOINTER_TO_UINT() here...
Hum yes GPOINTER_TO_INT is in accordance with
kvm_irqchip_add_irqfd_notifier_gsi signature
> 
> 
>> +    }
>> +}
>> +
>> +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));
> 
> ...but GPOINTER_TO_INT() here?

> 
> (Aside: you don't need to put this code in an else {} clause, because
> the if() part is returning anyway.)
Indeed.

Do you wish I re-submit all the VFIO remaining patches as v17 or only
that one?

Thanks

Eric
> 
>> +    }
>> +}
>> +
>> +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;
>>  }
> 
> thanks
> -- PMM
> 

  reply	other threads:[~2015-06-26 11:56 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
2015-06-26 11:41   ` Peter Maydell
2015-06-26 11:56     ` Eric Auger [this message]
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=558D3DD0.6060200@linaro.org \
    --to=eric.auger@linaro.org \
    --cc=alex.williamson@redhat.com \
    --cc=b.reynal@virtualopensystems.com \
    --cc=christoffer.dall@linaro.org \
    --cc=eric.auger@st.com \
    --cc=patches@linaro.org \
    --cc=pbonzini@redhat.com \
    --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).